diff --git a/.gitignore b/.gitignore index c6f6094..c0cbdfa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ SOURCES/libguestfs.keyring -SOURCES/virt-v2v-2.4.0.tar.gz +SOURCES/virt-v2v-2.5.6.tar.gz diff --git a/.virt-v2v.metadata b/.virt-v2v.metadata index ef86ac0..4a8116e 100644 --- a/.virt-v2v.metadata +++ b/.virt-v2v.metadata @@ -1,2 +1,2 @@ 1bbc40f501a7fef9eef2a39b701a71aee2fea7c4 SOURCES/libguestfs.keyring -52029cc7c3f9e05ec9685995ad86955154d7b28e SOURCES/virt-v2v-2.4.0.tar.gz +7c49844a2ffb54d6fcb58eca1dbf57b110d5d47e SOURCES/virt-v2v-2.5.6.tar.gz diff --git a/SOURCES/0001-docs-Note-that-mac-len-field-is-now-optional.patch b/SOURCES/0001-docs-Note-that-mac-len-field-is-now-optional.patch new file mode 100644 index 0000000..4c74f1d --- /dev/null +++ b/SOURCES/0001-docs-Note-that-mac-len-field-is-now-optional.patch @@ -0,0 +1,28 @@ +From 7800049c5612e6ffb30be7f8862d147d82976ae8 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Wed, 31 Jul 2024 10:09:50 +0100 +Subject: [PATCH] docs: Note that --mac len field is now optional + +Reported-by: Ming Xie +Updates: commit 159fda411d2f75b087106e7293d273ae142c9fbe +--- + docs/virt-v2v.pod | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod +index b53face6..dfe92d77 100644 +--- a/docs/virt-v2v.pod ++++ b/docs/virt-v2v.pod +@@ -394,9 +394,9 @@ Force a particular interface (controlled by its MAC address) to have a + static IP address after boot. + + The fields in the parameter are: C is the IP address. C +-is the optional gateway IP address. C is the subnet mask length +-(an integer). The final parameters are zero or more nameserver IP +-addresses. ++is the optional gateway IP address. C is the optional subnet ++mask length (an integer). The final parameters are zero or more ++nameserver IP addresses. + + This option can be supplied zero or more times. + 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 deleted file mode 100644 index 50b3c3e..0000000 --- a/SOURCES/0001-virt-v2v-i-vmx-Remove-scp-T-option.patch +++ /dev/null @@ -1,39 +0,0 @@ -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 deleted file mode 100644 index 7d14026..0000000 --- a/SOURCES/0002-Translated-using-Weblate-Polish.patch +++ /dev/null @@ -1,48 +0,0 @@ -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/0002-convert-More-robust-qemu-ga-installation-change-path.patch b/SOURCES/0002-convert-More-robust-qemu-ga-installation-change-path.patch new file mode 100644 index 0000000..1bf5676 --- /dev/null +++ b/SOURCES/0002-convert-More-robust-qemu-ga-installation-change-path.patch @@ -0,0 +1,207 @@ +From c57ec4fd5d4942d2320aec4a6b01977dabb87f83 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 1 Aug 2024 09:01:47 +0100 +Subject: [PATCH] convert: More robust qemu-ga installation, change paths + +Add a commit from the common submodule to attempt to make qemu-ga +installation more robust on Windows. + +Rename network configuration Powershell script from "v2vnetcf" to +"network-configuration". I also dropped the ".ps1" extension as the +modified Firstboot.add_firstboot_powershell function now adds this. + +Update the common submodule to get these changes: + +Richard W.M. Jones (3): + mlcustomize: Use Start-Process -Wait to run qemu-ga installer + mlcustomize: Add Firstboot.firstboot_dir function + mlcustomize: Place powershell scripts into \Temp +--- + common | 2 +- + convert/convert_windows.ml | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +Submodule common ae639ba3..d489469f: +diff --git a/common/mlcustomize/firstboot.ml b/common/mlcustomize/firstboot.ml +index 4b9b910b..3bbba714 100644 +--- a/common/mlcustomize/firstboot.ml ++++ b/common/mlcustomize/firstboot.ml +@@ -239,7 +239,22 @@ WantedBy=%s + end + + module Windows = struct +- let rec install_service (g : Guestfs.guestfs) root = ++ (* Create and return the firstboot directory. *) ++ let create_firstboot_dir (g : Guestfs.guestfs) = ++ let rec loop firstboot_dir firstboot_dir_win = function ++ | [] -> firstboot_dir, firstboot_dir_win ++ | dir :: path -> ++ let firstboot_dir = ++ if firstboot_dir = "" then "/" ^ dir else firstboot_dir // dir in ++ let firstboot_dir_win = firstboot_dir_win ^ "\\" ^ dir in ++ let firstboot_dir = g#case_sensitive_path firstboot_dir in ++ g#mkdir_p firstboot_dir; ++ loop firstboot_dir firstboot_dir_win path ++ in ++ loop "" "C:" ["Program Files"; "Guestfs"; "Firstboot"] ++ ++ let rec install_service (g : Guestfs.guestfs) root ++ firstboot_dir firstboot_dir_win = + (* Either rhsrvany.exe or pvvxsvc.exe must exist. + * + * (Check also that it's not a dangling symlink but a real file). +@@ -254,20 +269,7 @@ module Windows = struct + error (f_"One of rhsrvany.exe or pvvxsvc.exe is missing in %s. One of them is required in order to install Windows firstboot scripts. You can get one by building rhsrvany (https://github.com/rwmjones/rhsrvany)") + (virt_tools_data_dir ()) in + +- (* Create a directory for firstboot files in the guest. *) +- let firstboot_dir, firstboot_dir_win = +- let rec loop firstboot_dir firstboot_dir_win = function +- | [] -> firstboot_dir, firstboot_dir_win +- | dir :: path -> +- let firstboot_dir = +- if firstboot_dir = "" then "/" ^ dir else firstboot_dir // dir in +- let firstboot_dir_win = firstboot_dir_win ^ "\\" ^ dir in +- let firstboot_dir = g#case_sensitive_path firstboot_dir in +- g#mkdir_p firstboot_dir; +- loop firstboot_dir firstboot_dir_win path +- in +- loop "" "C:" ["Program Files"; "Guestfs"; "Firstboot"] in +- ++ (* Create a directory for firstboot scripts in the guest. *) + g#mkdir_p (firstboot_dir // "scripts"); + + (* Copy pvvxsvc or rhsrvany to the guest. *) +@@ -339,11 +341,25 @@ echo uninstalling firstboot service + "PWD", REG_SZ firstboot_dir_win ]; + ] in + reg_import reg regedits +- ); +- +- firstboot_dir ++ ) + end + ++let firstboot_dir (g : Guestfs.guestfs) root = ++ let typ = g#inspect_get_type root in ++ ++ match typ with ++ | "linux" -> ++ let dir = Linux.firstboot_dir in ++ g#mkdir_p dir; ++ dir, None ++ ++ | "windows" -> ++ let dir, dir_win = Windows.create_firstboot_dir g in ++ dir, Some dir_win ++ ++ | _ -> ++ error (f_"guest type %s is not supported") typ ++ + let script_count = ref 0 + + let add_firstboot_script (g : Guestfs.guestfs) root ?(prio = 5000) name +@@ -363,7 +379,8 @@ let add_firstboot_script (g : Guestfs.guestfs) root ?(prio = 5000) name + g#chmod 0o755 filename + + | "windows", _ -> +- let firstboot_dir = Windows.install_service g root in ++ let firstboot_dir, firstboot_dir_win = Windows.create_firstboot_dir g in ++ Windows.install_service g root firstboot_dir firstboot_dir_win; + let filename = firstboot_dir // "scripts" // filename ^ ".bat" in + g#write filename (String.unix2dos content) + +@@ -382,15 +399,18 @@ let add_firstboot_powershell g root ?prio name code = + *) + assert (g#inspect_get_type root = "windows"); + +- let windows_systemroot = g#inspect_get_windows_systemroot root in +- +- (* Create the temporary directory to put the Powershell file. *) +- let tempdir = sprintf "%s/Temp" windows_systemroot in ++ (* Place the Powershell script into firstboot_dir/Temp *) ++ let firstboot_dir, firstboot_dir_win = Windows.create_firstboot_dir g in ++ let tempdir = sprintf "%s/Temp" firstboot_dir in + g#mkdir_p tempdir; +- let ps_path = sprintf "%s/%s" tempdir name in ++ ++ let ps_path = sprintf "%s/%s.ps1" tempdir name in ++ let ps_path_win = sprintf "%s\\Temp\\%s.ps1" firstboot_dir_win name in + let code = String.concat "\r\n" code ^ "\r\n" in + g#write ps_path code; + +- let fb = sprintf "powershell.exe -ExecutionPolicy ByPass -NoProfile -file %s" +- ps_path in ++ (* Create a regular firstboot bat that just invokes powershell *) ++ let fb = ++ sprintf "powershell.exe -ExecutionPolicy ByPass -NoProfile -file \"%s\"" ++ ps_path_win in + add_firstboot_script g root ?prio name fb +diff --git a/common/mlcustomize/firstboot.mli b/common/mlcustomize/firstboot.mli +index 8231af65..34ff0690 100644 +--- a/common/mlcustomize/firstboot.mli ++++ b/common/mlcustomize/firstboot.mli +@@ -16,6 +16,23 @@ + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + *) + ++val firstboot_dir : Guestfs.guestfs -> string -> string * string option ++(** [firstboot_dir g root] ++ returns the path of the firstboot directory, creating it in ++ the guest if necessary. ++ ++ This returns the name of the directory as a guestfs path, and ++ optionally the name as a Windows path (only for Windows guests). ++ ++ For Linux this could be [/usr/lib/virt-sysprep, None] ++ ++ For Windows this could be ["/Program Files/Guestfs/Firstboot", ++ Some "C:\Program Files\Guestfs\Firstboot"] ++ ++ Additional files that are used during firstboot can be placed ++ in this directory, but be careful not to conflict with files ++ and scripts added by the firstboot process itself. *) ++ + val add_firstboot_script : Guestfs.guestfs -> string -> ?prio:int -> string -> + string -> unit + (** [add_firstboot_script g root prio name content] adds a firstboot +diff --git a/common/mlcustomize/inject_virtio_win.ml b/common/mlcustomize/inject_virtio_win.ml +index eee93669..b04a3b38 100644 +--- a/common/mlcustomize/inject_virtio_win.ml ++++ b/common/mlcustomize/inject_virtio_win.ml +@@ -592,11 +592,11 @@ and configure_qemu_ga t files = + add "# Run qemu-ga installers"; + List.iter ( + fun msi_path -> +- add (sprintf "C:\\%s /norestart /qn /l+*vx C:\\%s.log" ++ add (sprintf "Start-Process -Wait -FilePath \"C:\\%s\" -ArgumentList \"/norestart\",\"/qn\",\"/l+*vx\",\"C:\\%s.log\"" + msi_path msi_path) + ) files; + +- Firstboot.add_firstboot_powershell t.g t.root "install-qemu-ga.ps1" !script ++ Firstboot.add_firstboot_powershell t.g t.root "install-qemu-ga" !script + + and configure_blnsvr t blnsvr = + let cmd = sprintf "\ +diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml +index 2d6e2059..52ca5bbe 100644 +--- a/convert/convert_windows.ml ++++ b/convert/convert_windows.ml +@@ -397,7 +397,7 @@ let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips = + %systemroot%\\Sysnative\\PnPutil -i -a \ + %systemroot%\\Drivers\\Virtio\\*.inf" in + +- (* Set priority higher than that of "v2vnetcf.ps1" firstboot script. *) ++ (* Set priority higher than that of "network-configure" firstboot script. *) + Firstboot.add_firstboot_script g inspect.i_root ~prio:2000 + "pnputil install drivers" fb_script; + +@@ -674,7 +674,7 @@ let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips = + * Powershell script which runs at boot. + *) + if static_ips <> [] then ( +- let psh_filename = "v2vnetcf.ps1" in ++ let psh_filename = "network-configure" in + let psh = ref [] in + let add = List.push_back psh in + diff --git a/SOURCES/0003-Update-translation-files.patch b/SOURCES/0003-Update-translation-files.patch deleted file mode 100644 index f9efbff..0000000 --- a/SOURCES/0003-Update-translation-files.patch +++ /dev/null @@ -1,1604 +0,0 @@ -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: Thu, 1 Aug 2024 10:36:52 +0100 +Subject: [PATCH] common: mlcustomize: Inject qemu-ga & blnsvr into + /Temp + +Update common submodule to pick up this further change which should +mean that for all Windows conversions, everything is confined to +C:\Program Files\Guestfs\Firstboot (except the virtio drivers +themselves). + +Richard W.M. Jones (1): + mlcustomize: Inject qemu-ga & blnsvr into /Temp +--- + common | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Submodule common d489469f..04116678: +diff --git a/common/mlcustomize/inject_virtio_win.ml b/common/mlcustomize/inject_virtio_win.ml +index b04a3b38..2981bff5 100644 +--- a/common/mlcustomize/inject_virtio_win.ml ++++ b/common/mlcustomize/inject_virtio_win.ml +@@ -263,14 +263,28 @@ let rec inject_virtio_win_drivers ({ g } as t) reg = + } + ) + +-and inject_qemu_ga t = +- let msi_files = copy_qemu_ga t in ++and inject_qemu_ga ({ g; root } as t) = ++ (* Copy the qemu-ga MSI(s) to the guest. *) ++ let dir, dir_win = Firstboot.firstboot_dir g root in ++ let dir_win = Option.value dir_win ~default:dir in ++ let tempdir = sprintf "%s/Temp" dir in ++ let tempdir_win = sprintf "%s\\Temp" dir_win in ++ g#mkdir_p tempdir; ++ ++ let msi_files = copy_qemu_ga t tempdir in + if msi_files <> [] then +- configure_qemu_ga t msi_files; ++ configure_qemu_ga t tempdir_win msi_files; + msi_files <> [] (* return true if we found some qemu-ga MSI files *) + +-and inject_blnsvr t = +- let files = copy_blnsvr t in ++and inject_blnsvr ({ g; root } as t) = ++ (* Copy the files to the guest. *) ++ let dir, dir_win = Firstboot.firstboot_dir g root in ++ let dir_win = Option.value dir_win ~default:dir in ++ let tempdir = sprintf "%s/Temp" dir in ++ let tempdir_win = sprintf "%s\\Temp" dir_win in ++ g#mkdir_p tempdir; ++ ++ let files = copy_blnsvr t tempdir in + match files with + | [] -> false (* Didn't find or install anything. *) + +@@ -278,7 +292,7 @@ and inject_blnsvr t = + * drivers/by-driver). Pick the first. + *) + | blnsvr :: _ -> +- configure_blnsvr t blnsvr; ++ configure_blnsvr t tempdir_win blnsvr; + true + + and add_guestor_to_registry t ((g, root) as reg) drv_name drv_pciid = +@@ -360,13 +374,13 @@ and copy_drivers t driverdir = + (fun () -> + error (f_"root directory ‘/’ is missing from the virtio-win directory or ISO.\n\nThis should not happen and may indicate that virtio-win or virt-v2v is broken in some way. Please report this as a bug with a full debug log.")) + +-and copy_qemu_ga t = +- copy_from_virtio_win t "/" "/" (virtio_iso_path_matches_qemu_ga t) ++and copy_qemu_ga t tempdir = ++ copy_from_virtio_win t "/" tempdir (virtio_iso_path_matches_qemu_ga t) + (fun () -> + error (f_"root directory ‘/’ is missing from the virtio-win directory or ISO.\n\nThis should not happen and may indicate that virtio-win or virt-v2v is broken in some way. Please report this as a bug with a full debug log.")) + +-and copy_blnsvr t = +- copy_from_virtio_win t "/" "/" (virtio_iso_path_matches_blnsvr t) ++and copy_blnsvr t tempdir = ++ copy_from_virtio_win t "/" tempdir (virtio_iso_path_matches_blnsvr t) + (fun () -> + error (f_"root directory ‘/’ is missing from the virtio-win directory or ISO.\n\nThis should not happen and may indicate that virtio-win or virt-v2v is broken in some way. Please report this as a bug with a full debug log.")) + +@@ -578,7 +592,7 @@ and copy_from_libosinfo { g; i_osinfo; i_arch } destdir = + (* Install qemu-ga. [files] is the non-empty list of possible qemu-ga + * installers we detected. + *) +-and configure_qemu_ga t files = ++and configure_qemu_ga t tempdir_win files = + let script = ref [] in + let add = List.push_back script in + +@@ -591,16 +605,17 @@ and configure_qemu_ga t files = + add ""; + add "# Run qemu-ga installers"; + List.iter ( +- fun msi_path -> +- add (sprintf "Start-Process -Wait -FilePath \"C:\\%s\" -ArgumentList \"/norestart\",\"/qn\",\"/l+*vx\",\"C:\\%s.log\"" +- msi_path msi_path) ++ fun msi -> ++ (* [`] is an escape char for quotes *) ++ add (sprintf "Start-Process -Wait -FilePath \"%s\\%s\" -ArgumentList \"/norestart\",\"/qn\",\"/l+*vx\",\"`\"%s\\%s.log`\"\"" ++ tempdir_win msi tempdir_win msi) + ) files; + + Firstboot.add_firstboot_powershell t.g t.root "install-qemu-ga" !script + +-and configure_blnsvr t blnsvr = ++and configure_blnsvr t tempdir_win blnsvr = + let cmd = sprintf "\ + @echo off\n\ + echo Installing %s\n\ +- c:\\%s -i\n" blnsvr blnsvr in +- Firstboot.add_firstboot_script t.g t.root (sprintf "install-%s" blnsvr) cmd ++ \"%s\\%s\" -i\n" blnsvr tempdir_win blnsvr in ++ Firstboot.add_firstboot_script t.g t.root "install-blnsvr" cmd diff --git a/SOURCES/0004-docs-Add-a-note-about-removal-of-VMware-Tools-on-Win.patch b/SOURCES/0004-docs-Add-a-note-about-removal-of-VMware-Tools-on-Win.patch new file mode 100644 index 0000000..65d461a --- /dev/null +++ b/SOURCES/0004-docs-Add-a-note-about-removal-of-VMware-Tools-on-Win.patch @@ -0,0 +1,45 @@ +From c952f310c902e438a8b0b5240a4b486b698bede8 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 5 Aug 2024 10:08:34 +0100 +Subject: [PATCH] docs: Add a note about removal of VMware Tools on Windows + +We use VMware's recommended method for removal, but we know from +experience that this rarely works. The alternate method being +proposed involves making very invasive changes to the Registry and +filesystem, which are inappropriate for virt-v2v to do and highly +risky. Therefore simply document this, with notes for the virt-v2v +user if they want to try the risky method. + +Fixes: https://issues.redhat.com/browse/RHEL-51169 +Thanks: Yan Vugenfirer +Reported-by: Ming Xie +--- + docs/virt-v2v.pod | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod +index dfe92d77..92941026 100644 +--- a/docs/virt-v2v.pod ++++ b/docs/virt-v2v.pod +@@ -1299,6 +1299,21 @@ B Take care not to interrupt the automatic driver installation + process when logging in to the guest for the first time, as this may + prevent the guest from subsequently booting correctly. + ++=head3 Removing VMware Tools from Windows guests ++ ++Virt-v2v attempts to remove VMware Tools. For Windows guests this is ++supposed to happen during the first boot after conversion. ++ ++We use VMware's recommended uninstallation method as that is the ++safest choice. However our experience has shown that this method ++usually fails. If so, VMware Tools must be removed by some other ++method. ++ ++One possible method is described here: ++L ++You should carefully check this script since it makes very invasive ++changes to the Windows Registry and filesystem. ++ + =head2 Free space for conversion + + =head3 Free space in the guest diff --git a/SOURCES/0004-virt-v2v-i-vmx-Refactor-ssh-scp-code-into-a-new-modu.patch b/SOURCES/0004-virt-v2v-i-vmx-Refactor-ssh-scp-code-into-a-new-modu.patch deleted file mode 100644 index 6a5cd52..0000000 --- a/SOURCES/0004-virt-v2v-i-vmx-Refactor-ssh-scp-code-into-a-new-modu.patch +++ /dev/null @@ -1,301 +0,0 @@ -From cddd07669d18a5a848f82dbde27b84ef405ef9fa Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -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-Update-common-submodule.patch b/SOURCES/0005-Update-common-submodule.patch new file mode 100644 index 0000000..c2b6872 --- /dev/null +++ b/SOURCES/0005-Update-common-submodule.patch @@ -0,0 +1,25 @@ +From 7bc9b115baba6df2969451cd6907e2d7543ef22d Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 5 Aug 2024 10:18:31 +0100 +Subject: [PATCH] Update common submodule + +Richard W.M. Jones (1): + mlcustomize: Write qemu-ga log file name to log.txt +--- + common | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Submodule common 04116678..7b84a370: +diff --git a/common/mlcustomize/inject_virtio_win.ml b/common/mlcustomize/inject_virtio_win.ml +index 2981bff5..afec1e45 100644 +--- a/common/mlcustomize/inject_virtio_win.ml ++++ b/common/mlcustomize/inject_virtio_win.ml +@@ -606,6 +606,8 @@ and configure_qemu_ga t tempdir_win files = + add "# Run qemu-ga installers"; + List.iter ( + fun msi -> ++ add (sprintf "Write-Host \"Writing log to %s\\%s.log\"" ++ tempdir_win msi); + (* [`] is an escape char for quotes *) + add (sprintf "Start-Process -Wait -FilePath \"%s\\%s\" -ArgumentList \"/norestart\",\"/qn\",\"/l+*vx\",\"`\"%s\\%s.log`\"\"" + tempdir_win msi tempdir_win msi) diff --git a/SOURCES/0005-virt-v2v-i-vmx-Simplify-scp-wrapper.patch b/SOURCES/0005-virt-v2v-i-vmx-Simplify-scp-wrapper.patch deleted file mode 100644 index 7ed4262..0000000 --- a/SOURCES/0005-virt-v2v-i-vmx-Simplify-scp-wrapper.patch +++ /dev/null @@ -1,84 +0,0 @@ -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-Pull-in-a-fix-to-make-Windows-firstboot-more-reliabl.patch b/SOURCES/0006-Pull-in-a-fix-to-make-Windows-firstboot-more-reliabl.patch new file mode 100644 index 0000000..1c96f71 --- /dev/null +++ b/SOURCES/0006-Pull-in-a-fix-to-make-Windows-firstboot-more-reliabl.patch @@ -0,0 +1,78 @@ +From 50f005f8b7034916588855c15b10a0195bf54b23 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 8 Aug 2024 10:40:24 +0100 +Subject: [PATCH] Pull in a fix to make Windows firstboot more reliable. + +Update the common submodule to get: + +Richard W.M. Jones (2): + mlcustomize: Add some comments to firstboot batch file + mlcustomize: Reboot Windows between each firstboot script + +Document that Windows may now reboot several times after conversion. +--- + common | 2 +- + docs/virt-v2v.pod | 9 ++++++--- + 2 files changed, 7 insertions(+), 4 deletions(-) + +Submodule common 7b84a370..a7883967: +diff --git a/common/mlcustomize/firstboot.ml b/common/mlcustomize/firstboot.ml +index 3bbba714..52e76401 100644 +--- a/common/mlcustomize/firstboot.ml ++++ b/common/mlcustomize/firstboot.ml +@@ -278,6 +278,9 @@ module Windows = struct + (* Write a firstboot.bat control script which just runs the other + * scripts in the directory. Note we need to use CRLF line endings + * in this script. ++ * ++ * XXX It would be better to use powershell here. For some ideas see ++ * https://github.com/HCK-CI/HLK-Setup-Scripts/ + *) + let firstboot_script = sprintf "\ + @echo off +@@ -299,6 +302,7 @@ if not exist \"%%scripts_done%%\" ( + mkdir \"%%scripts_done%%\" + ) + ++:: Pick the next script to run. + for %%%%f in (\"%%scripts%%\"\\*.bat) do ( + echo running \"%%%%f\" + move \"%%%%f\" \"%%scripts_done%%\" +@@ -307,8 +311,17 @@ for %%%%f in (\"%%scripts%%\"\\*.bat) do ( + set elvl=!errorlevel! + echo .... exit code !elvl! + popd ++ ++ :: Reboot the computer. This is necessary to free any locked ++ :: files which may prevent later scripts from running. ++ shutdown /r /t 0 /y ++ ++ :: Exit the script (in case shutdown returns before rebooting). ++ :: On next boot, the whole firstboot service will be called again. ++ exit /b + ) + ++:: Fallthrough here if there are no scripts. + echo uninstalling firstboot service + \"%%firstboot%%\\%s\" -s firstboot uninstall + " firstboot_dir_win srvany in +diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod +index 92941026..587b4604 100644 +--- a/docs/virt-v2v.pod ++++ b/docs/virt-v2v.pod +@@ -1295,9 +1295,12 @@ The guest will be bootable after the offline conversion stage, but + will not yet have all necessary drivers installed to work correctly. + These will be installed automatically the first time the guest boots. + +-B Take care not to interrupt the automatic driver installation +-process when logging in to the guest for the first time, as this may +-prevent the guest from subsequently booting correctly. ++B Windows may reboot 4 or more times the first time after ++conversion. This is required to install the required drivers, guest ++agents, remove VMware Tools, and configure the network. Take care not ++to interrupt the automatic driver installation process when logging in ++to the guest for the first time, as this may prevent the guest from ++subsequently booting correctly. + + =head3 Removing VMware Tools from Windows guests + 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 deleted file mode 100644 index 808a696..0000000 --- a/SOURCES/0006-virt-v2v-i-vmx-Add-the-input-password-to-vmx_source.patch +++ /dev/null @@ -1,125 +0,0 @@ -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-docs-Restate-position-on-removal-of-VMware-Tools.patch b/SOURCES/0007-docs-Restate-position-on-removal-of-VMware-Tools.patch new file mode 100644 index 0000000..1b25ee4 --- /dev/null +++ b/SOURCES/0007-docs-Restate-position-on-removal-of-VMware-Tools.patch @@ -0,0 +1,30 @@ +From e9c0d63b22bcb4c31cfaac00fc1271713c8bd3b3 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 8 Aug 2024 10:56:16 +0100 +Subject: [PATCH] docs: Restate position on removal of VMware Tools + +With the "reboot after every step" change made in the previous commit, +it seems removal of VMware Tools is now more reliable. Update the +notes about this. + +Updates: commit c952f310c902e438a8b0b5240a4b486b698bede8 +--- + docs/virt-v2v.pod | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod +index 587b4604..346be606 100644 +--- a/docs/virt-v2v.pod ++++ b/docs/virt-v2v.pod +@@ -1308,9 +1308,8 @@ Virt-v2v attempts to remove VMware Tools. For Windows guests this is + supposed to happen during the first boot after conversion. + + We use VMware's recommended uninstallation method as that is the +-safest choice. However our experience has shown that this method +-usually fails. If so, VMware Tools must be removed by some other +-method. ++safest choice. If this fails, VMware Tools must be manually removed ++by some other method. + + One possible method is described here: + L 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 deleted file mode 100644 index 158574a..0000000 --- a/SOURCES/0007-virt-v2v-i-vmx-Remove-dependency-of-ssh.ml-on-Xml.ur.patch +++ /dev/null @@ -1,205 +0,0 @@ -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/0015-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch b/SOURCES/0008-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch similarity index 87% rename from SOURCES/0015-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch rename to SOURCES/0008-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch index 21292fe..37f2692 100644 --- a/SOURCES/0015-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch +++ b/SOURCES/0008-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch @@ -1,4 +1,4 @@ -From 5bdd4525570d58e7b712514f1ab57cb04f7cd8d8 Mon Sep 17 00:00:00 2001 +From ed515103ba0d4054c7000568b39df42abb503f3c 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,10 +16,10 @@ support cases. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/output/output_qemu.ml b/output/output_qemu.ml -index 1a5f7f71..97cf59a8 100644 +index 26c1ba48..07dae8c2 100644 --- a/output/output_qemu.ml +++ b/output/output_qemu.ml -@@ -142,7 +142,7 @@ module QEMU = struct +@@ -131,7 +131,7 @@ module QEMU = struct * module deals with shell and qemu comma quoting. *) let cmd = Qemuopts.create () in diff --git a/SOURCES/0008-input-nbdkit_ssh-Make-retry-filter-optional.patch b/SOURCES/0008-input-nbdkit_ssh-Make-retry-filter-optional.patch deleted file mode 100644 index b1085d0..0000000 --- a/SOURCES/0008-input-nbdkit_ssh-Make-retry-filter-optional.patch +++ /dev/null @@ -1,55 +0,0 @@ -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/0016-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch b/SOURCES/0009-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch similarity index 92% rename from SOURCES/0016-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch rename to SOURCES/0009-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch index 47d3fe5..43b1290 100644 --- a/SOURCES/0016-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch +++ b/SOURCES/0009-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch @@ -1,4 +1,4 @@ -From f063d97be8f13cc6526d3a4b4ec8be0b1d3c266f Mon Sep 17 00:00:00 2001 +From 84afa8cb6933daee1585facc00557826f1fd2273 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,7 +44,7 @@ index d2a1c270..0be37f5e 100644 =item B<-o null> diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index bc946dc1..55545e11 100644 +index 346be606..81a4b45a 100644 --- a/docs/virt-v2v.pod +++ b/docs/virt-v2v.pod @@ -146,11 +146,6 @@ Since F contains the path(s) to the guest disk @@ -69,7 +69,7 @@ index bc946dc1..55545e11 100644 =item B<-o> B This is the same as I<-o rhv>. -@@ -603,11 +595,6 @@ For I<-o openstack> (L) only, set a guest ID +@@ -607,11 +599,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 bc946dc1..55545e11 100644 =item B<-oo verify-server-certificate> =item B<-oo verify-server-certificate=>C -@@ -778,10 +765,6 @@ Print information about the source guest and stop. This option is +@@ -782,10 +769,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 bc946dc1..55545e11 100644 =item B<--quiet> diff --git a/output/output_qemu.ml b/output/output_qemu.ml -index 97cf59a8..ad3eb897 100644 +index 07dae8c2..b6f24565 100644 --- a/output/output_qemu.ml +++ b/output/output_qemu.ml @@ -65,6 +65,9 @@ module QEMU = struct @@ -107,10 +107,10 @@ index 97cf59a8..ad3eb897 100644 let output_storage = match options.output_storage with diff --git a/v2v/v2v.ml b/v2v/v2v.ml -index 3b2eafbd..696ef75e 100644 +index 48c8cfba..fca5f6e9 100644 --- a/v2v/v2v.ml +++ b/v2v/v2v.ml -@@ -275,8 +275,6 @@ let rec main () = +@@ -277,8 +277,6 @@ let rec main () = s_"Same as ‘-ip filename’"; [ L"print-source" ], Getopt.Set print_source, s_"Print source and stop"; 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 deleted file mode 100644 index b5ae3ee..0000000 --- a/SOURCES/0009-virt-v2v-i-vmx-Replace-external-ssh-scp-with-nbdkit-.patch +++ /dev/null @@ -1,167 +0,0 @@ -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/0017-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch b/SOURCES/0010-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch similarity index 88% rename from SOURCES/0017-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch rename to SOURCES/0010-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch index c16597a..a4ce757 100644 --- a/SOURCES/0017-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch +++ b/SOURCES/0010-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch @@ -1,4 +1,4 @@ -From 6cee48bde007be6c8242c9e1a3b83bc153c566d9 Mon Sep 17 00:00:00 2001 +From abab56cf74a5005b33e962bb3d42db3d5b39e6d3 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 19c5ba91..7b3aa2e2 100644 +index bf010a0a..4c9b7415 100644 --- a/lib/utils.ml +++ b/lib/utils.ml @@ -60,13 +60,14 @@ let kvm_arch = function diff --git a/SOURCES/0010-input-nbdkit_ssh-Make-password-parameter-optional.patch b/SOURCES/0010-input-nbdkit_ssh-Make-password-parameter-optional.patch deleted file mode 100644 index 4ba7f0e..0000000 --- a/SOURCES/0010-input-nbdkit_ssh-Make-password-parameter-optional.patch +++ /dev/null @@ -1,255 +0,0 @@ -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/0018-RHEL-Fixes-for-libguestfs-winsupport.patch b/SOURCES/0011-RHEL-Fixes-for-libguestfs-winsupport.patch similarity index 79% rename from SOURCES/0018-RHEL-Fixes-for-libguestfs-winsupport.patch rename to SOURCES/0011-RHEL-Fixes-for-libguestfs-winsupport.patch index e83c766..79efbc5 100644 --- a/SOURCES/0018-RHEL-Fixes-for-libguestfs-winsupport.patch +++ b/SOURCES/0011-RHEL-Fixes-for-libguestfs-winsupport.patch @@ -1,4 +1,4 @@ -From 7374efa8aecb97a83a1ec6d4d606651a4eb569e4 Mon Sep 17 00:00:00 2001 +From 2039580744223840a09b8aab7ff2fbf94a563a6c 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. @@ -12,12 +12,13 @@ https://bugzilla.redhat.com/show_bug.cgi?id=2187961#c1 convert/convert.ml | 1 + test-data/phony-guests/make-windows-img.sh | 1 + tests/test-v2v-block-driver.sh | 6 +++++- + tests/test-v2v-in-place.sh | 8 +++++++- tests/test-v2v-virtio-win-iso.sh | 8 +++++++- tests/test-v2v-windows-conversion.sh | 8 +++++++- - 5 files changed, 21 insertions(+), 3 deletions(-) + 6 files changed, 28 insertions(+), 4 deletions(-) diff --git a/convert/convert.ml b/convert/convert.ml -index 9c76f76d..caaa707e 100644 +index 344c5858..ecc48ad4 100644 --- a/convert/convert.ml +++ b/convert/convert.ml @@ -52,6 +52,7 @@ let rec convert dir options source = @@ -57,6 +58,32 @@ index db59a2cf..a0e56bed 100755 is-dir $virtio_dir is-file $virtio_dir/$drv.cat is-file $virtio_dir/$drv.inf +diff --git a/tests/test-v2v-in-place.sh b/tests/test-v2v-in-place.sh +index 4373f140..2b31b0bb 100755 +--- a/tests/test-v2v-in-place.sh ++++ b/tests/test-v2v-in-place.sh +@@ -89,6 +89,12 @@ mktest () + :> "$script" + :> "$expected" + ++cat >> "$script" < "$response" ++guestfish --ro -a "$img" < "$script" > "$response" + diff -u "$expected" "$response" + + # Test the base image remained untouched diff --git a/tests/test-v2v-virtio-win-iso.sh b/tests/test-v2v-virtio-win-iso.sh index 69f6f414..b9b806fb 100755 --- a/tests/test-v2v-virtio-win-iso.sh diff --git a/SOURCES/0011-input-ssh-Rearrange-parameters-specifying-ssh-server.patch b/SOURCES/0011-input-ssh-Rearrange-parameters-specifying-ssh-server.patch deleted file mode 100644 index ee2dda3..0000000 --- a/SOURCES/0011-input-ssh-Rearrange-parameters-specifying-ssh-server.patch +++ /dev/null @@ -1,104 +0,0 @@ -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/0019-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch b/SOURCES/0012-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch similarity index 89% rename from SOURCES/0019-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch rename to SOURCES/0012-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch index 2df8b46..294a172 100644 --- a/SOURCES/0019-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch +++ b/SOURCES/0012-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch @@ -1,4 +1,4 @@ -From 8b2bb3c153b44634fb3f93aae1c0c40655213506 Mon Sep 17 00:00:00 2001 +From 13970ce5d6be475cf6e06185636a730584303a6e 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) @@ -9,7 +9,7 @@ The SDL output mode is not supported in RHEL's qemu-kvm. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/input/input_disk.ml b/input/input_disk.ml -index 279250fe..c6b819c0 100644 +index cf1f811b..27fc80de 100644 --- a/input/input_disk.ml +++ b/input/input_disk.ml @@ -77,7 +77,7 @@ module Disk = struct 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 deleted file mode 100644 index f107094..0000000 --- a/SOURCES/0012-docs-Remove-paragraph-about-ip-passwords-and-ssh-scp.patch +++ /dev/null @@ -1,54 +0,0 @@ -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/0020-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch b/SOURCES/0013-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch similarity index 87% rename from SOURCES/0020-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch rename to SOURCES/0013-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch index 689f21f..0f65b16 100644 --- a/SOURCES/0020-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch +++ b/SOURCES/0013-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch @@ -1,4 +1,4 @@ -From 28e3b929b94e213bc24fa27c58215fe8ccdb9ba1 Mon Sep 17 00:00:00 2001 +From 98a14fe2f8a428ed4bba85aba3889467d48a5743 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 38dc8f7b..05c4e3f5 100644 +index 4a0544f8..9c3981e1 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/0013-input-ssh-Use-nbdinfo-can-connect-instead-of-size.patch b/SOURCES/0013-input-ssh-Use-nbdinfo-can-connect-instead-of-size.patch deleted file mode 100644 index c7845cd..0000000 --- a/SOURCES/0013-input-ssh-Use-nbdinfo-can-connect-instead-of-size.patch +++ /dev/null @@ -1,62 +0,0 @@ -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/0021-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch b/SOURCES/0014-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch similarity index 97% rename from SOURCES/0021-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch rename to SOURCES/0014-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch index 0c822ed..49acc96 100644 --- a/SOURCES/0021-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch +++ b/SOURCES/0014-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch @@ -1,4 +1,4 @@ -From a2e7cf38ee640e9e806a680cf55f78d33a3c0ee8 Mon Sep 17 00:00:00 2001 +From be45d1e5bca42148c295da10c27c485c72de28c3 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/0014-build-Document-that-nbdinfo-and-nbdcopy-are-required.patch b/SOURCES/0014-build-Document-that-nbdinfo-and-nbdcopy-are-required.patch deleted file mode 100644 index 1083725..0000000 --- a/SOURCES/0014-build-Document-that-nbdinfo-and-nbdcopy-are-required.patch +++ /dev/null @@ -1,43 +0,0 @@ -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/0022-RHEL-Disable-o-glance.patch b/SOURCES/0015-RHEL-Disable-o-glance.patch similarity index 93% rename from SOURCES/0022-RHEL-Disable-o-glance.patch rename to SOURCES/0015-RHEL-Disable-o-glance.patch index f06aa76..7ae9f69 100644 --- a/SOURCES/0022-RHEL-Disable-o-glance.patch +++ b/SOURCES/0015-RHEL-Disable-o-glance.patch @@ -1,4 +1,4 @@ -From 29b43856a1429148eece11f0579a01026d583161 Mon Sep 17 00:00:00 2001 +From b0386851d539e414302cb646567836717fd027d9 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,7 +98,7 @@ index cd4862b1..54cd276e 100644 =head1 AUTHOR diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index 55545e11..8d5d54d3 100644 +index 81a4b45a..7c7069df 100644 --- a/docs/virt-v2v.pod +++ b/docs/virt-v2v.pod @@ -435,14 +435,6 @@ See L below. @@ -116,7 +116,7 @@ index 55545e11..8d5d54d3 100644 =item B<-o> B Set the output method to I. B (or F). @@ -128,7 +128,7 @@ index 55545e11..8d5d54d3 100644 =item I<-o local> =item I<-o qemu> -@@ -1377,13 +1364,6 @@ See also L. +@@ -1398,13 +1385,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. @@ -167,10 +167,10 @@ index c0db9115..074b5e16 100755 set -e set -x diff --git a/v2v/v2v.ml b/v2v/v2v.ml -index 696ef75e..47d2da79 100644 +index fca5f6e9..4148fa50 100644 --- a/v2v/v2v.ml +++ b/v2v/v2v.ml -@@ -195,7 +195,6 @@ let rec main () = +@@ -197,7 +197,6 @@ let rec main () = if !output_mode <> `Not_set then error (f_"%s option used more than once on the command line") "-o"; match mode with @@ -178,7 +178,7 @@ index 696ef75e..47d2da79 100644 | "kubevirt" -> output_mode := `Kubevirt | "libvirt" -> output_mode := `Libvirt | "disk" | "local" -> output_mode := `Disk -@@ -255,7 +254,7 @@ let rec main () = +@@ -257,7 +256,7 @@ let rec main () = s_"Map network ‘in’ to ‘out’"; [ L"no-trim" ], Getopt.String ("-", no_trim_warning), s_"Ignored for backwards compatibility"; @@ -187,7 +187,7 @@ index 696ef75e..47d2da79 100644 s_"Set output mode (default: libvirt)"; [ M"oa" ], Getopt.String ("sparse|preallocated", set_output_alloc), s_"Set output allocation mode"; -@@ -323,8 +322,6 @@ virt-v2v -i libvirtxml guest-domain.xml -o local -os /var/tmp +@@ -325,8 +324,6 @@ virt-v2v -i libvirtxml guest-domain.xml -o local -os /var/tmp virt-v2v -i disk disk.img -o local -os /var/tmp @@ -196,7 +196,7 @@ index 696ef75e..47d2da79 100644 There is a companion front-end called \"virt-p2v\" which comes as an ISO or CD image that can be booted on physical machines. -@@ -399,7 +396,6 @@ read the man page virt-v2v(1). +@@ -401,7 +398,6 @@ read the man page virt-v2v(1). pr "input:libvirtxml\n"; pr "input:ova\n"; pr "input:vmx\n"; @@ -204,7 +204,7 @@ index 696ef75e..47d2da79 100644 pr "output:kubevirt\n"; pr "output:libvirt\n"; pr "output:local\n"; -@@ -496,7 +492,6 @@ read the man page virt-v2v(1). +@@ -498,7 +494,6 @@ read the man page virt-v2v(1). | `Disk -> (module Output_disk.Disk) | `Null -> (module Output_null.Null) | `QEmu -> (module Output_qemu.QEMU) diff --git a/SOURCES/0023-RHEL-Remove-the-in-place-option.patch b/SOURCES/0016-RHEL-Remove-the-in-place-option.patch similarity index 90% rename from SOURCES/0023-RHEL-Remove-the-in-place-option.patch rename to SOURCES/0016-RHEL-Remove-the-in-place-option.patch index ea6a3c9..11900a6 100644 --- a/SOURCES/0023-RHEL-Remove-the-in-place-option.patch +++ b/SOURCES/0016-RHEL-Remove-the-in-place-option.patch @@ -1,4 +1,4 @@ -From cbebfa10e481a664a949ff07dfceca5cb45793df Mon Sep 17 00:00:00 2001 +From 7cbdcc0d3acf0bc50e331ad994987c26c5917b63 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 8d5d54d3..0738f492 100644 +index 7c7069df..9da6c851 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 8d5d54d3..0738f492 100644 =head2 Other virt-v2v topics L — Supported hypervisors, virtualization -@@ -1645,7 +1638,6 @@ L, L, @@ -45,7 +45,7 @@ index 8d5d54d3..0738f492 100644 L, L, diff --git a/tests/Makefile.am b/tests/Makefile.am -index 5c523204..5190d055 100644 +index 723a6506..4bfa1c7a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -77,7 +77,6 @@ TESTS = \ @@ -57,10 +57,10 @@ index 5c523204..5190d055 100644 test-v2v-inspector.sh \ test-v2v-mac.sh \ diff --git a/v2v/v2v.ml b/v2v/v2v.ml -index 47d2da79..19f08aae 100644 +index 4148fa50..834f023d 100644 --- a/v2v/v2v.ml +++ b/v2v/v2v.ml -@@ -217,12 +217,6 @@ let rec main () = +@@ -219,12 +219,6 @@ let rec main () = warning (f_"the --vmtype option has been removed and now does nothing") in @@ -73,7 +73,7 @@ index 47d2da79..19f08aae 100644 let argspec = [ [ L"bandwidth" ], Getopt.String ("bps", set_string_option_once "--bandwidth" bandwidth), s_"Set bandwidth to bits per sec"; -@@ -246,8 +240,6 @@ let rec main () = +@@ -248,8 +242,6 @@ let rec main () = s_"Use password from file to connect to input hypervisor"; [ M"it" ], Getopt.String ("transport", set_string_option_once "-it" input_transport), s_"Input transport"; diff --git a/SOURCES/0024-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch b/SOURCES/0017-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch similarity index 83% rename from SOURCES/0024-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch rename to SOURCES/0017-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch index 2736740..4ebf937 100644 --- a/SOURCES/0024-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch +++ b/SOURCES/0017-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch @@ -1,4 +1,4 @@ -From aec57da776543ede26a2f751594686ad36b51bad Mon Sep 17 00:00:00 2001 +From f98822497a4a60a56cb4da2d5609d30150bdd718 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 @@ -12,10 +12,10 @@ separately. Thus remove the version check and test. 2 files changed, 12 deletions(-) diff --git a/output/output.ml b/output/output.ml -index e419c13d..c8f743c2 100644 +index 53d4bb1b..14288bdc 100644 --- a/output/output.ml +++ b/output/output.ml -@@ -87,17 +87,6 @@ let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false) +@@ -86,17 +86,6 @@ let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false) if output_format <> "qcow2" then error (f_"‘-oo compressed’ is only allowed when the output format \ is a local qcow2-format file, i.e. ‘-of qcow2’"); @@ -34,12 +34,12 @@ index e419c13d..c8f743c2 100644 let g = open_guestfs () in diff --git a/tests/Makefile.am b/tests/Makefile.am -index 5190d055..5169e2a6 100644 +index 4bfa1c7a..f38342f0 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am -@@ -84,7 +84,6 @@ TESTS = \ - test-v2v-networks-and-bridges.sh \ - test-v2v-o-glance.sh \ +@@ -86,7 +86,6 @@ TESTS = \ + test-v2v-o-kubevirt-fedora.sh \ + test-v2v-o-kubevirt-windows.sh \ test-v2v-o-libvirt.sh \ - test-v2v-o-local-qcow2-compressed.sh \ test-v2v-o-null.sh \ diff --git a/SOURCES/0025-RHEL-9-tests-Remove-btrfs-test.patch b/SOURCES/0018-RHEL-9-tests-Remove-btrfs-test.patch similarity index 82% rename from SOURCES/0025-RHEL-9-tests-Remove-btrfs-test.patch rename to SOURCES/0018-RHEL-9-tests-Remove-btrfs-test.patch index 5ca58dc..6c1fdfb 100644 --- a/SOURCES/0025-RHEL-9-tests-Remove-btrfs-test.patch +++ b/SOURCES/0018-RHEL-9-tests-Remove-btrfs-test.patch @@ -1,4 +1,4 @@ -From d9c11fcfdf832f9d3d35855e7e7458efc1908515 Mon Sep 17 00:00:00 2001 +From 28311593d57777fd4d19a9ce93b4b06502a154be 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 @@ -9,10 +9,10 @@ RHEL does not have btrfs so this test always fails. 1 file changed, 1 deletion(-) diff --git a/tests/Makefile.am b/tests/Makefile.am -index 5169e2a6..a1c61f8f 100644 +index f38342f0..810b5b50 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am -@@ -98,7 +98,6 @@ TESTS = \ +@@ -100,7 +100,6 @@ TESTS = \ test-v2v-sound.sh \ test-v2v-virtio-win-iso.sh \ test-v2v-fedora-conversion.sh \ diff --git a/SOURCES/0026-RHEL-9-Remove-block-driver-option.patch b/SOURCES/0019-RHEL-9-Remove-block-driver-option.patch similarity index 91% rename from SOURCES/0026-RHEL-9-Remove-block-driver-option.patch rename to SOURCES/0019-RHEL-9-Remove-block-driver-option.patch index d856392..c2711e7 100644 --- a/SOURCES/0026-RHEL-9-Remove-block-driver-option.patch +++ b/SOURCES/0019-RHEL-9-Remove-block-driver-option.patch @@ -1,4 +1,4 @@ -From 3e2962dad1245b8c7d1255faaa6820adc0648d14 Mon Sep 17 00:00:00 2001 +From 9b289e8d0f03c9d98d2b950feb889cad883779ea 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,7 +37,7 @@ index ce57e229..6e1c5363 100644 =item B<--colours> diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod -index 0738f492..021ac897 100644 +index 9da6c851..d3406be0 100644 --- a/docs/virt-v2v.pod +++ b/docs/virt-v2v.pod @@ -197,16 +197,6 @@ The options are silently ignored for other input methods. @@ -58,7 +58,7 @@ index 0738f492..021ac897 100644 =item B<--colours> diff --git a/in-place/in_place.ml b/in-place/in_place.ml -index e8c260c2..2049db16 100644 +index 1fbd29d3..1c690a54 100644 --- a/in-place/in_place.ml +++ b/in-place/in_place.ml @@ -43,7 +43,6 @@ let rec main () = @@ -69,7 +69,7 @@ index e8c260c2..2049db16 100644 let input_conn = ref None in let input_format = ref None in let input_password = ref None in -@@ -157,8 +156,6 @@ let rec main () = +@@ -159,8 +158,6 @@ let rec main () = let argspec = [ [ S 'b'; L"bridge" ], Getopt.String ("in:out", add_bridge), s_"Map bridge ‘in’ to ‘out’"; @@ -78,7 +78,7 @@ index e8c260c2..2049db16 100644 [ S 'i' ], Getopt.String ("disk|libvirt|libvirtxml|ova|vmx", set_input_mode), s_"Set input mode (default: libvirt)"; [ M"ic" ], Getopt.String ("uri", set_string_option_once "-ic" input_conn), -@@ -214,12 +211,6 @@ read the man page virt-v2v-in-place(1). +@@ -216,12 +213,6 @@ read the man page virt-v2v-in-place(1). (* Dereference the arguments. *) let args = List.rev !args in @@ -91,7 +91,7 @@ index e8c260c2..2049db16 100644 let input_conn = !input_conn in let input_mode = !input_mode in let print_source = !print_source in -@@ -303,7 +294,7 @@ read the man page virt-v2v-in-place(1). +@@ -305,7 +296,7 @@ read the man page virt-v2v-in-place(1). (* Get the conversion options. *) let conv_options = { @@ -101,7 +101,7 @@ index e8c260c2..2049db16 100644 ks = opthandle.ks; network_map; diff --git a/tests/Makefile.am b/tests/Makefile.am -index a1c61f8f..8e22ab64 100644 +index 810b5b50..03c71882 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -77,7 +77,6 @@ TESTS = \ @@ -113,7 +113,7 @@ index a1c61f8f..8e22ab64 100644 test-v2v-mac.sh \ test-v2v-machine-readable.sh \ diff --git a/v2v/v2v.ml b/v2v/v2v.ml -index 19f08aae..89c08fc5 100644 +index 834f023d..be5a66e2 100644 --- a/v2v/v2v.ml +++ b/v2v/v2v.ml @@ -48,7 +48,6 @@ let rec main () = @@ -124,7 +124,7 @@ index 19f08aae..89c08fc5 100644 let input_conn = ref None in let input_format = ref None in let input_password = ref None in -@@ -224,8 +223,6 @@ let rec main () = +@@ -226,8 +225,6 @@ let rec main () = s_"Set bandwidth dynamically from file"; [ S 'b'; L"bridge" ], Getopt.String ("in:out", add_bridge), s_"Map bridge ‘in’ to ‘out’"; @@ -133,7 +133,7 @@ index 19f08aae..89c08fc5 100644 [ L"compressed" ], Getopt.Unit (fun () -> set_output_option_compat "compressed" ""), s_"Compress output file (-of qcow2 only)"; [ S 'i' ], Getopt.String ("disk|libvirt|libvirtxml|ova|vmx", set_input_mode), -@@ -341,12 +338,6 @@ read the man page virt-v2v(1). +@@ -343,12 +340,6 @@ read the man page virt-v2v(1). (* Dereference the arguments. *) let args = List.rev !args in @@ -146,7 +146,7 @@ index 19f08aae..89c08fc5 100644 let input_conn = !input_conn in let input_mode = !input_mode in let input_transport = -@@ -518,7 +509,7 @@ read the man page virt-v2v(1). +@@ -520,7 +511,7 @@ read the man page virt-v2v(1). (* Get the conversion options. *) let conv_options = { diff --git a/SOURCES/0020-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch b/SOURCES/0020-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch new file mode 100644 index 0000000..a327e4a --- /dev/null +++ b/SOURCES/0020-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch @@ -0,0 +1,24 @@ +From 1dec94e52974e45fd3962dcbd51882fde7e9c306 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 9 Jul 2024 11:30:09 +0100 +Subject: [PATCH] RHEL: Add warning about virt-v2v-in-place not being supported + +Fixes: https://issues.redhat.com/browse/RHEL-40903 +--- + in-place/in_place.ml | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/in-place/in_place.ml b/in-place/in_place.ml +index 1c690a54..a70e812b 100644 +--- a/in-place/in_place.ml ++++ b/in-place/in_place.ml +@@ -197,6 +197,9 @@ read the man page virt-v2v-in-place(1). + let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ~machine_readable:true usage_msg in + Getopt.parse opthandle.getopt; + ++ warning "virt-v2v-in-place is NOT SUPPORTED for command line use. \ ++ It is almost always better to use virt-v2v instead of this tool."; ++ + (* Print the version, easier than asking users to tell us. *) + debug "info: %s: %s %s (%s)" + prog Config.package_name Config.package_version_full diff --git a/SOURCES/0021-convert-windows-Online-all-virtio-disks-at-first-boo.patch b/SOURCES/0021-convert-windows-Online-all-virtio-disks-at-first-boo.patch new file mode 100644 index 0000000..8050e62 --- /dev/null +++ b/SOURCES/0021-convert-windows-Online-all-virtio-disks-at-first-boo.patch @@ -0,0 +1,93 @@ +From d26ed76801f9d3ce5d3863ca09dfa653b4bcd1b2 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 27 Aug 2024 12:36:41 +0100 +Subject: [PATCH] convert: windows: Online all virtio disks at first boot + +Windows 2022 (and possibly earlier versions back to around 2019) will +force offline any non-boot disks which change bus, apparently as a +security mitigation. The effect of this is that although the system +drive (C:) is present after conversion, other drives may seem to +disappear. + +Running a Powershell script to bring all disks online seems risky. +The compromise is to bring online only virtio disks at first boot. + +To further reduce risk, we only do this if there are non-system disks +(ie. > 1 disks in total), and only if we installed virtio drivers. + +Fixes: https://issues.redhat.com/browse/RHEL-55763 +Fixes: https://issues.redhat.com/browse/RHEL-55837 +Related: https://issues.redhat.com/browse/MTV-1299 +Related: https://bugzilla.redhat.com/show_bug.cgi?id=1662286 +Signed-off-by: Richard W.M. Jones +Thanks: Martin Necas +Acked-by: Martin Necas +(cherry picked from commit cb56f6f94dc153051515fc7aa0d9ca646f5e2340) +--- + convert/convert_windows.ml | 39 +++++++++++++++++++++++++++++++++++++- + 1 file changed, 38 insertions(+), 1 deletion(-) + +diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml +index 52ca5bbe..352e1218 100644 +--- a/convert/convert_windows.ml ++++ b/convert/convert_windows.ml +@@ -38,7 +38,8 @@ module G = Guestfs + * time the Windows VM is booted on KVM. + *) + +-let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips = ++let convert (g : G.guestfs) source inspect i_firmware ++ block_driver _ static_ips = + (*----------------------------------------------------------------------*) + (* Inspect the Windows guest. *) + +@@ -272,6 +273,8 @@ let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips = + Registry.with_hive_write g inspect.i_windows_software_hive + update_software_hive; + ++ configure_online_disks block_driver; ++ + configure_network_interfaces net_driver; + + fix_ntfs_heads (); +@@ -668,6 +671,40 @@ let convert (g : G.guestfs) _ inspect i_firmware block_driver _ static_ips = + warning (f_"could not find registry key \ + HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion") + ++ and configure_online_disks block_driver = ++ (* If there are > 1 disks, run a script which will force Windows ++ * to bring them all online. Windows 2022 will offline non-boot disks ++ * where the bus changes as some sort of "security" mitigation. ++ * https://issues.redhat.com/browse/RHEL-55837 ++ * https://issues.redhat.com/browse/MTV-1299 ++ * https://bugzilla.redhat.com/show_bug.cgi?id=1662286 ++ *) ++ let virtio_installed = ++ match block_driver with ++ | Inject_virtio_win.Virtio_blk | Virtio_SCSI -> true ++ | IDE -> false in ++ let more_than_one_disk = List.length source.s_disks > 1 in ++ ++ if virtio_installed && more_than_one_disk then ( ++ let psh_filename = "online-disks" in ++ let psh = ref [] in ++ let add = List.push_back psh in ++ ++ add "# Uncomment this line for lots of debug output."; ++ add "# Set-PSDebug -Trace 1"; ++ add ""; ++ add "Write-Host \"Online all virtio disks\""; ++ add ""; ++ add "Get-Disk | Where { $_.FriendlyName -like '*VirtIO*' } | % {"; ++ add " Write-Host (' - ' + $_.Number + ': ' + $_.FriendlyName + '(' + [math]::Round($_.Size/1GB,2) + 'GB)')"; ++ add " $_ | Set-Disk -IsOffline $false"; ++ add " $_ | Set-Disk -IsReadOnly $false"; ++ add "}"; ++ ++ (* Install the Powershell script to run late at firstboot. *) ++ Firstboot.add_firstboot_powershell g inspect.i_root psh_filename !psh ++ ) ++ + and configure_network_interfaces net_driver = + (* If we were asked to force network interfaces to have particular + * static IP addresses then it is done here by installing a diff --git a/SOURCES/copy-patches.sh b/SOURCES/copy-patches.sh index 881f822..f69928f 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.4 +rhel_version=9.5 # Check we're in the right directory. if [ ! -f $project.spec ]; then diff --git a/SOURCES/virt-v2v-2.4.0.tar.gz.sig b/SOURCES/virt-v2v-2.4.0.tar.gz.sig deleted file mode 100644 index 9411853..0000000 --- a/SOURCES/virt-v2v-2.4.0.tar.gz.sig +++ /dev/null @@ -1,17 +0,0 @@ ------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/SOURCES/virt-v2v-2.5.6.tar.gz.sig b/SOURCES/virt-v2v-2.5.6.tar.gz.sig new file mode 100644 index 0000000..17a588b --- /dev/null +++ b/SOURCES/virt-v2v-2.5.6.tar.gz.sig @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- + +iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAmapDYsRHHJpY2hAYW5u +ZXhpYS5vcmcACgkQkXOPc+G3aKATow//dAt+/eD4WANTgt82gOK5VLuhlp/il6/L +IsErVntOsmAlr1Ukag6lAFmrQrxDHbRo1g9w+P3dabEbedqeAy0vlyE7feifbzfn +8dAGAYJBPqyhG5w5Y1YKU/ZfJF5OjxuD9kjn5YTBNmNNva2wqrb4vQqLfmfhpMlx +hf3xMlqJ3plXvaqPFk69BzSgA1hKP9Z/f522RQs9lRq+aSP00zatLX9DK5oXynas +6DbInkrfUjbMaENoYcuUzC1w45DUcTcq6Or36+h86G78yIkQpfwlS82G0/f4wVnv +QlD5pC6dCmowuCrr5/xMoYt5ah7L+qcEUIRJ4uB0xQgQtQV32eLIFjpcHsN973ot +ji2ievMtoM5Ncu2Hq1R02Hvx5PUvVZamEpEWf+HzqJl2VATw2F63CMALLjxR6mw4 +WORi90ZLQWtbt7lJgZEI29WOabuBWGG/cn+01gWLh8swqQpAgkGsbJhCxNXLiUfy +0PE7K+zoWVZzSiuOVeIh1Gn2p75gSTRQXfY+l+IfPPfOUBOuNN+w1J5HRUaT7ZAk +zBbPGFA2Y6x2zR9TD5n87QftXF6LPhf715qh5URI4Wl0pE+C9gxhQk+nf1aMKJ5J +/fOAtU8N+PtZPUm95NTaQxpkraspwHmhLRygWzA7wUGANmVUiX0fE3qgxW9NE2bI +paYjGigt040= +=FGlR +-----END PGP SIGNATURE----- diff --git a/SPECS/virt-v2v.spec b/SPECS/virt-v2v.spec index 93fad56..2f9b12e 100644 --- a/SPECS/virt-v2v.spec +++ b/SPECS/virt-v2v.spec @@ -2,21 +2,13 @@ # If we should verify tarball signature with GPGv2. %global verify_tarball_signature 1 -# If there are patches which touch autotools files, set this to 1. -%if !0%{?rhel} -%global patches_touch_autotools %{nil} -%else -# On RHEL the downstream patches always touch autotools files. -%global patches_touch_autotools 1 -%endif - # The source directory. -%global source_directory 2.4-stable +%global source_directory 2.5-development Name: virt-v2v Epoch: 1 -Version: 2.4.0 -Release: 2%{?dist} +Version: 2.5.6 +Release: 5%{?dist} Summary: Convert a virtual machine to run on KVM License: GPL-2.0-or-later AND LGPL-2.0-or-later @@ -33,35 +25,30 @@ Source2: libguestfs.keyring Source3: copy-patches.sh # Patches are maintained in the following repository: -# https://github.com/libguestfs/virt-v2v/commits/rhel-9.4 +# https://github.com/libguestfs/virt-v2v/commits/rhel-9.5 # Patches. -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 +Patch0001: 0001-docs-Note-that-mac-len-field-is-now-optional.patch +Patch0002: 0002-convert-More-robust-qemu-ga-installation-change-path.patch +Patch0003: 0003-common-mlcustomize-Inject-qemu-ga-blnsvr-into-firstb.patch +Patch0004: 0004-docs-Add-a-note-about-removal-of-VMware-Tools-on-Win.patch +Patch0005: 0005-Update-common-submodule.patch +Patch0006: 0006-Pull-in-a-fix-to-make-Windows-firstboot-more-reliabl.patch +Patch0007: 0007-docs-Restate-position-on-removal-of-VMware-Tools.patch +Patch0008: 0008-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch +Patch0009: 0009-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch +Patch0010: 0010-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch +Patch0011: 0011-RHEL-Fixes-for-libguestfs-winsupport.patch +Patch0012: 0012-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch +Patch0013: 0013-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch +Patch0014: 0014-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch +Patch0015: 0015-RHEL-Disable-o-glance.patch +Patch0016: 0016-RHEL-Remove-the-in-place-option.patch +Patch0017: 0017-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch +Patch0018: 0018-RHEL-9-tests-Remove-btrfs-test.patch +Patch0019: 0019-RHEL-9-Remove-block-driver-option.patch +Patch0020: 0020-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch +Patch0021: 0021-convert-windows-Online-all-virtio-disks-at-first-boo.patch %if !0%{?rhel} # libguestfs hasn't been built on i686 for a while since there is no @@ -80,10 +67,7 @@ ExcludeArch: %{ix86} ExclusiveArch: x86_64 %endif -%if 0%{patches_touch_autotools} BuildRequires: autoconf, automake, libtool -%endif - BuildRequires: make BuildRequires: /usr/bin/pod2man BuildRequires: gcc @@ -243,9 +227,7 @@ for %{name}. %endif %autosetup -p1 -%if 0%{patches_touch_autotools} -autoreconf -i -%endif +autoreconf -fiv %build @@ -275,8 +257,10 @@ ln -sf ../../i686-w64-mingw32/sys-root/mingw/bin/pnp_wait.exe popd %if 0%{?rhel} -# On RHEL remove virt-v2v-in-place. -rm $RPM_BUILD_ROOT%{_bindir}/virt-v2v-in-place +# On RHEL move virt-v2v-in-place to libexec since it is not supported, +# and remove the documentation. +mkdir -p $RPM_BUILD_ROOT%{_libexecdir} +mv $RPM_BUILD_ROOT%{_bindir}/virt-v2v-in-place $RPM_BUILD_ROOT%{_libexecdir}/ rm $RPM_BUILD_ROOT%{_mandir}/man1/virt-v2v-in-place.1* %endif @@ -329,6 +313,8 @@ make -C tests TESTS=test-v2v-fedora-luks-on-lvm-conversion.sh check %{_bindir}/virt-v2v %if !0%{?rhel} %{_bindir}/virt-v2v-in-place +%else +%{_libexecdir}/virt-v2v-in-place %endif %{_bindir}/virt-v2v-inspector %{_mandir}/man1/virt-v2v.1* @@ -366,6 +352,61 @@ make -C tests TESTS=test-v2v-fedora-luks-on-lvm-conversion.sh check %changelog +* Thu Aug 29 2024 Richard W.M. Jones - 1:2.5.6-5 +- convert: windows: Ignore sriov drivers on virtio-win disk + resolves: RHEL-56383 + +* Tue Aug 27 2024 Richard W.M. Jones - 1:2.5.6-4 +- convert: windows: Online all virtio disks at first boot + resolves: RHEL-55763 + +* Thu Aug 08 2024 Richard W.M. Jones - 1:2.5.6-3 +- Further fixes for QEMU Guest Agent install & VMware Tools removal + resolves: RHEL-49761, RHEL-51169 + +* Mon Aug 05 2024 Richard W.M. Jones - 1:2.5.6-2 +- Document uninstallation of VMware Tools on Windows + resolves: RHEL-51169 + +* Thu Aug 01 2024 Richard W.M. Jones - 1:2.5.6-1 +- Further fixes for QEMU Guest Agent + resolves: RHEL-49761 +- Place Windows firstboot files under C:\Program Files\Guestfs\Firstboot +- Improve debugging output + +* Sun Jul 28 2024 Richard W.M. Jones - 1:2.5.5-3 +- Allow virt-v2v --mac gw and len fields to be optional + resolves: RHEL-50731 + +* Thu Jul 25 2024 Richard W.M. Jones - 1:2.5.5-2 +- Fix installation of QEMU Guest Agent + resolves: RHEL-49761 + +* Thu Jul 11 2024 Richard W.M. Jones - 1:2.5.5-1 +- Rebase to virt-v2v 2.5.5 +- Enhance -o kubevirt output + resolves: RHEL-45992 + +* Tue Jul 09 2024 Richard W.M. Jones - 1:2.5.4-2 +- Package virt-v2v-in-place in libexec as unsupported tool +- Add warning about virt-v2v-in-place not being supported + resolves: RHEL-40903 +- Add more fields to virt-inspector output + related: MTV-1079 +- Revert "docs: Remove paragraph about -ip passwords and ssh/scp" + resolves: RHEL-45527 + +* Thu May 16 2024 Richard W.M. Jones - 1:2.5.4-1 +- Rebase to virt-v2v 2.5.4 +- Add missing firmware types and enhance -o kubevirt + resolves: RHEL-28197 +- Fix RHV JSON transfer bug + resolves: RHEL-32105 +- docs: Add VDDK prereq that server must not be in maintenance mode + resolves: RHEL-33699 +- convert: windows: Install blnsvr from virtio-win + resolves: RHEL-36591 + * 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