From 308f585fa1e98fc07aad7a4e9299af47416d604f Mon Sep 17 00:00:00 2001 From: Laszlo Ersek Date: Tue, 14 Jun 2022 13:27:09 +0200 Subject: [PATCH] tests: add LUKS-on-LVM test Port guestfs-tools commit 27da4b0c4991 ("inspector: add LUKS-on-LVM test", 2022-02-28) to virt-v2v. While at it, account for virt-v2v commit fd7cd0c0fd22 ("test-data/phony-guests: Increase size of root filesystem", 2022-06-08). Signed-off-by: Laszlo Ersek Message-Id: <20220614112709.12210-4-lersek@redhat.com> Acked-by: Richard W.M. Jones (cherry picked from commit e4efe4b7d240b66b1d53fbe5a127f4f5966f6903) --- .gitignore | 1 + test-data/phony-guests/Makefile.am | 7 +++ test-data/phony-guests/guests.xml.in | 18 +++++++ test-data/phony-guests/make-fedora-img.pl | 54 +++++++++++++++++++ tests/Makefile.am | 2 + .../test-v2v-fedora-luks-on-lvm-conversion.sh | 36 +++++++++++++ 6 files changed, 118 insertions(+) create mode 100755 tests/test-v2v-fedora-luks-on-lvm-conversion.sh diff --git a/.gitignore b/.gitignore index 0256b89d..46345e3b 100644 --- a/.gitignore +++ b/.gitignore @@ -116,6 +116,7 @@ Makefile.in /test-data/phony-guests/debian.img /test-data/phony-guests/fedora.img /test-data/phony-guests/fedora-btrfs.img +/test-data/phony-guests/fedora-luks-on-lvm.img /test-data/phony-guests/fedora-lvm-on-luks.img /test-data/phony-guests/fedora-md1.img /test-data/phony-guests/fedora-md2.img diff --git a/test-data/phony-guests/Makefile.am b/test-data/phony-guests/Makefile.am index 6d7db3da..29dbd4d0 100644 --- a/test-data/phony-guests/Makefile.am +++ b/test-data/phony-guests/Makefile.am @@ -49,6 +49,7 @@ disk_images = \ fedora-md1.img \ fedora-md2.img \ fedora-btrfs.img \ + fedora-luks-on-lvm.img \ fedora-lvm-on-luks.img \ ubuntu.img \ archlinux.img \ @@ -99,6 +100,12 @@ fedora-btrfs.img: make-fedora-img.pl \ fedora-static-bin SRCDIR=$(srcdir) LAYOUT=btrfs $(top_builddir)/run --test ./$< +# Make a (dummy) Fedora image with LUKS-on-LVM. +fedora-luks-on-lvm.img: make-fedora-img.pl \ + fedora-journal.tar.xz \ + fedora.db + SRCDIR=$(srcdir) LAYOUT=luks-on-lvm $(top_builddir)/run --test ./$< + # Make a (dummy) Fedora image with LVM-on-LUKS. fedora-lvm-on-luks.img: make-fedora-img.pl \ fedora-journal.tar.xz \ diff --git a/test-data/phony-guests/guests.xml.in b/test-data/phony-guests/guests.xml.in index 339a6f7d..4391c9b4 100644 --- a/test-data/phony-guests/guests.xml.in +++ b/test-data/phony-guests/guests.xml.in @@ -183,6 +183,24 @@ + + + fedora-luks-on-lvm + 1048576 + + hvm + + + + + + + + + + + fedora-lvm-on-luks diff --git a/test-data/phony-guests/make-fedora-img.pl b/test-data/phony-guests/make-fedora-img.pl index 0d886bdf..c30c0b53 100755 --- a/test-data/phony-guests/make-fedora-img.pl +++ b/test-data/phony-guests/make-fedora-img.pl @@ -200,6 +200,60 @@ EOF init_lvm_root ('/dev/mapper/luks'); } +elsif ($ENV{LAYOUT} eq 'luks-on-lvm') { + push (@images, "fedora-luks-on-lvm.img-t"); + + open (my $fstab, '>', "fedora.fstab") or die; + print $fstab <disk_create ("fedora-luks-on-lvm.img-t", "raw", $IMAGE_SIZE); + + $g->add_drive ("fedora-luks-on-lvm.img-t", format => "raw"); + $g->launch (); + + $g->part_init ('/dev/sda', 'mbr'); + foreach my $p (@PARTITIONS) { + $g->part_add('/dev/sda', @$p); + } + + # Create the Volume Group on /dev/sda2. + $g->pvcreate ('/dev/sda2'); + $g->vgcreate ('VG', ['/dev/sda2']); + $g->lvcreate ('Root', 'VG', 256); + $g->lvcreate ('LV1', 'VG', 32); + $g->lvcreate ('LV2', 'VG', 32); + $g->lvcreate ('LV3', 'VG', 64); + + # Format each Logical Group as a LUKS device, with a different password. + $g->luks_format ('/dev/VG/Root', 'FEDORA-Root', 0); + $g->luks_format ('/dev/VG/LV1', 'FEDORA-LV1', 0); + $g->luks_format ('/dev/VG/LV2', 'FEDORA-LV2', 0); + $g->luks_format ('/dev/VG/LV3', 'FEDORA-LV3', 0); + + # Open the LUKS devices. This creates nodes like /dev/mapper/*-luks. + $g->cryptsetup_open ('/dev/VG/Root', 'FEDORA-Root', 'Root-luks'); + $g->cryptsetup_open ('/dev/VG/LV1', 'FEDORA-LV1', 'LV1-luks'); + $g->cryptsetup_open ('/dev/VG/LV2', 'FEDORA-LV2', 'LV2-luks'); + $g->cryptsetup_open ('/dev/VG/LV3', 'FEDORA-LV3', 'LV3-luks'); + + # Phony root filesystem. + $g->mkfs ('ext2', '/dev/mapper/Root-luks', blocksize => 4096, label => 'ROOT'); + $g->set_uuid ('/dev/mapper/Root-luks', '01234567-0123-0123-0123-012345678902'); + + # Other filesystems, just for testing findfs-label. + $g->mkfs ('ext2', '/dev/mapper/LV1-luks', blocksize => 4096, label => 'LV1'); + $g->mkfs ('ext2', '/dev/mapper/LV2-luks', blocksize => 1024, label => 'LV2'); + $g->mkfs ('ext2', '/dev/mapper/LV3-luks', blocksize => 2048, label => 'LV3'); + + $g->mount ('/dev/mapper/Root-luks', '/'); +} + else { print STDERR "$0: Unknown LAYOUT: ",$ENV{LAYOUT},"\n"; exit 1; diff --git a/tests/Makefile.am b/tests/Makefile.am index 46e53a58..e787a86c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -97,6 +97,7 @@ TESTS = \ test-v2v-virtio-win-iso.sh \ test-v2v-fedora-conversion.sh \ test-v2v-fedora-btrfs-conversion.sh \ + test-v2v-fedora-luks-on-lvm-conversion.sh \ test-v2v-fedora-lvm-on-luks-conversion.sh \ test-v2v-fedora-md-conversion.sh \ test-v2v-windows-conversion.sh \ @@ -176,6 +177,7 @@ EXTRA_DIST += \ test-v2v-cdrom.sh \ test-v2v-fedora-conversion.sh \ test-v2v-fedora-btrfs-conversion.sh \ + test-v2v-fedora-luks-on-lvm-conversion.sh \ test-v2v-fedora-lvm-on-luks-conversion.sh \ test-v2v-fedora-md-conversion.sh \ test-v2v-floppy.expected \ diff --git a/tests/test-v2v-fedora-luks-on-lvm-conversion.sh b/tests/test-v2v-fedora-luks-on-lvm-conversion.sh new file mode 100755 index 00000000..1a4068cf --- /dev/null +++ b/tests/test-v2v-fedora-luks-on-lvm-conversion.sh @@ -0,0 +1,36 @@ +#!/bin/bash - +# libguestfs virt-v2v test script +# Copyright (C) 2014-2022 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. + +# Test virt-v2v (Phony) Fedora conversion. + +set -e + +source ./functions.sh +set -e +set -x + +skip_if_skipped +f=../test-data/phony-guests/fedora-luks-on-lvm.img +requires test -f $f + +keys=(--key /dev/VG/Root:key:FEDORA-Root + --key /dev/VG/LV1:key:FEDORA-LV1 + --key /dev/VG/LV2:key:FEDORA-LV2 + --key /dev/VG/LV3:key:FEDORA-LV3) + +$VG virt-v2v --debug-gc -i disk $f -o null "${keys[@]}" -- 2.31.1