mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-22 07:03:38 +00:00
build: Create an MD variant of the dummy Fedora image
This change involves rewriting make-fedora-img.sh in perl. This allows the flexibility to write mdadm.conf containing whichever uuids where randomly generated when the md devices were created.
This commit is contained in:
committed by
Richard W.M. Jones
parent
252ad4aa41
commit
d3458d7bc4
2
.gitignore
vendored
2
.gitignore
vendored
@@ -170,6 +170,8 @@ images/10klines
|
||||
images/abssymlink
|
||||
images/debian.img
|
||||
images/fedora.img
|
||||
images/fedora-md1.img
|
||||
images/fedora-md2.img
|
||||
images/guest-aux/fedora-name.db
|
||||
images/guest-aux/fedora-packages.db
|
||||
images/hello.b64
|
||||
|
||||
@@ -39,7 +39,7 @@ EXTRA_DIST = \
|
||||
test-grep.txt \
|
||||
guest-aux/make-debian-img.sh \
|
||||
guest-aux/debian-packages \
|
||||
guest-aux/make-fedora-img.sh \
|
||||
guest-aux/make-fedora-img.pl \
|
||||
guest-aux/fedora-name.db.txt \
|
||||
guest-aux/fedora-name.db \
|
||||
guest-aux/fedora-packages.db.txt \
|
||||
@@ -56,7 +56,7 @@ noinst_DATA = test.iso
|
||||
|
||||
# This is 'check_DATA' because we don't need it until 'make check'
|
||||
# time and we need the tools we have built in order to make it.
|
||||
check_DATA = debian.img fedora.img ubuntu.img windows.img
|
||||
check_DATA = debian.img fedora.img fedora-md1.img fedora-md2.img ubuntu.img windows.img
|
||||
|
||||
CLEANFILES = \
|
||||
test.iso test.sqsh \
|
||||
@@ -170,12 +170,22 @@ $(builddir)/test-grep.txt.gz: test-grep.txt
|
||||
mv $@-t $@
|
||||
|
||||
# Make a (dummy) Fedora image.
|
||||
fedora.img: guest-aux/make-fedora-img.sh \
|
||||
fedora.img: guest-aux/make-fedora-img.pl \
|
||||
guest-aux/fedora-name.db \
|
||||
guest-aux/fedora-packages.db
|
||||
TMPDIR=$(top_builddir) \
|
||||
SRCDIR=$(srcdir) \
|
||||
bash $<
|
||||
LAYOUT=partitions \
|
||||
../run $<
|
||||
|
||||
# Make a (dummy) Fedora image using md devices
|
||||
fedora-md1.img fedora-md2.img: guest-aux/make-fedora-img.pl \
|
||||
guest-aux/fedora-name.db \
|
||||
guest-aux/fedora-packages.db
|
||||
TMPDIR=$(top_builddir) \
|
||||
SRCDIR=$(srcdir) \
|
||||
LAYOUT=partitions-md \
|
||||
../run $<
|
||||
|
||||
guest-aux/fedora-name.db: guest-aux/fedora-name.db.txt
|
||||
rm -f $@ $@-t
|
||||
|
||||
195
images/guest-aux/make-fedora-img.pl
Executable file
195
images/guest-aux/make-fedora-img.pl
Executable file
@@ -0,0 +1,195 @@
|
||||
#!/usr/bin/perl
|
||||
# libguestfs
|
||||
# Copyright (C) 2010-2011 Red Hat Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
# Make a standard test image which is used by all the tools test
|
||||
# scripts. This test image is supposed to look like a Fedora
|
||||
# installation, or at least enough of one to fool the inspection API
|
||||
# heuristics.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Sys::Guestfs;
|
||||
use File::Temp;
|
||||
|
||||
my @images;
|
||||
my $g = Sys::Guestfs->new();
|
||||
|
||||
my $bootdev;
|
||||
my $rootdev;
|
||||
|
||||
foreach ('LAYOUT', 'SRCDIR') {
|
||||
defined($ENV{$_}) or die "Missing environment variable: $_";
|
||||
}
|
||||
|
||||
if ($ENV{LAYOUT} eq 'partitions') {
|
||||
push (@images, 'fedora.img.tmp');
|
||||
|
||||
open(my $fstab, '>', 'fstab.tmp') or die;
|
||||
print $fstab <<EOF;
|
||||
LABEL=BOOT /boot ext2 default 0 0
|
||||
LABEL=ROOT / ext2 default 0 0
|
||||
EOF
|
||||
close($fstab) or die;
|
||||
|
||||
$bootdev = '/dev/sda1';
|
||||
$rootdev = '/dev/sda2';
|
||||
|
||||
open(my $img, '>', 'fedora.img.tmp') or die;
|
||||
truncate($img, 512*1024*1024) or die;
|
||||
close($img) or die;
|
||||
|
||||
$g->add_drive('fedora.img.tmp');
|
||||
$g->launch();
|
||||
|
||||
$g->part_init('/dev/sda', 'mbr');
|
||||
$g->part_add('/dev/sda', 'p', 64, 524287);
|
||||
$g->part_add('/dev/sda', 'p', 524288, -64);
|
||||
}
|
||||
|
||||
elsif ($ENV{LAYOUT} eq 'partitions-md') {
|
||||
push(@images, 'fedora-md1.img.tmp', 'fedora-md2.img.tmp');
|
||||
|
||||
open(my $fstab, '>', 'fstab.tmp') or die;
|
||||
print $fstab <<EOF;
|
||||
/dev/md0 /boot ext2 default 0 0
|
||||
LABEL=ROOT / ext2 default 0 0
|
||||
EOF
|
||||
close($fstab) or die;
|
||||
|
||||
$bootdev = '/dev/md/boot';
|
||||
$rootdev = '/dev/md/root';
|
||||
|
||||
foreach my $img (@images) {
|
||||
open(my $fh, '>', $img) or die;
|
||||
truncate($fh, 512*1024*1024) or die;
|
||||
close($fh) or die;
|
||||
|
||||
$g->add_drive($img);
|
||||
}
|
||||
|
||||
$g->launch();
|
||||
|
||||
# Format the disks.
|
||||
foreach ('a', 'b') {
|
||||
$g->part_init("/dev/sd$_", 'mbr');
|
||||
$g->part_add("/dev/sd$_", 'p', 64, 524287);
|
||||
$g->part_add("/dev/sd$_", 'p', 524288, -64);
|
||||
}
|
||||
|
||||
$g->mdadm_create('boot', ['/dev/sda1', '/dev/sdb1']);
|
||||
$g->mdadm_create('root', ['/dev/sda2', '/dev/sdb2']);
|
||||
|
||||
open(my $mdadm, '>', 'mdadm.tmp') or die;
|
||||
print $mdadm <<EOF;
|
||||
MAILADDR root
|
||||
AUTO +imsm +1.x -all
|
||||
EOF
|
||||
|
||||
my $i = 0;
|
||||
foreach ('boot', 'root') {
|
||||
my %detail = $g->mdadm_detail("/dev/md/$_");
|
||||
print $mdadm "ARRAY /dev/md$i level=raid1 num-devices=2 UUID=",
|
||||
$detail{uuid}, "\n";
|
||||
$i++;
|
||||
}
|
||||
|
||||
close($mdadm) or die;
|
||||
}
|
||||
|
||||
else {
|
||||
print STDERR "$0: Unknown LAYOUT: ",$ENV{LAYOUT},"\n";
|
||||
exit 1;
|
||||
}
|
||||
|
||||
$g->pvcreate($rootdev);
|
||||
$g->vgcreate('VG', [$rootdev]);
|
||||
$g->lvcreate('Root', 'VG', 32);
|
||||
$g->lvcreate('LV1', 'VG', 32);
|
||||
$g->lvcreate('LV2', 'VG', 32);
|
||||
$g->lvcreate('LV3', 'VG', 64);
|
||||
|
||||
# Phony /boot filesystem
|
||||
$g->mkfs_opts('ext2', $bootdev, blocksize => 4096);
|
||||
$g->set_e2label($bootdev, 'BOOT');
|
||||
$g->set_e2uuid($bootdev, '01234567-0123-0123-0123-012345678901');
|
||||
|
||||
# Phony root filesystem.
|
||||
$g->mkfs_opts('ext2', '/dev/VG/Root', blocksize => 4096);
|
||||
$g->set_e2label('/dev/VG/Root', 'ROOT');
|
||||
$g->set_e2uuid('/dev/VG/Root', '01234567-0123-0123-0123-012345678902');
|
||||
|
||||
# Enough to fool inspection API.
|
||||
$g->mount_options('', '/dev/VG/Root', '/');
|
||||
$g->mkdir('/boot');
|
||||
$g->mount_options('', $bootdev, '/boot');
|
||||
$g->mkdir('/bin');
|
||||
$g->mkdir('/etc');
|
||||
$g->mkdir('/etc/sysconfig');
|
||||
$g->mkdir('/usr');
|
||||
$g->mkdir_p('/var/lib/rpm');
|
||||
|
||||
$g->upload('fstab.tmp', '/etc/fstab');
|
||||
$g->write('/etc/redhat-release', 'Fedora release 14 (Phony)');
|
||||
$g->write('/etc/fedora-release', 'Fedora release 14 (Phony)');
|
||||
$g->write('/etc/sysconfig/network', 'HOSTNAME=fedora.invalid');
|
||||
|
||||
if (-f 'mdadm.tmp') {
|
||||
$g->upload('mdadm.tmp', '/etc/mdadm.conf');
|
||||
unlink('mdadm.tmp') or die;
|
||||
}
|
||||
|
||||
$g->upload('guest-aux/fedora-name.db', '/var/lib/rpm/Name');
|
||||
$g->upload('guest-aux/fedora-packages.db', '/var/lib/rpm/Packages');
|
||||
|
||||
$g->upload($ENV{SRCDIR}.'/bin-x86_64-dynamic', '/bin/ls');
|
||||
|
||||
$g->mkdir('/boot/grub');
|
||||
$g->touch('/boot/grub/grub.conf');
|
||||
|
||||
# Test files.
|
||||
$g->write('/etc/test1', 'abcdefg');
|
||||
$g->write('/etc/test2', '');
|
||||
$g->write('/etc/test3',
|
||||
'a
|
||||
b
|
||||
c
|
||||
d
|
||||
e
|
||||
f
|
||||
');
|
||||
$g->write('/bin/test1', 'abcdefg');
|
||||
$g->write('/bin/test2', 'zxcvbnm');
|
||||
$g->write('/bin/test3', '1234567');
|
||||
$g->write('/bin/test4', '');
|
||||
$g->ln_s('/bin/test1', '/bin/test5');
|
||||
$g->mkfifo(0777, '/bin/test6');
|
||||
$g->mknod(0777, 10, 10, '/bin/test7');
|
||||
|
||||
# Other filesystems.
|
||||
# Note that these should be empty, for testing virt-df.
|
||||
$g->mkfs_opts('ext2', '/dev/VG/LV1', blocksize => 4096);
|
||||
$g->mkfs_opts('ext2', '/dev/VG/LV2', blocksize => 1024);
|
||||
$g->mkfs_opts('ext2', '/dev/VG/LV3', blocksize => 2048);
|
||||
|
||||
# Cleanup
|
||||
unlink('fstab.tmp') or die;
|
||||
foreach my $img (@images) {
|
||||
$img =~ /^(.*)\.tmp$/ or die;
|
||||
rename($img, $1) or die;
|
||||
}
|
||||
@@ -1,110 +0,0 @@
|
||||
#!/bin/bash -
|
||||
# libguestfs
|
||||
# Copyright (C) 2010-2011 Red Hat Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
# Make a standard test image which is used by all the tools test
|
||||
# scripts. This test image is supposed to look like a Fedora
|
||||
# installation, or at least enough of one to fool the inspection API
|
||||
# heuristics.
|
||||
|
||||
export LANG=C
|
||||
set -e
|
||||
|
||||
# fstab file.
|
||||
cat > fstab.tmp <<EOF
|
||||
LABEL=BOOT /boot ext2 default 0 0
|
||||
LABEL=ROOT / ext2 default 0 0
|
||||
EOF
|
||||
|
||||
# Create a disk image.
|
||||
../run ../fish/guestfish <<EOF
|
||||
sparse fedora.img.tmp 512M
|
||||
run
|
||||
|
||||
# Format the disk.
|
||||
part-init /dev/sda mbr
|
||||
part-add /dev/sda p 64 524287
|
||||
part-add /dev/sda p 524288 -64
|
||||
|
||||
pvcreate /dev/sda2
|
||||
vgcreate VG /dev/sda2
|
||||
lvcreate Root VG 32
|
||||
lvcreate LV1 VG 32
|
||||
lvcreate LV2 VG 32
|
||||
lvcreate LV3 VG 64
|
||||
|
||||
# Phony /boot filesystem.
|
||||
mkfs-opts ext2 /dev/sda1 blocksize:4096
|
||||
set-e2label /dev/sda1 BOOT
|
||||
set-e2uuid /dev/sda1 01234567-0123-0123-0123-012345678901
|
||||
|
||||
# Phony root filesystem.
|
||||
mkfs-opts ext2 /dev/VG/Root blocksize:4096
|
||||
set-e2label /dev/VG/Root ROOT
|
||||
set-e2uuid /dev/VG/Root 01234567-0123-0123-0123-012345678902
|
||||
|
||||
# Enough to fool inspection API.
|
||||
mount-options "" /dev/VG/Root /
|
||||
mkdir /boot
|
||||
mount-options "" /dev/sda1 /boot
|
||||
mkdir /bin
|
||||
mkdir /etc
|
||||
mkdir /etc/sysconfig
|
||||
mkdir /usr
|
||||
mkdir-p /var/lib/rpm
|
||||
|
||||
upload fstab.tmp /etc/fstab
|
||||
write /etc/redhat-release "Fedora release 14 (Phony)"
|
||||
write /etc/fedora-release "Fedora release 14 (Phony)"
|
||||
write /etc/sysconfig/network "HOSTNAME=fedora.invalid"
|
||||
|
||||
upload guest-aux/fedora-name.db /var/lib/rpm/Name
|
||||
upload guest-aux/fedora-packages.db /var/lib/rpm/Packages
|
||||
|
||||
upload ${SRCDIR}/bin-x86_64-dynamic /bin/ls
|
||||
|
||||
mkdir /boot/grub
|
||||
touch /boot/grub/grub.conf
|
||||
|
||||
# Test files.
|
||||
write /etc/test1 "abcdefg"
|
||||
write /etc/test2 ""
|
||||
upload -<<__end /etc/test3
|
||||
a
|
||||
b
|
||||
c
|
||||
d
|
||||
e
|
||||
f
|
||||
__end
|
||||
write /bin/test1 "abcdefg"
|
||||
write /bin/test2 "zxcvbnm"
|
||||
write /bin/test3 "1234567"
|
||||
write /bin/test4 ""
|
||||
ln-s /bin/test1 /bin/test5
|
||||
mkfifo 0777 /bin/test6
|
||||
mknod 0777 10 10 /bin/test7
|
||||
|
||||
# Other filesystems.
|
||||
# Note that these should be empty, for testing virt-df.
|
||||
mkfs-opts ext2 /dev/VG/LV1 blocksize:4096
|
||||
mkfs-opts ext2 /dev/VG/LV2 blocksize:1024
|
||||
mkfs-opts ext2 /dev/VG/LV3 blocksize:2048
|
||||
EOF
|
||||
|
||||
rm fstab.tmp
|
||||
mv fedora.img.tmp fedora.img
|
||||
Reference in New Issue
Block a user