diff --git a/SOURCES/0001-libvirt-make-use-of-libvirt-s-default-auth-handler-R.patch b/SOURCES/0001-libvirt-make-use-of-libvirt-s-default-auth-handler-R.patch index f3083f8..00a9bbb 100644 --- a/SOURCES/0001-libvirt-make-use-of-libvirt-s-default-auth-handler-R.patch +++ b/SOURCES/0001-libvirt-make-use-of-libvirt-s-default-auth-handler-R.patch @@ -37,5 +37,5 @@ index 7df17b29..4d0b8639 100644 let get_domain conn name = let dom = -- -2.27.0 +2.31.1 diff --git a/SOURCES/0002-i-libvirt-print-URI-without-connecting-RHBZ-1839917.patch b/SOURCES/0002-i-libvirt-print-URI-without-connecting-RHBZ-1839917.patch index 3ae48b9..7bf3082 100644 --- a/SOURCES/0002-i-libvirt-print-URI-without-connecting-RHBZ-1839917.patch +++ b/SOURCES/0002-i-libvirt-print-URI-without-connecting-RHBZ-1839917.patch @@ -210,5 +210,5 @@ index 120a52f7..3cbca9d7 100644 -val input_libvirt_xen_ssh : Libvirt.rw Libvirt.Connect.t Lazy.t -> string option -> Xml.uri -> string -> string -> Types.input +val input_libvirt_xen_ssh : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> string option -> Xml.uri -> string -> string -> Types.input -- -2.27.0 +2.31.1 diff --git a/SOURCES/0003-vCenter-fix-parsing-of-HTTP-status-string-RHBZ-18373.patch b/SOURCES/0003-vCenter-fix-parsing-of-HTTP-status-string-RHBZ-18373.patch index 9ecd590..85d3802 100644 --- a/SOURCES/0003-vCenter-fix-parsing-of-HTTP-status-string-RHBZ-18373.patch +++ b/SOURCES/0003-vCenter-fix-parsing-of-HTTP-status-string-RHBZ-18373.patch @@ -30,5 +30,5 @@ index c28a4ced..4c128b0c 100644 let headers = List.map ( -- -2.27.0 +2.31.1 diff --git a/SOURCES/0004-v2v-o-libvirt-Remove-cache-none-RHBZ-1837453.patch b/SOURCES/0004-v2v-o-libvirt-Remove-cache-none-RHBZ-1837453.patch index 1f4682c..9247c51 100644 --- a/SOURCES/0004-v2v-o-libvirt-Remove-cache-none-RHBZ-1837453.patch +++ b/SOURCES/0004-v2v-o-libvirt-Remove-cache-none-RHBZ-1837453.patch @@ -93,5 +93,5 @@ index 05553c4f..5a1fba0f 100644 (match pool with | None -> -- -2.27.0 +2.31.1 diff --git a/SOURCES/0005-v2v-Remove-extraneous-when-setting-bandwidth-RHBZ-18.patch b/SOURCES/0005-v2v-Remove-extraneous-when-setting-bandwidth-RHBZ-18.patch index 97eefc8..f783eac 100644 --- a/SOURCES/0005-v2v-Remove-extraneous-when-setting-bandwidth-RHBZ-18.patch +++ b/SOURCES/0005-v2v-Remove-extraneous-when-setting-bandwidth-RHBZ-18.patch @@ -47,5 +47,5 @@ index 979c3773..402dfd0e 100644 ) else cmd, [] in -- -2.27.0 +2.31.1 diff --git a/SOURCES/0006-v2v-it-vddk-Don-t-use-nbdkit-readahead-filter-with-V.patch b/SOURCES/0006-v2v-it-vddk-Don-t-use-nbdkit-readahead-filter-with-V.patch index aecfa8c..8f0baac 100644 --- a/SOURCES/0006-v2v-it-vddk-Don-t-use-nbdkit-readahead-filter-with-V.patch +++ b/SOURCES/0006-v2v-it-vddk-Don-t-use-nbdkit-readahead-filter-with-V.patch @@ -45,5 +45,5 @@ index 402dfd0e..bfda91a7 100644 (* Caching extents speeds up qemu-img, especially its consecutive * block_status requests with req_one=1. -- -2.27.0 +2.31.1 diff --git a/SOURCES/0007-v2v-nbdkit-Handle-password-parameter-in-common_creat.patch b/SOURCES/0007-v2v-nbdkit-Handle-password-parameter-in-common_creat.patch index 214fdd1..6c98216 100644 --- a/SOURCES/0007-v2v-nbdkit-Handle-password-parameter-in-common_creat.patch +++ b/SOURCES/0007-v2v-nbdkit-Handle-password-parameter-in-common_creat.patch @@ -112,5 +112,5 @@ index bfda91a7..47832011 100644 let run cmd = let sock, _ = Nbdkit.run_unix cmd in -- -2.27.0 +2.31.1 diff --git a/SOURCES/0008-v2v-nbdkit-Don-t-use-password-parameter-RHBZ-1842440.patch b/SOURCES/0008-v2v-nbdkit-Don-t-use-password-parameter-RHBZ-1842440.patch index 7fd314e..ffd539e 100644 --- a/SOURCES/0008-v2v-nbdkit-Don-t-use-password-parameter-RHBZ-1842440.patch +++ b/SOURCES/0008-v2v-nbdkit-Don-t-use-password-parameter-RHBZ-1842440.patch @@ -53,5 +53,5 @@ index 47832011..f5e91911 100644 Nbdkit.add_arg cmd "password" ("+" ^ password_file) in -- -2.27.0 +2.31.1 diff --git a/SOURCES/0009-libosinfo-declare-autocleanup-funcs-with-libosinfo-1.patch b/SOURCES/0009-libosinfo-declare-autocleanup-funcs-with-libosinfo-1.patch index b21b55e..bda1f39 100644 --- a/SOURCES/0009-libosinfo-declare-autocleanup-funcs-with-libosinfo-1.patch +++ b/SOURCES/0009-libosinfo-declare-autocleanup-funcs-with-libosinfo-1.patch @@ -40,5 +40,5 @@ index 1ab6bb4d..497840c2 100644 typedef OsinfoDb *OsinfoDb_t; typedef OsinfoOs *OsinfoOs_t; -- -2.27.0 +2.31.1 diff --git a/SOURCES/0010-v2v-Use-common-documentation-for-keys-from-stdin.patch b/SOURCES/0010-v2v-Use-common-documentation-for-keys-from-stdin.patch index 2cf8f82..4171f8a 100644 --- a/SOURCES/0010-v2v-Use-common-documentation-for-keys-from-stdin.patch +++ b/SOURCES/0010-v2v-Use-common-documentation-for-keys-from-stdin.patch @@ -56,5 +56,5 @@ index a00fa8af..74934eb4 100644 =item B<--mac> aa:bb:cc:dd:ee:ffB<:network:>out -- -2.27.0 +2.31.1 diff --git a/SOURCES/0011-docs-Multiple-keys-must-be-supplied-one-per-line-RHB.patch b/SOURCES/0011-docs-Multiple-keys-must-be-supplied-one-per-line-RHB.patch index bccbd89..75ca17c 100644 --- a/SOURCES/0011-docs-Multiple-keys-must-be-supplied-one-per-line-RHB.patch +++ b/SOURCES/0011-docs-Multiple-keys-must-be-supplied-one-per-line-RHB.patch @@ -22,5 +22,5 @@ index 03c5339..8379039 100644 +If there are multiple encrypted devices then you may need to supply +multiple keys on stdin, one per line. -- -2.27.0 +2.31.1 diff --git a/SOURCES/0012-v2v-Check-that-mac-ip-parameters-are-sensible-RHBZ-1.patch b/SOURCES/0012-v2v-Check-that-mac-ip-parameters-are-sensible-RHBZ-1.patch index 29ce37f..428ce02 100644 --- a/SOURCES/0012-v2v-Check-that-mac-ip-parameters-are-sensible-RHBZ-1.patch +++ b/SOURCES/0012-v2v-Check-that-mac-ip-parameters-are-sensible-RHBZ-1.patch @@ -122,5 +122,5 @@ index 249137ab..3b74f307 100644 let no_trim_warning _ = -- -2.27.0 +2.31.1 diff --git a/SOURCES/0013-libvirt-read-password-file-outside-libvirt-auth-call.patch b/SOURCES/0013-libvirt-read-password-file-outside-libvirt-auth-call.patch index bde4e2d..0c992b1 100644 --- a/SOURCES/0013-libvirt-read-password-file-outside-libvirt-auth-call.patch +++ b/SOURCES/0013-libvirt-read-password-file-outside-libvirt-auth-call.patch @@ -29,5 +29,5 @@ index 4d0b8639..1a24b049 100644 function | { Libvirt.Connect.typ = Libvirt.Connect.CredentialPassphrase } -> password -- -2.27.0 +2.31.1 diff --git a/SOURCES/0014-RHEL-8-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch b/SOURCES/0014-RHEL-8-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch index e2b2910..8871b92 100644 --- a/SOURCES/0014-RHEL-8-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch +++ b/SOURCES/0014-RHEL-8-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch @@ -29,5 +29,5 @@ index be3a3c5e..85d08265 100644 let flag = Qemuopts.flag cmd and arg = Qemuopts.arg cmd -- -2.27.0 +2.31.1 diff --git a/SOURCES/0015-RHEL-8-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch b/SOURCES/0015-RHEL-8-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch index 19cbb27..c1ceb9b 100644 --- a/SOURCES/0015-RHEL-8-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch +++ b/SOURCES/0015-RHEL-8-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch @@ -101,5 +101,5 @@ index 3b74f307..df69e2e0 100644 output_format, output_alloc -- -2.27.0 +2.31.1 diff --git a/SOURCES/0016-RHEL-8-Fix-list-of-supported-sound-cards-to-match-RH.patch b/SOURCES/0016-RHEL-8-Fix-list-of-supported-sound-cards-to-match-RH.patch index f9058ff..412223f 100644 --- a/SOURCES/0016-RHEL-8-Fix-list-of-supported-sound-cards-to-match-RH.patch +++ b/SOURCES/0016-RHEL-8-Fix-list-of-supported-sound-cards-to-match-RH.patch @@ -30,5 +30,5 @@ index ccbb9d68..c2940582 100644 (* Find the UEFI firmware. *) let find_uefi_firmware guest_arch = -- -2.27.0 +2.31.1 diff --git a/SOURCES/0017-RHEL-8-Fix-tests-for-libguestfs-winsupport.patch b/SOURCES/0017-RHEL-8-Fix-tests-for-libguestfs-winsupport.patch index 90a576b..327e2fa 100644 --- a/SOURCES/0017-RHEL-8-Fix-tests-for-libguestfs-winsupport.patch +++ b/SOURCES/0017-RHEL-8-Fix-tests-for-libguestfs-winsupport.patch @@ -75,5 +75,5 @@ index f1da222a..ff94fe39 100755 # We also update the Registry several times, for firstboot, and (ONLY -- -2.27.0 +2.31.1 diff --git a/SOURCES/0018-RHEL-8-v2v-Disable-the-virt-v2v-in-place-option.patch b/SOURCES/0018-RHEL-8-v2v-Disable-the-virt-v2v-in-place-option.patch index fb27ba0..2fdb600 100644 --- a/SOURCES/0018-RHEL-8-v2v-Disable-the-virt-v2v-in-place-option.patch +++ b/SOURCES/0018-RHEL-8-v2v-Disable-the-virt-v2v-in-place-option.patch @@ -282,5 +282,5 @@ index df69e2e0..7b79d462 100644 let error_option_cannot_be_used_in_output_mode mode opt = error (f_"-o %s: %s option cannot be used in this output mode") mode opt -- -2.27.0 +2.31.1 diff --git a/SOURCES/0019-RHEL-8-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch b/SOURCES/0019-RHEL-8-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch index 23ff8d4..8485297 100644 --- a/SOURCES/0019-RHEL-8-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch +++ b/SOURCES/0019-RHEL-8-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch @@ -22,5 +22,5 @@ index d146e84c..4e403003 100644 s_video = None; s_sound = None; -- -2.27.0 +2.31.1 diff --git a/SOURCES/0020-RHEL-8-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch b/SOURCES/0020-RHEL-8-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch index 4e81173..0b215db 100644 --- a/SOURCES/0020-RHEL-8-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch +++ b/SOURCES/0020-RHEL-8-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch @@ -22,5 +22,5 @@ index 3b3cf0f0..32da2848 100644 =head1 INPUT FROM XEN -- -2.27.0 +2.31.1 diff --git a/SOURCES/0021-RHEL-8-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch b/SOURCES/0021-RHEL-8-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch index c0ea35b..4484602 100644 --- a/SOURCES/0021-RHEL-8-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch +++ b/SOURCES/0021-RHEL-8-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch @@ -85,5 +85,5 @@ index d3e6260e..471102da 100644 types.StorageDomain( name=params['output_storage'], -- -2.27.0 +2.31.1 diff --git a/SOURCES/0022-RHEL-8-use-platform-python.patch b/SOURCES/0022-RHEL-8-use-platform-python.patch index fa61b3a..bf6e733 100644 --- a/SOURCES/0022-RHEL-8-use-platform-python.patch +++ b/SOURCES/0022-RHEL-8-use-platform-python.patch @@ -23,5 +23,5 @@ index 33c5e9a2..b1ea8f9d 100644 type script = { tmpdir : string; (* Temporary directory. *) -- -2.27.0 +2.31.1 diff --git a/SOURCES/0023-RHEL-8-point-to-KB-for-supported-v2v-hypervisors-gue.patch b/SOURCES/0023-RHEL-8-point-to-KB-for-supported-v2v-hypervisors-gue.patch index 8919e14..bc2de07 100644 --- a/SOURCES/0023-RHEL-8-point-to-KB-for-supported-v2v-hypervisors-gue.patch +++ b/SOURCES/0023-RHEL-8-point-to-KB-for-supported-v2v-hypervisors-gue.patch @@ -121,5 +121,5 @@ index 8333366b..a5150907 100644 =head2 Guest firmware -- -2.27.0 +2.31.1 diff --git a/SOURCES/0024-v2v-Allow-large-temporary-directory-to-be-set-on-a-g.patch b/SOURCES/0024-v2v-Allow-large-temporary-directory-to-be-set-on-a-g.patch index a671e36..6d8c541 100644 --- a/SOURCES/0024-v2v-Allow-large-temporary-directory-to-be-set-on-a-g.patch +++ b/SOURCES/0024-v2v-Allow-large-temporary-directory-to-be-set-on-a-g.patch @@ -384,5 +384,5 @@ index 73edff2c..a58ff433 100644 info (f_"Overlay saved as %s [--debug-overlays]") saved_filename ) overlays -- -2.27.0 +2.31.1 diff --git a/SOURCES/0025-v2v-o-openstack-Allow-guests-to-be-converted-to-UEFI.patch b/SOURCES/0025-v2v-o-openstack-Allow-guests-to-be-converted-to-UEFI.patch index f1b85fd..70c0b6c 100644 --- a/SOURCES/0025-v2v-o-openstack-Allow-guests-to-be-converted-to-UEFI.patch +++ b/SOURCES/0025-v2v-o-openstack-Allow-guests-to-be-converted-to-UEFI.patch @@ -30,5 +30,5 @@ index 179b0edf..fdc04b02 100644 (* List of Cinder volume IDs. *) val mutable volume_ids = [] -- -2.27.0 +2.31.1 diff --git a/SOURCES/0026-v2v-Fix-spelling-mistake-in-uninstall-function-name.patch b/SOURCES/0026-v2v-Fix-spelling-mistake-in-uninstall-function-name.patch index a60a9aa..6005d5a 100644 --- a/SOURCES/0026-v2v-Fix-spelling-mistake-in-uninstall-function-name.patch +++ b/SOURCES/0026-v2v-Fix-spelling-mistake-in-uninstall-function-name.patch @@ -40,5 +40,5 @@ index ba26949f..f2f7b95c 100644 (*----------------------------------------------------------------------*) (* Perform the conversion of the Windows guest. *) -- -2.27.0 +2.31.1 diff --git a/SOURCES/0027-v2v-windows-Refactor-uninstallation_commands-functio.patch b/SOURCES/0027-v2v-windows-Refactor-uninstallation_commands-functio.patch index a8a2803..43b9fb7 100644 --- a/SOURCES/0027-v2v-windows-Refactor-uninstallation_commands-functio.patch +++ b/SOURCES/0027-v2v-windows-Refactor-uninstallation_commands-functio.patch @@ -133,5 +133,5 @@ index f2f7b95c..84db742f 100644 (*----------------------------------------------------------------------*) (* Perform the conversion of the Windows guest. *) -- -2.27.0 +2.31.1 diff --git a/SOURCES/0028-v2v-Replace-broken-VMware-Tools-uninstall-command-ms.patch b/SOURCES/0028-v2v-Replace-broken-VMware-Tools-uninstall-command-ms.patch index 711c993..79faab6 100644 --- a/SOURCES/0028-v2v-Replace-broken-VMware-Tools-uninstall-command-ms.patch +++ b/SOURCES/0028-v2v-Replace-broken-VMware-Tools-uninstall-command-ms.patch @@ -58,5 +58,5 @@ index 84db742f..44cef5ed 100644 (*----------------------------------------------------------------------*) (* Perform the conversion of the Windows guest. *) -- -2.27.0 +2.31.1 diff --git a/SOURCES/0030-v2v-rhv-upload-plugin-Defer-imageio-connection.patch b/SOURCES/0030-v2v-rhv-upload-plugin-Defer-imageio-connection.patch index ff9250a..070b77a 100644 --- a/SOURCES/0030-v2v-rhv-upload-plugin-Defer-imageio-connection.patch +++ b/SOURCES/0030-v2v-rhv-upload-plugin-Defer-imageio-connection.patch @@ -79,5 +79,5 @@ index 471102da..7cd6dea6 100644 except: cancel_transfer(connection, transfer) -- -2.27.0 +2.31.1 diff --git a/SOURCES/0031-v2v-windows-Fix-schtasks-SD-parameter.patch b/SOURCES/0031-v2v-windows-Fix-schtasks-SD-parameter.patch index 4e53452..657c680 100644 --- a/SOURCES/0031-v2v-windows-Fix-schtasks-SD-parameter.patch +++ b/SOURCES/0031-v2v-windows-Fix-schtasks-SD-parameter.patch @@ -33,5 +33,5 @@ index 44cef5ed..4d844e2d 100644 msi_path msi_path msi_path in Firstboot.add_firstboot_script g inspect.i_root -- -2.27.0 +2.31.1 diff --git a/SOURCES/0032-v2v-Turn-pnp_wait.exe-warning-into-a-debug-message.patch b/SOURCES/0032-v2v-Turn-pnp_wait.exe-warning-into-a-debug-message.patch index 0ce0290..c68e53f 100644 --- a/SOURCES/0032-v2v-Turn-pnp_wait.exe-warning-into-a-debug-message.patch +++ b/SOURCES/0032-v2v-Turn-pnp_wait.exe-warning-into-a-debug-message.patch @@ -28,5 +28,5 @@ index 4d844e2d..33fbd410 100644 (* Install RHEV-APT only if appropriate for the output hypervisor. *) if output#install_rhev_apt then ( -- -2.27.0 +2.31.1 diff --git a/SOURCES/0033-docs-UEFI-guest-conversion-to-o-openstack-is-support.patch b/SOURCES/0033-docs-UEFI-guest-conversion-to-o-openstack-is-support.patch index 744b76f..918de9c 100644 --- a/SOURCES/0033-docs-UEFI-guest-conversion-to-o-openstack-is-support.patch +++ b/SOURCES/0033-docs-UEFI-guest-conversion-to-o-openstack-is-support.patch @@ -23,5 +23,5 @@ index a5150907..1ffc0f9d 100644 =item UEFI on oVirt or RHV -- -2.27.0 +2.31.1 diff --git a/SOURCES/0034-docs-o-openstack-Clarify-name-of-file-containing-Ope.patch b/SOURCES/0034-docs-o-openstack-Clarify-name-of-file-containing-Ope.patch index d46ca67..4dc1e6a 100644 --- a/SOURCES/0034-docs-o-openstack-Clarify-name-of-file-containing-Ope.patch +++ b/SOURCES/0034-docs-o-openstack-Clarify-name-of-file-containing-Ope.patch @@ -43,5 +43,5 @@ index 78623d97..f5a3abad 100644 Virt-v2v adds metadata for the guest to Glance, describing such things as the guest operating system and what drivers it requires. The -- -2.27.0 +2.31.1 diff --git a/SOURCES/0035-v2v-Allow-output-to-block-devices-RHBZ-1868690.patch b/SOURCES/0035-v2v-Allow-output-to-block-devices-RHBZ-1868690.patch index 2439de1..92d98f7 100644 --- a/SOURCES/0035-v2v-Allow-output-to-block-devices-RHBZ-1868690.patch +++ b/SOURCES/0035-v2v-Allow-output-to-block-devices-RHBZ-1868690.patch @@ -148,5 +148,5 @@ index a58ff433..1f8d0138 100644 | TargetURI _ -> (* XXX For the moment we assume that qemu URI outputs -- -2.27.0 +2.31.1 diff --git a/SOURCES/0036-v2v-Disable-readahead-for-VMware-curl-sources-too-RH.patch b/SOURCES/0036-v2v-Disable-readahead-for-VMware-curl-sources-too-RH.patch index 78e847e..9d4be88 100644 --- a/SOURCES/0036-v2v-Disable-readahead-for-VMware-curl-sources-too-RH.patch +++ b/SOURCES/0036-v2v-Disable-readahead-for-VMware-curl-sources-too-RH.patch @@ -38,5 +38,5 @@ index f5e91911..7c177e35 100644 (* Caching extents speeds up qemu-img, especially its consecutive * block_status requests with req_one=1. -- -2.27.0 +2.31.1 diff --git a/SOURCES/0037-docs-Document-how-to-remove-Out-of-HTTP-sessions-lim.patch b/SOURCES/0037-docs-Document-how-to-remove-Out-of-HTTP-sessions-lim.patch index e217fb0..82231bc 100644 --- a/SOURCES/0037-docs-Document-how-to-remove-Out-of-HTTP-sessions-lim.patch +++ b/SOURCES/0037-docs-Document-how-to-remove-Out-of-HTTP-sessions-lim.patch @@ -33,5 +33,5 @@ index e4df920e..ae8964dd 100644 L. -- -2.27.0 +2.31.1 diff --git a/SOURCES/0038-v2v-Increase-required-free-space-in-Windows-to-100-M.patch b/SOURCES/0038-v2v-Increase-required-free-space-in-Windows-to-100-M.patch index a6ff1c9..68a020c 100644 --- a/SOURCES/0038-v2v-Increase-required-free-space-in-Windows-to-100-M.patch +++ b/SOURCES/0038-v2v-Increase-required-free-space-in-Windows-to-100-M.patch @@ -127,5 +127,5 @@ index 1f8d0138..bde51885 100644 if files > 0L && ffree < needed_inodes then error (f_"not enough available inodes for conversion on filesystem ‘%s’. %Ld inodes available < %Ld inodes needed") -- -2.27.0 +2.31.1 diff --git a/SOURCES/0039-v2v-windows-Allow-qxldod.inf-as-synonym-for-qxl.inf.patch b/SOURCES/0039-v2v-windows-Allow-qxldod.inf-as-synonym-for-qxl.inf.patch index dd1dd31..309de2b 100644 --- a/SOURCES/0039-v2v-windows-Allow-qxldod.inf-as-synonym-for-qxl.inf.patch +++ b/SOURCES/0039-v2v-windows-Allow-qxldod.inf-as-synonym-for-qxl.inf.patch @@ -26,5 +26,5 @@ index 4e00cd61..b8256bad 100644 | Some QXL, false -> error (f_"there is no QXL driver for this version of Windows (%d.%d %s). virt-v2v looks for this driver in %s") -- -2.27.0 +2.31.1 diff --git a/SOURCES/0040-RHEL-8-docs-Fix-version-of-virt-v2v-which-added-UEFI.patch b/SOURCES/0040-RHEL-8-docs-Fix-version-of-virt-v2v-which-added-UEFI.patch index 6d4c367..f63b905 100644 --- a/SOURCES/0040-RHEL-8-docs-Fix-version-of-virt-v2v-which-added-UEFI.patch +++ b/SOURCES/0040-RHEL-8-docs-Fix-version-of-virt-v2v-which-added-UEFI.patch @@ -24,5 +24,5 @@ index 1ffc0f9d..a9bfffab 100644 =item UEFI on oVirt or RHV -- -2.27.0 +2.31.1 diff --git a/SOURCES/0041-v2v-Increase-Linux-minimum-root-filesystem-to-100-MB.patch b/SOURCES/0041-v2v-Increase-Linux-minimum-root-filesystem-to-100-MB.patch index 2358a63..1275268 100644 --- a/SOURCES/0041-v2v-Increase-Linux-minimum-root-filesystem-to-100-MB.patch +++ b/SOURCES/0041-v2v-Increase-Linux-minimum-root-filesystem-to-100-MB.patch @@ -56,5 +56,5 @@ index bde51885..8af86687 100644 | _ -> 10 in -- -2.27.0 +2.31.1 diff --git a/SOURCES/0042-v2v-rhv-upload-plugin-Fix-waiting-for-finalize.patch b/SOURCES/0042-v2v-rhv-upload-plugin-Fix-waiting-for-finalize.patch index 0b4d2ef..ea1d459 100644 --- a/SOURCES/0042-v2v-rhv-upload-plugin-Fix-waiting-for-finalize.patch +++ b/SOURCES/0042-v2v-rhv-upload-plugin-Fix-waiting-for-finalize.patch @@ -175,5 +175,5 @@ index 7cd6dea6..61ade1a8 100644 def transfer_supports_format(): -- -2.27.0 +2.31.1 diff --git a/SOURCES/0043-v2v-windows-Do-not-fix-NTFS-heads-in-Windows-Vista-a.patch b/SOURCES/0043-v2v-windows-Do-not-fix-NTFS-heads-in-Windows-Vista-a.patch index 644a227..cc45c67 100644 --- a/SOURCES/0043-v2v-windows-Do-not-fix-NTFS-heads-in-Windows-Vista-a.patch +++ b/SOURCES/0043-v2v-windows-Do-not-fix-NTFS-heads-in-Windows-Vista-a.patch @@ -76,5 +76,5 @@ index 33fbd410..13de10cb 100644 ) -- -2.27.0 +2.31.1 diff --git a/SOURCES/0044-v2v-vcenter-Implement-cookie-scripts.patch b/SOURCES/0044-v2v-vcenter-Implement-cookie-scripts.patch index f3bef8f..d0553fb 100644 --- a/SOURCES/0044-v2v-vcenter-Implement-cookie-scripts.patch +++ b/SOURCES/0044-v2v-vcenter-Implement-cookie-scripts.patch @@ -271,5 +271,5 @@ index 4c128b0c..ead03364 100644 (* Return the struct. *) -- -2.27.0 +2.31.1 diff --git a/SOURCES/0045-convert-convert_windows.ml-Handle-date-formats-with-.patch b/SOURCES/0045-convert-convert_windows.ml-Handle-date-formats-with-.patch index 616f966..f2100e7 100644 --- a/SOURCES/0045-convert-convert_windows.ml-Handle-date-formats-with-.patch +++ b/SOURCES/0045-convert-convert_windows.ml-Handle-date-formats-with-.patch @@ -40,5 +40,5 @@ index 13de10cb..6c7440aa 100644 msi_path msi_path msi_path in Firstboot.add_firstboot_script g inspect.i_root -- -2.27.0 +2.31.1 diff --git a/SOURCES/0046-v2v-Force-format-of-input-to-be-specified.patch b/SOURCES/0046-v2v-Force-format-of-input-to-be-specified.patch index b4578a7..f8a42f9 100644 --- a/SOURCES/0046-v2v-Force-format-of-input-to-be-specified.patch +++ b/SOURCES/0046-v2v-Force-format-of-input-to-be-specified.patch @@ -207,5 +207,5 @@ index 8af86687..203b93f1 100644 (* What really happens here is that the call to #disk_create * below fails if the format is not raw or qcow2. We would -- -2.27.0 +2.31.1 diff --git a/SOURCES/0047-v2v-Cope-with-libvirt-vpx-esx-driver-which-does-not-.patch b/SOURCES/0047-v2v-Cope-with-libvirt-vpx-esx-driver-which-does-not-.patch index ab195cb..5d26d0c 100644 --- a/SOURCES/0047-v2v-Cope-with-libvirt-vpx-esx-driver-which-does-not-.patch +++ b/SOURCES/0047-v2v-Cope-with-libvirt-vpx-esx-driver-which-does-not-.patch @@ -40,5 +40,5 @@ index 27e08135..e65fbf4a 100644 (match xpath_string "/volume/@type" with | None | Some "file" -> -- -2.27.0 +2.31.1 diff --git a/SOURCES/0048-convert-If-listing-RPM-applications-fails-rebuild-DB.patch b/SOURCES/0048-convert-If-listing-RPM-applications-fails-rebuild-DB.patch deleted file mode 100644 index c21d0d4..0000000 --- a/SOURCES/0048-convert-If-listing-RPM-applications-fails-rebuild-DB.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 6c1260b543ed5a947481f7b12943494eeea085fb Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Wed, 25 May 2022 16:47:04 +0100 -Subject: [PATCH] convert: If listing RPM applications fails, rebuild DB and - retry - -In libguestfs before commit 488245ed6c ("daemon: rpm: Check return -values from librpm calls") we didn't bother to check the return values -from any librpm calls. In some cases where the RPM database is -faulty, this caused us to return a zero-length array of applications -(but no error indication). Libguestfs has subsequently been fixed so -now it returns an error if the RPM database is corrupt. - -This commit changes virt-v2v behaviour so that if either -guestfs_inspect_list_applications2 returns a zero-length list (ie. old -libguestfs) or it throws an error (new libguestfs) then we attempt to -rebuild the RPM database and retry the operation. Rebuilding the -database can recover from some but not all RPM DB corruption. - -See-also: https://bugzilla.redhat.com/show_bug.cgi?id=2089623#c12 -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2089623 -Reported-by: Xiaodai Wang -Reported-by: Ming Xie -Reviewed-by: Laszlo Ersek -(cherry picked from commit 31bf5db25bcfd8a9f5a48cc0523abae28861de9a) -(cherry picked from commit 87e5404d20ec54d16d22a7bb8f06ea91076c91f7) ---- - v2v/inspect_source.ml | 34 ++++++++++++++++++++++++++++++++-- - 1 file changed, 32 insertions(+), 2 deletions(-) - -diff --git a/v2v/inspect_source.ml b/v2v/inspect_source.ml -index b8a3c8ad..554fde1d 100644 ---- a/v2v/inspect_source.ml -+++ b/v2v/inspect_source.ml -@@ -34,6 +34,7 @@ let rec inspect_source root_choice g = - reject_if_not_installed_image g root; - - let typ = g#inspect_get_type root in -+ let package_format = g#inspect_get_package_format root in - - (* Mount up the filesystems. *) - let mps = g#inspect_get_mountpoints root in -@@ -71,7 +72,7 @@ let rec inspect_source root_choice g = - ) mps; - - (* Get list of applications/packages installed. *) -- let apps = g#inspect_list_applications2 root in -+ let apps = list_applications g root package_format in - let apps = Array.to_list apps in - - (* A map of app2_name -> application2, for easier lookups. Note -@@ -106,7 +107,7 @@ let rec inspect_source root_choice g = - i_arch = g#inspect_get_arch root; - i_major_version = g#inspect_get_major_version root; - i_minor_version = g#inspect_get_minor_version root; -- i_package_format = g#inspect_get_package_format root; -+ i_package_format = package_format; - i_package_management = g#inspect_get_package_management root; - i_product_name = g#inspect_get_product_name root; - i_product_variant = g#inspect_get_product_variant root; -@@ -186,6 +187,35 @@ and reject_if_not_installed_image g root = - if fmt <> "installed" then - error (f_"libguestfs thinks this is not an installed operating system (it might be, for example, an installer disk or live CD). If this is wrong, it is probably a bug in libguestfs. root=%s fmt=%s") root fmt - -+(* Wrapper around g#inspect_list_applications2 which, for RPM -+ * guests, on failure tries to rebuild the RPM database before -+ * repeating the operation. -+ *) -+and list_applications g root = function -+ | "rpm" -> -+ (* RPM guest. -+ * -+ * In libguestfs before commit 488245ed6c ("daemon: rpm: Check -+ * return values from librpm calls"), a corrupt RPM database -+ * would return an empty array here with no exception. Hence -+ * the check below which turns empty array => exception. In -+ * libguestfs after that commit, inspect_list_applications2 -+ * will raise an exception if it detects a corrupt RPM database. -+ *) -+ (try -+ let apps = g#inspect_list_applications2 root in -+ if apps = [||] then raise (G.Error "no applications returned"); -+ apps -+ with G.Error msg -> -+ debug "%s" msg; -+ debug "rebuilding RPM database and retrying ..."; -+ ignore (g#sh "rpmdb --rebuilddb"); -+ g#inspect_list_applications2 root -+ ) -+ | _ -> -+ (* Non-RPM guest, just do it. *) -+ g#inspect_list_applications2 root -+ - (* See if this guest could use UEFI to boot. It should use GPT and - * it should have an EFI System Partition (ESP). - * --- -2.31.1 - diff --git a/SOURCES/0048-o-rhv-upload-wait-for-VM-creation-task.patch b/SOURCES/0048-o-rhv-upload-wait-for-VM-creation-task.patch new file mode 100644 index 0000000..138966c --- /dev/null +++ b/SOURCES/0048-o-rhv-upload-wait-for-VM-creation-task.patch @@ -0,0 +1,182 @@ +From 8036ab4bc8f37030fcaceda14678cb14dbbed547 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Golembiovsk=C3=BD?= +Date: Wed, 20 Apr 2022 17:14:26 +0200 +Subject: [PATCH] -o rhv-upload: wait for VM creation task +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +oVirt API call for VM creation finishes before the VM is actually +created. Entities may be still locked after virt-v2v terminates and if +user tries to perform (scripted) actions after virt-v2v those operations +may fail. To prevent this it is useful to monitor the task and wait for +the completion. This will also help to prevent some corner case +scenarios (that would be difficult to debug) when the VM creation job +fails after virt-v2v already termintates with success. + +Thanks: Nir Soffer +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1985827 +Signed-off-by: Tomáš Golembiovský +Reviewed-by: Arik Hadas +Reviewed-by: Nir Soffer +(cherry picked from commit 291edb363e841e1c555954a070def671a651cfab) +--- + .../ovirtsdk4/__init__.py | 10 +++- + .../ovirtsdk4/types.py | 19 +++++++ + v2v/rhv-upload-createvm.py | 57 ++++++++++++++++++- + 3 files changed, 84 insertions(+), 2 deletions(-) + +diff --git a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py b/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py +index abb7050c..ba0649cb 100644 +--- a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py ++++ b/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py +@@ -63,6 +63,9 @@ class SystemService(object): + def disks_service(self): + return DisksService() + ++ def jobs_service(self): ++ return JobsService() ++ + def image_transfers_service(self): + return ImageTransfersService() + +@@ -108,6 +111,11 @@ class DisksService(object): + return DiskService(disk_id) + + ++class JobsService(object): ++ def list(self, search=None): ++ return [types.Job()] ++ ++ + class ImageTransferService(object): + def __init__(self): + self._finalized = False +@@ -139,7 +147,7 @@ class StorageDomainsService(object): + + + class VmsService(object): +- def add(self, vm): ++ def add(self, vm, query=None): + return vm + + def list(self, search=None): +diff --git a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py b/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py +index 732887aa..8e734756 100644 +--- a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py ++++ b/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py +@@ -138,6 +138,25 @@ class Initialization(object): + pass + + ++class JobStatus(Enum): ++ ABORTED = "aborted" ++ FAILED = "failed" ++ FINISHED = "finished" ++ STARTED = "started" ++ UNKNOWN = "unknown" ++ ++ def __init__(self, image): ++ self._image = image ++ ++ def __str__(self): ++ return self._image ++ ++ ++class Job(object): ++ description = "Fake job" ++ status = JobStatus.FINISHED ++ ++ + class StorageDomain(object): + def __init__(self, name=None): + pass +diff --git a/v2v/rhv-upload-createvm.py b/v2v/rhv-upload-createvm.py +index 50bb7e34..8887c52b 100644 +--- a/v2v/rhv-upload-createvm.py ++++ b/v2v/rhv-upload-createvm.py +@@ -19,12 +19,54 @@ + import json + import logging + import sys ++import time ++import uuid + + from urllib.parse import urlparse + + import ovirtsdk4 as sdk + import ovirtsdk4.types as types + ++ ++def debug(s): ++ if params['verbose']: ++ print(s, file=sys.stderr) ++ sys.stderr.flush() ++ ++ ++def jobs_completed(system_service, correlation_id): ++ jobs_service = system_service.jobs_service() ++ ++ try: ++ jobs = jobs_service.list( ++ search="correlation_id=%s" % correlation_id) ++ except sdk.Error as e: ++ debug( ++ "Error searching for jobs with correlation id %s: %s" % ++ (correlation_id, e)) ++ # We don't know, assume that jobs did not complete yet. ++ return False ++ ++ # STARTED is the only "in progress" status, anything else means the job ++ # has already terminated. ++ if all(job.status != types.JobStatus.STARTED for job in jobs): ++ failed_jobs = [(job.description, str(job.status)) ++ for job in jobs ++ if job.status != types.JobStatus.FINISHED] ++ if failed_jobs: ++ raise RuntimeError( ++ "Failed to create a VM! Failed jobs: %r" % failed_jobs) ++ return True ++ else: ++ running_jobs = [(job.description, str(job.status)) for job in jobs] ++ debug("Some jobs with correlation id %s are running: %s" % ++ (correlation_id, running_jobs)) ++ return False ++ ++ ++# Seconds to wait for the VM import job to complete in oVirt. ++timeout = 3 * 60 ++ + # Parameters are passed in via a JSON doc from the OCaml code. + # Because this Python code ships embedded inside virt-v2v there + # is no formal API here. +@@ -67,6 +109,7 @@ system_service = connection.system_service() + cluster = system_service.clusters_service().cluster_service(params['rhv_cluster_uuid']) + cluster = cluster.get() + ++correlation_id = str(uuid.uuid4()) + vms_service = system_service.vms_service() + vm = vms_service.add( + types.Vm( +@@ -77,5 +120,17 @@ vm = vms_service.add( + data=ovf, + ) + ) +- ) ++ ), ++ query={'correlation_id': correlation_id}, + ) ++ ++# Wait for the import job to finish. ++endt = time.monotonic() + timeout ++while True: ++ time.sleep(10) ++ if jobs_completed(system_service, correlation_id): ++ break ++ if time.monotonic() > endt: ++ raise RuntimeError( ++ "Timed out waiting for VM creation!" ++ " Jobs still running for correlation id %s" % correlation_id) +-- +2.31.1 + diff --git a/SOURCES/0049-tests-Add-test-of-i-ova-from-a-directory.patch b/SOURCES/0049-tests-Add-test-of-i-ova-from-a-directory.patch new file mode 100644 index 0000000..b158e7d --- /dev/null +++ b/SOURCES/0049-tests-Add-test-of-i-ova-from-a-directory.patch @@ -0,0 +1,96 @@ +From 7748be2af952898c9c38d02e9a539c71cbfbb56b Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 25 May 2021 10:13:00 +0100 +Subject: [PATCH] tests: Add test of -i ova from a directory. + +This was not tested previously. + +(cherry picked from commit a00ce662cb33c33706a013ff98ff89244cd14667) +--- + tests/Makefile.am | 2 ++ + tests/test-v2v-i-ova-directory.sh | 53 +++++++++++++++++++++++++++++++ + 2 files changed, 55 insertions(+) + create mode 100755 tests/test-v2v-i-ova-directory.sh + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index eee4e1af..e4b907fe 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -58,6 +58,7 @@ TESTS = \ + test-v2v-copy-to-local.sh \ + test-v2v-i-ova-bad-sha1.sh \ + test-v2v-i-ova-bad-sha256.sh \ ++ test-v2v-i-ova-directory.sh \ + test-v2v-i-ova-formats.sh \ + test-v2v-i-ova-good-checksums.sh \ + test-v2v-i-ova-gz.sh \ +@@ -185,6 +186,7 @@ EXTRA_DIST += \ + test-v2v-i-ova-bad-sha1.sh \ + test-v2v-i-ova-bad-sha256.sh \ + test-v2v-i-ova-checksums.ovf \ ++ test-v2v-i-ova-directory.sh \ + test-v2v-i-ova-formats.expected \ + test-v2v-i-ova-formats.ovf \ + test-v2v-i-ova-formats.sh \ +diff --git a/tests/test-v2v-i-ova-directory.sh b/tests/test-v2v-i-ova-directory.sh +new file mode 100755 +index 00000000..7c593139 +--- /dev/null ++++ b/tests/test-v2v-i-ova-directory.sh +@@ -0,0 +1,53 @@ ++#!/bin/bash - ++# libguestfs virt-v2v test script ++# Copyright (C) 2014-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. ++ ++# Test -i ova option with a directory. ++ ++set -e ++ ++$TEST_FUNCTIONS ++skip_if_skipped ++skip_if_backend uml ++skip_unless_phony_guest windows.img ++ ++skip_unless_libvirt_minimum_version 3 1 0 ++ ++export VIRT_TOOLS_DATA_DIR="$top_srcdir/test-data/fake-virt-tools" ++export VIRTIO_WIN="$top_srcdir/test-data/fake-virtio-win" ++ ++d=test-v2v-i-ova-directory.d ++rm -rf $d ++mkdir $d ++ ++vmdk=test-ova.vmdk ++ovf=test-v2v-i-ova.ovf ++mf=test-ova.mf ++ ++qemu-img convert $top_builddir/test-data/phony-guests/windows.img \ ++ -O vmdk $d/$vmdk ++cp "$srcdir/$ovf" $d/$ovf ++sha1=`do_sha1 $d/$ovf` ++echo "SHA1($ovf)= $sha1" > $d/$mf ++sha256=`do_sha256 $d/$vmdk` ++echo "SHA256($vmdk)= $sha256" >> $d/$mf ++ ++$VG virt-v2v --debug-gc \ ++ -i ova $d \ ++ -o null ++ ++rm -rf $d +-- +2.31.1 + diff --git a/SOURCES/0050-v2v-i-ova-Fix-parsing-if-OVA-directory-name-has-a-tr.patch b/SOURCES/0050-v2v-i-ova-Fix-parsing-if-OVA-directory-name-has-a-tr.patch new file mode 100644 index 0000000..438a929 --- /dev/null +++ b/SOURCES/0050-v2v-i-ova-Fix-parsing-if-OVA-directory-name-has-a-tr.patch @@ -0,0 +1,66 @@ +From 9e52e90cf8d570516d4098584c263c9d8b76c447 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 25 May 2021 10:27:53 +0100 +Subject: [PATCH] v2v: -i ova: Fix parsing if OVA directory name has a trailing + "/" + +If you use an OVA directory with a trailing "/" in the name, virt-v2v +would fail with: + +virt-v2v: error: internal error: assertion failed at parse_ova.ml, line 273, char 15 + +The fix for this is to knock off the trailing "/" if present. + +Reported-by: Xiaodai Wang +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1964324 +(cherry picked from commit f8428f5eaaff6dedc54a40138f760298a7a3a965) +--- + v2v/parse_ova.ml | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/v2v/parse_ova.ml b/v2v/parse_ova.ml +index 568ac5fa..fc413d2a 100644 +--- a/v2v/parse_ova.ml ++++ b/v2v/parse_ova.ml +@@ -57,6 +57,13 @@ and ova_type = + *) + | TarOptimized of string (* tarball *) + ++let string_of_t { orig_ova; top_dir; ova_type } = ++ sprintf "orig_ova = %s, top_dir = %s, ova_type = %s" ++ orig_ova top_dir ++ (match ova_type with ++ | Directory -> "Directory" ++ | TarOptimized tarball -> "TarOptimized " ^ tarball) ++ + type file_ref = + | LocalFile of string + | TarFile of string * string +@@ -122,6 +129,13 @@ let rec parse_ova ova = + (* Exploded path must be absolute (RHBZ#1155121). *) + let top_dir = absolute_path top_dir in + ++ (* top_dir must not end with / except if it == "/" (which is ++ * likely not what you want). (RHBZ#1964324) ++ *) ++ let top_dir = ++ if top_dir = "/" || not (String.is_suffix top_dir "/") then top_dir ++ else String.sub top_dir 0 (String.length top_dir - 1) in ++ + (* If virt-v2v is running as root, and the backend is libvirt, then + * we have to chmod the directory to 0755 and files to 0644 + * so it is readable by qemu.qemu. This is libvirt bug RHBZ#890291. +@@ -136,7 +150,9 @@ let rec parse_ova ova = + ignore (run_command cmd) + ); + +- { orig_ova = ova; top_dir; ova_type } ++ let ova = { orig_ova = ova; top_dir; ova_type } in ++ debug "ova: %s" (string_of_t ova); ++ ova + + (* Return true if [libvirt] supports ["json:"] pseudo-URLs and accepts the + * ["raw"] driver. Function also returns true if [libvirt] backend is not +-- +2.31.1 + diff --git a/SOURCES/0051-convert-If-listing-RPM-applications-fails-rebuild-DB.patch b/SOURCES/0051-convert-If-listing-RPM-applications-fails-rebuild-DB.patch new file mode 100644 index 0000000..10069ed --- /dev/null +++ b/SOURCES/0051-convert-If-listing-RPM-applications-fails-rebuild-DB.patch @@ -0,0 +1,98 @@ +From 87e5404d20ec54d16d22a7bb8f06ea91076c91f7 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Wed, 25 May 2022 16:47:04 +0100 +Subject: [PATCH] convert: If listing RPM applications fails, rebuild DB and + retry + +In libguestfs before commit 488245ed6c ("daemon: rpm: Check return +values from librpm calls") we didn't bother to check the return values +from any librpm calls. In some cases where the RPM database is +faulty, this caused us to return a zero-length array of applications +(but no error indication). Libguestfs has subsequently been fixed so +now it returns an error if the RPM database is corrupt. + +This commit changes virt-v2v behaviour so that if either +guestfs_inspect_list_applications2 returns a zero-length list (ie. old +libguestfs) or it throws an error (new libguestfs) then we attempt to +rebuild the RPM database and retry the operation. Rebuilding the +database can recover from some but not all RPM DB corruption. + +See-also: https://bugzilla.redhat.com/show_bug.cgi?id=2089623#c12 +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2089623 +Reported-by: Xiaodai Wang +Reported-by: Ming Xie +Reviewed-by: Laszlo Ersek +(cherry picked from commit 31bf5db25bcfd8a9f5a48cc0523abae28861de9a) +--- + v2v/inspect_source.ml | 34 ++++++++++++++++++++++++++++++++-- + 1 file changed, 32 insertions(+), 2 deletions(-) + +diff --git a/v2v/inspect_source.ml b/v2v/inspect_source.ml +index b8a3c8ad..554fde1d 100644 +--- a/v2v/inspect_source.ml ++++ b/v2v/inspect_source.ml +@@ -34,6 +34,7 @@ let rec inspect_source root_choice g = + reject_if_not_installed_image g root; + + let typ = g#inspect_get_type root in ++ let package_format = g#inspect_get_package_format root in + + (* Mount up the filesystems. *) + let mps = g#inspect_get_mountpoints root in +@@ -71,7 +72,7 @@ let rec inspect_source root_choice g = + ) mps; + + (* Get list of applications/packages installed. *) +- let apps = g#inspect_list_applications2 root in ++ let apps = list_applications g root package_format in + let apps = Array.to_list apps in + + (* A map of app2_name -> application2, for easier lookups. Note +@@ -106,7 +107,7 @@ let rec inspect_source root_choice g = + i_arch = g#inspect_get_arch root; + i_major_version = g#inspect_get_major_version root; + i_minor_version = g#inspect_get_minor_version root; +- i_package_format = g#inspect_get_package_format root; ++ i_package_format = package_format; + i_package_management = g#inspect_get_package_management root; + i_product_name = g#inspect_get_product_name root; + i_product_variant = g#inspect_get_product_variant root; +@@ -186,6 +187,35 @@ and reject_if_not_installed_image g root = + if fmt <> "installed" then + error (f_"libguestfs thinks this is not an installed operating system (it might be, for example, an installer disk or live CD). If this is wrong, it is probably a bug in libguestfs. root=%s fmt=%s") root fmt + ++(* Wrapper around g#inspect_list_applications2 which, for RPM ++ * guests, on failure tries to rebuild the RPM database before ++ * repeating the operation. ++ *) ++and list_applications g root = function ++ | "rpm" -> ++ (* RPM guest. ++ * ++ * In libguestfs before commit 488245ed6c ("daemon: rpm: Check ++ * return values from librpm calls"), a corrupt RPM database ++ * would return an empty array here with no exception. Hence ++ * the check below which turns empty array => exception. In ++ * libguestfs after that commit, inspect_list_applications2 ++ * will raise an exception if it detects a corrupt RPM database. ++ *) ++ (try ++ let apps = g#inspect_list_applications2 root in ++ if apps = [||] then raise (G.Error "no applications returned"); ++ apps ++ with G.Error msg -> ++ debug "%s" msg; ++ debug "rebuilding RPM database and retrying ..."; ++ ignore (g#sh "rpmdb --rebuilddb"); ++ g#inspect_list_applications2 root ++ ) ++ | _ -> ++ (* Non-RPM guest, just do it. *) ++ g#inspect_list_applications2 root ++ + (* See if this guest could use UEFI to boot. It should use GPT and + * it should have an EFI System Partition (ESP). + * +-- +2.31.1 + diff --git a/SOURCES/0052-update-common-submodule-for-CVE-2022-2211-fix.patch b/SOURCES/0052-update-common-submodule-for-CVE-2022-2211-fix.patch new file mode 100644 index 0000000..ac5ec5e --- /dev/null +++ b/SOURCES/0052-update-common-submodule-for-CVE-2022-2211-fix.patch @@ -0,0 +1,53 @@ +From 5852b85eaa174dfb87ce7a03b9f70e2bffac4ca4 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Wed, 29 Jun 2022 15:44:27 +0200 +Subject: [PATCH] update common submodule for CVE-2022-2211 fix + +$ git shortlog 9e990f3e4530..35467027f657 + +Laszlo Ersek (1): + options: fix buffer overflow in get_keys() [CVE-2022-2211] + +Signed-off-by: Laszlo Ersek +(cherry picked from commit 795d5dfcef77fc54fec4d237bda28571454a6d4e) +--- + common | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Submodule common be09523d..1174b443: +diff --git a/common/options/keys.c b/common/options/keys.c +index 798315c..d27a712 100644 +--- a/common/options/keys.c ++++ b/common/options/keys.c +@@ -128,17 +128,23 @@ read_first_line_from_file (const char *filename) + char ** + get_keys (struct key_store *ks, const char *device, const char *uuid) + { +- size_t i, j, len; ++ size_t i, j, nmemb; + char **r; + char *s; + + /* We know the returned list must have at least one element and not + * more than ks->nr_keys. + */ +- len = 1; +- if (ks) +- len = MIN (1, ks->nr_keys); +- r = calloc (len+1, sizeof (char *)); ++ nmemb = 1; ++ if (ks && ks->nr_keys > nmemb) ++ nmemb = ks->nr_keys; ++ ++ /* make room for the terminating NULL */ ++ if (nmemb == (size_t)-1) ++ error (EXIT_FAILURE, 0, _("size_t overflow")); ++ nmemb++; ++ ++ r = calloc (nmemb, sizeof (char *)); + if (r == NULL) + error (EXIT_FAILURE, errno, "calloc"); + +-- +2.31.1 + diff --git a/SOURCES/copy-patches.sh b/SOURCES/copy-patches.sh index 5abf976..38f8f37 100755 --- a/SOURCES/copy-patches.sh +++ b/SOURCES/copy-patches.sh @@ -6,7 +6,7 @@ set -e # directory. Use it like this: # ./copy-patches.sh -rhel_version=8.6.0 +rhel_version=8.7.0 # Check we're in the right directory. if [ ! -f virt-v2v.spec ]; then diff --git a/SPECS/virt-v2v.spec b/SPECS/virt-v2v.spec index fdece22..f672e99 100644 --- a/SPECS/virt-v2v.spec +++ b/SPECS/virt-v2v.spec @@ -10,7 +10,7 @@ Name: virt-v2v Epoch: 1 Version: 1.42.0 -Release: 19%{?dist} +Release: 21%{?dist} Summary: Convert a virtual machine to run on KVM License: GPLv2+ @@ -83,7 +83,11 @@ Patch0044: 0044-v2v-vcenter-Implement-cookie-scripts.patch Patch0045: 0045-convert-convert_windows.ml-Handle-date-formats-with-.patch Patch0046: 0046-v2v-Force-format-of-input-to-be-specified.patch Patch0047: 0047-v2v-Cope-with-libvirt-vpx-esx-driver-which-does-not-.patch -Patch0048: 0048-convert-If-listing-RPM-applications-fails-rebuild-DB.patch +Patch0048: 0048-o-rhv-upload-wait-for-VM-creation-task.patch +Patch0049: 0049-tests-Add-test-of-i-ova-from-a-directory.patch +Patch0050: 0050-v2v-i-ova-Fix-parsing-if-OVA-directory-name-has-a-tr.patch +Patch0051: 0051-convert-If-listing-RPM-applications-fails-rebuild-DB.patch +Patch0052: 0052-update-common-submodule-for-CVE-2022-2211-fix.patch # Patches which apply to the common/ submodule. # These have to be hand-modified. @@ -327,9 +331,14 @@ rm $RPM_BUILD_ROOT%{_mandir}/man1/virt-v2v-test-harness.1* %changelog -* Tue Jun 07 2022 Richard W.M. Jones - 1:1.42.0-19 -- If listing RPM applications fails, rebuild DB and retry - resolves: rhbz#2093415 +* Tue Jul 05 2022 Richard W.M. Jones - 1:1.42.0-21 +- Fix assertion failure when parsing OVA dir with trailing slash + resolves: rhbz#2028823 +- For -o rhv-upload wait for VM creation task + resolves: rhbz#1985827 +- If listing RPM applications fails, rebuild DB and retry (2089623) +- Fix CVE-2022-2211 Denial of Service in --key parameter + resolves: rhbz#2102720 * Wed Nov 24 2021 Richard W.M. Jones - 1:1.42.0-18 - Additional fix for backing file specified without backing format