diff --git a/.gitignore b/.gitignore index c625c66..8ce42f8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,7 @@ -SOURCES/RHEV-Application-Provisioning-Tool.exe_4.43-5 -SOURCES/libguestfs.keyring -SOURCES/rhsrvany-fd659e77cdd9da484fdc9dcbe0605c62ec26fa30.tar.gz -SOURCES/rhsrvany.exe -SOURCES/virt-v2v-1.42.0.tar.gz -/RHEV-Application-Provisioning-Tool.exe_4.43-5 -/rhsrvany-fd659e77cdd9da484fdc9dcbe0605c62ec26fa30.tar.gz +*~ +/virt-v2v-*.tar.gz +/virt-v2v-*.tar.gz.sig +/RHEV-Application-Provisioning-Tool.exe_* /rhsrvany.exe -/virt-v2v-1.42.0.tar.gz +/SOURCES +/rhsrvany-fd659e77cdd9da484fdc9dcbe0605c62ec26fa30.tar.gz diff --git a/0001-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch b/0001-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch deleted file mode 100644 index 89790ba..0000000 --- a/0001-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch +++ /dev/null @@ -1,30 +0,0 @@ -From d7c0992dfb11982d96cac8e279c454d82787918a Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Sun, 28 Sep 2014 19:14:43 +0100 -Subject: [PATCH] RHEL: v2v: Select correct qemu binary for -o qemu mode - (RHBZ#1147313). - -RHEL does not have qemu-system-x86_64 (etc), and in addition the -qemu binary is located in /usr/libexec. Encode the path to this -binary directly in the script. - -Note that we don't support people running qemu directly like this. -It's just for quick testing of converted VMs, and to help us with -support cases. ---- - output/output_qemu.ml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/output/output_qemu.ml b/output/output_qemu.ml -index 3269fba5..7f2e9284 100644 ---- a/output/output_qemu.ml -+++ b/output/output_qemu.ml -@@ -137,7 +137,7 @@ module QEMU = struct - * module deals with shell and qemu comma quoting. - *) - let cmd = Qemuopts.create () in -- Qemuopts.set_binary_by_arch cmd (Some guestcaps.gcaps_arch); -+ Qemuopts.set_binary cmd "/usr/libexec/qemu-kvm"; - - let flag = Qemuopts.flag cmd - and arg = Qemuopts.arg cmd diff --git a/0002-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch b/0002-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch deleted file mode 100644 index b5ef618..0000000 --- a/0002-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch +++ /dev/null @@ -1,109 +0,0 @@ -From 610f53a67a0804ee76e9213c503b7bb00dd722b8 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 30 Sep 2014 10:50:27 +0100 -Subject: [PATCH] RHEL: v2v: Disable the --qemu-boot / -oo qemu-boot option - (RHBZ#1147313). - -This cannot work because there is no Gtk or SDL output mode -in RHEL's qemu-kvm. - -In addition you will have to edit the -display option in the -qemu script. ---- - docs/virt-v2v-output-local.pod | 6 ++---- - docs/virt-v2v.pod | 12 ------------ - output/output_qemu.ml | 3 +++ - v2v/v2v.ml | 2 -- - 4 files changed, 5 insertions(+), 18 deletions(-) - -diff --git a/docs/virt-v2v-output-local.pod b/docs/virt-v2v-output-local.pod -index d2a1c270..0be37f5e 100644 ---- a/docs/virt-v2v-output-local.pod -+++ b/docs/virt-v2v-output-local.pod -@@ -9,7 +9,7 @@ or libvirt - - virt-v2v [-i* options] -o local -os DIRECTORY - -- virt-v2v [-i* options] -o qemu -os DIRECTORY [--qemu-boot] -+ virt-v2v [-i* options] -o qemu -os DIRECTORY - - virt-v2v [-i* options] -o null - -@@ -47,12 +47,10 @@ where C is the guest name. - - =item B<-o qemu -os> C - --=item B<-o qemu -os> C B<--qemu-boot> -- - This converts the guest to files in C. Unlike I<-o local> - above, a shell script is created which contains the raw qemu command - you would need to boot the guest. However the shell script is not --run, I you also add the I<--qemu-boot> option. -+run. - - =item B<-o null> - -diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index 4e912b6c..7d0bafff 100644 ---- a/docs/virt-v2v.pod -+++ b/docs/virt-v2v.pod -@@ -139,11 +139,6 @@ Since F contains the path(s) to the guest disk - image(s) you do not need to specify the name of the disk image on the - command line. - --To convert a local disk image and immediately boot it in local --qemu, do: -- -- virt-v2v -i disk disk.img -o qemu -os /var/tmp -oo qemu-boot -- - =head1 OPTIONS - - =over 4 -@@ -487,9 +482,6 @@ This is similar to I<-o local>, except that a shell script is written - which you can use to boot the guest in qemu. The converted disks and - shell script are written to the directory specified by I<-os>. - --When using this output mode, you can also specify the I<-oo qemu-boot> --option which boots the guest under qemu immediately. -- - =item B<-o> B - - This is the same as I<-o rhv>. -@@ -743,10 +735,6 @@ Print information about the source guest and stop. This option is - useful when you are setting up network and bridge maps. - See L. - --=item B<--qemu-boot> -- --This is the same as I<-oo qemu-boot>. -- - =item B<-q> - - =item B<--quiet> -diff --git a/output/output_qemu.ml b/output/output_qemu.ml -index 7f2e9284..527d3c5e 100644 ---- a/output/output_qemu.ml -+++ b/output/output_qemu.ml -@@ -63,6 +63,9 @@ module QEMU = struct - ) options.output_options; - let qemu_boot = !qemu_boot in - -+ if qemu_boot then -+ error (f_"-o qemu: the -oo qemu-boot option cannot be used in RHEL"); -+ - (* -os must be set to a directory. *) - let output_storage = - match options.output_storage with -diff --git a/v2v/v2v.ml b/v2v/v2v.ml -index 9790416e..97b4e4ec 100644 ---- a/v2v/v2v.ml -+++ b/v2v/v2v.ml -@@ -270,8 +270,6 @@ let rec main () = - s_"Same as ‘-ip filename’"; - [ L"print-source" ], Getopt.Set print_source, - s_"Print source and stop"; -- [ L"qemu-boot" ], Getopt.Unit (fun () -> set_output_option_compat "qemu-boot" ""), -- s_"Boot in qemu (-o qemu only)"; - [ L"root" ], Getopt.String ("ask|... ", set_root_choice), - s_"How to choose root filesystem"; - [ L"vddk-config" ], Getopt.String ("filename", set_input_option_compat "vddk-config"), diff --git a/0003-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch b/0003-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch deleted file mode 100644 index 11b2476..0000000 --- a/0003-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch +++ /dev/null @@ -1,31 +0,0 @@ -From b61fc893f429eb4bec34816d667cc930e50ccd0f Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 24 Apr 2015 09:45:41 -0400 -Subject: [PATCH] RHEL: Fix list of supported sound cards to match RHEL qemu - (RHBZ#1176493). - ---- - lib/utils.ml | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/lib/utils.ml b/lib/utils.ml -index 128bb697..7116a4f9 100644 ---- a/lib/utils.ml -+++ b/lib/utils.ml -@@ -60,13 +60,14 @@ let kvm_arch = function - (* Does qemu support the given sound card? *) - let qemu_supports_sound_card = function - | Types.AC97 -- | Types.ES1370 - | Types.ICH6 - | Types.ICH9 - | Types.PCSpeaker -+ -> true -+ | Types.ES1370 - | Types.SB16 - | Types.USBAudio -- -> true -+ -> false - - (* Find the UEFI firmware. *) - let find_uefi_firmware guest_arch = diff --git a/0004-RHEL-Fixes-for-libguestfs-winsupport.patch b/0004-RHEL-Fixes-for-libguestfs-winsupport.patch deleted file mode 100644 index 2540451..0000000 --- a/0004-RHEL-Fixes-for-libguestfs-winsupport.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 5d70bf1302ea3f1006d87672676f86eb5d40eb85 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Sun, 30 Aug 2015 03:21:57 -0400 -Subject: [PATCH] RHEL: Fixes for libguestfs-winsupport. - -In tests we cannot use guestfish for arbitrary Windows edits. -In virt-v2v helpers we must set the program name to virt-v2v. ---- - convert/convert.ml | 1 + - convert/windows_virtio.ml | 1 + - test-data/phony-guests/make-windows-img.sh | 1 + - tests/test-v2v-virtio-win-iso.sh | 8 +++++++- - tests/test-v2v-windows-conversion.sh | 8 +++++++- - 5 files changed, 17 insertions(+), 2 deletions(-) - -diff --git a/convert/convert.ml b/convert/convert.ml -index 87fca725..5e0e6c2b 100644 ---- a/convert/convert.ml -+++ b/convert/convert.ml -@@ -51,6 +51,7 @@ let rec convert dir options source = - - message (f_"Opening the source"); - let g = open_guestfs ~identifier:"v2v" () in -+ g#set_program "virt-v2v"; - g#set_memsize (g#get_memsize () * 2); - (* Setting the number of vCPUs allows parallel mkinitrd, but make - * sure this is not too large because each vCPU consumes guest RAM. -diff --git a/convert/windows_virtio.ml b/convert/windows_virtio.ml -index a27cd6a5..183166b7 100644 ---- a/convert/windows_virtio.ml -+++ b/convert/windows_virtio.ml -@@ -241,6 +241,7 @@ and copy_from_virtio_win g inspect srcdir destdir filter missing = - let g2 = - try - let g2 = open_guestfs ~identifier:"virtio_win" () in -+ g#set_program "virt-v2v"; - g2#add_drive_opts virtio_win ~readonly:true; - g2#launch (); - g2 -diff --git a/test-data/phony-guests/make-windows-img.sh b/test-data/phony-guests/make-windows-img.sh -index 30908a91..73cf5144 100755 ---- a/test-data/phony-guests/make-windows-img.sh -+++ b/test-data/phony-guests/make-windows-img.sh -@@ -37,6 +37,7 @@ fi - - # Create a disk image. - guestfish < "$script" - :> "$expected" - -+cat >> "$script" < "$response" -+guestfish --ro -a "$d/windows-sda" < "$script" > "$response" - diff -u "$expected" "$response" -diff --git a/tests/test-v2v-windows-conversion.sh b/tests/test-v2v-windows-conversion.sh -index a4cf191d..1ff41f6a 100755 ---- a/tests/test-v2v-windows-conversion.sh -+++ b/tests/test-v2v-windows-conversion.sh -@@ -76,6 +76,12 @@ mktest () - :> "$script" - :> "$expected" - -+cat >> "$script" < "$response" -+guestfish --ro -a "$d/windows-sda" < "$script" > "$response" - diff -u "$expected" "$response" - - # We also update the Registry several times, for firstboot, and (ONLY diff --git a/0005-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch b/0005-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch deleted file mode 100644 index 2be9f81..0000000 --- a/0005-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 37e241d6d4f22331b34c2ed0af233c73be2b0869 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 2 Mar 2017 14:21:37 +0100 -Subject: [PATCH] RHEL: v2v: -i disk: force VNC as display (RHBZ#1372671) - -The SDL output mode is not supported in RHEL's qemu-kvm. ---- - input/input_disk.ml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/input/input_disk.ml b/input/input_disk.ml -index 508adf9d..20f2e898 100644 ---- a/input/input_disk.ml -+++ b/input/input_disk.ml -@@ -76,7 +76,7 @@ module Disk = struct - s_features = [ "acpi"; "apic"; "pae" ]; - s_firmware = UnknownFirmware; (* causes virt-v2v to autodetect *) - s_display = -- Some { s_display_type = Window; s_keymap = None; s_password = None; -+ Some { s_display_type = VNC; s_keymap = None; s_password = None; - s_listen = LNoListen; s_port = None }; - s_sound = None; - s_disks = s_disks; diff --git a/0006-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch b/0006-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch deleted file mode 100644 index 95dfe7c..0000000 --- a/0006-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 8ee8aec8739c6c0a4024ad187be56f525e8089c0 Mon Sep 17 00:00:00 2001 -From: Pino Toscano -Date: Wed, 8 Mar 2017 11:03:40 +0100 -Subject: [PATCH] RHEL: v2v: do not mention SUSE Xen hosts (RHBZ#1430203) - -They are not supported in RHEL. ---- - docs/virt-v2v-input-xen.pod | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod -index 8080ebea..ad5772de 100644 ---- a/docs/virt-v2v-input-xen.pod -+++ b/docs/virt-v2v-input-xen.pod -@@ -11,7 +11,7 @@ virt-v2v-input-xen - Using virt-v2v to convert guests from Xen - =head1 DESCRIPTION - - This page documents how to use L to convert guests from --RHEL 5 Xen, or SLES and OpenSUSE Xen hosts. -+RHEL 5 Xen hosts. - - =head1 INPUT FROM XEN - diff --git a/0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch b/0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch deleted file mode 100644 index 922f52f..0000000 --- a/0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch +++ /dev/null @@ -1,124 +0,0 @@ -From fd0c34d843bb5ba9e1b33e0dfd1250943c760a70 Mon Sep 17 00:00:00 2001 -From: Pino Toscano -Date: Tue, 26 Mar 2019 09:42:25 +0100 -Subject: [PATCH] RHEL: point to KB for supported v2v hypervisors/guests - ---- - docs/virt-v2v-support.pod | 104 ++------------------------------------ - 1 file changed, 4 insertions(+), 100 deletions(-) - -diff --git a/docs/virt-v2v-support.pod b/docs/virt-v2v-support.pod -index 9815f51f..1ffc0f9d 100644 ---- a/docs/virt-v2v-support.pod -+++ b/docs/virt-v2v-support.pod -@@ -8,106 +8,10 @@ systems and guests in virt-v2v - This page documents which foreign hypervisors, virtualization - management systems and guest types that L can support. - --Note this page applies to upstream virt-v2v from --L and in downstream distributions of virt-v2v --sometimes features are intentionally removed, or are present but not --supported. -- --=head2 Hypervisors (Input) -- --=over 4 -- --=item VMware ESXi -- --Must be managed by VMware vCenter E 5.0 unless VDDK is available. -- --=item OVA exported from VMware -- --OVAs from other hypervisors will not work. -- --=item VMX from VMware -- --VMX files generated by other hypervisors will not work. -- --=item RHEL 5 Xen -- --=item SUSE Xen -- --=item Citrix Xen -- --Citrix Xen has not been recently tested. -- --=item Hyper-V -- --Not recently tested. Requires that you export the disk or use --L on Hyper-V. -- --=item Direct from disk images -- --Only disk images exported from supported hypervisors, and using --container formats supported by qemu. -- --=item Physical machines -- --Using the L tool. -- --=back -- --=head2 Hypervisors (Output) -- --QEMU and KVM only. -- --=head2 Virtualization management systems (Output) -- --=over 4 -- --=item OpenStack -- --=item Red Hat Virtualization (RHV) 4.1 and up -- --=item Local libvirt -- --And hence L, L, and similar tools. -- --=item Local disk -- --=back -- --=head2 Guests -- --=over 4 -- --=item Red Hat Enterprise Linux 3, 4, 5, 6, 7 -- --=item CentOS 3, 4, 5, 6, 7 -- --=item Scientific Linux 3, 4, 5, 6, 7 -- --=item Oracle Linux -- --=item Fedora -- --=item SLES 10 and up -- --=item OpenSUSE 10 and up -- --=item ALT Linux 9 and up -- --=item Debian 6 and up -- --=item Ubuntu 10.04, 12.04, 14.04, 16.04, and up -- --=item Windows XP to Windows 10 / Windows Server 2016 -- --We use Windows internal version numbers, see --L -- --Currently NT 5.2 to NT 6.3 are supported. -- --See L below for additional notes on converting Windows --guests. -- --=back -+For more information on supported hypervisors, and guest types in -+RHEL, please consult the following Knowledgebase article on these -+Red Hat Customer Portal: -+L. - - =head2 Guest firmware - diff --git a/0008-RHEL-Disable-o-glance.patch b/0008-RHEL-Disable-o-glance.patch deleted file mode 100644 index cbb09e1..0000000 --- a/0008-RHEL-Disable-o-glance.patch +++ /dev/null @@ -1,216 +0,0 @@ -From 14507902a675fd2e0356c0faf67524eb04e974d2 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Wed, 30 Jun 2021 11:15:52 +0100 -Subject: [PATCH] RHEL: Disable -o glance - -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1977539 ---- - docs/virt-v2v-output-openstack.pod | 56 ++---------------------------- - docs/virt-v2v.pod | 20 ----------- - output/output_glance.mli | 2 +- - tests/test-v2v-o-glance.sh | 3 ++ - v2v/v2v.ml | 7 +--- - 5 files changed, 7 insertions(+), 81 deletions(-) - -diff --git a/docs/virt-v2v-output-openstack.pod b/docs/virt-v2v-output-openstack.pod -index f5a3abad..1ab356e8 100644 ---- a/docs/virt-v2v-output-openstack.pod -+++ b/docs/virt-v2v-output-openstack.pod -@@ -10,13 +10,10 @@ virt-v2v-output-openstack - Using virt-v2v to convert guests to OpenStack - [-oo verify-server-certificate=false] - [-oo os-username=admin] [-oo os-*=*] - -- virt-v2v [-i* options] -o glance -- - =head1 DESCRIPTION - - This page documents how to use L to convert guests to run --on OpenStack. There are two output modes you can select, but only --I<-o openstack> should be used normally. -+on OpenStack. - - =over 4 - -@@ -27,15 +24,6 @@ Full description: L - This is the modern method for uploading to OpenStack via the REST API. - Guests can be directly converted into Cinder volumes. - --=item B<-o glance> -- --Full description: L -- --This is the old method for uploading to Glance. Unfortunately Glance --is not well suited to storing converted guests (since virt-v2v deals --with "pets" not templated "cattle"), so this method is not recommended --unless you really know what you are doing. -- - =back - - =head1 OUTPUT TO OPENSTACK -@@ -170,50 +158,10 @@ no Cinder volume type is used. - The following options are B supported with OpenStack: I<-oa>, - I<-of>. - --=head1 OUTPUT TO GLANCE -- --Note this is a legacy option. In most cases you should use --L instead. -- --To output to OpenStack Glance, use the I<-o glance> option. -- --This runs the L CLI program which must be installed on the --virt-v2v conversion host. For authentication to work, you will need --to set C environment variables. -- --Normally there is a file called C or C --which you can simply C to set everything up. -- --Virt-v2v adds metadata for the guest to Glance, describing such things --as the guest operating system and what drivers it requires. The --command C will display the metadata as "Property" --fields such as C and C. -- --=head2 Glance and sparseness -- --Glance image upload doesn't appear to correctly handle sparseness. --For this reason, using qcow2 will be faster and use less space on the --Glance server. Use the virt-v2v S> option. -- --=head2 Glance and multiple disks -- --If the guest has a single disk, then the name of the disk in Glance --will be the name of the guest. You can control this using the I<-on> --option. -- --Glance doesn't have a concept of associating multiple disks with a --single guest, and Nova doesn't allow you to boot a guest from multiple --Glance disks either. If the guest has multiple disks, then the first --(assumed to be the system disk) will have the name of the guest, and --the second and subsequent data disks will be called --C-disk2>, C-disk3> etc. It may be best to --leave the system disk in Glance, and import the data disks to Cinder. -- - =head1 SEE ALSO - - L, --L, --L. -+L. - - =head1 AUTHOR - -diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index 7d0bafff..84e049cc 100644 ---- a/docs/virt-v2v.pod -+++ b/docs/virt-v2v.pod -@@ -416,14 +416,6 @@ See L below. - - This is the same as I<-o local>. - --=item B<-o> B -- --This is a legacy option. You should probably use I<-o openstack> --instead. -- --Set the output method to OpenStack Glance. In this mode the converted --guest is uploaded to Glance. See L. -- - =item B<-o> B - - This option is deprecated and will be removed in S. -@@ -1148,11 +1140,6 @@ and output methods may use disk space, as outlined in the table below. - This temporarily places a full copy of the uncompressed source disks - in C<$VIRT_V2V_TMPDIR> (or F). - --=item I<-o glance> -- --This temporarily places a full copy of the output disks in --C<$VIRT_V2V_TMPDIR> (or F). -- - =item I<-o local> - - =item I<-o qemu> -@@ -1336,13 +1323,6 @@ instance. - Because of how Cinder volumes are presented as F block devices, - using I<-o openstack> normally requires that virt-v2v is run as root. - --=item Writing to Glance -- --This does I need root (in fact it probably won’t work), but may --require either a special user and/or for you to source a script that --sets authentication environment variables. Consult the Glance --documentation. -- - =item Writing to block devices - - This normally requires root. See the next section. -diff --git a/output/output_glance.mli b/output/output_glance.mli -index 972320a2..9befc461 100644 ---- a/output/output_glance.mli -+++ b/output/output_glance.mli -@@ -18,4 +18,4 @@ - - (** [-o glance] output mode. *) - --module Glance : Output.OUTPUT -+(*module Glance : Output.OUTPUT*) -diff --git a/tests/test-v2v-o-glance.sh b/tests/test-v2v-o-glance.sh -index c0db9115..074b5e16 100755 ---- a/tests/test-v2v-o-glance.sh -+++ b/tests/test-v2v-o-glance.sh -@@ -20,6 +20,9 @@ - - set -e - -+# Feature is disabled in RHEL 9. -+exit 77 -+ - source ./functions.sh - set -e - set -x -diff --git a/v2v/v2v.ml b/v2v/v2v.ml -index 97b4e4ec..41e020cb 100644 ---- a/v2v/v2v.ml -+++ b/v2v/v2v.ml -@@ -192,7 +192,6 @@ let rec main () = - if !output_mode <> `Not_set then - error (f_"%s option used more than once on the command line") "-o"; - match mode with -- | "glance" -> output_mode := `Glance - | "libvirt" -> output_mode := `Libvirt - | "disk" | "local" -> output_mode := `Disk - | "json" -> output_mode := `JSON -@@ -250,7 +249,7 @@ let rec main () = - s_"Map network ‘in’ to ‘out’"; - [ L"no-trim" ], Getopt.String ("-", no_trim_warning), - s_"Ignored for backwards compatibility"; -- [ S 'o' ], Getopt.String ("glance|json|libvirt|local|null|openstack|qemu|rhv|rhv-upload|vdsm", set_output_mode), -+ [ S 'o' ], Getopt.String ("json|libvirt|local|null|openstack|qemu|rhv|rhv-upload|vdsm", set_output_mode), - s_"Set output mode (default: libvirt)"; - [ M"oa" ], Getopt.String ("sparse|preallocated", set_output_alloc), - s_"Set output allocation mode"; -@@ -318,8 +317,6 @@ virt-v2v -i libvirtxml guest-domain.xml -o local -os /var/tmp - - virt-v2v -i disk disk.img -o local -os /var/tmp - --virt-v2v -i disk disk.img -o glance -- - There is a companion front-end called \"virt-p2v\" which comes as an - ISO or CD image that can be booted on physical machines. - -@@ -387,7 +384,6 @@ read the man page virt-v2v(1). - pr "input:libvirtxml\n"; - pr "input:ova\n"; - pr "input:vmx\n"; -- pr "output:glance\n"; - pr "output:json\n"; - pr "output:libvirt\n"; - pr "output:local\n"; -@@ -481,7 +477,6 @@ read the man page virt-v2v(1). - | `Disk -> (module Output_disk.Disk) - | `Null -> (module Output_null.Null) - | `QEmu -> (module Output_qemu.QEMU) -- | `Glance -> (module Output_glance.Glance) - | `Openstack -> (module Output_openstack.Openstack) - | `RHV_Upload -> (module Output_rhv_upload.RHVUpload) - | `RHV -> (module Output_rhv.RHV) diff --git a/0009-RHEL-Remove-the-in-place-option.patch b/0009-RHEL-Remove-the-in-place-option.patch deleted file mode 100644 index b554409..0000000 --- a/0009-RHEL-Remove-the-in-place-option.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 1176553cf7a9a7f7961887372757234ffdfae2bd Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 2 Dec 2021 11:56:05 +0000 -Subject: [PATCH] RHEL: Remove the --in-place option - -This disables the virt-v2v --in-place option which we do not -wish to support in RHEL. ---- - docs/virt-v2v.pod | 8 -------- - tests/Makefile.am | 1 - - v2v/v2v.ml | 8 -------- - 3 files changed, 17 deletions(-) - -diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index 84e049cc..7ad22f00 100644 ---- a/docs/virt-v2v.pod -+++ b/docs/virt-v2v.pod -@@ -21,9 +21,6 @@ There is also a companion front-end called L which comes - as an ISO, CD or PXE image that can be booted on physical machines to - virtualize those machines (physical to virtual, or p2v). - --For in-place conversion, there is a separate tool called --L. -- - =head2 Input and Output - - You normally run virt-v2v with several I<-i*> options controlling the -@@ -36,10 +33,6 @@ The input and output sides of virt-v2v are separate and unrelated. - Virt-v2v can read from any input and write to any output. Therefore - these sides of virt-v2v are documented separately in this manual. - --Virt-v2v normally copies from the input to the output, called "copying --mode". In this case the source guest is always left unchanged. --In-place conversions may be done using L. -- - =head2 Other virt-v2v topics - - L — Supported hypervisors, virtualization -@@ -1587,7 +1580,6 @@ L, --L, - L, - L, - L, -diff --git a/tests/Makefile.am b/tests/Makefile.am -index d36e230b..db32e42b 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -77,7 +77,6 @@ TESTS = \ - test-v2v-floppy.sh \ - test-v2v-i-disk.sh \ - test-v2v-i-ova.sh \ -- test-v2v-in-place.sh \ - test-v2v-mac.sh \ - test-v2v-machine-readable.sh \ - test-v2v-networks-and-bridges.sh \ -diff --git a/v2v/v2v.ml b/v2v/v2v.ml -index 41e020cb..e00f9814 100644 ---- a/v2v/v2v.ml -+++ b/v2v/v2v.ml -@@ -214,12 +214,6 @@ let rec main () = - warning (f_"the --vmtype option has been removed and now does nothing") - in - -- (* Options that are errors. *) -- let in_place_error _ = -- error (f_"The --in-place option has been replaced by the \ -- ‘virt-v2v-in-place’ program") -- in -- - let argspec = [ - [ L"bandwidth" ], Getopt.String ("bps", set_string_option_once "--bandwidth" bandwidth), - s_"Set bandwidth to bits per sec"; -@@ -241,8 +235,6 @@ let rec main () = - s_"Use password from file to connect to input hypervisor"; - [ M"it" ], Getopt.String ("transport", set_string_option_once "-it" input_transport), - s_"Input transport"; -- [ L"in-place" ], Getopt.Unit in_place_error, -- s_"Use virt-v2v-in-place instead"; - [ L"mac" ], Getopt.String ("mac:network|bridge|ip:out", add_mac), - s_"Map NIC to network or bridge or assign static IP"; - [ S 'n'; L"network" ], Getopt.String ("in:out", add_network), diff --git a/0010-output-Remove-o-json-mode.patch b/0010-output-Remove-o-json-mode.patch deleted file mode 100644 index 355af01..0000000 --- a/0010-output-Remove-o-json-mode.patch +++ /dev/null @@ -1,1125 +0,0 @@ -From a1f1129dc148639ed0b05b737157268d9b824a63 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Mon, 11 Apr 2022 11:01:46 +0100 -Subject: [PATCH] output: Remove -o json mode - -This removes the -o json mode completely. - -Reviewed-by: Laszlo Ersek -(cherry picked from commit 4e6b389b4e27c8d13e57fcaf777d96ad7e08650b) ---- - docs/virt-v2v.pod | 4 - - output/Makefile.am | 51 +----- - output/create_json.ml | 338 ----------------------------------- - output/create_json.mli | 27 --- - output/output_json.ml | 153 ---------------- - output/output_json.mli | 21 --- - output/var_expander.ml | 72 -------- - output/var_expander.mli | 82 --------- - output/var_expander_tests.ml | 113 ------------ - tests/Makefile.am | 2 - - tests/test-v2v-o-json.sh | 68 ------- - v2v/v2v.ml | 7 +- - 12 files changed, 5 insertions(+), 933 deletions(-) - delete mode 100644 output/create_json.ml - delete mode 100644 output/create_json.mli - delete mode 100644 output/output_json.ml - delete mode 100644 output/output_json.mli - delete mode 100644 output/var_expander.ml - delete mode 100644 output/var_expander.mli - delete mode 100644 output/var_expander_tests.ml - delete mode 100755 tests/test-v2v-o-json.sh - -diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index 7ad22f00..912f1bc3 100644 ---- a/docs/virt-v2v.pod -+++ b/docs/virt-v2v.pod -@@ -409,10 +409,6 @@ See L below. - - This is the same as I<-o local>. - --=item B<-o> B -- --This option is deprecated and will be removed in S. -- - =item B<-o> B - - Set the output method to I. This is the default. -diff --git a/output/Makefile.am b/output/Makefile.am -index 61caf68b..dd488549 100644 ---- a/output/Makefile.am -+++ b/output/Makefile.am -@@ -39,18 +39,15 @@ EXTRA_DIST = \ - rhv-upload-precheck.py \ - rhv-upload-transfer.py \ - rhv-upload-vmcheck.py \ -- test-v2v-python-syntax.sh \ -- var_expander_tests.ml -+ test-v2v-python-syntax.sh - - SOURCES_MLI = \ - changeuid.mli \ -- create_json.mli \ - create_libvirt_xml.mli \ - openstack_image_properties.mli \ - output.mli \ - output_disk.mli \ - output_glance.mli \ -- output_json.mli \ - output_libvirt.mli \ - output_null.mli \ - output_openstack.mli \ -@@ -66,14 +63,11 @@ SOURCES_MLI = \ - output_rhv_upload_transfer_source.mli \ - output_rhv_upload_vmcheck_source.mli \ - python_script.mli \ -- qemuopts.mli \ -- var_expander.mli -+ qemuopts.mli - - SOURCES_ML = \ - changeuid.ml \ - python_script.ml \ -- var_expander.ml \ -- create_json.ml \ - create_libvirt_xml.ml \ - qemuopts.ml \ - openstack_image_properties.ml \ -@@ -87,7 +81,6 @@ SOURCES_ML = \ - output.ml \ - output_disk.ml \ - output_glance.ml \ -- output_json.ml \ - output_libvirt.ml \ - output_null.ml \ - output_openstack.ml \ -@@ -203,47 +196,9 @@ $(MLOUTPUT_CMA): $(OBJECTS) libmloutput.a - $(OCAMLFIND) mklib $(OCAMLPACKAGES) \ - $(OBJECTS) $(libmloutput_a_OBJECTS) -o mloutput - --# Unit tests. --TESTS = --if HAVE_OCAML_PKG_OUNIT --TESTS += \ -- var_expander_tests --check_PROGRAMS = \ -- var_expander_tests --endif -- --var_expander_tests_BOBJECTS = \ -- var_expander.cmo \ -- var_expander_tests.cmo --var_expander_tests_XOBJECTS = $(var_expander_tests_BOBJECTS:.cmo=.cmx) -- --var_expander_tests_SOURCES = dummy.c --var_expander_tests_CPPFLAGS = $(virt_v2v_CPPFLAGS) --var_expander_tests_CFLAGS = $(virt_v2v_CFLAGS) -- --if !HAVE_OCAMLOPT --# Can't call this var_expander_tests_OBJECTS because automake gets confused. --var_expander_tests_THEOBJECTS = $(var_expander_tests_BOBJECTS) --var_expander_tests.cmo: OCAMLPACKAGES += -package ounit2 --else --var_expander_tests_THEOBJECTS = $(var_expander_tests_XOBJECTS) --var_expander_tests.cmx: OCAMLPACKAGES += -package ounit2 --endif -- --var_expander_tests_DEPENDENCIES = \ -- $(var_expander_tests_THEOBJECTS) \ -- $(top_builddir)/common/mlpcre/mlpcre.$(MLARCHIVE) \ -- $(top_srcdir)/ocaml-link.sh --var_expander_tests_LINK = \ -- $(top_srcdir)/ocaml-link.sh -cclib '$(OCAMLCLIBS)' -- \ -- $(OCAMLFIND) $(BEST) $(OCAMLFLAGS) \ -- $(OCAMLPACKAGES) -package ounit2 \ -- $(OCAMLLINKFLAGS) \ -- $(var_expander_tests_THEOBJECTS) -o $@ -- - # Unit tests. - TESTS_ENVIRONMENT = $(top_builddir)/run --test --TESTS += test-v2v-python-syntax.sh -+TESTS = test-v2v-python-syntax.sh - - # Dependencies. - .depend: \ -diff --git a/output/create_json.ml b/output/create_json.ml -deleted file mode 100644 -index cbc27fdc..00000000 ---- a/output/create_json.ml -+++ /dev/null -@@ -1,338 +0,0 @@ --(* virt-v2v -- * Copyright (C) 2019 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. -- *) -- --open Std_utils --open C_utils --open Tools_utils -- --open Types --open Utils -- --module G = Guestfs -- --let json_list_of_string_list = -- List.map (fun x -> JSON.String x) -- --let json_list_of_string_string_list = -- List.map (fun (x, y) -> x, JSON.String y) -- --let push_optional_string lst name = function -- | None -> () -- | Some v -> List.push_back lst (name, JSON.String v) -- --let push_optional_int lst name = function -- | None -> () -- | Some v -> List.push_back lst (name, JSON.Int (Int64.of_int v)) -- --let json_unknown_string = function -- | "unknown" -> JSON.Null -- | v -> JSON.String v -- --let create_json_metadata source inspect -- { guestcaps; target_buses; target_firmware; target_nics } -- outdisk_name output_format output_name = -- let doc = ref [ -- "version", JSON.Int 1L; -- "name", JSON.String output_name; -- "memory", JSON.Int source.s_memory; -- "vcpu", JSON.Int (Int64.of_int source.s_vcpu); -- ] in -- -- (match source.s_genid with -- | None -> () -- | Some genid -> List.push_back doc ("genid", JSON.String genid) -- ); -- -- if source.s_cpu_vendor <> None || source.s_cpu_model <> None || -- source.s_cpu_topology <> None then ( -- let cpu = ref [] in -- -- push_optional_string cpu "vendor" source.s_cpu_vendor; -- push_optional_string cpu "model" source.s_cpu_model; -- (match source.s_cpu_topology with -- | None -> () -- | Some { s_cpu_sockets; s_cpu_cores; s_cpu_threads } -> -- let attrs = [ -- "sockets", JSON.Int (Int64.of_int s_cpu_sockets); -- "cores", JSON.Int (Int64.of_int s_cpu_cores); -- "threads", JSON.Int (Int64.of_int s_cpu_threads); -- ] in -- List.push_back cpu ("topology", JSON.Dict attrs) -- ); -- -- List.push_back doc ("cpu", JSON.Dict !cpu); -- ); -- -- let firmware = -- let firmware_type = -- match target_firmware with -- | TargetBIOS -> "bios" -- | TargetUEFI -> "uefi" in -- -- let fw = ref [ -- "type", JSON.String firmware_type; -- ] in -- -- (match target_firmware with -- | TargetBIOS -> () -- | TargetUEFI -> -- let uefi_firmware = find_uefi_firmware guestcaps.gcaps_arch in -- let flags = -- List.map ( -- function -- | Uefi.UEFI_FLAG_SECURE_BOOT_REQUIRED -> "secure_boot_required" -- ) uefi_firmware.Uefi.flags in -- -- let uefi = ref [ -- "code", JSON.String uefi_firmware.Uefi.code; -- "vars", JSON.String uefi_firmware.Uefi.vars; -- "flags", JSON.List (json_list_of_string_list flags); -- ] in -- -- push_optional_string uefi "code-debug" uefi_firmware.Uefi.code_debug; -- -- List.push_back fw ("uefi", JSON.Dict !uefi) -- ); -- -- !fw in -- List.push_back doc ("firmware", JSON.Dict firmware); -- -- List.push_back doc ("features", -- JSON.List (json_list_of_string_list source.s_features)); -- -- let machine = -- match guestcaps.gcaps_machine with -- | I440FX -> "pc" -- | Q35 -> "q35" -- | Virt -> "virt" in -- List.push_back doc ("machine", JSON.String machine); -- -- let disks, removables = -- let disks = ref [] -- and removables = ref [] in -- -- let iter_bus bus_name drive_prefix i = function -- | BusSlotEmpty -> () -- | BusSlotDisk d -> -- (* Find the corresponding target disk. *) -- let outdisk = outdisk_name d.s_disk_id in -- -- let disk = [ -- "dev", JSON.String (drive_prefix ^ drive_name i); -- "bus", JSON.String bus_name; -- "format", JSON.String output_format; -- "file", JSON.String outdisk; -- ] in -- -- List.push_back disks (JSON.Dict disk) -- -- | BusSlotRemovable { s_removable_type = CDROM } -> -- let cdrom = [ -- "type", JSON.String "cdrom"; -- "dev", JSON.String (drive_prefix ^ drive_name i); -- "bus", JSON.String bus_name; -- ] in -- -- List.push_back removables (JSON.Dict cdrom) -- -- | BusSlotRemovable { s_removable_type = Floppy } -> -- let floppy = [ -- "type", JSON.String "floppy"; -- "dev", JSON.String (drive_prefix ^ drive_name i); -- ] in -- -- List.push_back removables (JSON.Dict floppy) -- in -- -- Array.iteri (iter_bus "virtio" "vd") target_buses.target_virtio_blk_bus; -- Array.iteri (iter_bus "ide" "hd") target_buses.target_ide_bus; -- Array.iteri (iter_bus "scsi" "sd") target_buses.target_scsi_bus; -- Array.iteri (iter_bus "floppy" "fd") target_buses.target_floppy_bus; -- -- !disks, !removables in -- List.push_back doc ("disks", JSON.List disks); -- List.push_back doc ("removables", JSON.List removables); -- -- let nics = -- List.map ( -- fun { s_mac = mac; s_vnet_type = vnet_type; s_nic_model = nic_model; -- s_vnet = vnet; } -> -- let vnet_type_str = -- match vnet_type with -- | Bridge -> "bridge" -- | Network -> "network" in -- -- let nic = ref [ -- "vnet", JSON.String vnet; -- "vnet-type", JSON.String vnet_type_str; -- ] in -- -- let nic_model_str = Option.map string_of_nic_model nic_model in -- push_optional_string nic "model" nic_model_str; -- -- push_optional_string nic "mac" mac; -- -- JSON.Dict !nic -- ) target_nics in -- List.push_back doc ("nics", JSON.List nics); -- -- let guestcaps_dict = -- let block_bus = -- match guestcaps.gcaps_block_bus with -- | Virtio_blk -> "virtio-blk" -- | IDE -> "ide" in -- let net_bus = -- match guestcaps.gcaps_net_bus with -- | Virtio_net -> "virtio-net" -- | E1000 -> "e1000" -- | RTL8139 -> "rtl8139" in -- let video = "vga" in -- let machine = -- match guestcaps.gcaps_machine with -- | I440FX -> "i440fx" -- | Q35 -> "q35" -- | Virt -> "virt" in -- -- [ -- "block-bus", JSON.String block_bus; -- "net-bus", JSON.String net_bus; -- "video", JSON.String video; -- "machine", JSON.String machine; -- "arch", JSON.String guestcaps.gcaps_arch; -- "virtio-rng", JSON.Bool guestcaps.gcaps_virtio_rng; -- "virtio-balloon", JSON.Bool guestcaps.gcaps_virtio_balloon; -- "isa-pvpanic", JSON.Bool guestcaps.gcaps_isa_pvpanic; -- "virtio-socket", JSON.Bool guestcaps.gcaps_virtio_socket; -- "acpi", JSON.Bool guestcaps.gcaps_acpi; -- "virtio-1-0", JSON.Bool guestcaps.gcaps_virtio_1_0; -- ] in -- List.push_back doc ("guestcaps", JSON.Dict guestcaps_dict); -- -- (match source.s_sound with -- | None -> () -- | Some { s_sound_model = model } -> -- let sound = [ -- "model", JSON.String (string_of_source_sound_model model); -- ] in -- List.push_back doc ("sound", JSON.Dict sound) -- ); -- -- (match source.s_display with -- | None -> () -- | Some d -> -- let display_type = -- match d.s_display_type with -- | Window -> "window" -- | VNC -> "vnc" -- | Spice -> "spice" in -- -- let display = ref [ -- "type", JSON.String display_type; -- ] in -- -- push_optional_string display "keymap" d.s_keymap; -- push_optional_string display "password" d.s_password; -- -- let listen = -- match d.s_listen with -- | LNoListen -> None -- | LAddress address -> -- Some [ -- "type", JSON.String "address"; -- "address", JSON.String address; -- ] -- | LNetwork network -> -- Some [ -- "type", JSON.String "network"; -- "network", JSON.String network; -- ] -- | LSocket None -> -- Some [ -- "type", JSON.String "socket"; -- "socket", JSON.Null; -- ] -- | LSocket (Some socket) -> -- Some [ -- "type", JSON.String "socket"; -- "socket", JSON.String socket; -- ] -- | LNone -> -- Some [ -- "type", JSON.String "none"; -- ] in -- (match listen with -- | None -> () -- | Some l -> List.push_back display ("listen", JSON.Dict l) -- ); -- -- push_optional_int display "port" d.s_port; -- -- List.push_back doc ("display", JSON.Dict !display) -- ); -- -- let inspect_dict = -- let apps = -- List.map ( -- fun { G.app2_name = name; app2_display_name = display_name; -- app2_epoch = epoch; app2_version = version; -- app2_release = release; app2_arch = arch; } -> -- JSON.Dict [ -- "name", JSON.String name; -- "display-name", JSON.String display_name; -- "epoch", JSON.Int (Int64.of_int32 epoch); -- "version", JSON.String version; -- "release", JSON.String release; -- "arch", JSON.String arch; -- ] -- ) inspect.i_apps in -- -- let firmware_dict = -- match inspect.i_firmware with -- | I_BIOS -> -- [ -- "type", JSON.String "bios"; -- ] -- | I_UEFI devices -> -- [ -- "type", JSON.String "uefi"; -- "devices", JSON.List (json_list_of_string_list devices); -- ] in -- -- [ -- "root", JSON.String inspect.i_root; -- "type", JSON.String inspect.i_type; -- "distro", json_unknown_string inspect.i_distro; -- "osinfo", json_unknown_string inspect.i_osinfo; -- "arch", JSON.String inspect.i_arch; -- "major-version", JSON.Int (Int64.of_int inspect.i_major_version); -- "minor-version", JSON.Int (Int64.of_int inspect.i_minor_version); -- "package-format", json_unknown_string inspect.i_package_format; -- "package-management", json_unknown_string inspect.i_package_management; -- "product-name", json_unknown_string inspect.i_product_name; -- "product-variant", json_unknown_string inspect.i_product_variant; -- "mountpoints", JSON.Dict (json_list_of_string_string_list inspect.i_mountpoints); -- "applications", JSON.List apps; -- "windows-systemroot", JSON.String inspect.i_windows_systemroot; -- "windows-software-hive", JSON.String inspect.i_windows_software_hive; -- "windows-system-hive", JSON.String inspect.i_windows_system_hive; -- "windows-current-control-set", JSON.String inspect.i_windows_current_control_set; -- "firmware", JSON.Dict firmware_dict; -- ] in -- List.push_back doc ("inspect", JSON.Dict inspect_dict); -- -- !doc -diff --git a/output/create_json.mli b/output/create_json.mli -deleted file mode 100644 -index 97086ff5..00000000 ---- a/output/create_json.mli -+++ /dev/null -@@ -1,27 +0,0 @@ --(* virt-v2v -- * Copyright (C) 2019 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. -- *) -- --(** Create JSON metadata for [-o json]. *) -- --val create_json_metadata : Types.source -> Types.inspect -> -- Types.target_meta -> -- (int -> string) -> string -> string -> -- JSON.doc --(** [create_json_metadata source targets outdisk_map output_format output_name] -- creates the JSON with the majority of the data that virt-v2v used for the -- conversion. *) -diff --git a/output/output_json.ml b/output/output_json.ml -deleted file mode 100644 -index 6e81b639..00000000 ---- a/output/output_json.ml -+++ /dev/null -@@ -1,153 +0,0 @@ --(* virt-v2v -- * Copyright (C) 2009-2021 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. -- *) -- --open Printf --open Unix -- --open C_utils --open Std_utils --open Tools_utils --open Common_gettext.Gettext -- --open Types --open Utils -- --open Output -- --module Json = struct -- type poptions = string * Types.output_allocation * string * string * string -- -- type t = unit -- -- let to_string options = -- "-o json" ^ -- match options.output_storage with -- | Some os -> " -os " ^ os -- | None -> "" -- -- let query_output_options () = -- printf (f_"Output options (-oo) which can be used with -o json: -- -- -oo json-disks-pattern=PATTERN Pattern for the disks. --") -- -- let parse_options options source = -- if options.output_conn <> None then -- error_option_cannot_be_used_in_output_mode "json" "-oc"; -- if options.output_password <> None then -- error_option_cannot_be_used_in_output_mode "json" "-op"; -- -- let known_pattern_variables = ["DiskNo"; "DiskDeviceName"; "GuestName"] in -- let json_disks_pattern = ref None in -- List.iter ( -- fun (k, v) -> -- match k with -- | "json-disks-pattern" -> -- if !json_disks_pattern <> None then -- error (f_"-o json: -oo json-disks-pattern set more than once"); -- let vars = -- try Var_expander.scan_variables v -- with Var_expander.Invalid_variable var -> -- error (f_"-o json: -oo json-disks-pattern: invalid variable %%{%s}") -- var in -- List.iter ( -- fun var -> -- if not (List.mem var known_pattern_variables) then -- error (f_"-o json: -oo json-disks-pattern: unhandled variable %%{%s}") -- var -- ) vars; -- json_disks_pattern := Some v -- | k -> -- error (f_"-o json: unknown output option ‘-oo %s’") k -- ) options.output_options; -- -- let json_disks_pattern = -- Option.default "%{GuestName}-%{DiskDeviceName}" !json_disks_pattern in -- -- (* -os must be set to a directory. *) -- let output_storage = -- match options.output_storage with -- | None -> -- error (f_"-o json: output directory was not specified, use '-os /dir'") -- | Some d when not (is_directory d) -> -- error (f_"-os %s: output directory does not exist or is not a directory") d -- | Some d -> d in -- -- let output_name = Option.default source.s_name options.output_name in -- -- (json_disks_pattern, -- options.output_alloc, options.output_format, output_name, output_storage) -- -- let rec setup dir options source = -- let disks = get_disks dir in -- let json_disks_pattern, -- output_alloc, output_format, output_name, -- output_storage = options in -- -- List.iter ( -- fun (i, size) -> -- let socket = sprintf "%s/out%d" dir i in -- On_exit.unlink socket; -- -- (* Create the actual output disk. *) -- let outdisk = json_path output_storage output_name -- json_disks_pattern i in -- mkdir_p (Filename.dirname outdisk) 0o755; -- -- output_to_local_file output_alloc output_format outdisk size socket -- ) disks -- -- (* For -o json, return the output disk name of the i'th disk. *) -- and json_path os output_name json_disks_pattern i = -- let outname = -- let vars_fn = function -- | "DiskNo" -> Some (string_of_int (i+1)) -- | "DiskDeviceName" -> Some (sprintf "sd%s" (drive_name i)) -- | "GuestName" -> Some output_name -- | _ -> assert false -- in -- Var_expander.replace_fn json_disks_pattern vars_fn in -- let outdisk = os // outname in -- let outdisk = absolute_path outdisk in -- outdisk -- -- let finalize dir options () source inspect target_meta = -- let json_disks_pattern, -- output_alloc, output_format, output_name, output_storage = options in -- -- let doc = -- Create_json.create_json_metadata source inspect target_meta -- (json_path output_storage output_name json_disks_pattern) -- output_format output_name in -- let doc_string = JSON.string_of_doc ~fmt:JSON.Indented doc in -- -- if verbose () then ( -- eprintf "resulting JSON:\n"; -- output_string Stdlib.stderr doc_string; -- eprintf "\n\n%!"; -- ); -- -- let file = output_storage // output_name ^ ".json" in -- with_open_out file ( -- fun chan -> -- output_string chan doc_string; -- output_char chan '\n' -- ) -- -- let request_size = None --end -diff --git a/output/output_json.mli b/output/output_json.mli -deleted file mode 100644 -index 00786ef7..00000000 ---- a/output/output_json.mli -+++ /dev/null -@@ -1,21 +0,0 @@ --(* virt-v2v -- * Copyright (C) 2009-2021 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. -- *) -- --(** [-o json] output mode. *) -- --module Json : Output.OUTPUT -diff --git a/output/var_expander.ml b/output/var_expander.ml -deleted file mode 100644 -index 24b9bafe..00000000 ---- a/output/var_expander.ml -+++ /dev/null -@@ -1,72 +0,0 @@ --(* virt-v2v -- * Copyright (C) 2019 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. -- *) -- --open Std_utils -- --exception Invalid_variable of string -- --let var_re = PCRE.compile "(^|[^%])%{([^}]+)}" -- --let check_variable var = -- String.iter ( -- function -- | '0'..'9' -- | 'a'..'z' -- | 'A'..'Z' -- | '_' -- | '-' -> () -- | _ -> raise (Invalid_variable var) -- ) var -- --let scan_variables str = -- let res = ref [] in -- let offset = ref 0 in -- while PCRE.matches ~offset:!offset var_re str; do -- let var = PCRE.sub 2 in -- check_variable var; -- let _, end_ = PCRE.subi 0 in -- List.push_back res var; -- offset := end_ -- done; -- List.remove_duplicates !res -- --let replace_fn str fn = -- let res = ref str in -- let offset = ref 0 in -- while PCRE.matches ~offset:!offset var_re !res; do -- let var = PCRE.sub 2 in -- check_variable var; -- let start_, end_ = PCRE.subi 0 in -- match fn var with -- | None -> -- offset := end_ -- | Some text -> -- let prefix_len = -- let prefix_start, prefix_end = PCRE.subi 1 in -- prefix_end - prefix_start in -- res := (String.sub !res 0 (start_ + prefix_len)) ^ text ^ (String.sub !res end_ (String.length !res - end_)); -- offset := start_ + prefix_len + String.length text -- done; -- !res -- --let replace_list str lst = -- let fn var = -- try Some (List.assoc var lst) -- with Not_found -> None -- in -- replace_fn str fn -diff --git a/output/var_expander.mli b/output/var_expander.mli -deleted file mode 100644 -index 80aa33c2..00000000 ---- a/output/var_expander.mli -+++ /dev/null -@@ -1,82 +0,0 @@ --(* virt-v2v -- * Copyright (C) 2019 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. -- *) -- --(** Simple variable expander. -- -- This module provides the support to expand variables in strings, -- specified in the form of [%{name}]. -- -- For example: -- --{v --let str = "variable-%{INDEX} in %{INDEX} replaced %{INDEX} times" --let index = ref 0 --let fn = function -- | "INDEX" -> -- incr index; -- Some (string_of_int !index) -- | _ -> None --in --let str = Var_expander.replace_fn str fn --(* now str is "variable-1 in 2 replaced 3 times" *) --v} -- -- The names of variables can contain only ASCII letters (uppercase, -- and lowercase), digits, underscores, and dashes. -- -- The replacement is done in a single pass: this means that if a -- variable is replaced with the text of a variable, that new text -- is kept as is in the final output. In practice: -- --{v --let str = "%{VAR}" --let str = Var_expander.replace_list str [("VAR", "%{VAR}")] --(* now str is "%{VAR}" *) --v} --*) -- --exception Invalid_variable of string --(** Invalid variable name error. -- -- In case a variable contains characters not allowed, then this -- exception with the actual unacceptable variable. *) -- --val scan_variables : string -> string list --(** Scan the pattern string for all the variables available. -- -- This can raise {!Invalid_variable} in case there are invalid -- variable names. *) -- --val replace_fn : string -> (string -> string option) -> string --(** Replaces a string expanding all the variables. -- -- The replacement function specify how a variable is replaced; -- if [None] is returned, then that variable is not replaced. -- -- This can raise {!Invalid_variable} in case there are invalid -- variable names. *) -- --val replace_list : string -> (string * string) list -> string --(** Replaces a string expanding all the variables. -- -- The replacement list specify how a variable is replaced; -- if it is not specified in the list, then that variable is not -- replaced. -- -- This can raise {!Invalid_variable} in case there are invalid -- variable names. *) -diff --git a/output/var_expander_tests.ml b/output/var_expander_tests.ml -deleted file mode 100644 -index 35b62836..00000000 ---- a/output/var_expander_tests.ml -+++ /dev/null -@@ -1,113 +0,0 @@ --(* virt-v2v -- * Copyright (C) 2019 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. -- *) -- --open Printf --open OUnit -- --open Std_utils -- --let assert_equal_string = assert_equal ~printer:identity --let assert_equal_stringlist = assert_equal ~printer:(fun x -> "(" ^ (String.escaped (String.concat "," x)) ^ ")") -- --let replace_none_fn _ = None --let replace_empty_fn _ = Some "" -- --let test_no_replacement () = -- assert_equal_string "" (Var_expander.replace_fn "" replace_none_fn); -- assert_equal_string "x" (Var_expander.replace_fn "x" replace_none_fn); -- assert_equal_string "%{}" (Var_expander.replace_fn "%{}" replace_none_fn); -- assert_equal_string "%{EMPTY}" (Var_expander.replace_fn "%{EMPTY}" replace_none_fn); -- assert_equal_string "%{EMPTY} %{no}" (Var_expander.replace_fn "%{EMPTY} %{no}" replace_none_fn); -- assert_equal_string "a %{EMPTY} b" (Var_expander.replace_fn "a %{EMPTY} b" replace_none_fn); -- () -- --let test_replacements () = -- assert_equal_string "" (Var_expander.replace_fn "%{EMPTY}" replace_empty_fn); -- assert_equal_string "x " (Var_expander.replace_fn "x %{EMPTY}" replace_empty_fn); -- assert_equal_string "xy" (Var_expander.replace_fn "x%{EMPTY}y" replace_empty_fn); -- assert_equal_string "x<->y" (Var_expander.replace_fn "x%{FOO}y" (function | "FOO" -> Some "<->" | _ -> None)); -- assert_equal_string "a x b" (Var_expander.replace_fn "a %{FOO} b" (function | "FOO" -> Some "x" | _ -> None)); -- assert_equal_string "%{FOO} x" (Var_expander.replace_fn "%{FOO} %{BAR}" (function | "BAR" -> Some "x" | _ -> None)); -- assert_equal_string "%{FOO}" (Var_expander.replace_fn "%{BAR}" (function | "BAR" -> Some "%{FOO}" | _ -> None)); -- assert_equal_string "%{FOO} x" (Var_expander.replace_fn "%{BAR} %{FOO}" (function | "BAR" -> Some "%{FOO}" | "FOO" -> Some "x" | _ -> None)); -- begin -- let str = "%{INDEX}, %{INDEX}, %{INDEX}" in -- let index = ref 0 in -- let fn = function -- | "INDEX" -> -- incr index; -- Some (string_of_int !index) -- | _ -> None -- in -- assert_equal_string "1, 2, 3" (Var_expander.replace_fn str fn) -- end; -- () -- --let test_escape () = -- assert_equal_string "%%{FOO}" (Var_expander.replace_fn "%%{FOO}" replace_empty_fn); -- assert_equal_string "x %%{FOO} x" (Var_expander.replace_fn "%{FOO} %%{FOO} %{FOO}" (function | "FOO" -> Some "x" | _ -> None)); -- () -- --let test_list () = -- assert_equal_string "x %{NONE}" (Var_expander.replace_list "%{FOO} %{NONE}" [("FOO", "x")]); -- () -- --let test_scan_variables () = -- let assert_invalid_variable var = -- let str = "%{" ^ var ^ "}" in -- assert_raises (Var_expander.Invalid_variable var) -- (fun () -> Var_expander.scan_variables str) -- in -- assert_equal_stringlist [] (Var_expander.scan_variables ""); -- assert_equal_stringlist [] (Var_expander.scan_variables "foo"); -- assert_equal_stringlist ["FOO"] (Var_expander.scan_variables "%{FOO}"); -- assert_equal_stringlist ["FOO"; "BAR"] (Var_expander.scan_variables "%{FOO} %{BAR}"); -- assert_equal_stringlist ["FOO"; "BAR"] (Var_expander.scan_variables "%{FOO} %{BAR} %{FOO}"); -- assert_equal_stringlist ["FOO"; "BAR"] (Var_expander.scan_variables "%{FOO} %%{ESCAPED} %{BAR}"); -- assert_invalid_variable "FOO/BAR"; -- () -- --let test_errors () = -- let assert_invalid_variable var = -- let str = "%{" ^ var ^ "}" in -- assert_raises (Var_expander.Invalid_variable var) -- (fun () -> Var_expander.replace_fn str replace_none_fn) -- in -- assert_invalid_variable "FOO/BAR"; -- assert_invalid_variable "FOO:BAR"; -- assert_invalid_variable "FOO(BAR"; -- assert_invalid_variable "FOO)BAR"; -- assert_invalid_variable "FOO@BAR"; -- () -- --(* Suites declaration. *) --let suite = -- TestList ([ -- "basic" >::: [ -- "no_replacement" >:: test_no_replacement; -- "replacements" >:: test_replacements; -- "escape" >:: test_escape; -- "list" >:: test_list; -- "scan_variables" >:: test_scan_variables; -- "errors" >:: test_errors; -- ]; -- ]) -- --let () = -- ignore (run_test_tt_main suite); -- Printf.fprintf stderr "\n" -diff --git a/tests/Makefile.am b/tests/Makefile.am -index db32e42b..e787a86c 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -81,7 +81,6 @@ TESTS = \ - test-v2v-machine-readable.sh \ - test-v2v-networks-and-bridges.sh \ - test-v2v-o-glance.sh \ -- test-v2v-o-json.sh \ - test-v2v-o-libvirt.sh \ - test-v2v-o-null.sh \ - test-v2v-o-openstack.sh \ -@@ -241,7 +240,6 @@ EXTRA_DIST += \ - test-v2v-networks-and-bridges.sh \ - test-v2v-networks-and-bridges-expected.xml \ - test-v2v-o-glance.sh \ -- test-v2v-o-json.sh \ - test-v2v-o-libvirt.sh \ - test-v2v-o-null.sh \ - test-v2v-o-openstack.sh \ -diff --git a/tests/test-v2v-o-json.sh b/tests/test-v2v-o-json.sh -deleted file mode 100755 -index 15e7ad5a..00000000 ---- a/tests/test-v2v-o-json.sh -+++ /dev/null -@@ -1,68 +0,0 @@ --#!/bin/bash - --# libguestfs virt-v2v test script --# Copyright (C) 2019 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 -o json. -- --set -e --set -x -- --source ./functions.sh --set -e --set -x -- --skip_if_skipped --requires test -f ../test-data/phony-guests/windows.img --requires jq --version -- --libvirt_uri="test://$abs_top_builddir/test-data/phony-guests/guests.xml" -- --export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" -- --guestname=windows -- --d=test-v2v-o-json.d --rm -rf $d --cleanup_fn rm -r $d --mkdir $d -- --json=$d/$guestname.json --disk=$d/$guestname-sda -- --$VG virt-v2v --debug-gc \ -- -i libvirt -ic "$libvirt_uri" windows \ -- -o json -os $d -on $guestname -- --# Test the disk was created. --test -f $disk -- --# Test the JSON. --test x$(jq -r '.name' $json) = xwindows --test x$(jq -r '.inspect.type' $json) = xwindows --test x$(jq -r '.inspect.distro' $json) = xwindows --test $(jq -r '.disks | length' $json) -eq 1 --test $(jq -r '.disks[0].file' $json) = $(realpath $disk) --test $(jq -r '.nics | length' $json) -eq 1 --test $(jq -r '.removables | length' $json) -eq 0 -- --# libguestfs 1.40 didn't have osinfo inspection data, but we want this --# test to work with 1.40, so ignore if jq returns this field as --# "null". --osinfo=$(jq -r '.inspect.osinfo' $json) --if [ "x$osinfo" != "xnull" ]; then -- test x$osinfo = xwin7 --fi -diff --git a/v2v/v2v.ml b/v2v/v2v.ml -index e00f9814..994982ac 100644 ---- a/v2v/v2v.ml -+++ b/v2v/v2v.ml -@@ -194,7 +194,6 @@ let rec main () = - match mode with - | "libvirt" -> output_mode := `Libvirt - | "disk" | "local" -> output_mode := `Disk -- | "json" -> output_mode := `JSON - | "null" -> output_mode := `Null - | "openstack" | "osp" | "rhosp" -> output_mode := `Openstack - | "ovirt" | "rhv" | "rhev" -> output_mode := `RHV -@@ -241,7 +240,7 @@ let rec main () = - s_"Map network ‘in’ to ‘out’"; - [ L"no-trim" ], Getopt.String ("-", no_trim_warning), - s_"Ignored for backwards compatibility"; -- [ S 'o' ], Getopt.String ("json|libvirt|local|null|openstack|qemu|rhv|rhv-upload|vdsm", set_output_mode), -+ [ S 'o' ], Getopt.String ("libvirt|local|null|openstack|qemu|rhv|rhv-upload|vdsm", set_output_mode), - s_"Set output mode (default: libvirt)"; - [ M"oa" ], Getopt.String ("sparse|preallocated", set_output_alloc), - s_"Set output allocation mode"; -@@ -376,7 +375,6 @@ read the man page virt-v2v(1). - pr "input:libvirtxml\n"; - pr "input:ova\n"; - pr "input:vmx\n"; -- pr "output:json\n"; - pr "output:libvirt\n"; - pr "output:local\n"; - pr "output:null\n"; -@@ -472,8 +470,7 @@ read the man page virt-v2v(1). - | `Openstack -> (module Output_openstack.Openstack) - | `RHV_Upload -> (module Output_rhv_upload.RHVUpload) - | `RHV -> (module Output_rhv.RHV) -- | `VDSM -> (module Output_vdsm.VDSM) -- | `JSON -> (module Output_json.Json) in -+ | `VDSM -> (module Output_vdsm.VDSM) in - - let output_options = { - Output.output_alloc = output_alloc; diff --git a/0011-output-Remove-unused-dummy.c.patch b/0011-output-Remove-unused-dummy.c.patch deleted file mode 100644 index 7c00d1a..0000000 --- a/0011-output-Remove-unused-dummy.c.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 42da4736c2078801c0a5ebbe3825086f9b8d25ea Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 12 Apr 2022 11:53:45 +0100 -Subject: [PATCH] output: Remove unused dummy.c -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This was removed when I removed -o json support, but I did not delete -the file from git. “make maintainer-check-extra-dist” complained -about this. - -Fixes: commit 4e6b389b4e27c8d13e57fcaf777d96ad7e08650b -(cherry picked from commit 0a1286df1725560e2789134d12022fc52572f9b0) ---- - output/dummy.c | 2 -- - 1 file changed, 2 deletions(-) - delete mode 100644 output/dummy.c - -diff --git a/output/dummy.c b/output/dummy.c -deleted file mode 100644 -index ebab6198..00000000 ---- a/output/dummy.c -+++ /dev/null -@@ -1,2 +0,0 @@ --/* Dummy source, to be used for OCaml-based tools with no C sources. */ --enum { foo = 1 }; diff --git a/0012-adopt-inversion-of-SELinux-relabeling-in-virt-custom.patch b/0012-adopt-inversion-of-SELinux-relabeling-in-virt-custom.patch deleted file mode 100644 index dd89566..0000000 --- a/0012-adopt-inversion-of-SELinux-relabeling-in-virt-custom.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 7b22bc65e5df2bbe9f5ccf8ab05e67afb5a4cb8f Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Tue, 10 May 2022 12:53:07 +0200 -Subject: [PATCH] adopt inversion of SELinux relabeling in virt-customize - -Remove "--selinux-relabel" options. - -Do not add any "--no-selinux-relabel" options; rely on the internal check -for SELinux support instead ("is_selinux_guest" in -"common/mlcustomize/SELinux_relabel.ml"). - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1554735 -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2075718 -Signed-off-by: Laszlo Ersek -Message-Id: <20220510105307.15402-1-lersek@redhat.com> -Acked-by: Richard W.M. Jones -[lersek@redhat.com: incorporate common submodule update] -(cherry picked from commit 0c24fc6015ce7719acff3bcead7eb227b6de3f21) ---- - common | 2 +- - tests/test-v2v-conversion-of.sh | 7 ------- - 2 files changed, 1 insertion(+), 8 deletions(-) - -Submodule common 201632e4..af6cb55b (rewind): -diff --git a/common/mlcustomize/guest_packages.ml b/common/mlcustomize/guest_packages.ml -index 7c29a2ab..4c3c34ed 100644 ---- a/common/mlcustomize/guest_packages.ml -+++ b/common/mlcustomize/guest_packages.ml -@@ -73,9 +73,9 @@ let install_command packages package_management = - | "zypper" -> sprintf "zypper -n in -l %s" quoted_args - - | "unknown" -> -- error_unknown_package_manager "--install" -+ error_unknown_package_manager (s_"--install") - | pm -> -- error_unimplemented_package_manager "--install" pm -+ error_unimplemented_package_manager (s_"--install") pm - - let update_command package_management = - match package_management with -@@ -103,9 +103,9 @@ let update_command package_management = - | "zypper" -> "zypper -n update -l" - - | "unknown" -> -- error_unknown_package_manager "--update" -+ error_unknown_package_manager (s_"--update") - | pm -> -- error_unimplemented_package_manager "--update" pm -+ error_unimplemented_package_manager (s_"--update") pm - - let uninstall_command packages package_management = - let quoted_args = String.concat " " (List.map quote packages) in -@@ -127,6 +127,6 @@ let uninstall_command packages package_management = - | "zypper" -> sprintf "zypper -n rm %s" quoted_args - - | "unknown" -> -- error_unknown_package_manager "--uninstall" -+ error_unknown_package_manager (s_"--uninstall") - | pm -> -- error_unimplemented_package_manager "--uninstall" pm -+ error_unimplemented_package_manager (s_"--uninstall") pm -diff --git a/tests/test-v2v-conversion-of.sh b/tests/test-v2v-conversion-of.sh -index 5a974d1b..5c5cae7c 100755 ---- a/tests/test-v2v-conversion-of.sh -+++ b/tests/test-v2v-conversion-of.sh -@@ -53,13 +53,6 @@ fi - # Some guests need special virt-builder parameters. - # See virt-builder --notes "$guestname" - declare -a extra --case "$guestname" in -- fedora*|rhel*|centos*) -- extra[${#extra[*]}]='--selinux-relabel' -- ;; -- *) -- ;; --esac - - # Don't try to update Windows versions. - case "$guestname" in diff --git a/0013-output-create_libvirt_xml-wire-up-the-QEMU-guest-age.patch b/0013-output-create_libvirt_xml-wire-up-the-QEMU-guest-age.patch deleted file mode 100644 index 9fa3822..0000000 --- a/0013-output-create_libvirt_xml-wire-up-the-QEMU-guest-age.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 0699afed37343d73c6803cabec466e1c3ca229b0 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 13 Jun 2022 19:01:32 +0200 -Subject: [PATCH] output/create_libvirt_xml: wire up the QEMU guest agent - -The intent (even before RHBZ#2028764) has been to install the QEMU guest -agent in the converted domain unconditionally. Therefore, in order for the -GA to be actually accessible from the host side, augment the libvirt -output module with a "guest agent connection" also unconditionally. - -For starters, the domain needs a virtio-serial device. Then there must be -a port on the device that (in the guest) the GA identifies by name, and -that (on the host) is exposed as a listening socket (usually in the unix -address family). The adress of that port (usually a pathname, i.e., for a -unix domain socket) is then passed to whatever host-side application wants -to talk to the GA. - -The minimal domain XML fragment for that ("minimal" for our purposes) is - - - - - - -The "controller" element is needed because "controller/@model" is where we -regulate "virtio" vs. "virtio-transitional". - -Everything else is filled in by libvirt. Notably, libvirt (a) creates and -binds the unix domain socket itself (usually -"/var/lib/libvirt/qemu/channel/target/DOMAIN/org.qemu.guest_agent.0"), (b) -passes the file descriptor to QEMU, and (c) figures out the socket -pathname for commands such as - - virsh domfsinfo DOMAIN - virsh domhostname DOMAIN --source agent - virsh domifaddr DOMAIN --source agent - virsh guestinfo DOMAIN - -For QEMU, the corresponding options would be - - -chardev socket,id=agent,server=on,wait=off,path=/tmp/DOMAIN-agent \ - -device virtio-serial-pci,id=vioserial \ - -device virtserialport,bus=vioserial.0,nr=1,chardev=agent,name=org.qemu.guest_agent.0 \ - -Note the "path=/tmp/DOMAIN-agent" property of "-chardev"; virt-v2v would -have to generate that (in place of the "fd=nnnn" property that libvirt -passes to QEMU). - -Omit extending the QEMU output module for now, as the QGA protocol is -based on JSON, and one needs "virsh" or "virt-manager" (or another -management application interface) anyway, for efficiently exchanging -messages with QGA. I don't know of end-user tools that directly connect to -"/tmp/DOMAIN-agent". - -Don't modify the RHV and OpenStack outputs either; both of these -management products likely configure the virtio-serial device -automatically, for the agent access. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2028764 -Signed-off-by: Laszlo Ersek -Message-Id: <20220613170135.12557-2-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -Tested-by: Richard W.M. Jones -(cherry picked from commit 48c6ea27c5a7053e418622f7450e3f9ef05c923f) ---- - output/create_libvirt_xml.ml | 11 +++++++++++ - tests/test-v2v-i-ova.xml | 4 ++++ - 2 files changed, 15 insertions(+) - -diff --git a/output/create_libvirt_xml.ml b/output/create_libvirt_xml.ml -index 68d0a909..531a4f75 100644 ---- a/output/create_libvirt_xml.ml -+++ b/output/create_libvirt_xml.ml -@@ -524,6 +524,17 @@ let create_libvirt_xml ?pool source inspect - e "console" ["type", "pty"] []; - ]; - -+ (* Given that we install the QEMU Guest Agent for both Linux and Windows -+ * guests unconditionally, create the virtio-serial device that's needed for -+ * communication between the host and the agent. -+ *) -+ List.push_back_list devices [ -+ e "controller" ["type", "virtio-serial"; "model", virtio_model] []; -+ e "channel" ["type", "unix"] [ -+ e "target" ["type", "virtio"; "name", "org.qemu.guest_agent.0"] [] -+ ] -+ ]; -+ - List.push_back_list body [ - e "devices" [] !devices; - ]; -diff --git a/tests/test-v2v-i-ova.xml b/tests/test-v2v-i-ova.xml -index 6b8cda62..da1db473 100644 ---- a/tests/test-v2v-i-ova.xml -+++ b/tests/test-v2v-i-ova.xml -@@ -49,5 +49,9 @@ - - - -+ -+ -+ -+ - - diff --git a/0014-convert_linux-extract-qemu-guest-agent-package-name.patch b/0014-convert_linux-extract-qemu-guest-agent-package-name.patch deleted file mode 100644 index a5d7e2f..0000000 --- a/0014-convert_linux-extract-qemu-guest-agent-package-name.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 82c7526e052d2aa64a6754ff0e1082937e3ee4bc Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 13 Jun 2022 19:01:34 +0200 -Subject: [PATCH] convert_linux: extract qemu-guest-agent package name - -In commit a30383e35d34 ("v2v: linux: do not install qemu-guest-agent if -already installed", 2019-09-20), the name of the package providing the -QEMU guest agent was hard-coded as "qemu-guest-agent", regardless of -distro family. Turns out this is actually correct (and may have been -intentional, only it was not specifically documented): in all OS families -currently recognized by our "family" function (`RHEL_family, `ALT_family, -`SUSE_family, `Debian_family), the *binary* package is indeed called -"qemu-guest-agent": - -- https://brewweb.engineering.redhat.com/brew/packageinfo?packageID=47646 -- http://rpmfind.net/linux/rpm2html/search.php?query=qemu-guest-agent&submit=Search+...&system=&arch= -- https://packages.altlinux.org/en/sisyphus/srpms/qemu/ -- https://packages.debian.org/search?keywords=qemu-guest-agent&searchon=names&suite=all§ion=all - -As a way of documenting this, extract the mapping to a new helper function -named "qga_pkg_of_family". - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2028764 -Signed-off-by: Laszlo Ersek -Reviewed-by: Richard W.M. Jones -Message-Id: <20220613170135.12557-4-lersek@redhat.com> -(cherry picked from commit f65e8e68fb4eb9b8d40ac0fe7bfc3122a13e5251) ---- - convert/convert_linux.ml | 33 +++++++++++++++++++++++++-------- - 1 file changed, 25 insertions(+), 8 deletions(-) - -diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml -index 79462aa1..2ddbc07a 100644 ---- a/convert/convert_linux.ml -+++ b/convert/convert_linux.ml -@@ -56,6 +56,16 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - | "debian" | "ubuntu" | "linuxmint" | "kalilinux" -> `Debian_family - | _ -> assert false in - -+ (* map the OS family name to the qemu-guest-agent package name *) -+ let qga_pkg_of_family = -+ function -+ | `RHEL_family -+ | `ALT_family -+ | `SUSE_family -+ | `Debian_family -> Some "qemu-guest-agent" -+ | _ -> None -+ in -+ - assert (inspect.i_package_format = "rpm" || inspect.i_package_format = "deb"); - - (* Fail early if i_apps is empty. Certain steps such as kernel -@@ -539,14 +549,21 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - - and install_linux_tools () = - (* It is not fatal if we fail to install the QEMU guest agent. *) -- let has_qemu_guest_agent = -- List.exists ( -- fun { G.app2_name = name } -> -- name = "qemu-guest-agent" -- ) inspect.i_apps in -- if not has_qemu_guest_agent then -- (* FIXME -- install qemu-guest-agent here *) -- () -+ match qga_pkg_of_family family with -+ | None -> warning (f_"The name of the package that provides the QEMU Guest \ -+ Agent for this guest OS is unknown. The guest agent \ -+ will not be installed. Please consider reporting a \ -+ bug according to the BUGS section of the virt-v2v(1) \ -+ manual.") -+ | Some qga_pkg -> -+ let has_qemu_guest_agent = -+ List.exists ( -+ fun { G.app2_name = name } -> -+ name = qga_pkg -+ ) inspect.i_apps in -+ if not has_qemu_guest_agent then -+ (* FIXME -- install qemu-guest-agent here *) -+ () - - and configure_kernel () = - (* Previously this function would try to install kernels, but we diff --git a/0015-convert_linux-install-the-QEMU-guest-agent-with-a-fi.patch b/0015-convert_linux-install-the-QEMU-guest-agent-with-a-fi.patch deleted file mode 100644 index 5a5c7cb..0000000 --- a/0015-convert_linux-install-the-QEMU-guest-agent-with-a-fi.patch +++ /dev/null @@ -1,119 +0,0 @@ -From e32a5ee7deb9a381ab285aba92c4de23e3c6ee2e Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 13 Jun 2022 19:01:35 +0200 -Subject: [PATCH] convert_linux: install the QEMU guest agent with a firstboot - script - -Register a firstboot script, for installing the guest agent with the -guest's own package manager -- that is, "Guest_packages.install_command". - -For installing the package, network connectivity is required. Check it -first with "nmcli" (also checking whether NetworkManager is running), then -with "systemd-networkd-wait-online" (dependent on systemd-networkd). Note -that NetworkManager and systemd-networkd are never supposed to be enabled -at the same time. - -The source domain's SELinux policy may not allow our firstboot service to -execute the package's installation scripts (if any). For that reason, -temporarily disable SELinux around package installation. - -After installation, register another script for launching the agent. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2028764 -Signed-off-by: Laszlo Ersek -Message-Id: <20220613170135.12557-5-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit e64356896377af1ac75a03d6a4c6a4208910bbf4) ---- - convert/convert_linux.ml | 78 ++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 76 insertions(+), 2 deletions(-) - -diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml -index 2ddbc07a..59d143bd 100644 ---- a/convert/convert_linux.ml -+++ b/convert/convert_linux.ml -@@ -562,8 +562,82 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - name = qga_pkg - ) inspect.i_apps in - if not has_qemu_guest_agent then -- (* FIXME -- install qemu-guest-agent here *) -- () -+ try -+ let inst_cmd = Guest_packages.install_command [qga_pkg] -+ inspect.i_package_management in -+ -+ (* Use only the portable filename character set in this. *) -+ let selinux_enforcing = "/root/virt-v2v-fb-selinux-enforcing" -+ and timeout = 30 in -+ let fbs = -+ Firstboot.add_firstboot_script g inspect.i_root -+ in -+ info (f_"The QEMU Guest Agent will be installed for this guest at \ -+ first boot."); -+ -+ (* Wait for the network to come online in the guest (best effort). -+ *) -+ fbs "wait online" -+ (sprintf "#!/bin/sh\n\ -+ if conn=$(nmcli networking connectivity); then\n\ -+ \ \ tries=0\n\ -+ \ \ while\n\ -+ \ \ \ \ test $tries -lt %d &&\n\ -+ \ \ \ \ test full != \"$conn\"\n\ -+ \ \ do\n\ -+ \ \ \ \ sleep 1\n\ -+ \ \ \ \ tries=$((tries + 1))\n\ -+ \ \ \ \ conn=$(nmcli networking connectivity)\n\ -+ \ \ done\n\ -+ elif systemctl -q is-active systemd-networkd; then\n\ -+ \ \ /usr/lib/systemd/systemd-networkd-wait-online \\\n\ -+ \ \ \ \ -q --timeout=%d\n\ -+ fi\n" timeout timeout); -+ -+ (* Disable SELinux temporarily around package installation. Refer to -+ * and -+ * . -+ *) -+ fbs "setenforce 0" -+ (sprintf "#!/bin/sh\n\ -+ rm -f %s\n\ -+ if command -v getenforce >/dev/null &&\n\ -+ \ \ test Enforcing = \"$(getenforce)\"\n\ -+ then\n\ -+ \ \ touch %s\n\ -+ \ \ setenforce 0\n\ -+ fi\n" selinux_enforcing selinux_enforcing); -+ fbs "install qga" inst_cmd; -+ fbs "setenforce restore" -+ (sprintf "#!/bin/sh\n\ -+ if test -f %s; then\n\ -+ \ \ setenforce 1\n\ -+ \ \ rm -f %s\n\ -+ fi\n" selinux_enforcing selinux_enforcing); -+ -+ (* Start the agent now and at subsequent boots. The following -+ * commands should work on both sysvinit distros / distro versions -+ * (regardless of "/etc/rc.d/" vs. "/etc/init.d/" being the scheme -+ * in use) and systemd distros (via redirection to systemctl). -+ * -+ * On distros where the chkconfig command is redirected to -+ * systemctl, the chkconfig command is likely superfluous. That's -+ * because on systemd distros, the QGA package comes with such -+ * runtime dependencies / triggers that the presence of the -+ * virtio-serial port named "org.qemu.guest_agent.0" automatically -+ * starts the agent during (second and later) boots. However, even -+ * on such distros, the chkconfig command should do no harm. -+ *) -+ fbs "start qga" -+ (sprintf "#!/bin/sh\n\ -+ service %s start\n\ -+ chkconfig %s on\n" qga_pkg qga_pkg) -+ with -+ | Guest_packages.Unknown_package_manager msg -+ | Guest_packages.Unimplemented_package_manager msg -> -+ warning (f_"The QEMU Guest Agent will not be installed. The \ -+ install command for package ‘%s’ could not be created: \ -+ %s.") qga_pkg msg - - and configure_kernel () = - (* Previously this function would try to install kernels, but we diff --git a/0016-RHV-outputs-limit-copied-disk-count-to-23.patch b/0016-RHV-outputs-limit-copied-disk-count-to-23.patch deleted file mode 100644 index 411ecd7..0000000 --- a/0016-RHV-outputs-limit-copied-disk-count-to-23.patch +++ /dev/null @@ -1,122 +0,0 @@ -From 50a74177b3577952159d87335cf40c0ad3e51b4d Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Fri, 17 Jun 2022 11:53:37 +0200 -Subject: [PATCH] RHV outputs: limit copied disk count to 23 - -We currently support virtio-blk (commonly) or IDE (unusually) for exposing -disks to the converted guest; refer to "guestcaps.gcaps_block_bus" in -"lib/create_ovf.ml". When using virtio-blk (i.e., in the common case), RHV -can deal with at most 23 disks, as it plugs each virtio-blk device in a -separate slot on the PCI(e) root bus; and the other slots are reserved for -various purposes. When a domain has too many disks, the problem only -becomes apparent once the copying finishes and an import is attempted. -Modify the RHV outputs to fail relatively early when a domain has more -than 23 disks that need to be copied. - -Notes: - -- With IDE, the theoretical limit may even be as low as 4. However, in the - "Output_module.setup" function, we don't have access to - "guestcaps.gcaps_block_bus", and in practice the IDE limitation has not - caused surprises. So for now stick with 23, assuming virtio-blk. - Modifying the "Output_module.setup" parameter list just for this seems - overkill. - -- We could move the new check to an even earlier step, namely - "Output_module.parse_options", due to the v2v directory deliberately - existing (and having been populated with input sockets) at that time. - However, even discounting the fact that "parse_options" is not a good - name for including this kind of step, "parse_options" does not have - access to the v2v directory name, and modifying the signature just for - this is (again) overkill. - -- By adding the check to "Output_module.setup", we waste *some* effort - (namely, the conversion occurs between "parse_options" and "setup"), - but: (a) the "rhv-disk-uuid" count check (against the disk count) is - already being done in the rhv-upload module's "setup" function, (b) in - practice the slowest step ought to be the copying, and placing the new - check in "setup" is early enough to prevent that. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2051564 -Signed-off-by: Laszlo Ersek -Message-Id: <20220617095337.9122-1-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit e186cc2bea99a077990f192953e1bf6c9ba70e79) ---- - output/output.ml | 5 +++++ - output/output.mli | 7 +++++++ - output/output_rhv.ml | 1 + - output/output_rhv_upload.ml | 1 + - output/output_vdsm.ml | 1 + - 5 files changed, 15 insertions(+) - -diff --git a/output/output.ml b/output/output.ml -index 10e685c4..5c6670b9 100644 ---- a/output/output.ml -+++ b/output/output.ml -@@ -64,6 +64,11 @@ let get_disks dir = - in - loop [] 0 - -+let error_if_disk_count_gt dir n = -+ let socket = sprintf "%s/in%d" dir n in -+ if Sys.file_exists socket then -+ error (f_"this output module doesn't support copying more than %d disks") n -+ - let output_to_local_file ?(changeuid = fun f -> f ()) - output_alloc output_format filename size socket = - (* Check nbdkit is installed and has the required plugin. *) -diff --git a/output/output.mli b/output/output.mli -index 533a0c51..8d3d6865 100644 ---- a/output/output.mli -+++ b/output/output.mli -@@ -76,6 +76,13 @@ val get_disks : string -> (int * int64) list - (** Examines the v2v directory and opens each input socket (in0 etc), - returning a list of input disk index and size. *) - -+val error_if_disk_count_gt : string -> int -> unit -+(** This function lets an output module enforce a maximum disk count. -+ [error_if_disk_count_gt dir n] checks whether the domain has more than [n] -+ disks that need to be copied, by examining the existence of input NBD socket -+ "in[n]" in the v2v directory [dir]. If the socket exists, [error] is -+ called. *) -+ - val output_to_local_file : ?changeuid:((unit -> unit) -> unit) -> - Types.output_allocation -> - string -> string -> int64 -> string -> -diff --git a/output/output_rhv.ml b/output/output_rhv.ml -index 119207fd..8571e07b 100644 ---- a/output/output_rhv.ml -+++ b/output/output_rhv.ml -@@ -56,6 +56,7 @@ module RHV = struct - (options.output_alloc, options.output_format, output_name, output_storage) - - let rec setup dir options source = -+ error_if_disk_count_gt dir 23; - let disks = get_disks dir in - let output_alloc, output_format, output_name, output_storage = options in - -diff --git a/output/output_rhv_upload.ml b/output/output_rhv_upload.ml -index 828996b3..f2ced4f4 100644 ---- a/output/output_rhv_upload.ml -+++ b/output/output_rhv_upload.ml -@@ -133,6 +133,7 @@ after their uploads (if you do, you must supply one for each disk): - else PCRE.matches (Lazy.force rex_uuid) uuid - - let rec setup dir options source = -+ error_if_disk_count_gt dir 23; - let disks = get_disks dir in - let output_conn, output_format, - output_password, output_name, output_storage, -diff --git a/output/output_vdsm.ml b/output/output_vdsm.ml -index a1e8c246..23d1b9cd 100644 ---- a/output/output_vdsm.ml -+++ b/output/output_vdsm.ml -@@ -119,6 +119,7 @@ For each disk you must supply one of each of these options: - compat, ovf_flavour) - - let setup dir options source = -+ error_if_disk_count_gt dir 23; - let disks = get_disks dir in - let output_alloc, output_format, - output_name, output_storage, diff --git a/0017-convert-document-networking-dependency-of-key-ID-cle.patch b/0017-convert-document-networking-dependency-of-key-ID-cle.patch deleted file mode 100644 index c244498..0000000 --- a/0017-convert-document-networking-dependency-of-key-ID-cle.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 81a201269e5451cd76348e0da6d0ef4c0fb4c0dd Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Fri, 1 Jul 2022 15:30:42 +0200 -Subject: [PATCH] convert: document networking dependency of "--key ID:clevis" - -Virt-v2v enables appliance networking already, for the sake of -"unconfigure_vmware". We now have a second use case for networking: "--key -ID:clevis". Update the comment in the code. - -(Short log for libguestfs-common commit range 35467027f657..af6cb55bc58a: - -Laszlo Ersek (12): - options: fix UUID comparison logic bug in get_keys() - mltools/tools_utils: remove unused function "key_store_to_cli" - mltools/tools_utils: allow multiple "--key" options for OCaml tools too - options: replace NULL-termination with number-of-elements in get_keys() - options: wrap each passphrase from get_keys() into a struct - options: add back-end for LUKS decryption with Clevis+Tang - options: introduce selector type "key_clevis" - options: generalize "--key" selector parsing for C-language utilities - mltools/tools_utils-c: handle internal type error with abort() - mltools/tools_utils: generalize "--key" selector parsing for OCaml utils - options, mltools/tools_utils: parse "--key ID:clevis" options - options, mltools/tools_utils: add helper for network dependency -). - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1809453 -Signed-off-by: Laszlo Ersek -Message-Id: <20220628115856.5820-1-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit 98fa5ab2685371c681282ce5de704877af27be74) ---- - convert/convert.ml | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/convert/convert.ml b/convert/convert.ml -index 5e0e6c2b..b678dc92 100644 ---- a/convert/convert.ml -+++ b/convert/convert.ml -@@ -57,7 +57,8 @@ let rec convert dir options source = - * sure this is not too large because each vCPU consumes guest RAM. - *) - g#set_smp (min 8 (Sysconf.nr_processors_online ())); -- (* The network is only used by the unconfigure_vmware () function. *) -+ (* The network is used by the unconfigure_vmware () function, and the "--key -+ * ID:clevis" command line options (if any). *) - g#set_network true; - List.iter ( - fun { s_disk_id = i } -> diff --git a/0018-qemu-nbd-Implement-output-compression-for-qcow2-file.patch b/0018-qemu-nbd-Implement-output-compression-for-qcow2-file.patch deleted file mode 100644 index 6f57e5c..0000000 --- a/0018-qemu-nbd-Implement-output-compression-for-qcow2-file.patch +++ /dev/null @@ -1,142 +0,0 @@ -From 80831868395d161af8c47edf2f54234c63581d8d Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 28 Jan 2022 09:30:29 +0000 -Subject: [PATCH] qemu-nbd: Implement output compression for qcow2 files - -Reviewed-by: Laszlo Ersek -(cherry picked from commit 71c4301909cb307def02ebcd0e89beee4138e7f2) ---- - lib/qemuNBD.ml | 11 +++++++++-- - lib/qemuNBD.mli | 5 +++++ - output/output.ml | 39 ++++++++++++++++++++++++++++++++++++--- - output/output.mli | 1 + - 4 files changed, 51 insertions(+), 5 deletions(-) - -diff --git a/lib/qemuNBD.ml b/lib/qemuNBD.ml -index ae21b17c..bbb65f41 100644 ---- a/lib/qemuNBD.ml -+++ b/lib/qemuNBD.ml -@@ -55,14 +55,16 @@ type cmd = { - disk : string; - mutable snapshot : bool; - mutable format : string option; -+ mutable imgopts : bool; - } - --let create disk = { disk; snapshot = false; format = None } -+let create disk = { disk; snapshot = false; format = None; imgopts = false } - - let set_snapshot cmd snap = cmd.snapshot <- snap - let set_format cmd format = cmd.format <- format -+let set_image_opts cmd imgopts = cmd.imgopts <- imgopts - --let run_unix socket { disk; snapshot; format } = -+let run_unix socket { disk; snapshot; format; imgopts } = - assert (disk <> ""); - - (* Create a temporary directory where we place the PID file. *) -@@ -85,6 +87,11 @@ let run_unix socket { disk; snapshot; format } = - (* -s adds a protective overlay. *) - if snapshot then List.push_back args "-s"; - -+ (* --image-opts reinterprets the filename parameter as a set of -+ * image options. -+ *) -+ if imgopts then List.push_back args "--image-opts"; -+ - if have_selinux && qemu_nbd_has_selinux_label_option () then ( - List.push_back args "--selinux-label"; - List.push_back args "system_u:object_r:svirt_socket_t:s0" -diff --git a/lib/qemuNBD.mli b/lib/qemuNBD.mli -index e10d3106..afe9d944 100644 ---- a/lib/qemuNBD.mli -+++ b/lib/qemuNBD.mli -@@ -43,6 +43,11 @@ val set_snapshot : cmd -> bool -> unit - val set_format : cmd -> string option -> unit - (** Set the format [--format] parameter. *) - -+val set_image_opts : cmd -> bool -> unit -+(** Set whether the [--image-opts] parameter is used. This changes -+ the meaning of the [filename] parameter to a set of image options. -+ Consult the qemu-nbd man page for more details. *) -+ - val run_unix : string -> cmd -> string * int - (** Start qemu-nbd command listening on a Unix domain socket, - waiting for the process to start up. -diff --git a/output/output.ml b/output/output.ml -index 5c6670b9..23c3932d 100644 ---- a/output/output.ml -+++ b/output/output.ml -@@ -69,7 +69,7 @@ let error_if_disk_count_gt dir n = - if Sys.file_exists socket then - error (f_"this output module doesn't support copying more than %d disks") n - --let output_to_local_file ?(changeuid = fun f -> f ()) -+let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false) - output_alloc output_format filename size socket = - (* Check nbdkit is installed and has the required plugin. *) - if not (Nbdkit.is_installed ()) then -@@ -78,6 +78,24 @@ let output_to_local_file ?(changeuid = fun f -> f ()) - error (f_"nbdkit-file-plugin is not installed or not working"); - let nbdkit_config = Nbdkit.config () in - -+ if compressed then ( -+ (* Only allow compressed with -of qcow2. *) -+ if output_format <> "qcow2" then -+ error (f_"‘-oo compressed’ is only allowed when the output format \ -+ is a local qcow2-format file, i.e. ‘-of qcow2’"); -+ -+ (* Check nbdcopy is new enough. This assumes that the version of -+ * libnbd is the same as the version of nbdcopy, but parsing this -+ * is easier. We can remove this check when we build-depend on -+ * libnbd >= 1.14. -+ *) -+ let version = -+ NBD.create () |> NBD.get_version |> -+ String.nsplit "." |> List.map int_of_string in -+ if version < [1; 13; 5] then -+ error (f_"-oo compressed option requires nbdcopy >= 1.13.5") -+ ); -+ - let g = open_guestfs () in - let preallocation = - match output_alloc with -@@ -103,9 +121,24 @@ let output_to_local_file ?(changeuid = fun f -> f ()) - On_exit.kill pid - - | "qcow2" -> -- let cmd = QemuNBD.create filename in -+ let cmd = -+ if compressed then ( -+ let qemu_quote str = String.replace str "," ",," in -+ let image_opts = [ "driver=compress"; -+ "file.driver=qcow2"; -+ "file.file.driver=file"; -+ "file.file.filename=" ^ qemu_quote filename ] in -+ let image_opts = String.concat "," image_opts in -+ let cmd = QemuNBD.create image_opts in -+ QemuNBD.set_image_opts cmd true; -+ cmd -+ ) -+ else (* not compressed *) ( -+ let cmd = QemuNBD.create filename in -+ QemuNBD.set_format cmd (Some "qcow2"); -+ cmd -+ ) in - QemuNBD.set_snapshot cmd false; -- QemuNBD.set_format cmd (Some "qcow2"); - let _, pid = QemuNBD.run_unix socket cmd in - On_exit.kill pid - -diff --git a/output/output.mli b/output/output.mli -index 8d3d6865..c1f0f53d 100644 ---- a/output/output.mli -+++ b/output/output.mli -@@ -84,6 +84,7 @@ val error_if_disk_count_gt : string -> int -> unit - called. *) - - val output_to_local_file : ?changeuid:((unit -> unit) -> unit) -> -+ ?compressed:bool -> - Types.output_allocation -> - string -> string -> int64 -> string -> - unit diff --git a/0019-o-disk-o-libvirt-o-qemu-Implement-of-qcow2-oo-compre.patch b/0019-o-disk-o-libvirt-o-qemu-Implement-of-qcow2-oo-compre.patch deleted file mode 100644 index 6da1880..0000000 --- a/0019-o-disk-o-libvirt-o-qemu-Implement-of-qcow2-oo-compre.patch +++ /dev/null @@ -1,272 +0,0 @@ -From ca3643d06eed2de22cb81ad2eb13ba7f75c0487e Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 28 Jan 2022 09:30:58 +0000 -Subject: [PATCH] -o disk, -o libvirt, -o qemu: Implement -of qcow2 -oo - compressed - -For various output modes, implement -oo compressed which can be used -to generate compressed qcow2 files. This option was dropped when -modularizing virt-v2v, and required changes to nbdcopy which are -finally upstream in libnbd >= 1.13.5. - -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2047660 -Fixes: commit 255722cbf39afc0b012e2ac00d16fa6ba2f8c21f -Reported-by: Xiaodai Wang -Reviewed-by: Laszlo Ersek -(cherry picked from commit 53690a0c602a4286fdb9408fdf6a01cc352697ec) ---- - TODO | 14 -------------- - output/output_disk.ml | 29 +++++++++++++++++++++-------- - output/output_libvirt.ml | 31 ++++++++++++++++++++++--------- - output/output_qemu.ml | 38 +++++++++++++++++++++----------------- - 4 files changed, 64 insertions(+), 48 deletions(-) - -diff --git a/TODO b/TODO -index f578d506..04b1dd20 100644 ---- a/TODO -+++ b/TODO -@@ -1,17 +1,3 @@ --virt-v2v -o disk|qemu -oo compressed -------------------------------------- -- --This was temporarily dropped when I modularized virt-v2v. It would --not be too difficult to add it back. The following is the qemu-nbd --command required (to be run as the output helper) which creates a --compressed qcow2 disk image: -- --$ qemu-nbd --image-opts driver=compress,file.driver=qcow2,file.file.driver=file,file.file.filename=new.qcow2 -- --Note this requires fixes in nbdcopy so it obeys the advertised block --alignment: --https://lists.gnu.org/archive/html/qemu-block/2022-01/threads.html#00729 -- - virt-v2v -o rhv-upload - ---------------------- - -diff --git a/output/output_disk.ml b/output/output_disk.ml -index bc5b4e1c..abcfcdc0 100644 ---- a/output/output_disk.ml -+++ b/output/output_disk.ml -@@ -30,7 +30,7 @@ open Create_libvirt_xml - open Output - - module Disk = struct -- type poptions = Types.output_allocation * string * string * string -+ type poptions = bool * Types.output_allocation * string * string * string - - type t = unit - -@@ -41,11 +41,21 @@ module Disk = struct - | None -> "" - - let query_output_options () = -- printf (f_"No output options can be used in this mode.\n") -+ printf (f_"Output options that can be used with -o disk: -+ -+ -oo compressed Compress the output file (used only with -of qcow2) -+") - - let parse_options options source = -- if options.output_options <> [] then -- error (f_"no -oo (output options) are allowed here"); -+ let compressed = ref false in -+ List.iter ( -+ function -+ | "compressed", "" -> compressed := true -+ | "compressed", v -> compressed := bool_of_string v -+ | k, _ -> -+ error (f_"-o disk: unknown output option ‘-oo %s’") k -+ ) options.output_options; -+ - if options.output_password <> None then - error_option_cannot_be_used_in_output_mode "local" "-op"; - -@@ -60,11 +70,13 @@ module Disk = struct - - let output_name = Option.default source.s_name options.output_name in - -- options.output_alloc, options.output_format, output_name, output_storage -+ !compressed, options.output_alloc, options.output_format, -+ output_name, output_storage - - let setup dir options source = - let disks = get_disks dir in -- let output_alloc, output_format, output_name, output_storage = options in -+ let compressed, output_alloc, output_format, output_name, output_storage = -+ options in - - List.iter ( - fun (i, size) -> -@@ -73,11 +85,12 @@ module Disk = struct - - (* Create the actual output disk. *) - let outdisk = disk_path output_storage output_name i in -- output_to_local_file output_alloc output_format outdisk size socket -+ output_to_local_file ~compressed output_alloc output_format -+ outdisk size socket - ) disks - - let finalize dir options () source inspect target_meta = -- let output_alloc, output_format, output_name, output_storage = options in -+ let _, output_alloc, output_format, output_name, output_storage = options in - - (* Convert metadata to libvirt XML. *) - (match target_meta.target_firmware with -diff --git a/output/output_libvirt.ml b/output/output_libvirt.ml -index e0d3432d..04b4c5f8 100644 ---- a/output/output_libvirt.ml -+++ b/output/output_libvirt.ml -@@ -32,7 +32,7 @@ open Create_libvirt_xml - open Output - - module Libvirt_ = struct -- type poptions = Libvirt.rw Libvirt.Connect.t Lazy.t * -+ type poptions = Libvirt.rw Libvirt.Connect.t Lazy.t * bool * - Types.output_allocation * string * string * string - - type t = string * string -@@ -44,11 +44,21 @@ module Libvirt_ = struct - | None -> "" - - let query_output_options () = -- printf (f_"No output options can be used in this mode.\n") -+ printf (f_"Output options that can be used with -o libvirt: -+ -+ -oo compressed Compress the output file (used only with -of qcow2) -+") - - let parse_options options source = -- if options.output_options <> [] then -- error (f_"no -oo (output options) are allowed here"); -+ let compressed = ref false in -+ List.iter ( -+ function -+ | "compressed", "" -> compressed := true -+ | "compressed", v -> compressed := bool_of_string v -+ | k, _ -> -+ error (f_"-o disk: unknown output option ‘-oo %s’") k -+ ) options.output_options; -+ - if options.output_password <> None then - error_option_cannot_be_used_in_output_mode "libvirt" "-op"; - -@@ -59,12 +69,13 @@ module Libvirt_ = struct - - let output_name = Option.default source.s_name options.output_name in - -- (conn, options.output_alloc, options.output_format, output_name, -- output_pool) -+ (conn, !compressed, options.output_alloc, options.output_format, -+ output_name, output_pool) - - let setup dir options source = - let disks = get_disks dir in -- let conn, output_alloc, output_format, output_name, output_pool = options in -+ let conn, compressed, output_alloc, output_format, -+ output_name, output_pool = options in - let conn = Lazy.force conn in - - (* Get the capabilities from libvirt. *) -@@ -119,13 +130,15 @@ module Libvirt_ = struct - - (* Create the actual output disk. *) - let outdisk = target_path // output_name ^ "-sd" ^ (drive_name i) in -- output_to_local_file output_alloc output_format outdisk size socket -+ output_to_local_file ~compressed output_alloc output_format -+ outdisk size socket - ) disks; - - (capabilities_xml, pool_name) - - let rec finalize dir options t source inspect target_meta = -- let conn, output_alloc, output_format, output_name, output_pool = options in -+ let conn, _, output_alloc, output_format, output_name, output_pool = -+ options in - let capabilities_xml, pool_name = t in - - (match target_meta.target_firmware with -diff --git a/output/output_qemu.ml b/output/output_qemu.ml -index 527d3c5e..e7efbb73 100644 ---- a/output/output_qemu.ml -+++ b/output/output_qemu.ml -@@ -29,7 +29,8 @@ open Utils - open Output - - module QEMU = struct -- type poptions = bool * Types.output_allocation * string * string * string -+ type poptions = bool * bool * -+ Types.output_allocation * string * string * string - - type t = unit - -@@ -42,6 +43,7 @@ module QEMU = struct - let query_output_options () = - printf (f_"Output options (-oo) which can be used with -o qemu: - -+ -oo compressed Compress the output file (used only with -of qcow2) - -oo qemu-boot Boot the guest in qemu after conversion - ") - -@@ -49,19 +51,19 @@ module QEMU = struct - if options.output_password <> None then - error_option_cannot_be_used_in_output_mode "qemu" "-op"; - -- let qemu_boot = ref false in -+ let compressed = ref false -+ and qemu_boot = ref false in - List.iter ( -- fun (k, v) -> -- match k with -- | "qemu-boot" -> -- if v = "" || v = "true" then qemu_boot := true -- else if v = "false" then qemu_boot := false -- else -- error (f_"-o qemu: use -oo qemu-boot[=true|false]") -- | k -> -- error (f_"-o qemu: unknown output option ‘-oo %s’") k -- ) options.output_options; -- let qemu_boot = !qemu_boot in -+ function -+ | "compressed", "" -> compressed := true -+ | "compressed", v -> compressed := bool_of_string v -+ | "qemu-boot", "" -> qemu_boot := true -+ | "qemu-boot", v -> qemu_boot := bool_of_string v -+ | k, _ -> -+ error (f_"-o qemu: unknown output option ‘-oo %s’") k -+ ) options.output_options; -+ let compressed = !compressed -+ and qemu_boot = !qemu_boot in - - if qemu_boot then - error (f_"-o qemu: the -oo qemu-boot option cannot be used in RHEL"); -@@ -77,12 +79,13 @@ module QEMU = struct - - let output_name = Option.default source.s_name options.output_name in - -- (qemu_boot, options.output_alloc, options.output_format, -+ (compressed, qemu_boot, options.output_alloc, options.output_format, - output_name, output_storage) - - let setup dir options source = - let disks = get_disks dir in -- let _, output_alloc, output_format, output_name, output_storage = options in -+ let compressed, _, output_alloc, output_format, -+ output_name, output_storage = options in - - List.iter ( - fun (i, size) -> -@@ -91,11 +94,12 @@ module QEMU = struct - - (* Create the actual output disk. *) - let outdisk = disk_path output_storage output_name i in -- output_to_local_file output_alloc output_format outdisk size socket -+ output_to_local_file ~compressed output_alloc output_format -+ outdisk size socket - ) disks - - let finalize dir options () source inspect target_meta = -- let qemu_boot, output_alloc, output_format, -+ let _, qemu_boot, output_alloc, output_format, - output_name, output_storage = options in - - let { guestcaps; target_buses; target_firmware } = target_meta in diff --git a/0020-tests-Add-a-simple-test-of-o-local-of-qcow2-oo-compr.patch b/0020-tests-Add-a-simple-test-of-o-local-of-qcow2-oo-compr.patch deleted file mode 100644 index 7559e6c..0000000 --- a/0020-tests-Add-a-simple-test-of-o-local-of-qcow2-oo-compr.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 672b9795e85b48f337b3da2d6fa393e7788d79a1 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 1 Jul 2022 11:18:53 +0100 -Subject: [PATCH] tests: Add a simple test of -o local -of qcow2 -oo compressed - -This only tests that it doesn't completely fail, which it did before -we fixed nbdcopy. I checked the file sizes manually and with -compression the resulting file is about half the size. - -This test is a clone of tests/test-v2v-of-option.sh. In order to -compare the sizes across the two tests, and to keep the tests fairly -similar I added an ls -l command to the original test. - -Reviewed-by: Laszlo Ersek -(cherry picked from commit 7505750972b49e1a448c519a27998bd5f20be60a) ---- - tests/Makefile.am | 2 + - tests/test-v2v-o-local-qcow2-compressed.sh | 53 ++++++++++++++++++++++ - tests/test-v2v-of-option.sh | 2 + - 3 files changed, 57 insertions(+) - create mode 100755 tests/test-v2v-o-local-qcow2-compressed.sh - -diff --git a/tests/Makefile.am b/tests/Makefile.am -index e787a86c..a26ecf7a 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -82,6 +82,7 @@ TESTS = \ - test-v2v-networks-and-bridges.sh \ - test-v2v-o-glance.sh \ - test-v2v-o-libvirt.sh \ -+ test-v2v-o-local-qcow2-compressed.sh \ - test-v2v-o-null.sh \ - test-v2v-o-openstack.sh \ - test-v2v-o-qemu.sh \ -@@ -241,6 +242,7 @@ EXTRA_DIST += \ - test-v2v-networks-and-bridges-expected.xml \ - test-v2v-o-glance.sh \ - test-v2v-o-libvirt.sh \ -+ test-v2v-o-local-qcow2-compressed.sh \ - test-v2v-o-null.sh \ - test-v2v-o-openstack.sh \ - test-v2v-o-qemu.sh \ -diff --git a/tests/test-v2v-o-local-qcow2-compressed.sh b/tests/test-v2v-o-local-qcow2-compressed.sh -new file mode 100755 -index 00000000..32c9ebbe ---- /dev/null -+++ b/tests/test-v2v-o-local-qcow2-compressed.sh -@@ -0,0 +1,53 @@ -+#!/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 -o local -of qcow2 -oo compressed. -+ -+set -e -+ -+source ./functions.sh -+set -e -+set -x -+ -+skip_if_skipped -+requires test -f ../test-data/phony-guests/windows.img -+ -+# This requires fixed nbdcopy >= 1.13.5. -+requires nbdcopy --version -+nbdcopy --version | { -+ IFS=' .' read name major minor release -+ requires test \( "$major" -gt 1 \) -o \ -+ \( "$major" -eq 1 -a "$minor" -gt 13 \) -o \ -+ \( "$major" -eq 1 -a "$minor" -eq 13 -a "$release" -ge 5 \) -+} -+ -+export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" -+ -+d=test-v2v-o-local-qcow2-compressed.d -+rm -rf $d -+cleanup_fn rm -rf $d -+mkdir $d -+ -+$VG virt-v2v --debug-gc \ -+ -i disk ../test-data/phony-guests/windows.img \ -+ -o local -of qcow2 -oo compressed -os $d -+ -+# Test the libvirt XML metadata and a disk was created. -+ls -l $d -+test -f $d/windows.xml -+test -f $d/windows-sda -diff --git a/tests/test-v2v-of-option.sh b/tests/test-v2v-of-option.sh -index bdfd3418..6c5f5938 100755 ---- a/tests/test-v2v-of-option.sh -+++ b/tests/test-v2v-of-option.sh -@@ -42,6 +42,8 @@ $VG virt-v2v --debug-gc \ - -i libvirt -ic "$libvirt_uri" windows \ - -o local -os $d -of qcow2 - -+ls -l $d -+ - # Test the disk is qcow2 format. - if [ "$(guestfish disk-format $d/windows-sda)" != qcow2 ]; then - echo "$0: test failed: output is not qcow2" diff --git a/0021-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch b/0021-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch deleted file mode 100644 index afc8660..0000000 --- a/0021-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch +++ /dev/null @@ -1,47 +0,0 @@ -From b61a03ad272bb08ff5ca757ade6a23bfef34fdc9 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 5 Jul 2022 11:56:54 +0100 -Subject: [PATCH] RHEL 9: -oo compressed: Remove nbdcopy version check and test - -In RHEL 9 nbdcopy 1.12.4-2 will be sufficient (vs nbdcopy 1.13.5 -upstream). We will enforce this through RPM dependencies and test it -separately. Thus remove the version check and test. ---- - output/output.ml | 11 ----------- - tests/Makefile.am | 1 - - 2 files changed, 12 deletions(-) - -diff --git a/output/output.ml b/output/output.ml -index 23c3932d..496c32b6 100644 ---- a/output/output.ml -+++ b/output/output.ml -@@ -83,17 +83,6 @@ let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false) - if output_format <> "qcow2" then - error (f_"‘-oo compressed’ is only allowed when the output format \ - is a local qcow2-format file, i.e. ‘-of qcow2’"); -- -- (* Check nbdcopy is new enough. This assumes that the version of -- * libnbd is the same as the version of nbdcopy, but parsing this -- * is easier. We can remove this check when we build-depend on -- * libnbd >= 1.14. -- *) -- let version = -- NBD.create () |> NBD.get_version |> -- String.nsplit "." |> List.map int_of_string in -- if version < [1; 13; 5] then -- error (f_"-oo compressed option requires nbdcopy >= 1.13.5") - ); - - let g = open_guestfs () in -diff --git a/tests/Makefile.am b/tests/Makefile.am -index a26ecf7a..47e5f10d 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -82,7 +82,6 @@ TESTS = \ - test-v2v-networks-and-bridges.sh \ - test-v2v-o-glance.sh \ - test-v2v-o-libvirt.sh \ -- test-v2v-o-local-qcow2-compressed.sh \ - test-v2v-o-null.sh \ - test-v2v-o-openstack.sh \ - test-v2v-o-qemu.sh \ diff --git a/0022-RHEL-9-tests-Remove-btrfs-test.patch b/0022-RHEL-9-tests-Remove-btrfs-test.patch deleted file mode 100644 index cf4fbc8..0000000 --- a/0022-RHEL-9-tests-Remove-btrfs-test.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 8a8ff53b7d438e82085d52199d21c980a54c733d Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 5 Jul 2022 11:58:09 +0100 -Subject: [PATCH] RHEL 9: tests: Remove btrfs test - -RHEL does not have btrfs so this test always fails. ---- - tests/Makefile.am | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/tests/Makefile.am b/tests/Makefile.am -index 47e5f10d..9560cc77 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -96,7 +96,6 @@ TESTS = \ - test-v2v-sound.sh \ - 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 \ diff --git a/0023-convert-convert_linux-complete-the-remapping-of-NVMe.patch b/0023-convert-convert_linux-complete-the-remapping-of-NVMe.patch deleted file mode 100644 index 08a653f..0000000 --- a/0023-convert-convert_linux-complete-the-remapping-of-NVMe.patch +++ /dev/null @@ -1,80 +0,0 @@ -From ba2963bc57c8c8a3d6f7cc2fd274c9ebd4ddb7d8 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Wed, 6 Jul 2022 12:32:15 +0200 -Subject: [PATCH] convert/convert_linux: complete the remapping of NVMe devices - -In commit 75872bf282d7 ("input: -i vmx: Add support for NVMe devices", -2022-04-08), we missed that pathnames such as - - /dev/nvme0n1[p1] - -would not match our "rex_device_cciss" and "rex_device" regular -expressions. - -As a consequence, we don't remap such pathnames now in the boot config -files with Augeas. - -Add a new regex and associated mapping logic for this kind of pathname. - -Notes: - -(1) "rex_device_cciss" could be extended internally with an alternative -pattern: - - ^/dev/(cciss/c\\d+d\\d+|nvme\\d+n1)(?:p(\\d+))?$ - ^^^^^^^^^^^ - -but Rich suggested we should add a separate, complete regexp for -maintainability. - -(2) Even with a separate regexp, we could reuse the existent CCISS pattern -handler: - - if PCRE.matches rex_device_cciss value || - PCRE.matches rex_device_nvme value then ( - let device = PCRE.sub 1 - and part = try PCRE.sub 2 with Not_found -> "" in - "/dev/" ^ replace device ^ part - ) - -Namely, although "PCRE.matches" creates/updates global state, and -"PCRE.sub" reads that state, the "||" operator in OCaml has short-circuit -behavior, and both regexps have the same structure. - -But, using the same maintainability argument, let's keep the handler logic -for NVMe detached. - -Fixes: 75872bf282d7f2322110caca70963717b43806b1 -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2101665 -Signed-off-by: Laszlo Ersek -Message-Id: <20220706103215.5607-1-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit 4368b94ee1724c16aa35c0ee42ce4c51ce037b5a) ---- - convert/convert_linux.ml | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml -index 59d143bd..a66ff1e4 100644 ---- a/convert/convert_linux.ml -+++ b/convert/convert_linux.ml -@@ -1199,6 +1199,7 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - (* Map device names for each entry. *) - let rex_resume = PCRE.compile "^resume=(/dev/[-a-z\\d/_]+)(.*)$" - and rex_device_cciss = PCRE.compile "^/dev/(cciss/c\\d+d\\d+)(?:p(\\d+))?$" -+ and rex_device_nvme = PCRE.compile "^/dev/(nvme\\d+n1)(?:p(\\d+))?$" - and rex_device = PCRE.compile "^/dev/([a-z]+)(\\d*)?$" in - - let rec replace_if_device path value = -@@ -1221,6 +1222,11 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ = - and part = try PCRE.sub 2 with Not_found -> "" in - "/dev/" ^ replace device ^ part - ) -+ else if PCRE.matches rex_device_nvme value then ( -+ let device = PCRE.sub 1 -+ and part = try PCRE.sub 2 with Not_found -> "" in -+ "/dev/" ^ replace device ^ part -+ ) - else if PCRE.matches rex_device value then ( - let device = PCRE.sub 1 - and part = try PCRE.sub 2 with Not_found -> "" in diff --git a/0024-input-xen-sync-ip-limitations-language-from-input-vm.patch b/0024-input-xen-sync-ip-limitations-language-from-input-vm.patch deleted file mode 100644 index 9637e0b..0000000 --- a/0024-input-xen-sync-ip-limitations-language-from-input-vm.patch +++ /dev/null @@ -1,49 +0,0 @@ -From c34fe9a52abdde05cb31c5bd2c99237652e1b0dc Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 11 Jul 2022 09:01:56 +0200 -Subject: [PATCH] input-xen: sync "-ip" limitations language from input-vmware - manual - -My analysis in -was partially wrong; I had missed that for the xen+ssh transport, the -client-side libvirt library launches a naked "ssh" utility, underneath -"Libvirt.Connect.connect_auth": - - setup [input/input_xen_ssh.ml] - Libvirt.Connect.connect_auth - no effect of "-ip" - Nbdkit_ssh.create_ssh [input/nbdkit_ssh.ml] - starts nbdkit with the ssh - plugin honoring "-ip" - -Which requires a password just the same, and ignores "-ip" just the same. - -Recommend the ssh agent in the docs. - -Fixes: 46298c6514710013c59828b4933f0b3b1a354566 -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1854275 -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2062360 -Signed-off-by: Laszlo Ersek -Message-Id: <20220711070157.5399-2-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit ae067a9ce0eb5631940a8cc5dcc5ee056903276b) ---- - docs/virt-v2v-input-xen.pod | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod -index ad5772de..80ad94f7 100644 ---- a/docs/virt-v2v-input-xen.pod -+++ b/docs/virt-v2v-input-xen.pod -@@ -32,6 +32,11 @@ server to the Xen host. For example: - $ ssh root@xen.example.com - [ logs straight into the shell, no password is requested ] - -+Note that support for non-interactive authentication via the I<-ip> -+option is incomplete. Some operations remain that still require the -+user to enter the password manually. Therefore ssh-agent is recommended -+over the I<-ip> option. See L. -+ - With some modern ssh implementations, legacy crypto policies required - to interoperate with RHEL 5 sshd are disabled. To enable them you may - need to run this command on the conversion server (ie. ssh client), diff --git a/0025-input-xen-replace-enable-LEGACY-crypto-advice-with-t.patch b/0025-input-xen-replace-enable-LEGACY-crypto-advice-with-t.patch deleted file mode 100644 index 351b1f1..0000000 --- a/0025-input-xen-replace-enable-LEGACY-crypto-advice-with-t.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 3f7f730ac9cbf38267839ffcebd6b6fd721123c5 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 11 Jul 2022 09:01:57 +0200 -Subject: [PATCH] input-xen: replace "enable LEGACY crypto" advice with - targeted ssh options - -- "KexAlgorithms": the Fedora 35 ssh binary, using the DEFAULT - crypto-policy, cannot log in to RHEL5 sshd without relaxing - "KexAlgorithms". The server offers three algorithms: - "diffie-hellman-group-exchange-sha1", "diffie-hellman-group14-sha1", - "diffie-hellman-group1-sha1"; and according to RFC 9142, - "diffie-hellman-group14-sha1" is the least deprecated from those. (The - RFC marks it as MAY be implemented, and marks the other two as SHOULD - NOT be implemented.) Recommend "diffie-hellman-group14-sha1". - -- "MACs": the Fedora 35 ssh binary, using the FUTURE crypto-policy, cannot - log in to RHEL5 sshd without relaxing "MACs". The server offers - "hmac-md5", "hmac-sha1", "hmac-ripemd160", "hmac-ripemd160@openssh.com", - "hmac-sha1-96", "hmac-md5-96". After eliminating the MD5-based algos - (MD5 is considered completely broken), and the one based on truncated - SHA1, we're left with "hmac-sha1", "hmac-ripemd160", and - "hmac-ripemd160@openssh.com". RIPEMD-160 is generally trusted, but it is - compiled out of the Fedora 35 "ssh" client binary. Therefore only - "hmac-sha1" remains. - -- "HostKeyAlgorithms", "PubkeyAcceptedAlgorithms": these options control - the usage of public key algorithms, for authenticating the server to the - client, and vice versa, respectively. RHEL5 sshd only supports "ssh-rsa" - and "ssh-dss", and from those, "ssh-rsa" is more commonly used (for - example, "ssh-keygen" defaults to creating "ssh-rsa" keys). Recommend - "ssh-rsa". - -- "PubkeyAcceptedKeyTypes": this is the old ("legacy") name for - "PubkeyAcceptedAlgorithms". As of this writing, the latest upstream - release of libssh (also packaged in Fedora 35 -- libssh-0.9.6-1.fc35) - does not recognize the new "PubkeyAcceptedAlgorithms" option name, only - the original "PubkeyAcceptedKeyTypes". openssh-8.7p1-3.fc35 recognizes - both option variants. Include "PubkeyAcceptedKeyTypes" in the - recommendation along with "PubkeyAcceptedAlgorithms", for backward and - forward compatbility. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2062360 -Signed-off-by: Laszlo Ersek -Message-Id: <20220711070157.5399-3-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit af4a0454cdd21bb5e86f2dbfaa153e83afca3988) ---- - docs/virt-v2v-input-xen.pod | 20 +++++++++++++++----- - 1 file changed, 15 insertions(+), 5 deletions(-) - -diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod -index 80ad94f7..1775fc31 100644 ---- a/docs/virt-v2v-input-xen.pod -+++ b/docs/virt-v2v-input-xen.pod -@@ -37,12 +37,22 @@ option is incomplete. Some operations remain that still require the - user to enter the password manually. Therefore ssh-agent is recommended - over the I<-ip> option. See L. - --With some modern ssh implementations, legacy crypto policies required --to interoperate with RHEL 5 sshd are disabled. To enable them you may --need to run this command on the conversion server (ie. ssh client), --but read L first: -+With some modern ssh implementations, legacy crypto algorithms required -+to interoperate with RHEL 5 sshd are disabled. To enable them, you may -+need to add the following C stanza to your F<~/.ssh/config>: - -- # update-crypto-policies --set LEGACY -+ Host xen.example.com -+ KexAlgorithms +diffie-hellman-group14-sha1 -+ MACs +hmac-sha1 -+ HostKeyAlgorithms +ssh-rsa -+ PubkeyAcceptedKeyTypes +ssh-rsa -+ PubkeyAcceptedAlgorithms +ssh-rsa -+ -+(C and C have -+identical meaning; the former is the old option name, the latter is the -+new one. Virt-v2v uses both C and C when converting a guest -+from Xen, and on some operating systems, C and C may not -+both accept the same option variant.) - - =head2 Test libvirt connection to remote Xen host - diff --git a/0026-common-Adapt-to-renamed-function-On_exit.rmdir-On_ex.patch b/0026-common-Adapt-to-renamed-function-On_exit.rmdir-On_ex.patch deleted file mode 100644 index 806e3da..0000000 --- a/0026-common-Adapt-to-renamed-function-On_exit.rmdir-On_ex.patch +++ /dev/null @@ -1,172 +0,0 @@ -From ea881513e9c15b0a816d3ba4afe471ff2f591a03 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 14 Jul 2022 12:44:27 +0100 -Subject: [PATCH] common: Adapt to renamed function On_exit.rmdir -> - On_exit.rm_rf - -This function was renamed to make it clearer what it does (and that -it's potentially dangerous). The functionality is unchanged. - -Reviewed-by: Laszlo Ersek -(cherry picked from commit 2eb6441264deb0411d36dabaf8fb2da9f07c8439) ---- - common | 2 +- - input/OVA.ml | 2 +- - input/parse_domain_from_vmx.ml | 2 +- - lib/nbdkit.ml | 2 +- - lib/qemuNBD.ml | 2 +- - lib/utils.ml | 2 +- - output/python_script.ml | 2 +- - 7 files changed, 7 insertions(+), 7 deletions(-) - -Submodule common af6cb55b..fd964c1b: -diff --git a/common/mlcustomize/guest_packages.ml b/common/mlcustomize/guest_packages.ml -index 4c3c34ed..7c29a2ab 100644 ---- a/common/mlcustomize/guest_packages.ml -+++ b/common/mlcustomize/guest_packages.ml -@@ -73,9 +73,9 @@ let install_command packages package_management = - | "zypper" -> sprintf "zypper -n in -l %s" quoted_args - - | "unknown" -> -- error_unknown_package_manager (s_"--install") -+ error_unknown_package_manager "--install" - | pm -> -- error_unimplemented_package_manager (s_"--install") pm -+ error_unimplemented_package_manager "--install" pm - - let update_command package_management = - match package_management with -@@ -103,9 +103,9 @@ let update_command package_management = - | "zypper" -> "zypper -n update -l" - - | "unknown" -> -- error_unknown_package_manager (s_"--update") -+ error_unknown_package_manager "--update" - | pm -> -- error_unimplemented_package_manager (s_"--update") pm -+ error_unimplemented_package_manager "--update" pm - - let uninstall_command packages package_management = - let quoted_args = String.concat " " (List.map quote packages) in -@@ -127,6 +127,6 @@ let uninstall_command packages package_management = - | "zypper" -> sprintf "zypper -n rm %s" quoted_args - - | "unknown" -> -- error_unknown_package_manager (s_"--uninstall") -+ error_unknown_package_manager "--uninstall" - | pm -> -- error_unimplemented_package_manager (s_"--uninstall") pm -+ error_unimplemented_package_manager "--uninstall" pm -diff --git a/common/mltools/on_exit.ml b/common/mltools/on_exit.ml -index 53ccb68a..cae12e73 100644 ---- a/common/mltools/on_exit.ml -+++ b/common/mltools/on_exit.ml -@@ -52,7 +52,7 @@ let do_actions () = - List.iter (do_action (fun file -> Unix.unlink file)) !files; - List.iter (do_action ( - fun dir -> -- let cmd = sprintf "rm -rf %s" (Filename.quote dir) in -+ let cmd = sprintf "rm -rf -- %s" (Filename.quote dir) in - ignore (Tools_utils.shell_command cmd) - ) - ) !rmdirs; -@@ -102,7 +102,7 @@ let unlink filename = - register (); - List.push_front filename files - --let rmdir dir = -+let rm_rf dir = - register (); - List.push_front dir rmdirs - -diff --git a/common/mltools/on_exit.mli b/common/mltools/on_exit.mli -index a02e3db3..9bcf104f 100644 ---- a/common/mltools/on_exit.mli -+++ b/common/mltools/on_exit.mli -@@ -47,7 +47,7 @@ val f : (unit -> unit) -> unit - val unlink : string -> unit - (** Unlink a single temporary file on exit. *) - --val rmdir : string -> unit -+val rm_rf : string -> unit - (** Recursively remove a temporary directory on exit (using [rm -rf]). *) - - val kill : ?signal:int -> int -> unit -diff --git a/input/OVA.ml b/input/OVA.ml -index 9e9c3712..09ceee98 100644 ---- a/input/OVA.ml -+++ b/input/OVA.ml -@@ -78,7 +78,7 @@ let rec parse_ova ova = - else ( - let tmpdir = - let t = Mkdtemp.temp_dir ~base_dir:large_tmpdir "ova." in -- On_exit.rmdir t; -+ On_exit.rm_rf t; - t in - - match detect_file_type ova with -diff --git a/input/parse_domain_from_vmx.ml b/input/parse_domain_from_vmx.ml -index 947ca414..7aca2c24 100644 ---- a/input/parse_domain_from_vmx.ml -+++ b/input/parse_domain_from_vmx.ml -@@ -375,7 +375,7 @@ and find_nics vmx = - let parse_domain_from_vmx vmx_source = - let tmpdir = - let t = Mkdtemp.temp_dir "vmx." in -- On_exit.rmdir t; -+ On_exit.rm_rf t; - t in - - (* If the transport is SSH, fetch the file from remote, else -diff --git a/lib/nbdkit.ml b/lib/nbdkit.ml -index 07896684..1137b6bb 100644 ---- a/lib/nbdkit.ml -+++ b/lib/nbdkit.ml -@@ -105,7 +105,7 @@ let add_filter_if_available cmd filter = - let run_unix socket cmd = - (* Create a temporary directory where we place the PID file. *) - let piddir = Mkdtemp.temp_dir "v2vnbdkit." in -- On_exit.rmdir piddir; -+ On_exit.rm_rf piddir; - - let id = unique () in - let pidfile = piddir // sprintf "nbdkit%d.pid" id in -diff --git a/lib/qemuNBD.ml b/lib/qemuNBD.ml -index bbb65f41..c3dd1666 100644 ---- a/lib/qemuNBD.ml -+++ b/lib/qemuNBD.ml -@@ -69,7 +69,7 @@ let run_unix socket { disk; snapshot; format; imgopts } = - - (* Create a temporary directory where we place the PID file. *) - let piddir = Mkdtemp.temp_dir "v2vqemunbd." in -- On_exit.rmdir piddir; -+ On_exit.rm_rf piddir; - - let id = unique () in - let pidfile = piddir // sprintf "qemunbd%d.pid" id in -diff --git a/lib/utils.ml b/lib/utils.ml -index 7116a4f9..84b9a93f 100644 ---- a/lib/utils.ml -+++ b/lib/utils.ml -@@ -204,7 +204,7 @@ let error_if_no_ssh_agent () = - let create_v2v_directory () = - let d = Mkdtemp.temp_dir "v2v." in - chown_for_libvirt_rhbz_1045069 d; -- On_exit.rmdir d; -+ On_exit.rm_rf d; - d - - (* Wait for a file to appear until a timeout. *) -diff --git a/output/python_script.ml b/output/python_script.ml -index 54ccd1b5..ecf46c2d 100644 ---- a/output/python_script.ml -+++ b/output/python_script.ml -@@ -33,7 +33,7 @@ type script = { - - let create ?(name = "script.py") code = - let tmpdir = Mkdtemp.temp_dir "v2v." in -- On_exit.rmdir tmpdir; -+ On_exit.rm_rf tmpdir; - let path = tmpdir // name in - with_open_out path (fun chan -> output_string chan code); - { tmpdir; path } diff --git a/0027-o-rhv-Unmount-the-temporary-NFS-mountpoint-as-late-a.patch b/0027-o-rhv-Unmount-the-temporary-NFS-mountpoint-as-late-a.patch deleted file mode 100644 index 050e4d9..0000000 --- a/0027-o-rhv-Unmount-the-temporary-NFS-mountpoint-as-late-a.patch +++ /dev/null @@ -1,171 +0,0 @@ -From 0d92a42aab3fb0e7569294675666976724156128 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 14 Jul 2022 13:15:49 +0100 -Subject: [PATCH] -o rhv: Unmount the temporary NFS mountpoint as late as - possible - -To partially avoid a potential race against nbdkit or qemu-nbd -releasing files on the mountpoint before they exit, unmount as late as -we can. - -See also https://bugzilla.redhat.com/show_bug.cgi?id=1953286#c26 - -Reviewed-by: Laszlo Ersek -(cherry picked from commit e96357fc3b26aaf96eaa21afa36c894a27af6261) ---- - common | 2 +- - output/output_rhv.ml | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -Submodule common fd964c1b..1000604f: -diff --git a/common/mltools/on_exit.ml b/common/mltools/on_exit.ml -index cae12e73..f8ef74e1 100644 ---- a/common/mltools/on_exit.ml -+++ b/common/mltools/on_exit.ml -@@ -23,39 +23,39 @@ open Common_gettext.Gettext - open Unix - open Printf - --(* List of files to unlink. *) --let files = ref [] -+type action = -+ | Unlink of string (* filename *) -+ | Rm_rf of string (* directory *) -+ | Kill of int * int (* signal, pid *) -+ | Fn of (unit -> unit) (* generic function *) - --(* List of directories to remove. *) --let rmdirs = ref [] -- --(* List of PIDs to kill. *) --let kills = ref [] -- --(* List of functions to call. *) --let fns = ref [] -+(* List of (priority, action). *) -+let actions = ref [] - - (* Perform a single exit action, printing any exception but - * otherwise ignoring failures. - *) --let do_action f arg = -- try f arg with exn -> debug "%s" (Printexc.to_string exn) -+let do_action action = -+ try -+ match action with -+ | Unlink file -> Unix.unlink file -+ | Rm_rf dir -> -+ let cmd = sprintf "rm -rf -- %s" (Filename.quote dir) in -+ ignore (Tools_utils.shell_command cmd) -+ | Kill (signal, pid) -> -+ kill pid signal -+ | Fn f -> f () -+ with exn -> debug "%s" (Printexc.to_string exn) - - (* Make sure the actions are performed only once. *) - let done_actions = ref false - --(* Perform the exit actions. *) -+(* Perform the exit actions in priority order (lowest prio first). *) - let do_actions () = - if not !done_actions then ( -- List.iter (do_action (fun f -> f ())) !fns; -- List.iter (do_action (fun (signal, pid) -> kill pid signal)) !kills; -- List.iter (do_action (fun file -> Unix.unlink file)) !files; -- List.iter (do_action ( -- fun dir -> -- let cmd = sprintf "rm -rf -- %s" (Filename.quote dir) in -- ignore (Tools_utils.shell_command cmd) -- ) -- ) !rmdirs; -+ let actions = List.sort (fun (a, _) (b, _) -> compare a b) !actions in -+ let actions = List.map snd actions in -+ List.iter do_action actions - ); - done_actions := true - -@@ -94,18 +94,18 @@ let register () = - ); - registered := true - --let f fn = -+let f ?(prio = 5000) fn = - register (); -- List.push_front fn fns -+ List.push_front (prio, Fn fn) actions - --let unlink filename = -+let unlink ?(prio = 5000) filename = - register (); -- List.push_front filename files -+ List.push_front (prio, Unlink filename) actions - --let rm_rf dir = -+let rm_rf ?(prio = 5000) dir = - register (); -- List.push_front dir rmdirs -+ List.push_front (prio, Rm_rf dir) actions - --let kill ?(signal = Sys.sigterm) pid = -+let kill ?(prio = 5000) ?(signal = Sys.sigterm) pid = - register (); -- List.push_front (signal, pid) kills -+ List.push_front (prio, Kill (signal, pid)) actions -diff --git a/common/mltools/on_exit.mli b/common/mltools/on_exit.mli -index 9bcf104f..66a85542 100644 ---- a/common/mltools/on_exit.mli -+++ b/common/mltools/on_exit.mli -@@ -28,6 +28,12 @@ - killing another process, so we provide simple - wrappers for those common actions here. - -+ Actions can be ordered by setting the optional [?prio] -+ parameter in the range 0..9999. By default actions -+ have priority 5000. Lower numbered actions run first. -+ Higher numbered actions run last. So to have an action -+ run at the very end before exit you might use [~prio:9999] -+ - Note this module registers signal handlers for - SIGINT, SIGQUIT, SIGTERM and SIGHUP. This means - that any program that links with mltools.cmxa -@@ -39,18 +45,20 @@ - Your cleanup action might no longer run unless the - program calls {!Stdlib.exit}. *) - --val f : (unit -> unit) -> unit -+val f : ?prio:int -> (unit -> unit) -> unit - (** Register a function [f] which runs when the program exits. - Similar to [Stdlib.at_exit] but also runs if the program is -- killed with a signal that we can catch. *) -+ killed with a signal that we can catch. -+ -+ [?prio] is the priority, default 5000. See the description above. *) - --val unlink : string -> unit -+val unlink : ?prio:int -> string -> unit - (** Unlink a single temporary file on exit. *) - --val rm_rf : string -> unit -+val rm_rf : ?prio:int -> string -> unit - (** Recursively remove a temporary directory on exit (using [rm -rf]). *) - --val kill : ?signal:int -> int -> unit -+val kill : ?prio:int -> ?signal:int -> int -> unit - (** Kill [PID] on exit. The signal sent defaults to [Sys.sigterm]. - - Use this with care since you can end up unintentionally killing -diff --git a/output/output_rhv.ml b/output/output_rhv.ml -index 8571e07b..15a2c14a 100644 ---- a/output/output_rhv.ml -+++ b/output/output_rhv.ml -@@ -204,8 +204,8 @@ module RHV = struct - if run_command cmd <> 0 then - error (f_"mount command failed, see earlier errors.\n\nThis probably means you didn't specify the right %s path [-os %s], or else you need to rerun virt-v2v as root.") domain_class os; - -- (* Make sure it is unmounted at exit. *) -- On_exit.f ( -+ (* Make sure it is unmounted at exit, as late as possible (prio=9999) *) -+ On_exit.f ~prio:9999 ( - fun () -> - let cmd = [ "umount"; mp ] in - ignore (run_command cmd); diff --git a/0028-output-Permit-output-modes-to-wait-on-the-local-NBD-.patch b/0028-output-Permit-output-modes-to-wait-on-the-local-NBD-.patch deleted file mode 100644 index 4a02e5e..0000000 --- a/0028-output-Permit-output-modes-to-wait-on-the-local-NBD-.patch +++ /dev/null @@ -1,179 +0,0 @@ -From 96efdcf54c887ae88d54332df12a5f5dd962fd0a Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 15 Jul 2022 11:25:45 +0100 -Subject: [PATCH] output: Permit output modes to wait on the local NBD server - -Output.output_to_local_file is used by several output modes that write -to local files or devices. It launches an instance of qemu-nbd or -nbdkit connected to the local file. - -Previously we unconditionally added an On_exit handler to kill the NBD -server. This is usually safe because nbdcopy --flush has guaranteed -that the data was written through to permanent storage, and so killing -the NBD server is just there to prevent orphaned processes. - -However for output to RHV (-o rhv) we actually need the NBD server to -be cleaned up before we exit. See the analysis here: - -https://bugzilla.redhat.com/show_bug.cgi?id=1953286#c26 - -Allow an alternate strategy of waiting for the NBD server to exit -during virt-v2v shutdown. - -We only need this in virt-v2v so implement it here instead of pushing -it all the way into the On_exit module. - -Reviewed-by: Laszlo Ersek -(cherry picked from commit e2a1a7b4dfb6a9e44260da10a7e7029c09753b5c) ---- - output/output.ml | 91 ++++++++++++++++++++++++++++------------------- - output/output.mli | 17 +++++++-- - 2 files changed, 69 insertions(+), 39 deletions(-) - -diff --git a/output/output.ml b/output/output.ml -index 496c32b6..8f83a324 100644 ---- a/output/output.ml -+++ b/output/output.ml -@@ -69,7 +69,10 @@ let error_if_disk_count_gt dir n = - if Sys.file_exists socket then - error (f_"this output module doesn't support copying more than %d disks") n - -+type on_exit_kill = Kill | KillAndWait -+ - let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false) -+ ?(on_exit_kill = Kill) - output_alloc output_format filename size socket = - (* Check nbdkit is installed and has the required plugin. *) - if not (Nbdkit.is_installed ()) then -@@ -94,46 +97,60 @@ let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false) - fun () -> g#disk_create ?preallocation filename output_format size - ); - -- match output_format with -- | "raw" -> -- let cmd = Nbdkit.create "file" in -- Nbdkit.add_arg cmd "file" filename; -- if Nbdkit.version nbdkit_config >= (1, 22, 0) then ( -- let cmd = Nbdkit.add_arg cmd "cache" "none" in -- cmd -- ); -- let _, pid = Nbdkit.run_unix socket cmd in -+ let pid = -+ match output_format with -+ | "raw" -> -+ let cmd = Nbdkit.create "file" in -+ Nbdkit.add_arg cmd "file" filename; -+ if Nbdkit.version nbdkit_config >= (1, 22, 0) then ( -+ let cmd = Nbdkit.add_arg cmd "cache" "none" in -+ cmd -+ ); -+ let _, pid = Nbdkit.run_unix socket cmd in -+ pid - -- (* --exit-with-parent should ensure nbdkit is cleaned -- * up when we exit, but it's not supported everywhere. -- *) -- On_exit.kill pid -+ | "qcow2" -> -+ let cmd = -+ if compressed then ( -+ let qemu_quote str = String.replace str "," ",," in -+ let image_opts = [ "driver=compress"; -+ "file.driver=qcow2"; -+ "file.file.driver=file"; -+ "file.file.filename=" ^ qemu_quote filename ] in -+ let image_opts = String.concat "," image_opts in -+ let cmd = QemuNBD.create image_opts in -+ QemuNBD.set_image_opts cmd true; -+ cmd -+ ) -+ else (* not compressed *) ( -+ let cmd = QemuNBD.create filename in -+ QemuNBD.set_format cmd (Some "qcow2"); -+ cmd -+ ) in -+ QemuNBD.set_snapshot cmd false; -+ let _, pid = QemuNBD.run_unix socket cmd in -+ pid - -- | "qcow2" -> -- let cmd = -- if compressed then ( -- let qemu_quote str = String.replace str "," ",," in -- let image_opts = [ "driver=compress"; -- "file.driver=qcow2"; -- "file.file.driver=file"; -- "file.file.filename=" ^ qemu_quote filename ] in -- let image_opts = String.concat "," image_opts in -- let cmd = QemuNBD.create image_opts in -- QemuNBD.set_image_opts cmd true; -- cmd -- ) -- else (* not compressed *) ( -- let cmd = QemuNBD.create filename in -- QemuNBD.set_format cmd (Some "qcow2"); -- cmd -- ) in -- QemuNBD.set_snapshot cmd false; -- let _, pid = QemuNBD.run_unix socket cmd in -- On_exit.kill pid -+ | _ -> -+ error (f_"output mode only supports raw or qcow2 format (format: %s)") -+ output_format in -+ -+ match on_exit_kill with -+ | Kill -> -+ (* Kill the NBD server on exit. (For nbdkit we use --exit-with-parent -+ * but it's not supported everywhere). -+ *) -+ On_exit.kill pid - -- | _ -> -- error (f_"output mode only supports raw or qcow2 format (format: %s)") -- output_format -+ | KillAndWait -> -+ On_exit.f ( -+ fun () -> -+ kill pid Sys.sigterm; -+ (* Errors from the NBD server don't matter. On successful -+ * completion we've already committed the data to disk. -+ *) -+ ignore (waitpid [] pid) -+ ) - - let disk_path os name i = - let outdisk = sprintf "%s/%s-sd%s" os name (drive_name i) in -diff --git a/output/output.mli b/output/output.mli -index c1f0f53d..c4486311 100644 ---- a/output/output.mli -+++ b/output/output.mli -@@ -83,14 +83,27 @@ val error_if_disk_count_gt : string -> int -> unit - "in[n]" in the v2v directory [dir]. If the socket exists, [error] is - called. *) - -+type on_exit_kill = Kill | KillAndWait -+ - val output_to_local_file : ?changeuid:((unit -> unit) -> unit) -> -- ?compressed:bool -> -+ ?compressed:bool -> ?on_exit_kill:on_exit_kill -> - Types.output_allocation -> - string -> string -> int64 -> string -> - unit - (** When an output mode wants to create a local file with a - particular format (only "raw" or "qcow2" allowed) then -- this common function can be used. *) -+ this common function can be used. -+ -+ Optional parameter [?on_exit_kill] controls how the NBD server -+ is cleaned up. The default is {!Kill} which registers an -+ {!On_exit.kill} handler that kills (but does not wait for) -+ the server when virt-v2v exits. Most callers should use this. -+ -+ Setting [~on_exit_kill:KillAndWait] should be used if the NBD -+ server must fully exit before we continue with the rest of -+ virt-v2v shut down. This is only necessary if some other action -+ (such as unmounting a host filesystem or removing a host device) -+ depends on the NBD server releasing resources. *) - - val disk_path : string -> string -> int -> string - (** For [-o disk|qemu], return the output disk name of the i'th disk, diff --git a/0029-o-rhv-Wait-for-the-NBD-server-to-exit-to-avoid-a-rac.patch b/0029-o-rhv-Wait-for-the-NBD-server-to-exit-to-avoid-a-rac.patch deleted file mode 100644 index 9799170..0000000 --- a/0029-o-rhv-Wait-for-the-NBD-server-to-exit-to-avoid-a-rac.patch +++ /dev/null @@ -1,33 +0,0 @@ -From f820585c37beb648ab856818179091349a604523 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 15 Jul 2022 11:37:46 +0100 -Subject: [PATCH] -o rhv: Wait for the NBD server to exit to avoid a race with - unmounting - -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1953286#c26 -Reviewed-by: Laszlo Ersek -(cherry picked from commit 2fbd578b4e6884a23063ad67ee36f02c4eb6c668) ---- - output/output_rhv.ml | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/output/output_rhv.ml b/output/output_rhv.ml -index 15a2c14a..45f831e3 100644 ---- a/output/output_rhv.ml -+++ b/output/output_rhv.ml -@@ -175,7 +175,14 @@ module RHV = struct - chmod filename 0o666 - ) - in -- output_to_local_file ~changeuid -+ -+ (* We have to wait for the NBD server to exit rather than just -+ * killing it, otherwise it races with unmounting. See: -+ * https://bugzilla.redhat.com/show_bug.cgi?id=1953286#c26 -+ *) -+ let on_exit_kill = Output.KillAndWait in -+ -+ output_to_local_file ~changeuid ~on_exit_kill - output_alloc output_format filename size socket - ) (List.combine disks filenames); - diff --git a/0030-output-create_libvirt_xml-relax-VCPU-feature-checkin.patch b/0030-output-create_libvirt_xml-relax-VCPU-feature-checkin.patch deleted file mode 100644 index 8d856c9..0000000 --- a/0030-output-create_libvirt_xml-relax-VCPU-feature-checkin.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 29c6ee9322da082e3be9faa94cf4a6840b49cd97 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Fri, 22 Jul 2022 09:36:27 +0200 -Subject: [PATCH] output/create_libvirt_xml: relax VCPU feature checking for - "qemu64" - -When the source domain doesn't specify a VCPU model ("s_cpu_model" is -None), and the guest OS is assumed to work with the default VCPU model -("gcaps_default_cpu" is true), we don't output any element. In that -case, libvirtd augments the domain config with: - - [1] - qemu64 - - -where the @check='none' attribute ensures that the converted domain will -be launched, for example, on an Intel host, despite the "qemu64" VCPU -model containing AMD-only feature flags such as "svm". - -However, if the source domain explicitly specifies the "qemu64" model -(mostly seen with "-i libvirt -ic qemu://..."), we presently output - - [2] - qemu64 - - -which libvirtd completes as - - [3] - qemu64 - - -In [3], cpu/@match='minimum' and cpu/model/@fallback='allow' are both -laxer than @match='exact' and @fallback='forbid', respectively, in [1]. - -However, cpu/@check='partial' in [3] is stricter than @check='none' in -[1]; it causes libvirtd to catch the "svm" feature flag on an Intel host, -and prevents the converted domain from starting. - -The "qemu64" VCPU model is supposed to run on every possible host -, -therefore make an exception for the explicitly specified "qemu64" VCPU -model, and generate the @check='none' attribute. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2107503 -Signed-off-by: Laszlo Ersek -Message-Id: <20220722073627.6511-1-lersek@redhat.com> -Acked-by: Richard W.M. Jones -(cherry picked from commit e5297c3180fd3ebea41a40f4c5a66969a24b9ff3) ---- - output/create_libvirt_xml.ml | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/output/create_libvirt_xml.ml b/output/create_libvirt_xml.ml -index 531a4f75..bd01304d 100644 ---- a/output/create_libvirt_xml.ml -+++ b/output/create_libvirt_xml.ml -@@ -192,6 +192,8 @@ let create_libvirt_xml ?pool source inspect - List.push_back cpu_attrs ("mode", "host-passthrough"); - | Some model -> - List.push_back cpu_attrs ("match", "minimum"); -+ if model = "qemu64" then -+ List.push_back cpu_attrs ("check", "none"); - (match source.s_cpu_vendor with - | None -> () - | Some vendor -> diff --git a/0031-input-xen-cover-RHEL9-OpenSSL-crypto-settings.patch b/0031-input-xen-cover-RHEL9-OpenSSL-crypto-settings.patch deleted file mode 100644 index ae3fa10..0000000 --- a/0031-input-xen-cover-RHEL9-OpenSSL-crypto-settings.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 9e1c78a4dda8e8f504fd8f01d7ff5a02e6d3b8ff Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Fri, 29 Jul 2022 12:57:03 +0200 -Subject: [PATCH] input-xen: cover RHEL9 OpenSSL crypto settings - -In [master] commit af4a0454cdd2 ("input-xen: replace "enable LEGACY -crypto" advice with targeted ssh options", 2022-07-11), we documented how -the libssh / openssh crypto settings needed to be relaxed, for connecting -to RHEL5 sshd. [rhel-9.1 commit: 3f7f730ac9cb.] - -It turns out that in RHEL9, the non-LEGACY crypto policies disable SHA1 in -signature algorithms even at the OpenSSL level. Explain how the user can -re-enable that separately, for individual virt-v2v invocations. - -The method depends on Rich's libvirt commit 45912ac399ab ("rpc: Pass -OPENSSL_CONF through to ssh invocations", 2022-07-25), which is is going -to be released in upstream libvirt v8.6.0. - -Thanks: Dmitry Belyavskiy & Rich Jones -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2062360 -Signed-off-by: Laszlo Ersek -Message-Id: <20220729105703.10150-1-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit ddab06d5eb99696f5fd1073b8ec91efbc8c3e4ab) ---- - docs/virt-v2v-input-xen.pod | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - -diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod -index 1775fc31..9c3981e1 100644 ---- a/docs/virt-v2v-input-xen.pod -+++ b/docs/virt-v2v-input-xen.pod -@@ -54,6 +54,26 @@ new one. Virt-v2v uses both C and C when converting a guest - from Xen, and on some operating systems, C and C may not - both accept the same option variant.) - -+When connecting to RHEL 5 sshd from RHEL 9, the SHA1 algorithm's use in -+signatures has to be re-enabled at the OpenSSL level, in addition to the -+above SSH configuration. Create a file called F<$HOME/openssl-sha1.cnf> -+with the following contents: -+ -+ .include /etc/ssl/openssl.cnf -+ [openssl_init] -+ alg_section = evp_properties -+ [evp_properties] -+ rh-allow-sha1-signatures = yes -+ -+and export the following variable into the environment of the -+C process: -+ -+ OPENSSL_CONF=$HOME/openssl-sha1.cnf -+ -+Note that the C environment variable will only take effect -+if the libvirt client library used by virt-v2v is at least version -+8.6.0. -+ - =head2 Test libvirt connection to remote Xen host - - Use the L command to list the guests on the remote Xen host: diff --git a/gating.yaml b/gating.yaml index c2335de..d6f9b79 100755 --- a/gating.yaml +++ b/gating.yaml @@ -1,7 +1,6 @@ -# recipients: libvirt-qe --- !Policy product_versions: - - rhel-9 + - rhel-8 decision_context: osci_compose_gate rules: - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} diff --git a/sources b/sources index b4c48b5..f5f2732 100644 --- a/sources +++ b/sources @@ -1,5 +1,6 @@ -SHA512 (RHEV-Application-Provisioning-Tool.exe_4.43-5) = 444369687399fb741639a1b28befc74637c2f47d5cf9b2c2115206dcfd97e2d64c591c3876ce97477d23c89fcec404643a40d59141bbb135ee83930b00dc0c90 -SHA512 (libguestfs.keyring) = 297a15edc7c220222b9f650e0a9361ae132d3f0fed04aeb2237a1d9c3f6dac6f336846434f66480faed72635a33f659e849b052e74b88d1508aeff03f8c9a2ac +SHA512 (SOURCES) = 2f587d440d029b3c4b583f6427a9d2fd1711eafc56cd104d6eafecc5c8ef981fc59aecdbf2bbabe0f4bb2c1091954dcc324f5fa9477e6b4bb136b76784d01968 SHA512 (rhsrvany-fd659e77cdd9da484fdc9dcbe0605c62ec26fa30.tar.gz) = 13867ead749241e9e1e436e478d08fff2d12ae112815956adf49735ffe211bec4d63ed99bbcebb43ff2e234730769e8d373a6cdc3fbb4e6aca2224c9bdc8a8b1 +SHA512 (RHEV-Application-Provisioning-Tool.exe_4.43-5) = 444369687399fb741639a1b28befc74637c2f47d5cf9b2c2115206dcfd97e2d64c591c3876ce97477d23c89fcec404643a40d59141bbb135ee83930b00dc0c90 SHA512 (rhsrvany.exe) = 1f08f594cf238487860a5c0c275eb36bfccaabbd92ea4e6ca5021771d7c37747cc15f58b4284a90f06ffcc17d0294ce898f40dfd8bd1165b58131181f3350a3c SHA512 (virt-v2v-1.42.0.tar.gz) = 75841717d54479443eb63365375e44d0b9189bb72ed761685081cc3bc53aa0f50954e72df07d23c95412f25eae12eb6c6e13a8c45ba9ffd8f27f861a326a53d7 +SHA512 (virt-v2v-1.42.0.tar.gz.sig) = 8986f41829ef5635ff8453bd798856c0bdfd1c6ebd7a844d8771c92e6c898fa5c308bb91b31ebc8ec239f3896fbd23e02bd0fe653800fe8804c960dae244dec2 diff --git a/tests/tests.yml b/tests/tests.yml index 9dae6bd..d26cf2d 100644 --- a/tests/tests.yml +++ b/tests/tests.yml @@ -5,7 +5,7 @@ - classic required_packages: - virt-v2v - - guestfs-tools + - libguestfs - libvirt-daemon-kvm tests: - simple: diff --git a/virt-v2v-1.42.0.tar.gz.sig b/virt-v2v-1.42.0.tar.gz.sig deleted file mode 100644 index 6b56583..0000000 --- a/virt-v2v-1.42.0.tar.gz.sig +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAl6YQ9QRHHJpY2hAYW5u -ZXhpYS5vcmcACgkQkXOPc+G3aKAgTBAAiT/ojN14i0NRzpuGSb7I9oupzclVqic8 -c5NIXH8TGYLY9tVMYSsr+uyWu8Qk2lsqV6knXeqbBKot/682v2AlYn6ZpG+cl8tm -ZKjVSwMwLVdAvV5zTaggEO/Xs8WbtSkmTk184s62804qlc+mv0ngFTGZomKjH4o1 -tHgJnegeR/lppeBnIuhAC/hWo6SyhPul8UnDg3rnByWOX7Qs3p4lY9y5hHv2pQfK -ezXLDYBBAtQ3oe3p8jh3SCe7GLxxX8oxDCn6l8K7AK4czRMLJ/iykS/iE+E1bazM -V7rUItPfK3MhrWThlekn4u5tOclCDKbK75Hgkb2qjeK9Ctad80boXnNEnIv0UWFr -SaqCKmJrOtohn2oR/aUmTXm2u09jy+nQTRhvqy/2TNTdExCa1A6n7r0EcEJQMQPX -DK34+cbn3J+/+BA9kyH2a2/pTwJBaCk4PCXyrxWAkHyLUt9HZwmtPXUeBhq/iMIf -QZSo/LgXTTNEpsFx5K3xuvy6Ps/IaImeI8xdU2wl252/HN4wY3roZOBNflbTCF2m -aXFXf6bReZmO9HJg5674zCYkB0N8nSPMaHmv7EWyK7sEMKCUuYnWMiEBHtIZA+dW -Qp3IdoODkjciwVzJL2E7RhA2GNvwnkay4WYqb0mjAPVktVTnhla7S1hSD8SM6Fs7 -sVAPrKAFidk= -=l3OH ------END PGP SIGNATURE-----