From 7e942351c4c2805a615c114f83083999eebad6ec Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Thu, 28 Mar 2024 18:40:22 +0300 Subject: [PATCH] import virt-v2v-2.4.0-2.el9 --- .gitignore | 2 +- .virt-v2v.metadata | 2 +- ...1-virt-v2v-i-vmx-Remove-scp-T-option.patch | 39 + ...0002-Translated-using-Weblate-Polish.patch | 48 + SOURCES/0003-Update-translation-files.patch | 1604 +++++++++++++++++ ...efactor-ssh-scp-code-into-a-new-modu.patch | 301 ++++ ...-virt-v2v-i-vmx-Simplify-scp-wrapper.patch | 84 + ...Add-the-input-password-to-vmx_source.patch | 125 ++ ...emove-dependency-of-ssh.ml-on-Xml.ur.patch | 205 +++ ...bdkit_ssh-Make-retry-filter-optional.patch | 55 + ...eplace-external-ssh-scp-with-nbdkit-.patch | 167 ++ ...ssh-Make-password-parameter-optional.patch | 255 +++ ...nge-parameters-specifying-ssh-server.patch | 104 ++ ...graph-about-ip-passwords-and-ssh-scp.patch | 54 + SOURCES/0013-Update-common-submodule.patch | 60 - ...-nbdinfo-can-connect-instead-of-size.patch | 62 + ...hat-nbdinfo-and-nbdcopy-are-required.patch | 43 + SOURCES/0014-update-common-submodule.patch | 152 -- ...M-conversion-test-rename-VGs-and-LVs.patch | 81 - ...orrect-qemu-binary-for-o-qemu-mode-.patch} | 4 +- ...ersion-test-test-dev-mapper-VG-LV-tr.patch | 34 - ...the-qemu-boot-oo-qemu-boot-option-R.patch} | 14 +- ...supported-sound-cards-to-match-RHEL.patch} | 4 +- ...guests-fix-prerequisite-list-of-fedo.patch | 63 - ...HEL-Fixes-for-libguestfs-winsupport.patch} | 2 +- SOURCES/0018-lib-utils-fix-typo.patch | 30 - ...k-force-VNC-as-display-RHBZ-1372671.patch} | 2 +- ...hown_for_libvirt_rhbz_1045069-fail-h.patch | 96 - ...mention-SUSE-Xen-hosts-RHBZ-1430203.patch} | 4 +- ...cument-libvirt-system-instance-start.patch | 79 - ...for-supported-v2v-hypervisors-guest.patch} | 2 +- ...patch => 0022-RHEL-Disable-o-glance.patch} | 10 +- ...023-RHEL-Remove-the-in-place-option.patch} | 6 +- ...sed-Remove-nbdcopy-version-check-an.patch} | 2 +- ...0025-RHEL-9-tests-Remove-btrfs-test.patch} | 2 +- ...6-RHEL-9-Remove-block-driver-option.patch} | 6 +- SOURCES/copy-patches.sh | 2 +- SOURCES/virt-v2v-2.3.4.tar.gz.sig | 17 - SOURCES/virt-v2v-2.4.0.tar.gz.sig | 17 + SPECS/virt-v2v.spec | 72 +- 40 files changed, 3242 insertions(+), 669 deletions(-) create mode 100644 SOURCES/0001-virt-v2v-i-vmx-Remove-scp-T-option.patch create mode 100644 SOURCES/0002-Translated-using-Weblate-Polish.patch create mode 100644 SOURCES/0003-Update-translation-files.patch create mode 100644 SOURCES/0004-virt-v2v-i-vmx-Refactor-ssh-scp-code-into-a-new-modu.patch create mode 100644 SOURCES/0005-virt-v2v-i-vmx-Simplify-scp-wrapper.patch create mode 100644 SOURCES/0006-virt-v2v-i-vmx-Add-the-input-password-to-vmx_source.patch create mode 100644 SOURCES/0007-virt-v2v-i-vmx-Remove-dependency-of-ssh.ml-on-Xml.ur.patch create mode 100644 SOURCES/0008-input-nbdkit_ssh-Make-retry-filter-optional.patch create mode 100644 SOURCES/0009-virt-v2v-i-vmx-Replace-external-ssh-scp-with-nbdkit-.patch create mode 100644 SOURCES/0010-input-nbdkit_ssh-Make-password-parameter-optional.patch create mode 100644 SOURCES/0011-input-ssh-Rearrange-parameters-specifying-ssh-server.patch create mode 100644 SOURCES/0012-docs-Remove-paragraph-about-ip-passwords-and-ssh-scp.patch delete mode 100644 SOURCES/0013-Update-common-submodule.patch create mode 100644 SOURCES/0013-input-ssh-Use-nbdinfo-can-connect-instead-of-size.patch create mode 100644 SOURCES/0014-build-Document-that-nbdinfo-and-nbdcopy-are-required.patch delete mode 100644 SOURCES/0014-update-common-submodule.patch delete mode 100644 SOURCES/0015-LUKS-on-LVM-conversion-test-rename-VGs-and-LVs.patch rename SOURCES/{0001-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch => 0015-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch} (91%) delete mode 100644 SOURCES/0016-LUKS-on-LVM-conversion-test-test-dev-mapper-VG-LV-tr.patch rename SOURCES/{0002-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch => 0016-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch} (90%) rename SOURCES/{0003-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch => 0017-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch} (88%) delete mode 100644 SOURCES/0017-test-data-phony-guests-fix-prerequisite-list-of-fedo.patch rename SOURCES/{0004-RHEL-Fixes-for-libguestfs-winsupport.patch => 0018-RHEL-Fixes-for-libguestfs-winsupport.patch} (98%) delete mode 100644 SOURCES/0018-lib-utils-fix-typo.patch rename SOURCES/{0005-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch => 0019-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch} (93%) delete mode 100644 SOURCES/0019-lib-utils-make-chown_for_libvirt_rhbz_1045069-fail-h.patch rename SOURCES/{0006-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch => 0020-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch} (87%) delete mode 100644 SOURCES/0020-docs-virt-v2v-document-libvirt-system-instance-start.patch rename SOURCES/{0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch => 0021-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch} (97%) rename SOURCES/{0008-RHEL-Disable-o-glance.patch => 0022-RHEL-Disable-o-glance.patch} (96%) rename SOURCES/{0009-RHEL-Remove-the-in-place-option.patch => 0023-RHEL-Remove-the-in-place-option.patch} (95%) rename SOURCES/{0010-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch => 0024-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch} (96%) rename SOURCES/{0011-RHEL-9-tests-Remove-btrfs-test.patch => 0025-RHEL-9-tests-Remove-btrfs-test.patch} (91%) rename SOURCES/{0012-RHEL-9-Remove-block-driver-option.patch => 0026-RHEL-9-Remove-block-driver-option.patch} (97%) delete mode 100644 SOURCES/virt-v2v-2.3.4.tar.gz.sig create mode 100644 SOURCES/virt-v2v-2.4.0.tar.gz.sig diff --git a/.gitignore b/.gitignore index cb5e13e..c6f6094 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ SOURCES/libguestfs.keyring -SOURCES/virt-v2v-2.3.4.tar.gz +SOURCES/virt-v2v-2.4.0.tar.gz diff --git a/.virt-v2v.metadata b/.virt-v2v.metadata index 6ee5b1c..ef86ac0 100644 --- a/.virt-v2v.metadata +++ b/.virt-v2v.metadata @@ -1,2 +1,2 @@ 1bbc40f501a7fef9eef2a39b701a71aee2fea7c4 SOURCES/libguestfs.keyring -6c170400aeacfe53828b4fdbfdcbca2423b9e753 SOURCES/virt-v2v-2.3.4.tar.gz +52029cc7c3f9e05ec9685995ad86955154d7b28e SOURCES/virt-v2v-2.4.0.tar.gz diff --git a/SOURCES/0001-virt-v2v-i-vmx-Remove-scp-T-option.patch b/SOURCES/0001-virt-v2v-i-vmx-Remove-scp-T-option.patch new file mode 100644 index 0000000..50b3c3e --- /dev/null +++ b/SOURCES/0001-virt-v2v-i-vmx-Remove-scp-T-option.patch @@ -0,0 +1,39 @@ +From af68f253d1a11c4abaa30ae348ee3855cdec74e9 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 11 Jan 2024 15:33:08 +0000 +Subject: [PATCH] virt-v2v: -i vmx: Remove scp -T option + +This reverts the following commit: + + commit d265639c2ab31418cfdbdedd0cc3e68cf290d834 + Author: Richard W.M. Jones + Date: Thu Jul 25 14:52:42 2019 +0100 + + v2v: -i vmx: Use scp -T option if available to unbreak scp (RHBZ#1733168). + +See also the referenced bug: +https://bugzilla.redhat.com/show_bug.cgi?id=1733168 + +My rationale for removing this option is that since we now require +OpenSSH 8.8 we must be using sftp for file transfer so we no longer +need to defeat the check for correct expansion of wildcards. That +check was only relevant for OpenSSH <= 8.7 using the old scp protocol. + +Reverts: commit d265639c2ab31418cfdbdedd0cc3e68cf290d834 +--- + input/parse_domain_from_vmx.ml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/input/parse_domain_from_vmx.ml b/input/parse_domain_from_vmx.ml +index 2e75e785..f24990f8 100644 +--- a/input/parse_domain_from_vmx.ml ++++ b/input/parse_domain_from_vmx.ml +@@ -68,7 +68,7 @@ let scp_from_remote_to_temporary uri tmpdir filename = + let localfile = tmpdir // filename in + + let cmd = +- sprintf "scp -T%s%s %s%s:%s %s" ++ sprintf "scp%s%s %s%s:%s %s" + (if verbose () then "" else " -q") + (match port_of_uri uri with + | None -> "" diff --git a/SOURCES/0002-Translated-using-Weblate-Polish.patch b/SOURCES/0002-Translated-using-Weblate-Polish.patch new file mode 100644 index 0000000..7d14026 --- /dev/null +++ b/SOURCES/0002-Translated-using-Weblate-Polish.patch @@ -0,0 +1,48 @@ +From 60d4a517e43f0715fb9dc4f87cbd2f5c88ab662a Mon Sep 17 00:00:00 2001 +From: Weblate Translation Memory + +Date: Mon, 15 Jan 2024 14:37:13 +0100 +Subject: [PATCH] Translated using Weblate (Polish) + +Currently translated at 7.2% (35 of 481 strings) + +Translation: libguestfs/virt-v2v-master +Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/virt-v2v-master/pl/ +--- + po/pl.po | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/po/pl.po b/po/pl.po +index d4bee25f..e3a5b11d 100644 +--- a/po/pl.po ++++ b/po/pl.po +@@ -14,8 +14,9 @@ msgstr "" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug." + "cgi?component=libguestfs&product=Virtualization+Tools\n" + "POT-Creation-Date: 2023-11-02 11:07+0000\n" +-"PO-Revision-Date: 2023-11-26 21:01+0000\n" +-"Last-Translator: Piotr Drąg \n" ++"PO-Revision-Date: 2024-01-15 13:36+0000\n" ++"Last-Translator: Weblate Translation Memory \n" + "Language-Team: Polish \n" + "Language: pl\n" +@@ -24,7 +25,7 @@ msgstr "" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " + "|| n%100>=20) ? 1 : 2;\n" +-"X-Generator: Weblate 5.2.1\n" ++"X-Generator: Weblate 5.3.1\n" + + #: input/input_ova.ml:136 common/mltools/tools_utils.ml:235 + msgid "%s" +@@ -735,7 +736,7 @@ msgstr "" + #. common/mlcustomize/customize_cmdline.ml:245 + #: common/mlcustomize/customize_cmdline.ml:453 + msgid "PATH" +-msgstr "" ++msgstr "ŚCIEŻKA" + + #: common/mlcustomize/customize_cmdline.ml:191 + msgid "PERMISSIONS:FILE" diff --git a/SOURCES/0003-Update-translation-files.patch b/SOURCES/0003-Update-translation-files.patch new file mode 100644 index 0000000..f9efbff --- /dev/null +++ b/SOURCES/0003-Update-translation-files.patch @@ -0,0 +1,1604 @@ +From 2d227fc060f51cd9b4cdc7713245138c6ed043ae Mon Sep 17 00:00:00 2001 +From: Weblate +Date: Mon, 15 Jan 2024 14:37:14 +0100 +Subject: [PATCH] Update translation files + +Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. + +Translation: libguestfs/virt-v2v-master +Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/virt-v2v-master/ +--- + po/cs.po | 24 ++++++++++++------------ + po/de.po | 24 ++++++++++++------------ + po/es.po | 24 ++++++++++++------------ + po/fi.po | 24 ++++++++++++------------ + po/fr.po | 24 ++++++++++++------------ + po/gu.po | 24 ++++++++++++------------ + po/hi.po | 24 ++++++++++++------------ + po/ja.po | 24 ++++++++++++------------ + po/ka.po | 28 ++++++++++++++-------------- + po/kn.po | 24 ++++++++++++------------ + po/ml.po | 24 ++++++++++++------------ + po/mr.po | 24 ++++++++++++------------ + po/nl.po | 24 ++++++++++++------------ + po/or.po | 24 ++++++++++++------------ + po/pa.po | 24 ++++++++++++------------ + po/pl.po | 28 ++++++++++++++-------------- + po/si.po | 24 ++++++++++++------------ + po/uk.po | 24 ++++++++++++------------ + 18 files changed, 220 insertions(+), 220 deletions(-) + +diff --git a/po/cs.po b/po/cs.po +index aeb55d57..415a9b9b 100644 +--- a/po/cs.po ++++ b/po/cs.po +@@ -4,7 +4,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2023-04-08 18:20+0000\n" + "Last-Translator: Pavel Borecki \n" + "Language-Team: Czech \n" + "Language-Team: German (http://www.transifex.com/projects/p/libguestfs/" +@@ -1899,32 +1899,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2248,11 +2248,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2390,17 +2390,17 @@ msgstr "Betriebssystem: %s\n" + msgid "%s mounted on %s\n" + msgstr "%s eingehängt auf %s\n" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "Schlüssel oder Passphrase eingeben („%s“): " + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, c-format + msgid "could not read key from user" + msgstr "" +diff --git a/po/es.po b/po/es.po +index 2929430d..065cd2b7 100644 +--- a/po/es.po ++++ b/po/es.po +@@ -12,7 +12,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2015-03-16 07:04+0000\n" + "Last-Translator: Alex Puchades \n" + "Language-Team: Spanish (http://www.transifex.com/projects/p/libguestfs/" +@@ -1890,32 +1890,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2233,11 +2233,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2377,17 +2377,17 @@ msgstr "Sistema operativo: %s\n" + msgid "%s mounted on %s\n" + msgstr "%s montado en %s\n" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "Ingrese la llave o la frase de acceso (\"%s\"): " + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, fuzzy, c-format + #| msgid "could not parse boot size" + msgid "could not read key from user" +diff --git a/po/fi.po b/po/fi.po +index 3c382984..787abc74 100644 +--- a/po/fi.po ++++ b/po/fi.po +@@ -8,7 +8,7 @@ msgstr "" + "Project-Id-Version: virt-v2v 1.43.4\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2022-12-23 18:20+0000\n" + "Last-Translator: Jan Kuparinen \n" + "Language-Team: Finnish \n" + "Language-Team: French \n" + "Language-Team: Gujarati (http://www.transifex.com/projects/p/libguestfs/" +@@ -1888,32 +1888,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2231,11 +2231,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2373,17 +2373,17 @@ msgstr "ઓપરેટીંગ સિસ્ટમ: %s\n" + msgid "%s mounted on %s\n" + msgstr "" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "કી અથવા પાસફ્રેઝને દાખલ કરો (\"%s\"): " + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, fuzzy, c-format + #| msgid "could not parse boot size" + msgid "could not read key from user" +diff --git a/po/hi.po b/po/hi.po +index 6e2116e5..11f334ce 100644 +--- a/po/hi.po ++++ b/po/hi.po +@@ -10,7 +10,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2015-02-21 10:49+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Hindi (http://www.transifex.com/projects/p/libguestfs/" +@@ -1886,32 +1886,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2229,11 +2229,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2371,17 +2371,17 @@ msgstr "" + msgid "%s mounted on %s\n" + msgstr "" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "" + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, c-format + msgid "could not read key from user" + msgstr "" +diff --git a/po/ja.po b/po/ja.po +index 30cb89c2..7c806c19 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -11,7 +11,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2017-02-24 07:33+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Japanese (http://www.transifex.com/projects/p/libguestfs/" +@@ -1897,32 +1897,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2244,11 +2244,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2387,17 +2387,17 @@ msgstr "オペレーティングシステム: %s\n" + msgid "%s mounted on %s\n" + msgstr "%s を %s にマウントしました\n" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "キーかパスフレーズを入力してください。(\"%s\"): " + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, fuzzy, c-format + #| msgid "could not parse boot size" + msgid "could not read key from user" +diff --git a/po/ka.po b/po/ka.po +index 53881487..42ce7c68 100644 +--- a/po/ka.po ++++ b/po/ka.po +@@ -6,9 +6,9 @@ + msgid "" + msgstr "" + "Project-Id-Version: virt-v2v 2.1.1\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug." +-"cgi?component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" ++"component=libguestfs&product=Virtualization+Tools\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2023-11-26 21:01+0000\n" + "Last-Translator: Temuri Doghonadze \n" + "Language-Team: Georgian \n" + "Language-Team: Kannada (http://www.transifex.com/projects/p/libguestfs/" +@@ -1885,32 +1885,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2226,11 +2226,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2368,17 +2368,17 @@ msgstr "" + msgid "%s mounted on %s\n" + msgstr "" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "" + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, c-format + msgid "could not read key from user" + msgstr "" +diff --git a/po/ml.po b/po/ml.po +index e1a7db7c..172994fb 100644 +--- a/po/ml.po ++++ b/po/ml.po +@@ -9,7 +9,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2015-02-21 10:50+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Malayalam (http://www.transifex.com/projects/p/libguestfs/" +@@ -1885,32 +1885,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2228,11 +2228,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2370,17 +2370,17 @@ msgstr "" + msgid "%s mounted on %s\n" + msgstr "" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "" + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, c-format + msgid "could not read key from user" + msgstr "" +diff --git a/po/mr.po b/po/mr.po +index a9bde2b0..cfa072d6 100644 +--- a/po/mr.po ++++ b/po/mr.po +@@ -10,7 +10,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2015-02-21 10:51+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Marathi (http://www.transifex.com/projects/p/libguestfs/" +@@ -1888,32 +1888,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2231,11 +2231,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2373,17 +2373,17 @@ msgstr "कार्यप्रणाली: %s\n" + msgid "%s mounted on %s\n" + msgstr "%s ला %s वर माऊंट केले\n" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "कि किंवा पासफ्रेज द्या (\"%s\"): " + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, fuzzy, c-format + #| msgid "could not parse boot size" + msgid "could not read key from user" +diff --git a/po/nl.po b/po/nl.po +index 4f2f0e1f..7757ba38 100644 +--- a/po/nl.po ++++ b/po/nl.po +@@ -11,7 +11,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2015-02-21 10:51+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Dutch (http://www.transifex.com/projects/p/libguestfs/" +@@ -1893,32 +1893,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2236,11 +2236,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2379,17 +2379,17 @@ msgstr "Besturingssysteem: %s\n" + msgid "%s mounted on %s\n" + msgstr "%s aangekoppeld op %s\n" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "Vul sleutel of wachtzin in (\"%s\"): " + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, fuzzy, c-format + #| msgid "could not parse boot size" + msgid "could not read key from user" +diff --git a/po/or.po b/po/or.po +index 532d60ff..cb0b6f9a 100644 +--- a/po/or.po ++++ b/po/or.po +@@ -9,7 +9,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2015-02-21 10:51+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Oriya (http://www.transifex.com/projects/p/libguestfs/" +@@ -1885,32 +1885,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2228,11 +2228,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2370,17 +2370,17 @@ msgstr "" + msgid "%s mounted on %s\n" + msgstr "" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "" + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, c-format + msgid "could not read key from user" + msgstr "" +diff --git a/po/pa.po b/po/pa.po +index 4b5fe247..9b4e9bca 100644 +--- a/po/pa.po ++++ b/po/pa.po +@@ -10,7 +10,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2015-02-21 10:52+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/" +@@ -1888,32 +1888,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2231,11 +2231,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2373,17 +2373,17 @@ msgstr "ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ: %s\n" + msgid "%s mounted on %s\n" + msgstr "%s ਨੂੰ %s ਉੱਪਰ ਮਾਊਂਟ ਕੀਤਾ ਗਿਆ ਹੈ\n" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "ਕੁੰਜੀ ਜਾਂ ਗੁਪਤਕੋਡ ਦਿਓ (\"%s\"): " + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, fuzzy, c-format + #| msgid "could not parse boot size" + msgid "could not read key from user" +diff --git a/po/pl.po b/po/pl.po +index e3a5b11d..bb8acef7 100644 +--- a/po/pl.po ++++ b/po/pl.po +@@ -11,9 +11,9 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug." +-"cgi?component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" ++"component=libguestfs&product=Virtualization+Tools\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2024-01-15 13:36+0000\n" + "Last-Translator: Weblate Translation Memory \n" +@@ -1895,32 +1895,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2240,11 +2240,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2382,17 +2382,17 @@ msgstr "System operacyjny: %s\n" + msgid "%s mounted on %s\n" + msgstr "%s zamontowano w %s\n" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "Proszę podać klucz lub hasło („%s”): " + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, c-format + msgid "could not read key from user" + msgstr "nie można odczytać klucza od użytkownika" +diff --git a/po/si.po b/po/si.po +index 0b40cead..62d45590 100644 +--- a/po/si.po ++++ b/po/si.po +@@ -8,7 +8,7 @@ msgstr "" + "Project-Id-Version: virt-v2v 1.43.3\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" + "Last-Translator: Automatically generated\n" + "Language-Team: none\n" +@@ -1882,32 +1882,32 @@ msgid "" + "broken in some way. Please report this as a bug with a full debug log." + msgstr "" + +-#: common/mltools/tools_utils.ml:417 common/options/keys.c:258 ++#: common/mltools/tools_utils.ml:417 common/options/keys.c:263 + #, c-format + msgid "selector '%s': invalid TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:409 common/options/keys.c:248 ++#: common/mltools/tools_utils.ml:409 common/options/keys.c:253 + #, c-format + msgid "selector '%s': missing FILENAME, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:399 common/options/keys.c:226 ++#: common/mltools/tools_utils.ml:399 common/options/keys.c:231 + #, c-format + msgid "selector '%s': missing ID" + msgstr "" + +-#: common/mltools/tools_utils.ml:404 common/options/keys.c:239 ++#: common/mltools/tools_utils.ml:404 common/options/keys.c:244 + #, c-format + msgid "selector '%s': missing KEY_STRING, or too many fields" + msgstr "" + +-#: common/mltools/tools_utils.ml:401 common/options/keys.c:233 ++#: common/mltools/tools_utils.ml:401 common/options/keys.c:238 + #, c-format + msgid "selector '%s': missing TYPE" + msgstr "" + +-#: common/mltools/tools_utils.ml:413 common/options/keys.c:256 ++#: common/mltools/tools_utils.ml:413 common/options/keys.c:261 + #, c-format + msgid "selector '%s': too many fields" + msgstr "" +@@ -2225,11 +2225,11 @@ msgstr "" + msgid "vmx URI start with ‘ssh://...’" + msgstr "" + +-#: input/parse_vmx.ml:302 ++#: input/parse_vmx.ml:313 + msgid "vmx parser: cannot parse this line, ignoring: %s" + msgstr "" + +-#: input/parse_vmx.ml:335 ++#: input/parse_vmx.ml:346 + msgid "vmx parser: duplicate key '%s' ignored" + msgstr "" + +@@ -2367,17 +2367,17 @@ msgstr "" + msgid "%s mounted on %s\n" + msgstr "" + +-#: common/options/keys.c:62 ++#: common/options/keys.c:63 + #, c-format + msgid "Enter key or passphrase (\"%s\"): " + msgstr "" + +-#: common/options/keys.c:144 ++#: common/options/keys.c:145 + #, c-format + msgid "size_t overflow" + msgstr "" + +-#: common/options/keys.c:187 ++#: common/options/keys.c:192 + #, c-format + msgid "could not read key from user" + msgstr "" +diff --git a/po/uk.po b/po/uk.po +index 62b6766d..5a802677 100644 +--- a/po/uk.po ++++ b/po/uk.po +@@ -14,7 +14,7 @@ msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" + "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" + "component=libguestfs&product=Virtualization+Tools\n" +-"POT-Creation-Date: 2023-11-02 11:07+0000\n" ++"POT-Creation-Date: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2023-06-05 07:20+0000\n" + "Last-Translator: Yuri Chornoivan \n" + "Language-Team: Ukrainian +Date: Mon, 15 Jan 2024 14:24:35 +0000 +Subject: [PATCH] virt-v2v: -i vmx: Refactor ssh/scp code into a new module + +This is a straight refactor of the existing code that handles ssh/scp +into a new module. In this commit I just copy the code around without +doing any cleanup; cleanup will follow in subsequent commits. + +Reviewed-by: Laszlo Ersek +--- + input/Makefile.am | 6 ++- + input/input_vmx.ml | 8 ++-- + input/parse_domain_from_vmx.ml | 60 ++----------------------- + input/parse_domain_from_vmx.mli | 6 --- + input/ssh.ml | 78 +++++++++++++++++++++++++++++++++ + input/ssh.mli | 34 ++++++++++++++ + 6 files changed, 123 insertions(+), 69 deletions(-) + create mode 100644 input/ssh.ml + create mode 100644 input/ssh.mli + +diff --git a/input/Makefile.am b/input/Makefile.am +index de016d60..4153f878 100644 +--- a/input/Makefile.am ++++ b/input/Makefile.am +@@ -39,6 +39,7 @@ SOURCES_MLI = \ + parse_domain_from_vmx.mli \ + parse_libvirt_xml.mli \ + parse_vmx.mli \ ++ ssh.mli \ + vCenter.mli + + SOURCES_ML = \ +@@ -46,11 +47,12 @@ SOURCES_ML = \ + parse_libvirt_xml.ml \ + OVF.ml \ + OVA.ml \ +- parse_vmx.ml \ +- parse_domain_from_vmx.ml \ + nbdkit_curl.ml \ + nbdkit_ssh.ml \ + nbdkit_vddk.ml \ ++ ssh.ml \ ++ parse_vmx.ml \ ++ parse_domain_from_vmx.ml \ + vCenter.ml \ + input.ml \ + input_disk.ml \ +diff --git a/input/input_vmx.ml b/input/input_vmx.ml +index eed8a433..bd20420c 100644 +--- a/input/input_vmx.ml ++++ b/input/input_vmx.ml +@@ -79,21 +79,21 @@ module VMX = struct + let socket = sprintf "%s/in%d" dir i in + On_exit.unlink socket; + +- let vmx_path = path_of_uri uri in ++ let vmx_path = Ssh.path_of_uri uri in + let abs_path = absolute_path_from_other_file vmx_path filename in + let flat_vmdk = PCRE.replace (PCRE.compile "\\.vmdk$") + "-flat.vmdk" abs_path in + + (* RHBZ#1774386 *) +- if not (remote_file_exists uri flat_vmdk) then ++ if not (Ssh.remote_file_exists uri flat_vmdk) then + error (f_"This transport does not support guests with snapshots. \ + Either collapse the snapshots for this guest and try \ + the conversion again, or use one of the alternate \ + conversion methods described in \ + virt-v2v-input-vmware(1) section \"NOTES\"."); + +- let server = server_of_uri uri in +- let port = Option.map string_of_int (port_of_uri uri) in ++ let server = Ssh.server_of_uri uri in ++ let port = Option.map string_of_int (Ssh.port_of_uri uri) in + let user = uri.Xml.uri_user in + let password = + match options.input_password with +diff --git a/input/parse_domain_from_vmx.ml b/input/parse_domain_from_vmx.ml +index f24990f8..8cf5893c 100644 +--- a/input/parse_domain_from_vmx.ml ++++ b/input/parse_domain_from_vmx.ml +@@ -51,61 +51,6 @@ let vmx_source_of_arg input_transport arg = + error (f_"vmx URI path component looks incorrect"); + SSH uri + +-(* Return various fields from the URI. The checks in vmx_source_of_arg +- * should ensure that none of these assertions fail. +- *) +-let port_of_uri { Xml.uri_port } = +- match uri_port with i when i <= 0 -> None | i -> Some i +-let server_of_uri { Xml.uri_server } = +- match uri_server with None -> assert false | Some s -> s +-let path_of_uri { Xml.uri_path } = +- match uri_path with None -> assert false | Some p -> p +- +-(* 'scp' a remote file into a temporary local file, returning the path +- * of the temporary local file. +- *) +-let scp_from_remote_to_temporary uri tmpdir filename = +- let localfile = tmpdir // filename in +- +- let cmd = +- sprintf "scp%s%s %s%s:%s %s" +- (if verbose () then "" else " -q") +- (match port_of_uri uri with +- | None -> "" +- | Some port -> sprintf " -P %d" port) +- (match uri.Xml.uri_user with +- | None -> "" +- | Some user -> quote user ^ "@") +- (quote (server_of_uri uri)) +- (quote (path_of_uri uri)) +- (quote localfile) in +- if verbose () then +- eprintf "%s\n%!" cmd; +- if Sys.command cmd <> 0 then +- error (f_"could not copy the VMX file from the remote server, \ +- see earlier error messages"); +- localfile +- +-(* Test if [path] exists on the remote server. *) +-let remote_file_exists uri path = +- let cmd = +- sprintf "ssh%s %s%s test -f %s" +- (match port_of_uri uri with +- | None -> "" +- | Some port -> sprintf " -p %d" port) +- (match uri.Xml.uri_user with +- | None -> "" +- | Some user -> quote user ^ "@") +- (quote (server_of_uri uri)) +- (* Double quoting is necessary for 'ssh', first to protect +- * from the local shell, second to protect from the remote +- * shell. https://github.com/libguestfs/virt-v2v/issues/35#issuecomment-1741730963 +- *) +- (quote (quote path)) in +- if verbose () then +- eprintf "%s\n%!" cmd; +- Sys.command cmd = 0 +- + let rec find_disks vmx vmx_source = + (* Set the s_disk_id field to an incrementing number. *) + List.mapi +@@ -390,7 +335,8 @@ let parse_domain_from_vmx vmx_source = + match vmx_source with + | File filename -> Parse_vmx.parse_file filename + | SSH uri -> +- let filename = scp_from_remote_to_temporary uri tmpdir "source.vmx" in ++ let filename = Ssh.scp_from_remote_to_temporary uri tmpdir ++ "source.vmx" in + Parse_vmx.parse_file filename in + + let name = +@@ -400,7 +346,7 @@ let parse_domain_from_vmx vmx_source = + warning (f_"no displayName key found in VMX file"); + match vmx_source with + | File filename -> name_from_disk filename +- | SSH uri -> name_from_disk (path_of_uri uri) in ++ | SSH uri -> name_from_disk (Ssh.path_of_uri uri) in + + let genid = + (* See: https://lists.nongnu.org/archive/html/qemu-devel/2018-07/msg02019.html *) +diff --git a/input/parse_domain_from_vmx.mli b/input/parse_domain_from_vmx.mli +index e354b32e..42f8100e 100644 +--- a/input/parse_domain_from_vmx.mli ++++ b/input/parse_domain_from_vmx.mli +@@ -22,9 +22,3 @@ type vmx_source = + + val vmx_source_of_arg : [`SSH] option -> string -> vmx_source + val parse_domain_from_vmx : vmx_source -> Types.source * string list +- +-(* XXX Exporting these is a hack. *) +-val path_of_uri : Xml.uri -> string +-val server_of_uri : Xml.uri -> string +-val port_of_uri : Xml.uri -> int option +-val remote_file_exists : Xml.uri -> string -> bool +diff --git a/input/ssh.ml b/input/ssh.ml +new file mode 100644 +index 00000000..5e689d29 +--- /dev/null ++++ b/input/ssh.ml +@@ -0,0 +1,78 @@ ++(* virt-v2v ++ * Copyright (C) 2009-2024 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 Tools_utils ++open Common_gettext.Gettext ++ ++open Printf ++ ++(* Return various fields from the URI. The checks in vmx_source_of_arg ++ * should ensure that none of these assertions fail. ++ *) ++let port_of_uri { Xml.uri_port } = ++ match uri_port with i when i <= 0 -> None | i -> Some i ++let server_of_uri { Xml.uri_server } = ++ match uri_server with None -> assert false | Some s -> s ++let path_of_uri { Xml.uri_path } = ++ match uri_path with None -> assert false | Some p -> p ++ ++(* 'scp' a remote file into a temporary local file, returning the path ++ * of the temporary local file. ++ *) ++let scp_from_remote_to_temporary uri tmpdir filename = ++ let localfile = tmpdir // filename in ++ ++ let cmd = ++ sprintf "scp%s%s %s%s:%s %s" ++ (if verbose () then "" else " -q") ++ (match port_of_uri uri with ++ | None -> "" ++ | Some port -> sprintf " -P %d" port) ++ (match uri.Xml.uri_user with ++ | None -> "" ++ | Some user -> quote user ^ "@") ++ (quote (server_of_uri uri)) ++ (quote (path_of_uri uri)) ++ (quote localfile) in ++ if verbose () then ++ eprintf "%s\n%!" cmd; ++ if Sys.command cmd <> 0 then ++ error (f_"could not copy the VMX file from the remote server, \ ++ see earlier error messages"); ++ localfile ++ ++(* Test if [path] exists on the remote server. *) ++let remote_file_exists uri path = ++ let cmd = ++ sprintf "ssh%s %s%s test -f %s" ++ (match port_of_uri uri with ++ | None -> "" ++ | Some port -> sprintf " -p %d" port) ++ (match uri.Xml.uri_user with ++ | None -> "" ++ | Some user -> quote user ^ "@") ++ (quote (server_of_uri uri)) ++ (* Double quoting is necessary for 'ssh', first to protect ++ * from the local shell, second to protect from the remote ++ * shell. https://github.com/libguestfs/virt-v2v/issues/35#issuecomment-1741730963 ++ *) ++ (quote (quote path)) in ++ if verbose () then ++ eprintf "%s\n%!" cmd; ++ Sys.command cmd = 0 +diff --git a/input/ssh.mli b/input/ssh.mli +new file mode 100644 +index 00000000..e9a1a6a8 +--- /dev/null ++++ b/input/ssh.mli +@@ -0,0 +1,34 @@ ++(* virt-v2v ++ * Copyright (C) 2009-2024 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. ++ *) ++ ++(** Wrappers for finding and downloading remote files over ssh. *) ++ ++val path_of_uri : Xml.uri -> string ++val server_of_uri : Xml.uri -> string ++val port_of_uri : Xml.uri -> int option ++ ++(** [remote_file_exists ssh_uri path] checks that [path] exists ++ on the remote server [ssh_uri] (note any path inside [ssh_uri] ++ is ignored). *) ++val remote_file_exists : Xml.uri -> string -> bool ++ ++(** [scp_from_remote_to_temporary ssh_uri tmpdir filename] ++ uses scp to copy the single remote file at [ssh_uri] to ++ the local file called [tmpdir/filename]. It returns the ++ final path [tmpdir/filename]. *) ++val scp_from_remote_to_temporary : Xml.uri -> string -> string -> string diff --git a/SOURCES/0005-virt-v2v-i-vmx-Simplify-scp-wrapper.patch b/SOURCES/0005-virt-v2v-i-vmx-Simplify-scp-wrapper.patch new file mode 100644 index 0000000..7ed4262 --- /dev/null +++ b/SOURCES/0005-virt-v2v-i-vmx-Simplify-scp-wrapper.patch @@ -0,0 +1,84 @@ +From a0b22af28782a485cc2241dce55b8f435d8aaefc Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 15 Jan 2024 14:35:57 +0000 +Subject: [PATCH] virt-v2v: -i vmx: Simplify scp wrapper + +The existing 'scp_from_remote_to_temporary' wrapper around scp was +pretty weird (I think from much patching without refactoring). +Simplify it so it no longer generates the output filename, and rename +it accordingly to 'download_file' (as we will soon remove the need for +and dependency on 'scp'). + +Reviewed-by: Laszlo Ersek +--- + input/parse_domain_from_vmx.ml | 4 ++-- + input/ssh.ml | 13 ++++--------- + input/ssh.mli | 7 +++---- + 3 files changed, 9 insertions(+), 15 deletions(-) + +diff --git a/input/parse_domain_from_vmx.ml b/input/parse_domain_from_vmx.ml +index 8cf5893c..e6500da6 100644 +--- a/input/parse_domain_from_vmx.ml ++++ b/input/parse_domain_from_vmx.ml +@@ -335,8 +335,8 @@ let parse_domain_from_vmx vmx_source = + match vmx_source with + | File filename -> Parse_vmx.parse_file filename + | SSH uri -> +- let filename = Ssh.scp_from_remote_to_temporary uri tmpdir +- "source.vmx" in ++ let filename = tmpdir // "source.vmx" in ++ Ssh.download_file uri filename; + Parse_vmx.parse_file filename in + + let name = +diff --git a/input/ssh.ml b/input/ssh.ml +index 5e689d29..63ffeb12 100644 +--- a/input/ssh.ml ++++ b/input/ssh.ml +@@ -32,12 +32,8 @@ let server_of_uri { Xml.uri_server } = + let path_of_uri { Xml.uri_path } = + match uri_path with None -> assert false | Some p -> p + +-(* 'scp' a remote file into a temporary local file, returning the path +- * of the temporary local file. +- *) +-let scp_from_remote_to_temporary uri tmpdir filename = +- let localfile = tmpdir // filename in +- ++(* 'scp' a remote file into a local file. *) ++let download_file uri output = + let cmd = + sprintf "scp%s%s %s%s:%s %s" + (if verbose () then "" else " -q") +@@ -49,13 +45,12 @@ let scp_from_remote_to_temporary uri tmpdir filename = + | Some user -> quote user ^ "@") + (quote (server_of_uri uri)) + (quote (path_of_uri uri)) +- (quote localfile) in ++ (quote output) in + if verbose () then + eprintf "%s\n%!" cmd; + if Sys.command cmd <> 0 then + error (f_"could not copy the VMX file from the remote server, \ +- see earlier error messages"); +- localfile ++ see earlier error messages") + + (* Test if [path] exists on the remote server. *) + let remote_file_exists uri path = +diff --git a/input/ssh.mli b/input/ssh.mli +index e9a1a6a8..62e78bd3 100644 +--- a/input/ssh.mli ++++ b/input/ssh.mli +@@ -27,8 +27,7 @@ val port_of_uri : Xml.uri -> int option + is ignored). *) + val remote_file_exists : Xml.uri -> string -> bool + +-(** [scp_from_remote_to_temporary ssh_uri tmpdir filename] ++(** [download_file ssh_uri output] + uses scp to copy the single remote file at [ssh_uri] to +- the local file called [tmpdir/filename]. It returns the +- final path [tmpdir/filename]. *) +-val scp_from_remote_to_temporary : Xml.uri -> string -> string -> string ++ the local file called [output]. *) ++val download_file : Xml.uri -> string -> unit diff --git a/SOURCES/0006-virt-v2v-i-vmx-Add-the-input-password-to-vmx_source.patch b/SOURCES/0006-virt-v2v-i-vmx-Add-the-input-password-to-vmx_source.patch new file mode 100644 index 0000000..808a696 --- /dev/null +++ b/SOURCES/0006-virt-v2v-i-vmx-Add-the-input-password-to-vmx_source.patch @@ -0,0 +1,125 @@ +From 60e72acb344e89656f7b13d9e360d05cc983a419 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 15 Jan 2024 16:14:10 +0000 +Subject: [PATCH] virt-v2v: -i vmx: Add the input password to vmx_source + +Since we use the input password in various places in the VMX module, +store the input password in vmx_source. This neutral refactoring +makes later changes simpler. + +Reviewed-by: Laszlo Ersek +--- + input/input_vmx.ml | 13 ++++++------- + input/parse_domain_from_vmx.ml | 12 ++++++------ + input/parse_domain_from_vmx.mli | 7 ++++--- + 3 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/input/input_vmx.ml b/input/input_vmx.ml +index bd20420c..b9cce10f 100644 +--- a/input/input_vmx.ml ++++ b/input/input_vmx.ml +@@ -45,13 +45,17 @@ module VMX = struct + let vmx_source = + match args with + | [arg] -> ++ let input_password = ++ match options.input_password with ++ | None -> Nbdkit_ssh.NoPassword ++ | Some ip -> Nbdkit_ssh.PasswordFile ip in + let input_transport = + match options.input_transport with + | None -> None + | Some `SSH -> Some `SSH + | Some `VDDK -> + error (f_"-i vmx: cannot use -it vddk in this input mode") in +- vmx_source_of_arg input_transport arg ++ vmx_source_of_arg input_password input_transport arg + | _ -> + error (f_"-i vmx: expecting a VMX file or ssh:// URI") in + +@@ -73,7 +77,7 @@ module VMX = struct + On_exit.kill pid + ) filenames + +- | SSH uri -> ++ | SSH (password, uri) -> + List.iteri ( + fun i filename -> + let socket = sprintf "%s/in%d" dir i in +@@ -95,11 +99,6 @@ module VMX = struct + let server = Ssh.server_of_uri uri in + let port = Option.map string_of_int (Ssh.port_of_uri uri) in + let user = uri.Xml.uri_user in +- let password = +- match options.input_password with +- | None -> Nbdkit_ssh.NoPassword +- | Some ip -> Nbdkit_ssh.PasswordFile ip in +- + let cor = dir // "convert" in + let bandwidth = options.bandwidth in + let nbdkit = Nbdkit_ssh.create_ssh ?bandwidth ~cor ~password +diff --git a/input/parse_domain_from_vmx.ml b/input/parse_domain_from_vmx.ml +index e6500da6..0719738c 100644 +--- a/input/parse_domain_from_vmx.ml ++++ b/input/parse_domain_from_vmx.ml +@@ -29,13 +29,13 @@ open Utils + open Name_from_disk + + type vmx_source = +- | File of string (* local file or NFS *) +- | SSH of Xml.uri (* SSH URI *) ++ | File of string (* local file or NFS *) ++ | SSH of Nbdkit_ssh.password * Xml.uri (* SSH URI *) + + (* The single filename on the command line is intepreted either as + * a local file or a remote SSH URI (only if ‘-it ssh’). + *) +-let vmx_source_of_arg input_transport arg = ++let vmx_source_of_arg input_password input_transport arg = + match input_transport, arg with + | None, arg -> File arg + | Some `SSH, arg -> +@@ -49,7 +49,7 @@ let vmx_source_of_arg input_transport arg = + error (f_"vmx URI remote server name omitted"); + if uri.Xml.uri_path = None || uri.Xml.uri_path = Some "/" then + error (f_"vmx URI path component looks incorrect"); +- SSH uri ++ SSH (input_password, uri) + + let rec find_disks vmx vmx_source = + (* Set the s_disk_id field to an incrementing number. *) +@@ -334,7 +334,7 @@ let parse_domain_from_vmx vmx_source = + let vmx = + match vmx_source with + | File filename -> Parse_vmx.parse_file filename +- | SSH uri -> ++ | SSH (_, uri) -> + let filename = tmpdir // "source.vmx" in + Ssh.download_file uri filename; + Parse_vmx.parse_file filename in +@@ -346,7 +346,7 @@ let parse_domain_from_vmx vmx_source = + warning (f_"no displayName key found in VMX file"); + match vmx_source with + | File filename -> name_from_disk filename +- | SSH uri -> name_from_disk (Ssh.path_of_uri uri) in ++ | SSH (_, uri) -> name_from_disk (Ssh.path_of_uri uri) in + + let genid = + (* See: https://lists.nongnu.org/archive/html/qemu-devel/2018-07/msg02019.html *) +diff --git a/input/parse_domain_from_vmx.mli b/input/parse_domain_from_vmx.mli +index 42f8100e..208797a7 100644 +--- a/input/parse_domain_from_vmx.mli ++++ b/input/parse_domain_from_vmx.mli +@@ -17,8 +17,9 @@ + *) + + type vmx_source = +- | File of string (** local file or NFS *) +- | SSH of Xml.uri (** SSH URI *) ++ | File of string (** local file or NFS *) ++ | SSH of Nbdkit_ssh.password * Xml.uri (** SSH URI *) + +-val vmx_source_of_arg : [`SSH] option -> string -> vmx_source ++val vmx_source_of_arg : Nbdkit_ssh.password -> [`SSH] option -> string -> ++ vmx_source + val parse_domain_from_vmx : vmx_source -> Types.source * string list diff --git a/SOURCES/0007-virt-v2v-i-vmx-Remove-dependency-of-ssh.ml-on-Xml.ur.patch b/SOURCES/0007-virt-v2v-i-vmx-Remove-dependency-of-ssh.ml-on-Xml.ur.patch new file mode 100644 index 0000000..158574a --- /dev/null +++ b/SOURCES/0007-virt-v2v-i-vmx-Remove-dependency-of-ssh.ml-on-Xml.ur.patch @@ -0,0 +1,205 @@ +From 40730615d2f691bc72777b4cb7356e2177edc1e1 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 15 Jan 2024 14:48:56 +0000 +Subject: [PATCH] virt-v2v: -i vmx: Remove dependency of ssh.ml on Xml.uri + +Xml.uri is a convenient way to pass the multiple ssh fields to +virt-v2v and is still used internally by the -i vmx code. However +don't leak this awkward implementation into the new ssh.ml module. + +Like Nbdkit_ssh, we'll only deal with the explicit (password, port, +server, user, path) fields separately. + +Note after this refactoring: + + - The new Ssh module interface looks broadly similar to the + Nbdkit_ssh interface. + + - vmx_source_of_arg assertions are no longer required inside the new + Ssh module, which was a mild layering violation before. + +Reviewed-by: Laszlo Ersek +--- + input/input_vmx.ml | 21 ++++++++++++++++----- + input/parse_domain_from_vmx.ml | 22 +++++++++++++++++++--- + input/ssh.ml | 32 +++++++++++--------------------- + input/ssh.mli | 21 ++++++++++----------- + 4 files changed, 56 insertions(+), 40 deletions(-) + +diff --git a/input/input_vmx.ml b/input/input_vmx.ml +index b9cce10f..b3426fa2 100644 +--- a/input/input_vmx.ml ++++ b/input/input_vmx.ml +@@ -83,22 +83,33 @@ module VMX = struct + let socket = sprintf "%s/in%d" dir i in + On_exit.unlink socket; + +- let vmx_path = Ssh.path_of_uri uri in ++ let vmx_path = ++ match uri.uri_path with ++ | None -> assert false (* checked by vmx_source_of_arg *) ++ | Some path -> path in + let abs_path = absolute_path_from_other_file vmx_path filename in + let flat_vmdk = PCRE.replace (PCRE.compile "\\.vmdk$") + "-flat.vmdk" abs_path in + ++ let server = ++ match uri.uri_server with ++ | None -> assert false (* checked by vmx_source_of_arg *) ++ | Some server -> server in ++ let port = ++ match uri.uri_port with ++ | i when i <= 0 -> None ++ | i -> Some (string_of_int i) in ++ let user = uri.Xml.uri_user in ++ + (* RHBZ#1774386 *) +- if not (Ssh.remote_file_exists uri flat_vmdk) then ++ if not (Ssh.remote_file_exists ~password ?port ~server ?user ++ flat_vmdk) then + error (f_"This transport does not support guests with snapshots. \ + Either collapse the snapshots for this guest and try \ + the conversion again, or use one of the alternate \ + conversion methods described in \ + virt-v2v-input-vmware(1) section \"NOTES\"."); + +- let server = Ssh.server_of_uri uri in +- let port = Option.map string_of_int (Ssh.port_of_uri uri) in +- let user = uri.Xml.uri_user in + let cor = dir // "convert" in + let bandwidth = options.bandwidth in + let nbdkit = Nbdkit_ssh.create_ssh ?bandwidth ~cor ~password +diff --git a/input/parse_domain_from_vmx.ml b/input/parse_domain_from_vmx.ml +index 0719738c..99c86b1a 100644 +--- a/input/parse_domain_from_vmx.ml ++++ b/input/parse_domain_from_vmx.ml +@@ -334,9 +334,22 @@ let parse_domain_from_vmx vmx_source = + let vmx = + match vmx_source with + | File filename -> Parse_vmx.parse_file filename +- | SSH (_, uri) -> ++ | SSH (password, uri) -> ++ let server = ++ match uri.uri_server with ++ | None -> assert false (* checked by vmx_source_of_arg *) ++ | Some server -> server in ++ let port = ++ match uri.uri_port with ++ | i when i <= 0 -> None ++ | i -> Some (string_of_int i) in ++ let user = uri.Xml.uri_user in ++ let path = ++ match uri.uri_path with ++ | None -> assert false (* checked by vmx_source_of_arg *) ++ | Some path -> path in + let filename = tmpdir // "source.vmx" in +- Ssh.download_file uri filename; ++ Ssh.download_file ~password ?port ~server ?user path filename; + Parse_vmx.parse_file filename in + + let name = +@@ -346,7 +359,10 @@ let parse_domain_from_vmx vmx_source = + warning (f_"no displayName key found in VMX file"); + match vmx_source with + | File filename -> name_from_disk filename +- | SSH (_, uri) -> name_from_disk (Ssh.path_of_uri uri) in ++ | SSH (_, uri) -> ++ match uri.uri_path with ++ | None -> assert false (* checked by vmx_source_of_arg *) ++ | Some path -> name_from_disk path in + + let genid = + (* See: https://lists.nongnu.org/archive/html/qemu-devel/2018-07/msg02019.html *) +diff --git a/input/ssh.ml b/input/ssh.ml +index 63ffeb12..127e818c 100644 +--- a/input/ssh.ml ++++ b/input/ssh.ml +@@ -22,29 +22,19 @@ open Common_gettext.Gettext + + open Printf + +-(* Return various fields from the URI. The checks in vmx_source_of_arg +- * should ensure that none of these assertions fail. +- *) +-let port_of_uri { Xml.uri_port } = +- match uri_port with i when i <= 0 -> None | i -> Some i +-let server_of_uri { Xml.uri_server } = +- match uri_server with None -> assert false | Some s -> s +-let path_of_uri { Xml.uri_path } = +- match uri_path with None -> assert false | Some p -> p +- + (* 'scp' a remote file into a local file. *) +-let download_file uri output = ++let download_file ~password:_ ?port ~server ?user path output = + let cmd = + sprintf "scp%s%s %s%s:%s %s" + (if verbose () then "" else " -q") +- (match port_of_uri uri with ++ (match port with + | None -> "" +- | Some port -> sprintf " -P %d" port) +- (match uri.Xml.uri_user with ++ | Some port -> sprintf " -P %s" port) ++ (match user with + | None -> "" + | Some user -> quote user ^ "@") +- (quote (server_of_uri uri)) +- (quote (path_of_uri uri)) ++ (quote server) ++ (quote path) + (quote output) in + if verbose () then + eprintf "%s\n%!" cmd; +@@ -53,16 +43,16 @@ let download_file uri output = + see earlier error messages") + + (* Test if [path] exists on the remote server. *) +-let remote_file_exists uri path = ++let remote_file_exists ~password:_ ?port ~server ?user path = + let cmd = + sprintf "ssh%s %s%s test -f %s" +- (match port_of_uri uri with ++ (match port with + | None -> "" +- | Some port -> sprintf " -p %d" port) +- (match uri.Xml.uri_user with ++ | Some port -> sprintf " -p %s" port) ++ (match user with + | None -> "" + | Some user -> quote user ^ "@") +- (quote (server_of_uri uri)) ++ (quote server) + (* Double quoting is necessary for 'ssh', first to protect + * from the local shell, second to protect from the remote + * shell. https://github.com/libguestfs/virt-v2v/issues/35#issuecomment-1741730963 +diff --git a/input/ssh.mli b/input/ssh.mli +index 62e78bd3..1f39cd1b 100644 +--- a/input/ssh.mli ++++ b/input/ssh.mli +@@ -18,16 +18,15 @@ + + (** Wrappers for finding and downloading remote files over ssh. *) + +-val path_of_uri : Xml.uri -> string +-val server_of_uri : Xml.uri -> string +-val port_of_uri : Xml.uri -> int option ++(** [remote_file_exists password ?port server ?user path] ++ checks that [path] exists on the remote server. *) ++val remote_file_exists : password:Nbdkit_ssh.password -> ++ ?port:string -> server:string -> ?user:string -> ++ string -> bool + +-(** [remote_file_exists ssh_uri path] checks that [path] exists +- on the remote server [ssh_uri] (note any path inside [ssh_uri] +- is ignored). *) +-val remote_file_exists : Xml.uri -> string -> bool +- +-(** [download_file ssh_uri output] +- uses scp to copy the single remote file at [ssh_uri] to ++(** [download_file password ?port server ?user path output] ++ uses scp to copy the single remote file at [path] to + the local file called [output]. *) +-val download_file : Xml.uri -> string -> unit ++val download_file : password:Nbdkit_ssh.password -> ++ ?port:string -> server:string -> ?user:string -> string -> ++ string -> unit diff --git a/SOURCES/0008-input-nbdkit_ssh-Make-retry-filter-optional.patch b/SOURCES/0008-input-nbdkit_ssh-Make-retry-filter-optional.patch new file mode 100644 index 0000000..b1085d0 --- /dev/null +++ b/SOURCES/0008-input-nbdkit_ssh-Make-retry-filter-optional.patch @@ -0,0 +1,55 @@ +From 72c9734050f0235c80ff7d685282a57836a70bd5 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 15 Jan 2024 16:21:34 +0000 +Subject: [PATCH] input/nbdkit_ssh: Make retry filter optional + +This filter retries a request on failure. Add a flag to make this +filter optional, but default to using it if available (so there's no +change to default behaviour). + +The reason we want to make this optional is that the next commit will +want to use nbdkit-ssh-plugin to probe to see if a remote file is +present, and we don't want to retry that probe on failure. + +Reviewed-by: Laszlo Ersek +--- + input/nbdkit_ssh.ml | 6 ++++-- + input/nbdkit_ssh.mli | 1 + + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/input/nbdkit_ssh.ml b/input/nbdkit_ssh.ml +index 3f6da9b6..3b72d3ad 100644 +--- a/input/nbdkit_ssh.ml ++++ b/input/nbdkit_ssh.ml +@@ -44,7 +44,8 @@ let error_unless_nbdkit_min_version config = + error_unless_nbdkit_version_ge config nbdkit_min_version + + (* Create an nbdkit module specialized for reading from SSH sources. *) +-let create_ssh ?bandwidth ?cor ~password ?port ~server ?user path = ++let create_ssh ?bandwidth ?cor ?(retry=true) ++ ~password ?port ~server ?user path = + if not (Nbdkit.is_installed ()) then + error (f_"nbdkit is not installed or not working"); + +@@ -67,7 +68,8 @@ let create_ssh ?bandwidth ?cor ~password ?port ~server ?user path = + (* Retry filter (if it exists) can be used to get around brief + * interruptions in service. It must be closest to the plugin. + *) +- Nbdkit.add_filter_if_available cmd "retry"; ++ if retry then ++ Nbdkit.add_filter_if_available cmd "retry"; + + (* Caching extents speeds up qemu-img, especially its consecutive + * block_status requests with req_one=1. +diff --git a/input/nbdkit_ssh.mli b/input/nbdkit_ssh.mli +index bc798c5a..daa20bb2 100644 +--- a/input/nbdkit_ssh.mli ++++ b/input/nbdkit_ssh.mli +@@ -25,6 +25,7 @@ type password = + + val create_ssh : ?bandwidth:Types.bandwidth -> + ?cor:string -> ++ ?retry:bool -> + password:password -> + ?port:string -> + server:string -> diff --git a/SOURCES/0009-virt-v2v-i-vmx-Replace-external-ssh-scp-with-nbdkit-.patch b/SOURCES/0009-virt-v2v-i-vmx-Replace-external-ssh-scp-with-nbdkit-.patch new file mode 100644 index 0000000..b5ae3ee --- /dev/null +++ b/SOURCES/0009-virt-v2v-i-vmx-Replace-external-ssh-scp-with-nbdkit-.patch @@ -0,0 +1,167 @@ +From fb72e059863a60503b6011b8590c25c3a010a58f Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 15 Jan 2024 15:38:30 +0000 +Subject: [PATCH] virt-v2v: -i vmx: Replace external ssh/scp with + nbdkit-ssh-plugin + +If you use a -i vmx ssh filename containing '*' then it will expand +the glob at the remote side. New scp is weird and silently creates a +directory on the local side. For example suppose there's a remote +file literally called "/tmp/test*" (ie. the '*' is part of the +filename) and you thought you could copy that to local using: + + scp 'remote:/tmp/test*' '/tmp/test*' + +scp treats the first parameter (only) as a wildcard and if there are +multiple files matching the wildcard /tmp/test*, will create a local +directory literally called "/tmp/test*/" and put the files into it. +Who expected any of that? + +You might think that double quoting (as we used to use) might work, +but that breaks with spaces and quotes. I guess scp is using +different code paths internally for glob versus everything else. + +The only way to really make this work is to stop using scp entirely +and just use sftp directly. The easiest way to use sftp is to use +nbdkit-ssh-plugin. We already depend on nbdkit-ssh-plugin, nbdcopy +and nbdinfo for other parts of virt-v2v, so might as well use the +whole lot here. + +One advantage of this change is that now the -ip (input password) +parameter actually works in -i vmx -it ssh mode. + +Other approaches that would have been possible: + + - Use the OCaml NBD library instead of nbdcopy/nbdinfo + + - Use 'nbdkit -U - ssh --run ...' + + - Direct binding to libssh. + +See also commit e2af12ba69c4463bb73d30db63290a887cdd41eb +("input: -i vmx: Remove support for openssh scp < 8.8") + +See also commit 22c5b98ab78c734b478c26e14ee62e2a065aaa0c +("-it ssh: Double quote ssh command which tests remote file exists") + +See also https://unix.stackexchange.com/a/587710 + +Reported-by: Ming Xie +Fixes: https://issues.redhat.com/browse/RHEL-21365 +Reviewed-by: Laszlo Ersek +--- + input/ssh.ml | 70 +++++++++++++++++++++++++-------------------------- + input/ssh.mli | 7 ++++-- + 2 files changed, 40 insertions(+), 37 deletions(-) + +diff --git a/input/ssh.ml b/input/ssh.ml +index 127e818c..71ebbf2a 100644 +--- a/input/ssh.ml ++++ b/input/ssh.ml +@@ -18,46 +18,46 @@ + + open Std_utils + open Tools_utils ++open Unix_utils + open Common_gettext.Gettext + + open Printf + +-(* 'scp' a remote file into a local file. *) +-let download_file ~password:_ ?port ~server ?user path output = +- let cmd = +- sprintf "scp%s%s %s%s:%s %s" +- (if verbose () then "" else " -q") +- (match port with +- | None -> "" +- | Some port -> sprintf " -P %s" port) +- (match user with +- | None -> "" +- | Some user -> quote user ^ "@") +- (quote server) +- (quote path) +- (quote output) in +- if verbose () then +- eprintf "%s\n%!" cmd; +- if Sys.command cmd <> 0 then ++let start_nbdkit ~password ?port ~server ?user path = ++ (* Create a random location for the socket used to talk to nbdkit. *) ++ let sockdir = Mkdtemp.temp_dir "v2vssh." in ++ On_exit.rm_rf sockdir; ++ let id = unique () in ++ let socket = sockdir // sprintf "nbdkit%d.sock" id in ++ ++ (* Note: Disabling the retry filter helps in the missing file case, ++ * otherwise nbdkit takes ages to time out. We're not expecting that ++ * the VMX file is large, so using this filter isn't necessary. ++ *) ++ let nbdkit = ++ Nbdkit_ssh.create_ssh ~retry:false ~password ~server ?port ?user path in ++ Nbdkit.set_readonly nbdkit true; ++ let _, pid = Nbdkit.run_unix socket nbdkit in ++ On_exit.kill pid; ++ ++ (* Return the URI of nbdkit. *) ++ "nbd+unix://?socket=" ^ socket ++ ++(* Download a remote file into a local file. *) ++let download_file ~password ?port ~server ?user path output = ++ let uri = start_nbdkit ~password ?port ~server ?user path in ++ ++ let cmd = [ "nbdcopy"; uri; output ] in ++ if run_command cmd <> 0 then + error (f_"could not copy the VMX file from the remote server, \ + see earlier error messages") + + (* Test if [path] exists on the remote server. *) +-let remote_file_exists ~password:_ ?port ~server ?user path = +- let cmd = +- sprintf "ssh%s %s%s test -f %s" +- (match port with +- | None -> "" +- | Some port -> sprintf " -p %s" port) +- (match user with +- | None -> "" +- | Some user -> quote user ^ "@") +- (quote server) +- (* Double quoting is necessary for 'ssh', first to protect +- * from the local shell, second to protect from the remote +- * shell. https://github.com/libguestfs/virt-v2v/issues/35#issuecomment-1741730963 +- *) +- (quote (quote path)) in +- if verbose () then +- eprintf "%s\n%!" cmd; +- Sys.command cmd = 0 ++let remote_file_exists ~password ?port ~server ?user path = ++ let uri = start_nbdkit ~password ?port ~server ?user path in ++ ++ (* Testing for remote size using nbdinfo should be sufficient to ++ * prove the remote file exists. ++ *) ++ let cmd = [ "nbdinfo"; "--size"; uri ] in ++ run_command cmd = 0 +diff --git a/input/ssh.mli b/input/ssh.mli +index 1f39cd1b..40843024 100644 +--- a/input/ssh.mli ++++ b/input/ssh.mli +@@ -16,7 +16,10 @@ + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + *) + +-(** Wrappers for finding and downloading remote files over ssh. *) ++(** Wrappers for finding and downloading remote files over ssh. ++ ++ Internally this uses nbdkit-ssh-plugin (which uses sftp) as ++ that is much more predictable than running external ssh / scp. *) + + (** [remote_file_exists password ?port server ?user path] + checks that [path] exists on the remote server. *) +@@ -25,7 +28,7 @@ val remote_file_exists : password:Nbdkit_ssh.password -> + string -> bool + + (** [download_file password ?port server ?user path output] +- uses scp to copy the single remote file at [path] to ++ downloads the single remote file at [path] to + the local file called [output]. *) + val download_file : password:Nbdkit_ssh.password -> + ?port:string -> server:string -> ?user:string -> string -> diff --git a/SOURCES/0010-input-nbdkit_ssh-Make-password-parameter-optional.patch b/SOURCES/0010-input-nbdkit_ssh-Make-password-parameter-optional.patch new file mode 100644 index 0000000..4ba7f0e --- /dev/null +++ b/SOURCES/0010-input-nbdkit_ssh-Make-password-parameter-optional.patch @@ -0,0 +1,255 @@ +From a99d9f2afee17688ec07e2ea0b130341a0cabce2 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 16 Jan 2024 10:27:30 +0000 +Subject: [PATCH] input/nbdkit_ssh: Make password parameter optional + +Instead of storing an explicit NoPassword case, make the password +parameter optional and encode NoPassword as None. This is simple +refactoring. +--- + input/input_vmx.ml | 8 ++++---- + input/input_xen_ssh.ml | 6 +++--- + input/nbdkit_ssh.ml | 13 ++++++------- + input/nbdkit_ssh.mli | 9 ++++----- + input/parse_domain_from_vmx.ml | 6 +++--- + input/parse_domain_from_vmx.mli | 8 ++++---- + input/ssh.ml | 12 ++++++------ + input/ssh.mli | 8 ++++---- + 8 files changed, 34 insertions(+), 36 deletions(-) + +diff --git a/input/input_vmx.ml b/input/input_vmx.ml +index b3426fa2..f81a9674 100644 +--- a/input/input_vmx.ml ++++ b/input/input_vmx.ml +@@ -47,8 +47,8 @@ module VMX = struct + | [arg] -> + let input_password = + match options.input_password with +- | None -> Nbdkit_ssh.NoPassword +- | Some ip -> Nbdkit_ssh.PasswordFile ip in ++ | None -> None ++ | Some ip -> Some (Nbdkit_ssh.PasswordFile ip) in + let input_transport = + match options.input_transport with + | None -> None +@@ -102,7 +102,7 @@ module VMX = struct + let user = uri.Xml.uri_user in + + (* RHBZ#1774386 *) +- if not (Ssh.remote_file_exists ~password ?port ~server ?user ++ if not (Ssh.remote_file_exists ?password ?port ~server ?user + flat_vmdk) then + error (f_"This transport does not support guests with snapshots. \ + Either collapse the snapshots for this guest and try \ +@@ -112,7 +112,7 @@ module VMX = struct + + let cor = dir // "convert" in + let bandwidth = options.bandwidth in +- let nbdkit = Nbdkit_ssh.create_ssh ?bandwidth ~cor ~password ++ let nbdkit = Nbdkit_ssh.create_ssh ?bandwidth ~cor ?password + ~server ?port ?user flat_vmdk in + let _, pid = Nbdkit.run_unix socket nbdkit in + On_exit.kill pid +diff --git a/input/input_xen_ssh.ml b/input/input_xen_ssh.ml +index b583bd55..c4235a4b 100644 +--- a/input/input_xen_ssh.ml ++++ b/input/input_xen_ssh.ml +@@ -96,8 +96,8 @@ module XenSSH = struct + + let password = + match options.input_password with +- | None -> Nbdkit_ssh.NoPassword +- | Some ip -> Nbdkit_ssh.PasswordFile ip in ++ | None -> None ++ | Some ip -> Some (Nbdkit_ssh.PasswordFile ip) in + + (* Create an nbdkit instance for each disk. *) + List.iteri ( +@@ -122,7 +122,7 @@ module XenSSH = struct + | LocalFile path -> + let cor = dir // "convert" in + let bandwidth = options.bandwidth in +- let nbdkit = Nbdkit_ssh.create_ssh ?bandwidth ~cor ~password ++ let nbdkit = Nbdkit_ssh.create_ssh ?bandwidth ~cor ?password + ?port ~server ?user path in + let _, pid = Nbdkit.run_unix socket nbdkit in + On_exit.kill pid +diff --git a/input/nbdkit_ssh.ml b/input/nbdkit_ssh.ml +index 3b72d3ad..bc96df13 100644 +--- a/input/nbdkit_ssh.ml ++++ b/input/nbdkit_ssh.ml +@@ -28,9 +28,8 @@ open Utils + let nbdkit_min_version = (1, 12, 0) + + type password = +-| NoPassword (* no password option at all *) +-| AskForPassword (* password=- *) +-| PasswordFile of string (* password=+file *) ++ | AskForPassword ++ | PasswordFile of string + + let error_unless_nbdkit_version_ge config min_version = + let version = Nbdkit.version config in +@@ -45,7 +44,7 @@ let error_unless_nbdkit_min_version config = + + (* Create an nbdkit module specialized for reading from SSH sources. *) + let create_ssh ?bandwidth ?cor ?(retry=true) +- ~password ?port ~server ?user path = ++ ?password ?port ~server ?user path = + if not (Nbdkit.is_installed ()) then + error (f_"nbdkit is not installed or not working"); + +@@ -108,8 +107,8 @@ let create_ssh ?bandwidth ?cor ?(retry=true) + + (* Handle the password parameter specially. *) + (match password with +- | NoPassword -> () +- | AskForPassword -> ++ | None -> () ++ | Some AskForPassword -> + (* Because we will start nbdkit in the background and then wait + * for 30 seconds for it to start up, we cannot use the + * password=- feature of nbdkit to read the password +@@ -130,7 +129,7 @@ let create_ssh ?bandwidth ?cor ?(retry=true) + On_exit.unlink password_file; + with_open_out password_file (fun chan -> output_string chan password); + Nbdkit.add_arg cmd "password" ("+" ^ password_file) +- | PasswordFile password_file -> ++ | Some (PasswordFile password_file) -> + Nbdkit.add_arg cmd "password" ("+" ^ password_file) + ); + +diff --git a/input/nbdkit_ssh.mli b/input/nbdkit_ssh.mli +index daa20bb2..8ea8dea4 100644 +--- a/input/nbdkit_ssh.mli ++++ b/input/nbdkit_ssh.mli +@@ -18,15 +18,14 @@ + + (** nbdkit when used as a source. *) + +-type password = +-| NoPassword +-| AskForPassword +-| PasswordFile of string ++type password = (** Use [None] for no password *) ++ | AskForPassword (** [password=-] *) ++ | PasswordFile of string (** [password=+file] *) + + val create_ssh : ?bandwidth:Types.bandwidth -> + ?cor:string -> + ?retry:bool -> +- password:password -> ++ ?password:password -> + ?port:string -> + server:string -> + ?user:string -> +diff --git a/input/parse_domain_from_vmx.ml b/input/parse_domain_from_vmx.ml +index 99c86b1a..eeac6597 100644 +--- a/input/parse_domain_from_vmx.ml ++++ b/input/parse_domain_from_vmx.ml +@@ -29,8 +29,8 @@ open Utils + open Name_from_disk + + type vmx_source = +- | File of string (* local file or NFS *) +- | SSH of Nbdkit_ssh.password * Xml.uri (* SSH URI *) ++ | File of string (* local file or NFS *) ++ | SSH of Nbdkit_ssh.password option * Xml.uri (* SSH URI *) + + (* The single filename on the command line is intepreted either as + * a local file or a remote SSH URI (only if ‘-it ssh’). +@@ -349,7 +349,7 @@ let parse_domain_from_vmx vmx_source = + | None -> assert false (* checked by vmx_source_of_arg *) + | Some path -> path in + let filename = tmpdir // "source.vmx" in +- Ssh.download_file ~password ?port ~server ?user path filename; ++ Ssh.download_file ?password ?port ~server ?user path filename; + Parse_vmx.parse_file filename in + + let name = +diff --git a/input/parse_domain_from_vmx.mli b/input/parse_domain_from_vmx.mli +index 208797a7..e26a1035 100644 +--- a/input/parse_domain_from_vmx.mli ++++ b/input/parse_domain_from_vmx.mli +@@ -17,9 +17,9 @@ + *) + + type vmx_source = +- | File of string (** local file or NFS *) +- | SSH of Nbdkit_ssh.password * Xml.uri (** SSH URI *) ++ | File of string (** local file or NFS *) ++ | SSH of Nbdkit_ssh.password option * Xml.uri (** SSH URI *) + +-val vmx_source_of_arg : Nbdkit_ssh.password -> [`SSH] option -> string -> +- vmx_source ++val vmx_source_of_arg : Nbdkit_ssh.password option -> [`SSH] option -> ++ string -> vmx_source + val parse_domain_from_vmx : vmx_source -> Types.source * string list +diff --git a/input/ssh.ml b/input/ssh.ml +index 71ebbf2a..10c61bbf 100644 +--- a/input/ssh.ml ++++ b/input/ssh.ml +@@ -23,7 +23,7 @@ open Common_gettext.Gettext + + open Printf + +-let start_nbdkit ~password ?port ~server ?user path = ++let start_nbdkit ?password ?port ~server ?user path = + (* Create a random location for the socket used to talk to nbdkit. *) + let sockdir = Mkdtemp.temp_dir "v2vssh." in + On_exit.rm_rf sockdir; +@@ -35,7 +35,7 @@ let start_nbdkit ~password ?port ~server ?user path = + * the VMX file is large, so using this filter isn't necessary. + *) + let nbdkit = +- Nbdkit_ssh.create_ssh ~retry:false ~password ~server ?port ?user path in ++ Nbdkit_ssh.create_ssh ~retry:false ?password ~server ?port ?user path in + Nbdkit.set_readonly nbdkit true; + let _, pid = Nbdkit.run_unix socket nbdkit in + On_exit.kill pid; +@@ -44,8 +44,8 @@ let start_nbdkit ~password ?port ~server ?user path = + "nbd+unix://?socket=" ^ socket + + (* Download a remote file into a local file. *) +-let download_file ~password ?port ~server ?user path output = +- let uri = start_nbdkit ~password ?port ~server ?user path in ++let download_file ?password ?port ~server ?user path output = ++ let uri = start_nbdkit ?password ?port ~server ?user path in + + let cmd = [ "nbdcopy"; uri; output ] in + if run_command cmd <> 0 then +@@ -53,8 +53,8 @@ let download_file ~password ?port ~server ?user path output = + see earlier error messages") + + (* Test if [path] exists on the remote server. *) +-let remote_file_exists ~password ?port ~server ?user path = +- let uri = start_nbdkit ~password ?port ~server ?user path in ++let remote_file_exists ?password ?port ~server ?user path = ++ let uri = start_nbdkit ?password ?port ~server ?user path in + + (* Testing for remote size using nbdinfo should be sufficient to + * prove the remote file exists. +diff --git a/input/ssh.mli b/input/ssh.mli +index 40843024..6d9f1370 100644 +--- a/input/ssh.mli ++++ b/input/ssh.mli +@@ -21,15 +21,15 @@ + Internally this uses nbdkit-ssh-plugin (which uses sftp) as + that is much more predictable than running external ssh / scp. *) + +-(** [remote_file_exists password ?port server ?user path] ++(** [remote_file_exists ?password ?port server ?user path] + checks that [path] exists on the remote server. *) +-val remote_file_exists : password:Nbdkit_ssh.password -> ++val remote_file_exists : ?password:Nbdkit_ssh.password -> + ?port:string -> server:string -> ?user:string -> + string -> bool + +-(** [download_file password ?port server ?user path output] ++(** [download_file ?password ?port server ?user path output] + downloads the single remote file at [path] to + the local file called [output]. *) +-val download_file : password:Nbdkit_ssh.password -> ++val download_file : ?password:Nbdkit_ssh.password -> + ?port:string -> server:string -> ?user:string -> string -> + string -> unit diff --git a/SOURCES/0011-input-ssh-Rearrange-parameters-specifying-ssh-server.patch b/SOURCES/0011-input-ssh-Rearrange-parameters-specifying-ssh-server.patch new file mode 100644 index 0000000..ee2dda3 --- /dev/null +++ b/SOURCES/0011-input-ssh-Rearrange-parameters-specifying-ssh-server.patch @@ -0,0 +1,104 @@ +From 4f0758a95a4b32a5c837cf86d2fa4442d3e136ec Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 16 Jan 2024 10:31:50 +0000 +Subject: [PATCH] input/ssh: Rearrange parameters specifying ssh server + +--- + input/nbdkit_ssh.ml | 2 +- + input/nbdkit_ssh.mli | 4 ++-- + input/ssh.ml | 10 +++++----- + input/ssh.mli | 13 +++++++------ + 4 files changed, 15 insertions(+), 14 deletions(-) + +diff --git a/input/nbdkit_ssh.ml b/input/nbdkit_ssh.ml +index bc96df13..ae93e4e8 100644 +--- a/input/nbdkit_ssh.ml ++++ b/input/nbdkit_ssh.ml +@@ -44,7 +44,7 @@ let error_unless_nbdkit_min_version config = + + (* Create an nbdkit module specialized for reading from SSH sources. *) + let create_ssh ?bandwidth ?cor ?(retry=true) +- ?password ?port ~server ?user path = ++ ~server ?port ?user ?password path = + if not (Nbdkit.is_installed ()) then + error (f_"nbdkit is not installed or not working"); + +diff --git a/input/nbdkit_ssh.mli b/input/nbdkit_ssh.mli +index 8ea8dea4..c26f539a 100644 +--- a/input/nbdkit_ssh.mli ++++ b/input/nbdkit_ssh.mli +@@ -25,10 +25,10 @@ type password = (** Use [None] for no password *) + val create_ssh : ?bandwidth:Types.bandwidth -> + ?cor:string -> + ?retry:bool -> +- ?password:password -> +- ?port:string -> + server:string -> ++ ?port:string -> + ?user:string -> ++ ?password:password -> + string -> Nbdkit.cmd + (** Create a nbdkit object using the SSH plugin. The required + string parameter is the remote path. +diff --git a/input/ssh.ml b/input/ssh.ml +index 10c61bbf..d3b6dc0c 100644 +--- a/input/ssh.ml ++++ b/input/ssh.ml +@@ -23,7 +23,7 @@ open Common_gettext.Gettext + + open Printf + +-let start_nbdkit ?password ?port ~server ?user path = ++let start_nbdkit ~server ?port ?user ?password path = + (* Create a random location for the socket used to talk to nbdkit. *) + let sockdir = Mkdtemp.temp_dir "v2vssh." in + On_exit.rm_rf sockdir; +@@ -44,8 +44,8 @@ let start_nbdkit ?password ?port ~server ?user path = + "nbd+unix://?socket=" ^ socket + + (* Download a remote file into a local file. *) +-let download_file ?password ?port ~server ?user path output = +- let uri = start_nbdkit ?password ?port ~server ?user path in ++let download_file ~server ?port ?user ?password path output = ++ let uri = start_nbdkit ~server ?port ?user ?password path in + + let cmd = [ "nbdcopy"; uri; output ] in + if run_command cmd <> 0 then +@@ -53,8 +53,8 @@ let download_file ?password ?port ~server ?user path output = + see earlier error messages") + + (* Test if [path] exists on the remote server. *) +-let remote_file_exists ?password ?port ~server ?user path = +- let uri = start_nbdkit ?password ?port ~server ?user path in ++let remote_file_exists ~server ?port ?user ?password path = ++ let uri = start_nbdkit ~server ?port ?user ?password path in + + (* Testing for remote size using nbdinfo should be sufficient to + * prove the remote file exists. +diff --git a/input/ssh.mli b/input/ssh.mli +index 6d9f1370..ebce46ff 100644 +--- a/input/ssh.mli ++++ b/input/ssh.mli +@@ -21,15 +21,16 @@ + Internally this uses nbdkit-ssh-plugin (which uses sftp) as + that is much more predictable than running external ssh / scp. *) + +-(** [remote_file_exists ?password ?port server ?user path] ++(** [remote_file_exists server ?port ?user ?password path] + checks that [path] exists on the remote server. *) +-val remote_file_exists : ?password:Nbdkit_ssh.password -> +- ?port:string -> server:string -> ?user:string -> ++val remote_file_exists : server:string -> ?port:string -> ++ ?user:string -> ?password:Nbdkit_ssh.password -> + string -> bool + +-(** [download_file ?password ?port server ?user path output] ++(** [download_file server ?port ?user ?password path output] + downloads the single remote file at [path] to + the local file called [output]. *) +-val download_file : ?password:Nbdkit_ssh.password -> +- ?port:string -> server:string -> ?user:string -> string -> ++val download_file : server:string -> ?port:string -> ++ ?user:string -> ?password:Nbdkit_ssh.password -> ++ string -> + string -> unit diff --git a/SOURCES/0012-docs-Remove-paragraph-about-ip-passwords-and-ssh-scp.patch b/SOURCES/0012-docs-Remove-paragraph-about-ip-passwords-and-ssh-scp.patch new file mode 100644 index 0000000..f107094 --- /dev/null +++ b/SOURCES/0012-docs-Remove-paragraph-about-ip-passwords-and-ssh-scp.patch @@ -0,0 +1,54 @@ +From 67fcf66904c7f1f6da858eba35e95dad670427c0 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Wed, 17 Jan 2024 14:16:10 +0000 +Subject: [PATCH] docs: Remove paragraph about -ip passwords and ssh/scp + +The documentation suggested (correctly) that the -ip option did not +cover all cases where we make an ssh connection to either VMware or +Xen. However with the recent change where we use nbdkit-ssh-plugin in +preference to ssh/scp (commit fb72e05986, "virt-v2v: -i vmx: Replace +external ssh/scp with nbdkit-ssh-plugin") this should no longer be +true for VMware. And I don't think it was true for Xen for a while. + +Therefore remove this paragraph in the documentation (in two places). + +See-also: https://bugzilla.redhat.com/show_bug.cgi?id=1854275 +See-also: https://lists.libguestfs.org/archives/list/guestfs@lists.libguestfs.org/thread/CKBEYJHUZWLDUUDWAJM2JU6QIKZGTD6F/ +Suggested-by: Laszlo Ersek +--- + docs/virt-v2v-input-vmware.pod | 5 ----- + docs/virt-v2v-input-xen.pod | 5 ----- + 2 files changed, 10 deletions(-) + +diff --git a/docs/virt-v2v-input-vmware.pod b/docs/virt-v2v-input-vmware.pod +index 48849f88..fe59222a 100644 +--- a/docs/virt-v2v-input-vmware.pod ++++ b/docs/virt-v2v-input-vmware.pod +@@ -155,11 +155,6 @@ virt-v2v server to the ESXi hypervisor. For example: + $ ssh root@esxi.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. +- + =head3 VMX: Construct the SSH URI + + When using the SSH input transport you must specify a remote +diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod +index 4a0544f8..38dc8f7b 100644 +--- a/docs/virt-v2v-input-xen.pod ++++ b/docs/virt-v2v-input-xen.pod +@@ -32,11 +32,6 @@ 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 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>: diff --git a/SOURCES/0013-Update-common-submodule.patch b/SOURCES/0013-Update-common-submodule.patch deleted file mode 100644 index 9e949c5..0000000 --- a/SOURCES/0013-Update-common-submodule.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 6dea82d823c344af0277bb35de789828cfd3e413 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Sat, 22 Apr 2023 09:06:01 +0100 -Subject: [PATCH] Update common submodule - -Richard W.M. Jones (1): - mlcustomize/SELinux_relabel.ml: Use Array.mem - -Roman Kagan (1): - mlcustomize: skip SELinux relabeling if it's disabled - -(cherry picked from commit e83de8abe6c5388585885cef28d7a198b7bfc90c) ---- - common | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Submodule common 70c10a07..38e6988c: -diff --git a/common/mlcustomize/SELinux_relabel.ml b/common/mlcustomize/SELinux_relabel.ml -index 5ecf7bd7..2f3a09bf 100644 ---- a/common/mlcustomize/SELinux_relabel.ml -+++ b/common/mlcustomize/SELinux_relabel.ml -@@ -24,10 +24,6 @@ open Printf - - module G = Guestfs - --(* Simple reimplementation of Array.mem, available only with OCaml >= 4.03. *) --let array_find a l = -- List.mem a (Array.to_list l) -- - let rec relabel (g : G.guestfs) = - (* Is the guest using SELinux? (Otherwise this is a no-op). *) - if is_selinux_guest g then ( -@@ -59,14 +55,24 @@ and use_setfiles g = - g#aug_load (); - debug_augeas_errors g; - -+ let config_path = "/files/etc/selinux/config" in -+ let config_keys = g#aug_ls config_path in -+ (* SELinux may be disabled via a setting in config file *) -+ let selinux_disabled = -+ let selinuxmode_path = config_path ^ "/SELINUX" in -+ if Array.mem selinuxmode_path config_keys then -+ g#aug_get selinuxmode_path = "disabled" -+ else -+ false in -+ if selinux_disabled then -+ failwith "selinux disabled"; -+ - (* Get the SELinux policy name, eg. "targeted", "minimum". - * Use "targeted" if not specified, just like libselinux does. - *) - let policy = -- let config_path = "/files/etc/selinux/config" in - let selinuxtype_path = config_path ^ "/SELINUXTYPE" in -- let keys = g#aug_ls config_path in -- if array_find selinuxtype_path keys then -+ if Array.mem selinuxtype_path config_keys then - g#aug_get selinuxtype_path - else - "targeted" in diff --git a/SOURCES/0013-input-ssh-Use-nbdinfo-can-connect-instead-of-size.patch b/SOURCES/0013-input-ssh-Use-nbdinfo-can-connect-instead-of-size.patch new file mode 100644 index 0000000..c7845cd --- /dev/null +++ b/SOURCES/0013-input-ssh-Use-nbdinfo-can-connect-instead-of-size.patch @@ -0,0 +1,62 @@ +From 970d7123c2025bc148870f4bc6fa75fa9e95905f Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 18 Jan 2024 17:22:26 +0000 +Subject: [PATCH] input/ssh: Use nbdinfo --can connect (instead of --size) + +nbdinfo --size prints the size on stdout, causing it to appear in +virt-v2v output. Using --can connect instead is silent. + +Note that nbdinfo --can connect was added in libnbd 1.9.2 (Jul 2021) +and our previous minimum version of libnbd was 1.9.3 so we're OK. +However since neither of these was a stable version I also updated the +minimum libnbd requirement to 1.10 (Sep 2021), and added a proper +check in ./configure + +Fixes: commit fb72e059863a60503b6011b8590c25c3a010a58f +--- + README | 2 +- + input/ssh.ml | 4 ++-- + m4/guestfs-libraries.m4 | 2 +- + 3 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/README b/README +index 5810f77d..f94bd6de 100644 +--- a/README ++++ b/README +@@ -51,7 +51,7 @@ REQUIREMENTS + + * OCaml bindings for libvirt (https://gitlab.com/libvirt/libvirt-ocaml) + +-* libnbd >= 1.9.3 (https://gitlab.com/nbdkit/libnbd) ++* libnbd >= 1.10 (https://gitlab.com/nbdkit/libnbd) + + * OCaml bindings for libnbd + +diff --git a/input/ssh.ml b/input/ssh.ml +index d3b6dc0c..e35a2b5a 100644 +--- a/input/ssh.ml ++++ b/input/ssh.ml +@@ -56,8 +56,8 @@ let download_file ~server ?port ?user ?password path output = + let remote_file_exists ~server ?port ?user ?password path = + let uri = start_nbdkit ~server ?port ?user ?password path in + +- (* Testing for remote size using nbdinfo should be sufficient to ++ (* Testing that we can connect to the nbdkit server is enough to + * prove the remote file exists. + *) +- let cmd = [ "nbdinfo"; "--size"; uri ] in ++ let cmd = [ "nbdinfo"; "--can"; "connect"; uri ] in + run_command cmd = 0 +diff --git a/m4/guestfs-libraries.m4 b/m4/guestfs-libraries.m4 +index 33b5100e..6789a2cb 100644 +--- a/m4/guestfs-libraries.m4 ++++ b/m4/guestfs-libraries.m4 +@@ -21,7 +21,7 @@ dnl Of course we need libguestfs. + PKG_CHECK_MODULES([LIBGUESTFS], [libguestfs >= 1.44]) + + dnl And libnbd. +-PKG_CHECK_MODULES([LIBNBD], [libnbd]) ++PKG_CHECK_MODULES([LIBNBD], [libnbd >= 1.10]) + + dnl Test if it's GNU or XSI strerror_r. + AC_FUNC_STRERROR_R diff --git a/SOURCES/0014-build-Document-that-nbdinfo-and-nbdcopy-are-required.patch b/SOURCES/0014-build-Document-that-nbdinfo-and-nbdcopy-are-required.patch new file mode 100644 index 0000000..1083725 --- /dev/null +++ b/SOURCES/0014-build-Document-that-nbdinfo-and-nbdcopy-are-required.patch @@ -0,0 +1,43 @@ +From aafcd0d11453d8d58a32e66285f12ec3ba3440de Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 18 Jan 2024 17:32:01 +0000 +Subject: [PATCH] build: Document that nbdinfo and nbdcopy are required, and + check + +Update README to document that these tools have been needed (ever +since virt-v2v 2.0), and update ./configure to check it. +--- + README | 2 ++ + m4/guestfs-progs.m4 | 6 ++++++ + 2 files changed, 8 insertions(+) + +diff --git a/README b/README +index f94bd6de..4354754f 100644 +--- a/README ++++ b/README +@@ -53,6 +53,8 @@ REQUIREMENTS + + * libnbd >= 1.10 (https://gitlab.com/nbdkit/libnbd) + ++* The 'nbdinfo' and 'nbdcopy' programs from libnbd. ++ + * OCaml bindings for libnbd + + * nbdkit >= 1.27.4 (https://gitlab.com/nbdkit/nbdkit) +diff --git a/m4/guestfs-progs.m4 b/m4/guestfs-progs.m4 +index 7c5f0d81..ae5094ce 100644 +--- a/m4/guestfs-progs.m4 ++++ b/m4/guestfs-progs.m4 +@@ -59,6 +59,12 @@ AM_CONDITIONAL([HAVE_ZIP],[test "x$ZIP" != "xno"]) + AC_PATH_PROGS([UNZIP],[unzip],[no]) + AC_DEFINE_UNQUOTED([UNZIP],["$UNZIP"],[Name of unzip program.]) + ++dnl nbdinfo, nbdcopy, required by virt-v2v ++AC_CHECK_PROG([NBDINFO], [nbdinfo], [nbdinfo], [no]) ++AC_CHECK_PROG([NBDCOPY], [nbdcopy], [nbdcopy], [no]) ++AS_IF([test "x$NBDINFO" = "xno" || test "x$NBDCOPY" = "xno"], ++ [AC_MSG_ERROR([nbdinfo and nbdcopy (from libnbd) must be installed])]) ++ + dnl Check for valgrind + AC_CHECK_PROG([VALGRIND],[valgrind],[valgrind],[no]) + AS_IF([test "x$VALGRIND" != "xno"],[ diff --git a/SOURCES/0014-update-common-submodule.patch b/SOURCES/0014-update-common-submodule.patch deleted file mode 100644 index 5a65cd7..0000000 --- a/SOURCES/0014-update-common-submodule.patch +++ /dev/null @@ -1,152 +0,0 @@ -From 1d69132b7b7209dbf231a4668b3a6531a6f9cdf3 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Fri, 19 May 2023 11:34:18 +0200 -Subject: [PATCH] update common submodule - -Laszlo Ersek (2): - options/keys: key_store_import_key(): un-constify "key" parameter - options/keys: introduce unescape_device_mapper_lvm() - -https://bugzilla.redhat.com/show_bug.cgi?id=2168506 -Signed-off-by: Laszlo Ersek -(cherry picked from commit b0dbe7c7728579d6c2128c733491755eee1a91b5) ---- - common | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Submodule common 38e6988c..b636c3f2: -diff --git a/common/options/options.h b/common/options/options.h -index 94573ee0..94e8b9ee 100644 ---- a/common/options/options.h -+++ b/common/options/options.h -@@ -169,7 +169,8 @@ extern struct matching_key *get_keys (struct key_store *ks, const char *device, - const char *uuid, size_t *nr_matches); - extern void free_keys (struct matching_key *keys, size_t nr_matches); - extern struct key_store *key_store_add_from_selector (struct key_store *ks, const char *selector); --extern struct key_store *key_store_import_key (struct key_store *ks, const struct key_store_key *key); -+extern struct key_store *key_store_import_key (struct key_store *ks, -+ struct key_store_key *key); - extern bool key_store_requires_network (const struct key_store *ks); - extern void free_key_store (struct key_store *ks); - -diff --git a/common/options/keys.c b/common/options/keys.c -index 48f1bc7c..52b27369 100644 ---- a/common/options/keys.c -+++ b/common/options/keys.c -@@ -260,8 +260,107 @@ key_store_add_from_selector (struct key_store *ks, const char *selector) - return key_store_import_key (ks, &key); - } - -+/* Turn /dev/mapper/VG-LV into /dev/VG/LV, in-place. */ -+static void -+unescape_device_mapper_lvm (char *id) -+{ -+ static const char dev[] = "/dev/", dev_mapper[] = "/dev/mapper/"; -+ const char *input_start; -+ char *output; -+ enum { M_SCAN, M_FILL, M_DONE } mode; -+ -+ if (!STRPREFIX (id, dev_mapper)) -+ return; -+ -+ /* Start parsing "VG-LV" from "id" after "/dev/mapper/". */ -+ input_start = id + (sizeof dev_mapper - 1); -+ -+ /* Start writing the unescaped "VG/LV" output after "/dev/". */ -+ output = id + (sizeof dev - 1); -+ -+ for (mode = M_SCAN; mode < M_DONE; ++mode) { -+ char c; -+ const char *input = input_start; -+ const char *hyphen_buffered = NULL; -+ bool single_hyphen_seen = false; -+ -+ do { -+ c = *input; -+ -+ switch (c) { -+ case '-': -+ if (hyphen_buffered == NULL) -+ /* This hyphen may start an escaped hyphen, or it could be the -+ * separator in VG-LV. -+ */ -+ hyphen_buffered = input; -+ else { -+ /* This hyphen completes an escaped hyphen; unescape it. */ -+ if (mode == M_FILL) -+ *output++ = '-'; -+ hyphen_buffered = NULL; -+ } -+ break; -+ -+ case '/': -+ /* Slash characters are forbidden in VG-LV anywhere. If there's any, -+ * we'll find it in the first (i.e., scanning) phase, before we output -+ * anything back to "id". -+ */ -+ assert (mode == M_SCAN); -+ return; -+ -+ default: -+ /* Encountered a non-slash, non-hyphen character -- which also may be -+ * the terminating NUL. -+ */ -+ if (hyphen_buffered != NULL) { -+ /* The non-hyphen character comes after a buffered hyphen, so the -+ * buffered hyphen is supposed to be the single hyphen that separates -+ * VG from LV in VG-LV. There are three requirements for this -+ * separator: (a) it must be unique (we must not have seen another -+ * such separator earlier), (b) it must not be at the start of VG-LV -+ * (because VG would be empty that way), (c) it must not be at the end -+ * of VG-LV (because LV would be empty that way). Should any of these -+ * be violated, we'll catch that during the first (i.e., scanning) -+ * phase, before modifying "id". -+ */ -+ if (single_hyphen_seen || hyphen_buffered == input_start || -+ c == '\0') { -+ assert (mode == M_SCAN); -+ return; -+ } -+ -+ /* Translate the separator hyphen to a slash character. */ -+ if (mode == M_FILL) -+ *output++ = '/'; -+ hyphen_buffered = NULL; -+ single_hyphen_seen = true; -+ } -+ -+ /* Output the non-hyphen character (including the terminating NUL) -+ * regardless of whether there was a buffered hyphen separator (which, -+ * by now, we'll have attempted to translate and flush). -+ */ -+ if (mode == M_FILL) -+ *output++ = c; -+ } -+ -+ ++input; -+ } while (c != '\0'); -+ -+ /* We must have seen the VG-LV separator. If that's not the case, we'll -+ * catch it before modifying "id". -+ */ -+ if (!single_hyphen_seen) { -+ assert (mode == M_SCAN); -+ return; -+ } -+ } -+} -+ - struct key_store * --key_store_import_key (struct key_store *ks, const struct key_store_key *key) -+key_store_import_key (struct key_store *ks, struct key_store_key *key) - { - struct key_store_key *new_keys; - -@@ -278,6 +377,7 @@ key_store_import_key (struct key_store *ks, const struct key_store_key *key) - error (EXIT_FAILURE, errno, "realloc"); - - ks->keys = new_keys; -+ unescape_device_mapper_lvm (key->id); - ks->keys[ks->nr_keys] = *key; - ++ks->nr_keys; - diff --git a/SOURCES/0015-LUKS-on-LVM-conversion-test-rename-VGs-and-LVs.patch b/SOURCES/0015-LUKS-on-LVM-conversion-test-rename-VGs-and-LVs.patch deleted file mode 100644 index f2d4f2c..0000000 --- a/SOURCES/0015-LUKS-on-LVM-conversion-test-rename-VGs-and-LVs.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 2558084d081c3dd9b0d681f3cf6789b48485cb62 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 15 May 2023 19:55:28 +0200 -Subject: [PATCH] LUKS-on-LVM conversion test: rename VGs and LVs - -In preparation for a subsequent patch, rename "VG" to "Volume-Group", and -"LV" to "Logical-Volume-", in the LUKS-on-LVM conversion test. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2168506 -Signed-off-by: Laszlo Ersek -Message-Id: <20230515175529.290724-2-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit 0ecbe09c09cace1fe0d03cad3ac53000bfeb3cb6) ---- - test-data/phony-guests/make-fedora-img.pl | 30 +++++++++++-------- - .../test-v2v-fedora-luks-on-lvm-conversion.sh | 8 ++--- - 2 files changed, 21 insertions(+), 17 deletions(-) - -diff --git a/test-data/phony-guests/make-fedora-img.pl b/test-data/phony-guests/make-fedora-img.pl -index c30c0b53..830accfc 100755 ---- a/test-data/phony-guests/make-fedora-img.pl -+++ b/test-data/phony-guests/make-fedora-img.pl -@@ -224,23 +224,27 @@ EOF - - # Create the Volume Group on /dev/sda2. - $g->pvcreate ('/dev/sda2'); -- $g->vgcreate ('VG', ['/dev/sda2']); -- $g->lvcreate ('Root', 'VG', 256); -- $g->lvcreate ('LV1', 'VG', 32); -- $g->lvcreate ('LV2', 'VG', 32); -- $g->lvcreate ('LV3', 'VG', 64); -+ $g->vgcreate ('Volume-Group', ['/dev/sda2']); -+ $g->lvcreate ('Root', 'Volume-Group', 256); -+ $g->lvcreate ('Logical-Volume-1', 'Volume-Group', 32); -+ $g->lvcreate ('Logical-Volume-2', 'Volume-Group', 32); -+ $g->lvcreate ('Logical-Volume-3', 'Volume-Group', 64); - - # Format each Logical Group as a LUKS device, with a different password. -- $g->luks_format ('/dev/VG/Root', 'FEDORA-Root', 0); -- $g->luks_format ('/dev/VG/LV1', 'FEDORA-LV1', 0); -- $g->luks_format ('/dev/VG/LV2', 'FEDORA-LV2', 0); -- $g->luks_format ('/dev/VG/LV3', 'FEDORA-LV3', 0); -+ $g->luks_format ('/dev/Volume-Group/Root', 'FEDORA-Root', 0); -+ $g->luks_format ('/dev/Volume-Group/Logical-Volume-1', 'FEDORA-LV1', 0); -+ $g->luks_format ('/dev/Volume-Group/Logical-Volume-2', 'FEDORA-LV2', 0); -+ $g->luks_format ('/dev/Volume-Group/Logical-Volume-3', 'FEDORA-LV3', 0); - - # Open the LUKS devices. This creates nodes like /dev/mapper/*-luks. -- $g->cryptsetup_open ('/dev/VG/Root', 'FEDORA-Root', 'Root-luks'); -- $g->cryptsetup_open ('/dev/VG/LV1', 'FEDORA-LV1', 'LV1-luks'); -- $g->cryptsetup_open ('/dev/VG/LV2', 'FEDORA-LV2', 'LV2-luks'); -- $g->cryptsetup_open ('/dev/VG/LV3', 'FEDORA-LV3', 'LV3-luks'); -+ $g->cryptsetup_open ('/dev/Volume-Group/Root', -+ 'FEDORA-Root', 'Root-luks'); -+ $g->cryptsetup_open ('/dev/Volume-Group/Logical-Volume-1', -+ 'FEDORA-LV1', 'LV1-luks'); -+ $g->cryptsetup_open ('/dev/Volume-Group/Logical-Volume-2', -+ 'FEDORA-LV2', 'LV2-luks'); -+ $g->cryptsetup_open ('/dev/Volume-Group/Logical-Volume-3', -+ 'FEDORA-LV3', 'LV3-luks'); - - # Phony root filesystem. - $g->mkfs ('ext2', '/dev/mapper/Root-luks', blocksize => 4096, label => 'ROOT'); -diff --git a/tests/test-v2v-fedora-luks-on-lvm-conversion.sh b/tests/test-v2v-fedora-luks-on-lvm-conversion.sh -index 1a4068cf..7ad17e0d 100755 ---- a/tests/test-v2v-fedora-luks-on-lvm-conversion.sh -+++ b/tests/test-v2v-fedora-luks-on-lvm-conversion.sh -@@ -28,9 +28,9 @@ skip_if_skipped - f=../test-data/phony-guests/fedora-luks-on-lvm.img - requires test -f $f - --keys=(--key /dev/VG/Root:key:FEDORA-Root -- --key /dev/VG/LV1:key:FEDORA-LV1 -- --key /dev/VG/LV2:key:FEDORA-LV2 -- --key /dev/VG/LV3:key:FEDORA-LV3) -+keys=(--key /dev/Volume-Group/Root:key:FEDORA-Root -+ --key /dev/Volume-Group/Logical-Volume-1:key:FEDORA-LV1 -+ --key /dev/Volume-Group/Logical-Volume-2:key:FEDORA-LV2 -+ --key /dev/Volume-Group/Logical-Volume-3:key:FEDORA-LV3) - - $VG virt-v2v --debug-gc -i disk $f -o null "${keys[@]}" diff --git a/SOURCES/0001-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch b/SOURCES/0015-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch similarity index 91% rename from SOURCES/0001-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch rename to SOURCES/0015-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch index b857937..21292fe 100644 --- a/SOURCES/0001-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch +++ b/SOURCES/0015-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch @@ -1,4 +1,4 @@ -From 3447e87d922d9d0bec765ce9ffeb21d13646bec2 Mon Sep 17 00:00:00 2001 +From 5bdd4525570d58e7b712514f1ab57cb04f7cd8d8 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 @@ -16,7 +16,7 @@ support cases. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/output/output_qemu.ml b/output/output_qemu.ml -index 57b1e58d..bb6b55c8 100644 +index 1a5f7f71..97cf59a8 100644 --- a/output/output_qemu.ml +++ b/output/output_qemu.ml @@ -142,7 +142,7 @@ module QEMU = struct diff --git a/SOURCES/0016-LUKS-on-LVM-conversion-test-test-dev-mapper-VG-LV-tr.patch b/SOURCES/0016-LUKS-on-LVM-conversion-test-test-dev-mapper-VG-LV-tr.patch deleted file mode 100644 index c3c50ea..0000000 --- a/SOURCES/0016-LUKS-on-LVM-conversion-test-test-dev-mapper-VG-LV-tr.patch +++ /dev/null @@ -1,34 +0,0 @@ -From c8902c551014bc0163122d9fd2005d97d3cb38a5 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 15 May 2023 19:55:29 +0200 -Subject: [PATCH] LUKS-on-LVM conversion test: test /dev/mapper/VG-LV - translation - -In the LUKS-on-LVM conversion test, repeat the null conversion with such -"--key" options that exercise the recent "/dev/mapper/VG-LV" -> -"/dev/VG/LV" translation (unescaping) from libguestfs-common. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2168506 -Signed-off-by: Laszlo Ersek -Message-Id: <20230515175529.290724-3-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit 3060af01e87fbffe1cb413938c3c5431f2242bd4) ---- - tests/test-v2v-fedora-luks-on-lvm-conversion.sh | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/tests/test-v2v-fedora-luks-on-lvm-conversion.sh b/tests/test-v2v-fedora-luks-on-lvm-conversion.sh -index 7ad17e0d..605b19fb 100755 ---- a/tests/test-v2v-fedora-luks-on-lvm-conversion.sh -+++ b/tests/test-v2v-fedora-luks-on-lvm-conversion.sh -@@ -34,3 +34,10 @@ keys=(--key /dev/Volume-Group/Root:key:FEDORA-Root - --key /dev/Volume-Group/Logical-Volume-3:key:FEDORA-LV3) - - $VG virt-v2v --debug-gc -i disk $f -o null "${keys[@]}" -+ -+keys=(--key /dev/mapper/Volume--Group-Root:key:FEDORA-Root -+ --key /dev/mapper/Volume--Group-Logical--Volume--1:key:FEDORA-LV1 -+ --key /dev/mapper/Volume--Group-Logical--Volume--2:key:FEDORA-LV2 -+ --key /dev/mapper/Volume--Group-Logical--Volume--3:key:FEDORA-LV3) -+ -+$VG virt-v2v --debug-gc -i disk $f -o null "${keys[@]}" diff --git a/SOURCES/0002-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch b/SOURCES/0016-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch similarity index 90% rename from SOURCES/0002-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch rename to SOURCES/0016-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch index a6f4a4d..47d3fe5 100644 --- a/SOURCES/0002-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch +++ b/SOURCES/0016-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch @@ -1,4 +1,4 @@ -From ebaa8a444b44e93e45ccbc2cddadffd19be6f19d Mon Sep 17 00:00:00 2001 +From f063d97be8f13cc6526d3a4b4ec8be0b1d3c266f 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 @@ -44,10 +44,10 @@ index d2a1c270..0be37f5e 100644 =item B<-o null> diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index 4d2f241a..de27b795 100644 +index bc946dc1..55545e11 100644 --- a/docs/virt-v2v.pod +++ b/docs/virt-v2v.pod -@@ -144,11 +144,6 @@ Since F contains the path(s) to the guest disk +@@ -146,11 +146,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. @@ -59,7 +59,7 @@ index 4d2f241a..de27b795 100644 =head1 OPTIONS =over 4 -@@ -517,9 +512,6 @@ This is similar to I<-o local>, except that a shell script is written +@@ -522,9 +517,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>. @@ -69,7 +69,7 @@ index 4d2f241a..de27b795 100644 =item B<-o> B This is the same as I<-o rhv>. -@@ -598,11 +590,6 @@ For I<-o openstack> (L) only, set a guest ID +@@ -603,11 +595,6 @@ For I<-o openstack> (L) only, set a guest ID which is saved on each Cinder volume in the C volume property. @@ -81,7 +81,7 @@ index 4d2f241a..de27b795 100644 =item B<-oo verify-server-certificate> =item B<-oo verify-server-certificate=>C -@@ -773,10 +760,6 @@ Print information about the source guest and stop. This option is +@@ -778,10 +765,6 @@ Print information about the source guest and stop. This option is useful when you are setting up network and bridge maps. See L. @@ -93,7 +93,7 @@ index 4d2f241a..de27b795 100644 =item B<--quiet> diff --git a/output/output_qemu.ml b/output/output_qemu.ml -index bb6b55c8..ae93fb89 100644 +index 97cf59a8..ad3eb897 100644 --- a/output/output_qemu.ml +++ b/output/output_qemu.ml @@ -65,6 +65,9 @@ module QEMU = struct diff --git a/SOURCES/0003-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch b/SOURCES/0017-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch similarity index 88% rename from SOURCES/0003-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch rename to SOURCES/0017-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch index 6d89928..c16597a 100644 --- a/SOURCES/0003-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch +++ b/SOURCES/0017-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch @@ -1,4 +1,4 @@ -From 389c370a34f805e744cb8352e3e980fbd0b52044 Mon Sep 17 00:00:00 2001 +From 6cee48bde007be6c8242c9e1a3b83bc153c566d9 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 @@ -9,7 +9,7 @@ Subject: [PATCH] RHEL: Fix list of supported sound cards to match RHEL qemu 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/utils.ml b/lib/utils.ml -index 174c01b1..54431307 100644 +index 19c5ba91..7b3aa2e2 100644 --- a/lib/utils.ml +++ b/lib/utils.ml @@ -60,13 +60,14 @@ let kvm_arch = function diff --git a/SOURCES/0017-test-data-phony-guests-fix-prerequisite-list-of-fedo.patch b/SOURCES/0017-test-data-phony-guests-fix-prerequisite-list-of-fedo.patch deleted file mode 100644 index faa0ae6..0000000 --- a/SOURCES/0017-test-data-phony-guests-fix-prerequisite-list-of-fedo.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 10192f8ee3a7900e76d5c9a0fb330eb5ff1fe22c Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Mon, 19 Jun 2023 18:27:29 +0200 -Subject: [PATCH] test-data/phony-guests: fix prerequisite list of - "fedora-luks-on-lvm.img" - -In the virt-v2v repo, commit 1e75569aa074 ("test-data/phony-guests: Allow -virt-v2v to work against phony Fedora") is an ancestor of commit -e4efe4b7d240 ("tests: add LUKS-on-LVM test"). The latter created a state -where "fedora-static-bin" and LUKS on LVM testing would coexist (i.e., -where "fedora-static-bin" would be uploaded to the LUKS-on-LVM disk image -as well), but the commit didn't spell out the dependency in -"test-data/phony-guests/Makefile.am". - -Do that now. - -The problem can be triggered with: - -> autoreconf -i -> ./configure -> make -> make -C test-data/phony-guests fedora-luks-on-lvm.img - -where the last command fails with - -> make: Entering directory '.../test-data/phony-guests' -> SRCDIR=. LAYOUT=luks-on-lvm ../../run --test ./make-fedora-img.pl -> open: fedora-static-bin: No such file or directory at -> .../test-data/phony-guests/make-fedora-img.pl line 373. - -(In the guestfs-tools repo, the relative order (the descendancy) between -both commits is the opposite. There, commit 27da4b0c4991 ("inspector: add -LUKS-on-LVM test") came first, and commit eb0ff1859eb6 -("test-data/phony-guests: Allow virt-v2v to work against phony Fedora"), -came second. The latter commit, in fact being a port of virt-v2v commit -1e75569aa074, brought together "fedora-static-bin" with "LUKS on LVM" -testing, and it correctly added "fedora-static-bin" as a pre-requisite -for building "fedora-luks-on-lvm.img".) - -Fixes: e4efe4b7d240b66b1d53fbe5a127f4f5966f6903 -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2168506 -Signed-off-by: Laszlo Ersek -Message-Id: <20230619162729.153334-1-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit 13a6f4b9686e3fc385663bffc31c08d2c2bb7959) ---- - test-data/phony-guests/Makefile.am | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/test-data/phony-guests/Makefile.am b/test-data/phony-guests/Makefile.am -index 29dbd4d0..10c0241b 100644 ---- a/test-data/phony-guests/Makefile.am -+++ b/test-data/phony-guests/Makefile.am -@@ -103,7 +103,8 @@ fedora-btrfs.img: make-fedora-img.pl \ - # Make a (dummy) Fedora image with LUKS-on-LVM. - fedora-luks-on-lvm.img: make-fedora-img.pl \ - fedora-journal.tar.xz \ -- fedora.db -+ fedora.db \ -+ fedora-static-bin - SRCDIR=$(srcdir) LAYOUT=luks-on-lvm $(top_builddir)/run --test ./$< - - # Make a (dummy) Fedora image with LVM-on-LUKS. diff --git a/SOURCES/0004-RHEL-Fixes-for-libguestfs-winsupport.patch b/SOURCES/0018-RHEL-Fixes-for-libguestfs-winsupport.patch similarity index 98% rename from SOURCES/0004-RHEL-Fixes-for-libguestfs-winsupport.patch rename to SOURCES/0018-RHEL-Fixes-for-libguestfs-winsupport.patch index dca39d6..e83c766 100644 --- a/SOURCES/0004-RHEL-Fixes-for-libguestfs-winsupport.patch +++ b/SOURCES/0018-RHEL-Fixes-for-libguestfs-winsupport.patch @@ -1,4 +1,4 @@ -From c0bb624a151be3291e0c10c1002577615b98e74c Mon Sep 17 00:00:00 2001 +From 7374efa8aecb97a83a1ec6d4d606651a4eb569e4 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. diff --git a/SOURCES/0018-lib-utils-fix-typo.patch b/SOURCES/0018-lib-utils-fix-typo.patch deleted file mode 100644 index 1caecc7..0000000 --- a/SOURCES/0018-lib-utils-fix-typo.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 7a370cc7fcf4ba664eef73d4bac03dfc4d7041b3 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Thu, 29 Jun 2023 14:34:41 +0200 -Subject: [PATCH] lib/utils: fix typo - -Fix a small comment typo from commit 4e7f20684373 ("lib: Improve security -of in/out sockets when running virt-v2v as root", 2022-03-23). - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2182024 -Signed-off-by: Laszlo Ersek -Message-Id: <20230629123443.188350-2-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit dab9629c01915efc3678885e8bb0ccc5da1802a3) ---- - lib/utils.mli | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/utils.mli b/lib/utils.mli -index 5687bf75..cf88a467 100644 ---- a/lib/utils.mli -+++ b/lib/utils.mli -@@ -62,7 +62,7 @@ val backend_is_libvirt : unit -> bool - (** Return true iff the current backend is libvirt. *) - - val chown_for_libvirt_rhbz_1045069 : string -> unit --(** If running and root, and if the backend is libvirt, libvirt -+(** If running as root, and if the backend is libvirt, libvirt - will run qemu as a non-root user. This prevents access - to root-owned files and directories. To fix this, provide - a function to chown things we might need to qemu:root so diff --git a/SOURCES/0005-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch b/SOURCES/0019-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch similarity index 93% rename from SOURCES/0005-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch rename to SOURCES/0019-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch index 7df53c4..2df8b46 100644 --- a/SOURCES/0005-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch +++ b/SOURCES/0019-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch @@ -1,4 +1,4 @@ -From eaf5279f486590d24843ff63c9f95af33abffe39 Mon Sep 17 00:00:00 2001 +From 8b2bb3c153b44634fb3f93aae1c0c40655213506 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) diff --git a/SOURCES/0019-lib-utils-make-chown_for_libvirt_rhbz_1045069-fail-h.patch b/SOURCES/0019-lib-utils-make-chown_for_libvirt_rhbz_1045069-fail-h.patch deleted file mode 100644 index 11a2229..0000000 --- a/SOURCES/0019-lib-utils-make-chown_for_libvirt_rhbz_1045069-fail-h.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 522a927257cfa55ac87775165be23779e00076bb Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Thu, 29 Jun 2023 14:34:42 +0200 -Subject: [PATCH] lib/utils: make "chown_for_libvirt_rhbz_1045069" fail hard - -Currently "chown_for_libvirt_rhbz_1045069" is best effort; if it fails, we -suppress the exception (we log it in verbose mode only, even). - -That's not proved helpful: it almost certainly leads to later errors, but -those errors are less clear than the original (suppressed) exception. -Namely, the user sees something like - -> Failed to connect to '/tmp/v2v.sKlulY/in0': Permission denied - -rather than - -> Failed to connect socket to '/var/run/libvirt/virtqemud-sock-ro': -> Connection refused - -So just allow the exception to propagate outwards. - -And then, now that "chown_for_libvirt_rhbz_1045069" will be able to fail, -hoist the call to "On_exit.rm_rf" before the call to -"chown_for_libvirt_rhbz_1045069", after creating the v2v temporary -directory. In the current order, if "chown_for_libvirt_rhbz_1045069" threw -an exception, then we'd leak the temp dir in the filesystem. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2182024 -Signed-off-by: Laszlo Ersek -Message-Id: <20230629123443.188350-3-lersek@redhat.com> -[lersek@redhat.com: reinstate parens under "then" [Rich]] -Reviewed-by: Richard W.M. Jones -(cherry picked from commit 8bcf383510a3d9deaa9b4c069a45c1604c9d5f53) ---- - lib/utils.ml | 23 +++++++++-------------- - lib/utils.mli | 5 +---- - 2 files changed, 10 insertions(+), 18 deletions(-) - -diff --git a/lib/utils.ml b/lib/utils.ml -index 54431307..7b3aa2e2 100644 ---- a/lib/utils.ml -+++ b/lib/utils.ml -@@ -151,19 +151,14 @@ let backend_is_libvirt () = - let rec chown_for_libvirt_rhbz_1045069 file = - let running_as_root = Unix.geteuid () = 0 in - if running_as_root && backend_is_libvirt () then ( -- try -- let user = Option.value ~default:"qemu" (libvirt_qemu_user ()) in -- let uid = -- if String.is_prefix user "+" then -- int_of_string (String.sub user 1 (String.length user - 1)) -- else -- (Unix.getpwnam user).pw_uid in -- debug "setting owner of %s to %d:root" file uid; -- Unix.chown file uid 0 -- with -- | exn -> (* Print exception, but continue. *) -- debug "could not set owner of %s: %s" -- file (Printexc.to_string exn) -+ let user = Option.value ~default:"qemu" (libvirt_qemu_user ()) in -+ let uid = -+ if String.is_prefix user "+" then -+ int_of_string (String.sub user 1 (String.length user - 1)) -+ else -+ (Unix.getpwnam user).pw_uid in -+ debug "setting owner of %s to %d:root" file uid; -+ Unix.chown file uid 0 - ) - - (* Get the local user that libvirt uses to run qemu when we are -@@ -206,8 +201,8 @@ let error_if_no_ssh_agent () = - (* Create the directory containing inX and outX sockets. *) - let create_v2v_directory () = - let d = Mkdtemp.temp_dir "v2v." in -- chown_for_libvirt_rhbz_1045069 d; - On_exit.rm_rf d; -+ chown_for_libvirt_rhbz_1045069 d; - d - - (* Wait for a file to appear until a timeout. *) -diff --git a/lib/utils.mli b/lib/utils.mli -index cf88a467..391a2a35 100644 ---- a/lib/utils.mli -+++ b/lib/utils.mli -@@ -67,10 +67,7 @@ val chown_for_libvirt_rhbz_1045069 : string -> unit - to root-owned files and directories. To fix this, provide - a function to chown things we might need to qemu:root so - qemu can access them. Note that root normally ignores -- permissions so can still access the resource. -- -- This is best-effort. If something fails then we carry -- on and hope for the best. *) -+ permissions so can still access the resource. *) - - val error_if_no_ssh_agent : unit -> unit - diff --git a/SOURCES/0006-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch b/SOURCES/0020-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch similarity index 87% rename from SOURCES/0006-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch rename to SOURCES/0020-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch index 672e1c6..689f21f 100644 --- a/SOURCES/0006-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch +++ b/SOURCES/0020-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch @@ -1,4 +1,4 @@ -From 71ab7854f53b0b9338de12d7dadb2c4754dfcff6 Mon Sep 17 00:00:00 2001 +From 28e3b929b94e213bc24fa27c58215fe8ccdb9ba1 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) @@ -9,7 +9,7 @@ They are not supported in RHEL. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod -index 4a0544f8..9c3981e1 100644 +index 38dc8f7b..05c4e3f5 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 diff --git a/SOURCES/0020-docs-virt-v2v-document-libvirt-system-instance-start.patch b/SOURCES/0020-docs-virt-v2v-document-libvirt-system-instance-start.patch deleted file mode 100644 index df8eee4..0000000 --- a/SOURCES/0020-docs-virt-v2v-document-libvirt-system-instance-start.patch +++ /dev/null @@ -1,79 +0,0 @@ -From f2e233b9e073327b1881ef17695380bc02a51f68 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Thu, 29 Jun 2023 14:34:43 +0200 -Subject: [PATCH] docs/virt-v2v: document libvirt system instance startup -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -It has frequently tripped us up that on RHEL / Fedora, installing the -right set of libvirt RPMs (such as the one pulled in by -"libvirt-daemon-kvm") does not result in an immediately running libvirt -system instance. Document the need, and the simplest method, for starting -libvirt up manually. - -Thanks: Daniel Berrangé -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2182024 -Signed-off-by: Laszlo Ersek -Message-Id: <20230629123443.188350-4-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -(cherry picked from commit dcfea1b9b5d0f237f49c9eb870af93527093b40b) ---- - docs/virt-v2v.pod | 23 ++++++++++++++++++++++- - 1 file changed, 22 insertions(+), 1 deletion(-) - -diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index 0394b421..058eb800 100644 ---- a/docs/virt-v2v.pod -+++ b/docs/virt-v2v.pod -@@ -237,6 +237,8 @@ In this mode you have to specify a libvirt guest name or UUID on the - command line. You may also specify a libvirt connection URI (see - I<-ic>). - -+See L below. -+ - =item B<-i> B - - Set the input method to I. -@@ -440,7 +442,8 @@ Set the output method to I. This is the default. - In this mode, the converted guest is created as a libvirt guest. You - may also specify a libvirt connection URI (see I<-oc>). - --See L. -+See L below, and -+L. - - =item B<-o> B - -@@ -1335,6 +1338,8 @@ see L. Alternatively, use - I<-oc qemu:///session>, which will write to your per-user libvirt - instance. - -+See also L. -+ - =item Writing to Openstack - - Because of how Cinder volumes are presented as F block devices, -@@ -1476,6 +1481,22 @@ option at all. The option was added when virt-v2v was rewritten in 2014. - It is possible to specify a format string for controlling the output; - see L. - -+=head2 Starting the libvirt system instance -+ -+ Failed to connect socket to '/var/run/libvirt/virtqemud-sock': No such file or directory -+ Failed to connect socket to '/var/run/libvirt/virtqemud-sock-ro': Connection refused -+ -+If you have just installed libvirt and virt-v2v, then you may see the -+errors above. This is caused by libvirt daemons that provide various -+services not running straight after installation. (This may depend on -+your distribution and vendor presets). -+ -+To fix this on systemd-based distributions, do: -+ -+ systemctl isolate multi-user.target -+ -+See also L. -+ - =head1 FILES - - =over 4 diff --git a/SOURCES/0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch b/SOURCES/0021-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch similarity index 97% rename from SOURCES/0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch rename to SOURCES/0021-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch index 4413ed6..0c822ed 100644 --- a/SOURCES/0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch +++ b/SOURCES/0021-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch @@ -1,4 +1,4 @@ -From 134fb5cd6925e8af155d1f84db55d3742f2f256f Mon Sep 17 00:00:00 2001 +From a2e7cf38ee640e9e806a680cf55f78d33a3c0ee8 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 diff --git a/SOURCES/0008-RHEL-Disable-o-glance.patch b/SOURCES/0022-RHEL-Disable-o-glance.patch similarity index 96% rename from SOURCES/0008-RHEL-Disable-o-glance.patch rename to SOURCES/0022-RHEL-Disable-o-glance.patch index be25b21..f06aa76 100644 --- a/SOURCES/0008-RHEL-Disable-o-glance.patch +++ b/SOURCES/0022-RHEL-Disable-o-glance.patch @@ -1,4 +1,4 @@ -From e4ffc4800bd8a4bbec56b374cc6d21dff88f15ae Mon Sep 17 00:00:00 2001 +From 29b43856a1429148eece11f0579a01026d583161 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 @@ -98,10 +98,10 @@ index cd4862b1..54cd276e 100644 =head1 AUTHOR diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index de27b795..e5400ca7 100644 +index 55545e11..8d5d54d3 100644 --- a/docs/virt-v2v.pod +++ b/docs/virt-v2v.pod -@@ -431,14 +431,6 @@ See L below. +@@ -435,14 +435,6 @@ See L below. This is the same as I<-o local>. @@ -116,7 +116,7 @@ index de27b795..e5400ca7 100644 =item B<-o> B Set the output method to I. B (or F). @@ -128,7 +128,7 @@ index de27b795..e5400ca7 100644 =item I<-o local> =item I<-o qemu> -@@ -1370,13 +1357,6 @@ instance. +@@ -1377,13 +1364,6 @@ See also L. Because of how Cinder volumes are presented as F block devices, using I<-o openstack> normally requires that virt-v2v is run as root. diff --git a/SOURCES/0009-RHEL-Remove-the-in-place-option.patch b/SOURCES/0023-RHEL-Remove-the-in-place-option.patch similarity index 95% rename from SOURCES/0009-RHEL-Remove-the-in-place-option.patch rename to SOURCES/0023-RHEL-Remove-the-in-place-option.patch index 089c1c5..ea6a3c9 100644 --- a/SOURCES/0009-RHEL-Remove-the-in-place-option.patch +++ b/SOURCES/0023-RHEL-Remove-the-in-place-option.patch @@ -1,4 +1,4 @@ -From 8eb1f90c3e894da7f528dbc1c54960ebcf0f759b Mon Sep 17 00:00:00 2001 +From cbebfa10e481a664a949ff07dfceca5cb45793df 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 @@ -12,7 +12,7 @@ wish to support in RHEL. 3 files changed, 17 deletions(-) diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index e5400ca7..fc7e0d82 100644 +index 8d5d54d3..0738f492 100644 --- a/docs/virt-v2v.pod +++ b/docs/virt-v2v.pod @@ -24,9 +24,6 @@ virtualize those machines (physical to virtual, or p2v). @@ -36,7 +36,7 @@ index e5400ca7..fc7e0d82 100644 =head2 Other virt-v2v topics L — Supported hypervisors, virtualization -@@ -1622,7 +1615,6 @@ L, L, diff --git a/SOURCES/0010-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch b/SOURCES/0024-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch similarity index 96% rename from SOURCES/0010-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch rename to SOURCES/0024-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch index a77ef0c..2736740 100644 --- a/SOURCES/0010-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch +++ b/SOURCES/0024-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch @@ -1,4 +1,4 @@ -From dbf8c50d6d0e157c13e505a22f6f397cb991139c Mon Sep 17 00:00:00 2001 +From aec57da776543ede26a2f751594686ad36b51bad 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 diff --git a/SOURCES/0011-RHEL-9-tests-Remove-btrfs-test.patch b/SOURCES/0025-RHEL-9-tests-Remove-btrfs-test.patch similarity index 91% rename from SOURCES/0011-RHEL-9-tests-Remove-btrfs-test.patch rename to SOURCES/0025-RHEL-9-tests-Remove-btrfs-test.patch index 415e44c..5ca58dc 100644 --- a/SOURCES/0011-RHEL-9-tests-Remove-btrfs-test.patch +++ b/SOURCES/0025-RHEL-9-tests-Remove-btrfs-test.patch @@ -1,4 +1,4 @@ -From 81b28218e676cdc57bd6f8427cfd5faf85162d4a Mon Sep 17 00:00:00 2001 +From d9c11fcfdf832f9d3d35855e7e7458efc1908515 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 diff --git a/SOURCES/0012-RHEL-9-Remove-block-driver-option.patch b/SOURCES/0026-RHEL-9-Remove-block-driver-option.patch similarity index 97% rename from SOURCES/0012-RHEL-9-Remove-block-driver-option.patch rename to SOURCES/0026-RHEL-9-Remove-block-driver-option.patch index f4ed720..d856392 100644 --- a/SOURCES/0012-RHEL-9-Remove-block-driver-option.patch +++ b/SOURCES/0026-RHEL-9-Remove-block-driver-option.patch @@ -1,4 +1,4 @@ -From 9c18f8772f7c8801ef47126f55b0313dc2188b03 Mon Sep 17 00:00:00 2001 +From 3e2962dad1245b8c7d1255faaa6820adc0648d14 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Fri, 28 Apr 2023 12:28:19 +0100 Subject: [PATCH] RHEL 9: Remove --block-driver option @@ -37,10 +37,10 @@ index ce57e229..6e1c5363 100644 =item B<--colours> diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index fc7e0d82..0394b421 100644 +index 0738f492..021ac897 100644 --- a/docs/virt-v2v.pod +++ b/docs/virt-v2v.pod -@@ -195,16 +195,6 @@ The options are silently ignored for other input methods. +@@ -197,16 +197,6 @@ The options are silently ignored for other input methods. See I<--network> below. diff --git a/SOURCES/copy-patches.sh b/SOURCES/copy-patches.sh index 6f8b556..881f822 100755 --- a/SOURCES/copy-patches.sh +++ b/SOURCES/copy-patches.sh @@ -7,7 +7,7 @@ set -e # ./copy-patches.sh project=virt-v2v -rhel_version=9.3 +rhel_version=9.4 # Check we're in the right directory. if [ ! -f $project.spec ]; then diff --git a/SOURCES/virt-v2v-2.3.4.tar.gz.sig b/SOURCES/virt-v2v-2.3.4.tar.gz.sig deleted file mode 100644 index 030897e..0000000 --- a/SOURCES/virt-v2v-2.3.4.tar.gz.sig +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAmQ/zVsRHHJpY2hAYW5u -ZXhpYS5vcmcACgkQkXOPc+G3aKDvNw//T5RStZ4lypgFgeCqM8HUce8AvEBmp2Bu -eCFMsSHjyWvA5S9mw+D6EOhDIZiIyGoESbYzpXZxrXE8YYWKW51rlOaGcVxmU5ld -mz3bz2iGRGpFsKzF1v0WDaLzhg8KX6Fw7hFlnDjTLjYqnwSgySf/aXVrPEZPwmwj -iGqpCNokG5HmJNQ36x2JMmQxa135nbYXh/nvPTXU2gzx7i5By3D9ir2k6B/iLDPf -NbQ7PDO9mSBKljeRvhrmM2zxXiAhb3WG9XWM/I4aHASh76BhR7lCg4GS94NbTNPj -KAWAIGZN0TFRLOHsFwvOz9pibJQeDdjimakwDzSv9+gS+TlwU1isahpW8Ic/tIlC -2BEucjM7MVuyLLqoGq5tKGbO/OZ7Rheg/wR0j2y+1afvCRgRupyAjtwlYjFpB/sp -1tNmYAW9zOtJtp3MLfMCO820ZsBifprTk9dZqDCeH3HW9aJ8e1pJcpYF5G3gpVD/ -m32J9YFudmAV0Z3ePUnH/C5ZAzvE1u55SexnfZEqdyKZ+KOujZBrg4b/nID1xmo1 -jBZbYprNJTRluJCmIvY5/79Oob2GqAqOgjdUrQlEzPVRf6Kd5lAGIqkKr+5RlQvg -9OmIvQu1wgiqpmxEuev/RDb8b8M632YAv5+6TACxpqhfZxkmSZ04XFKCZZw1/pDd -NXR/cUUWEBI= -=XPmg ------END PGP SIGNATURE----- diff --git a/SOURCES/virt-v2v-2.4.0.tar.gz.sig b/SOURCES/virt-v2v-2.4.0.tar.gz.sig new file mode 100644 index 0000000..9411853 --- /dev/null +++ b/SOURCES/virt-v2v-2.4.0.tar.gz.sig @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- + +iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAmWW5kYRHHJpY2hAYW5u +ZXhpYS5vcmcACgkQkXOPc+G3aKBddxAAvM08lmWH0IlpLwKX06TwnVERt8fXD++p +bjRrfj2mOoayoN/B1oE61laCdZgCzPtN6MC/aW94LITaGJWHi7YYqdgdRgL1NqeC +n0tu8t14XsCT1xTIOa1ndb018+a5ppIcOnmGAj4naM5uA50rgRwChdSOTP/H10+J +93M2rvvak8aVdeWEhnMJyqWG2mFJ0YselJ+cMu66XFBkK7wg4UwCzzJ4Blqb1Igd +W/wctLDLqPVAxI85P/2p2dt+N4vzOnT/jr+dFxXOJg99E6iwa3qPCdzGHmszjhyC +uNhq/pWMt5tSk34IwYduyk1b9mlx9dCQsyREwrVomsdZD+XrUZHhrGrlcVJDfT07 +2DCkVnGAoH0DRmz3t69KJS9U1JgzkaTDNaezkLlIZ7VZOdaC5nK74efnN0yinBkJ +9GhmR0qbk4/QVKeNWSftu4Rd9OUtRSaEMH0kO/S42vl3fW59u+ZGMEz26Ar4x/q7 +jLx3vKfduJbpvberc3kQ2p9jQbUjlyFOTtnTAf84ckyIkvEMwpEhlyfchctPji/K +IaJ4Yd0KnKiLg/GH9Eon79cadAV2hzvYb2FZYI1RcrbRH+nZvGLgSbvHobqESERT +hBBXrAhaazRdxbOVqwMV9d+lq4llzUJJMOVCsK/PLnigrl5OCLQNQ2IVBbPv8WFD +VMg/9mGiUj0= +=lbFv +-----END PGP SIGNATURE----- diff --git a/SPECS/virt-v2v.spec b/SPECS/virt-v2v.spec index 77e7f91..93fad56 100644 --- a/SPECS/virt-v2v.spec +++ b/SPECS/virt-v2v.spec @@ -11,15 +11,15 @@ %endif # The source directory. -%global source_directory 2.3-development +%global source_directory 2.4-stable Name: virt-v2v Epoch: 1 -Version: 2.3.4 -Release: 5%{?dist} +Version: 2.4.0 +Release: 2%{?dist} Summary: Convert a virtual machine to run on KVM -License: GPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later URL: https://github.com/libguestfs/virt-v2v Source0: http://download.libguestfs.org/virt-v2v/%{source_directory}/%{name}-%{version}.tar.gz @@ -33,29 +33,35 @@ Source2: libguestfs.keyring Source3: copy-patches.sh # Patches are maintained in the following repository: -# https://github.com/libguestfs/virt-v2v/commits/rhel-9.3 +# https://github.com/libguestfs/virt-v2v/commits/rhel-9.4 # Patches. -Patch0001: 0001-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch -Patch0002: 0002-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch -Patch0003: 0003-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch -Patch0004: 0004-RHEL-Fixes-for-libguestfs-winsupport.patch -Patch0005: 0005-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch -Patch0006: 0006-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch -Patch0007: 0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch -Patch0008: 0008-RHEL-Disable-o-glance.patch -Patch0009: 0009-RHEL-Remove-the-in-place-option.patch -Patch0010: 0010-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch -Patch0011: 0011-RHEL-9-tests-Remove-btrfs-test.patch -Patch0012: 0012-RHEL-9-Remove-block-driver-option.patch -Patch0013: 0013-Update-common-submodule.patch -Patch0014: 0014-update-common-submodule.patch -Patch0015: 0015-LUKS-on-LVM-conversion-test-rename-VGs-and-LVs.patch -Patch0016: 0016-LUKS-on-LVM-conversion-test-test-dev-mapper-VG-LV-tr.patch -Patch0017: 0017-test-data-phony-guests-fix-prerequisite-list-of-fedo.patch -Patch0018: 0018-lib-utils-fix-typo.patch -Patch0019: 0019-lib-utils-make-chown_for_libvirt_rhbz_1045069-fail-h.patch -Patch0020: 0020-docs-virt-v2v-document-libvirt-system-instance-start.patch +Patch0001: 0001-virt-v2v-i-vmx-Remove-scp-T-option.patch +Patch0002: 0002-Translated-using-Weblate-Polish.patch +Patch0003: 0003-Update-translation-files.patch +Patch0004: 0004-virt-v2v-i-vmx-Refactor-ssh-scp-code-into-a-new-modu.patch +Patch0005: 0005-virt-v2v-i-vmx-Simplify-scp-wrapper.patch +Patch0006: 0006-virt-v2v-i-vmx-Add-the-input-password-to-vmx_source.patch +Patch0007: 0007-virt-v2v-i-vmx-Remove-dependency-of-ssh.ml-on-Xml.ur.patch +Patch0008: 0008-input-nbdkit_ssh-Make-retry-filter-optional.patch +Patch0009: 0009-virt-v2v-i-vmx-Replace-external-ssh-scp-with-nbdkit-.patch +Patch0010: 0010-input-nbdkit_ssh-Make-password-parameter-optional.patch +Patch0011: 0011-input-ssh-Rearrange-parameters-specifying-ssh-server.patch +Patch0012: 0012-docs-Remove-paragraph-about-ip-passwords-and-ssh-scp.patch +Patch0013: 0013-input-ssh-Use-nbdinfo-can-connect-instead-of-size.patch +Patch0014: 0014-build-Document-that-nbdinfo-and-nbdcopy-are-required.patch +Patch0015: 0015-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch +Patch0016: 0016-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch +Patch0017: 0017-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch +Patch0018: 0018-RHEL-Fixes-for-libguestfs-winsupport.patch +Patch0019: 0019-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch +Patch0020: 0020-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch +Patch0021: 0021-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch +Patch0022: 0022-RHEL-Disable-o-glance.patch +Patch0023: 0023-RHEL-Remove-the-in-place-option.patch +Patch0024: 0024-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch +Patch0025: 0025-RHEL-9-tests-Remove-btrfs-test.patch +Patch0026: 0026-RHEL-9-Remove-block-driver-option.patch %if !0%{?rhel} # libguestfs hasn't been built on i686 for a while since there is no @@ -339,6 +345,7 @@ make -C tests TESTS=test-v2v-fedora-luks-on-lvm-conversion.sh check %{_mandir}/man1/virt-v2v-release-notes-1.42.1* %{_mandir}/man1/virt-v2v-release-notes-2.0.1* %{_mandir}/man1/virt-v2v-release-notes-2.2.1* +%{_mandir}/man1/virt-v2v-release-notes-2.4.1* %{_mandir}/man1/virt-v2v-support.1* %{_datadir}/virt-tools @@ -359,6 +366,21 @@ make -C tests TESTS=test-v2v-fedora-luks-on-lvm-conversion.sh check %changelog +* Mon Jan 22 2024 Richard W.M. Jones - 1:2.4.0-2 +- Rebase to virt-v2v 2.4.0 +- -it ssh: Double quote ssh command which tests remote file exists + resolves: RHEL-12105 +- Implement --key all:... + resolves: RHEL-18142 +- Fix off-by-one error causing rare crash + resolves: RHEL-19061 +- Improve the error message for -i vmx with a .vmdk file + resolves: RHEL-19564 +- Fix -i vmx when remote filename contains literal '*' + resolves: RHEL-21365 +- Fix virt-v2v --version output + resolves: RHEL-22262 + * Mon Jul 03 2023 Laszlo Ersek - 1:2.3.4-5 - improve UX when running as root and we can't chown v2v tmpdir or socks - make the appliance kernel UP in %check, for working around RHBZ#2216496