From 754e8194382a9ed265c7fa172e438049e4eb8389 Mon Sep 17 00:00:00 2001 From: Matthew Booth Date: Thu, 7 Feb 2013 15:36:01 +0000 Subject: [PATCH] btrfs: Make a stub Fedora btrfs guest for inspection testing --- .gitignore | 1 + tests/guests/Makefile.am | 5 ++ tests/guests/guest-aux/make-fedora-img.pl | 81 +++++++++++++++++------ 3 files changed, 66 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 8b88abdb6..b8bea9b0b 100644 --- a/.gitignore +++ b/.gitignore @@ -428,6 +428,7 @@ Makefile.in /tests/data/test.iso /tests/guests/debian.img /tests/guests/fedora.img +/tests/guests/fedora-btrfs.img /tests/guests/fedora-md1.img /tests/guests/fedora-md2.img /tests/guests/guest-aux/fedora-name.db diff --git a/tests/guests/Makefile.am b/tests/guests/Makefile.am index 347aef551..d2291c57e 100644 --- a/tests/guests/Makefile.am +++ b/tests/guests/Makefile.am @@ -58,6 +58,11 @@ stamp-fedora-md.img: guest-aux/make-fedora-img.pl \ SRCDIR=$(srcdir) LAYOUT=partitions-md $(top_builddir)/run --test $< touch $@ +fedora-btrfs.img: guest-aux/make-fedora-img.pl \ + guest-aux/fedora-name.db \ + guest-aux/fedora-packages.db + SRCDIR=$(srcdir) LAYOUT=btrfs $(top_builddir)/run --test $< + guest-aux/fedora-name.db: guest-aux/fedora-name.db.txt rm -f $@ $@-t mkdir -p guest-aux diff --git a/tests/guests/guest-aux/make-fedora-img.pl b/tests/guests/guest-aux/make-fedora-img.pl index 3272d4c74..1875602ad 100755 --- a/tests/guests/guest-aux/make-fedora-img.pl +++ b/tests/guests/guest-aux/make-fedora-img.pl @@ -31,7 +31,6 @@ my @images; my $g = Sys::Guestfs->new (); my $bootdev; -my $rootdev; foreach ('LAYOUT', 'SRCDIR') { defined ($ENV{$_}) or die "Missing environment variable: $_"; @@ -48,7 +47,6 @@ 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; @@ -60,6 +58,8 @@ EOF $g->part_init ('/dev/sda', 'mbr'); $g->part_add ('/dev/sda', 'p', 64, 524287); $g->part_add ('/dev/sda', 'p', 524288, -64); + + init_lvm_root ('/dev/sda2'); } elsif ($ENV{LAYOUT} eq 'partitions-md') { @@ -73,7 +73,6 @@ EOF close ($fstab) or die; $bootdev = '/dev/md/boot'; - $rootdev = '/dev/md/root'; foreach my $img (@images) { open (my $fh, '>', $img) or die; @@ -110,6 +109,41 @@ EOF } close ($mdadm) or die; + + init_lvm_root ('/dev/md/root'); +} + +elsif ($ENV{LAYOUT} eq 'btrfs') { + push (@images, "fedora-btrfs.img.tmp.$$"); + + open (my $fstab, '>', "fstab.tmp.$$") or die; + print $fstab <', "fedora-btrfs.img.tmp.$$") or die; + truncate ($img, 512*1024*1024) or die; + close ($img) or die; + + $g->add_drive ("fedora-btrfs.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); + + $g->mkfs_btrfs (['/dev/sda2'], label => 'ROOT'); + $g->mount ('/dev/sda2', '/'); + $g->btrfs_subvolume_create ('/root'); + $g->btrfs_subvolume_create ('/home'); + $g->umount ('/'); + + $g->mount ('btrfsvol:/dev/sda2/root', '/'); } else { @@ -117,25 +151,36 @@ else { 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); +sub init_lvm_root { + my ($rootdev) = @_; + + $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 root filesystem. + $g->mkfs ('ext2', '/dev/VG/Root', blocksize => 4096); + $g->set_label ('/dev/VG/Root', 'ROOT'); + $g->set_e2uuid ('/dev/VG/Root', '01234567-0123-0123-0123-012345678902'); + + # Other filesystems. + # Note that these should be empty, for testing virt-df. + $g->mkfs ('ext2', '/dev/VG/LV1', blocksize => 4096); + $g->mkfs ('ext2', '/dev/VG/LV2', blocksize => 1024); + $g->mkfs ('ext2', '/dev/VG/LV3', blocksize => 2048); + + $g->mount ('/dev/VG/Root', '/'); +} # Phony /boot filesystem $g->mkfs ('ext2', $bootdev, blocksize => 4096); $g->set_label ($bootdev, 'BOOT'); $g->set_e2uuid ($bootdev, '01234567-0123-0123-0123-012345678901'); -# Phony root filesystem. -$g->mkfs ('ext2', '/dev/VG/Root', blocksize => 4096); -$g->set_label ('/dev/VG/Root', 'ROOT'); -$g->set_e2uuid ('/dev/VG/Root', '01234567-0123-0123-0123-012345678902'); - # Enough to fool inspection API. -$g->mount ('/dev/VG/Root', '/'); $g->mkdir ('/boot'); $g->mount ($bootdev, '/boot'); $g->mkdir ('/bin'); @@ -188,12 +233,6 @@ $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 ('ext2', '/dev/VG/LV1', blocksize => 4096); -$g->mkfs ('ext2', '/dev/VG/LV2', blocksize => 1024); -$g->mkfs ('ext2', '/dev/VG/LV3', blocksize => 2048); - # Cleanup $g->shutdown (); $g->close ();