Import from AlmaLinux stable repository

This commit is contained in:
eabdullin 2024-05-15 09:06:06 +00:00
parent 7b7bd9216c
commit 9b2ebea91b
52 changed files with 3484 additions and 11841 deletions

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
SOURCES/libguestfs.keyring
SOURCES/virt-v2v-2.2.0.tar.gz
SOURCES/virt-v2v-2.4.0.tar.gz

View File

@ -1,2 +1,2 @@
1bbc40f501a7fef9eef2a39b701a71aee2fea7c4 SOURCES/libguestfs.keyring
a7eff6dd19ae599850fe414b5636431d2149e5a5 SOURCES/virt-v2v-2.2.0.tar.gz
52029cc7c3f9e05ec9685995ad86955154d7b28e SOURCES/virt-v2v-2.4.0.tar.gz

View File

@ -1,27 +0,0 @@
From 019809794742e1990af3c14b953f8c307f629b7c Mon Sep 17 00:00:00 2001
From: Laszlo Ersek <lersek@redhat.com>
Date: Thu, 12 Jan 2023 12:27:26 +0100
Subject: [PATCH] test-v2v-fedora-btrfs-conversion: spell out btrfs feature
group dependency
In case the libguestfs appliance lacks the btrfs feature group, we create
a zero-sized phony Fedora/BTRFS image variant, causing this test case to
fail. In that situation, the test should just be skipped.
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Acked-by: Richard W.M. Jones <rjones@redhat.com>
---
tests/test-v2v-fedora-btrfs-conversion.sh | 1 +
1 file changed, 1 insertion(+)
diff --git a/tests/test-v2v-fedora-btrfs-conversion.sh b/tests/test-v2v-fedora-btrfs-conversion.sh
index c78f8ae2..14099893 100755
--- a/tests/test-v2v-fedora-btrfs-conversion.sh
+++ b/tests/test-v2v-fedora-btrfs-conversion.sh
@@ -27,5 +27,6 @@ set -x
skip_if_skipped
f=../test-data/phony-guests/fedora-btrfs.img
requires test -f $f
+requires test -s $f
$VG virt-v2v --debug-gc -i disk $f -o null

View File

@ -0,0 +1,39 @@
From af68f253d1a11c4abaa30ae348ee3855cdec74e9 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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 <rjones@redhat.com>
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 -> ""

View File

@ -0,0 +1,48 @@
From 60d4a517e43f0715fb9dc4f87cbd2f5c88ab662a Mon Sep 17 00:00:00 2001
From: Weblate Translation Memory
<noreply-mt-weblate-translation-memory@weblate.org>
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 <piotrdrag@gmail.com>\n"
+"PO-Revision-Date: 2024-01-15 13:36+0000\n"
+"Last-Translator: Weblate Translation Memory <noreply-mt-weblate-translation-"
+"memory@weblate.org>\n"
"Language-Team: Polish <https://translate.fedoraproject.org/projects/"
"libguestfs/virt-v2v-master/pl/>\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"

View File

@ -1,78 +0,0 @@
From 224243b8e26aa299bd99dd24662c4df10a3f612c Mon Sep 17 00:00:00 2001
From: Laszlo Ersek <lersek@redhat.com>
Date: Thu, 12 Jan 2023 12:31:10 +0100
Subject: [PATCH] test-v2v-i-ova: spell out ntfs feature group dependency
"windows.img" is created as an empty phony image if the libguestfs
appliance lacks the ntfs feature group.
"tests/Makefile.am" deals well with this, because for the "central"
"windows.vmdk" target, we restrict the VMDK conversion to a non-empty
"windows.img". Subsequently, dependent test cases check for "windows.vmdk"
specifically, and if that file is missing, the tests are skipped (they
exit with code 77).
"test-v2v-i-ova.sh" and "test-v2v-i-ova-directory.sh" are exceptions
however. They perform the same conversion manually (in their own separate
workspace directories). They assume that, if "windows.img" exists, it can
be converted to VMDK. When the image size is zero, the conversion breaks,
and both test cases fail. Skip both tests if "windows.img" is empty.
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Acked-by: Richard W.M. Jones <rjones@redhat.com>
[lersek@redhat.com: replace further occurrences of windows.img with $f]
---
tests/test-v2v-i-ova-directory.sh | 7 ++++---
tests/test-v2v-i-ova.sh | 7 ++++---
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/tests/test-v2v-i-ova-directory.sh b/tests/test-v2v-i-ova-directory.sh
index fff236f5..ec858464 100755
--- a/tests/test-v2v-i-ova-directory.sh
+++ b/tests/test-v2v-i-ova-directory.sh
@@ -25,7 +25,9 @@ set -e
set -x
skip_if_skipped
-requires test -f ../test-data/phony-guests/windows.img
+f=../test-data/phony-guests/windows.img
+requires test -f $f
+requires test -s $f
export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools"
export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win"
@@ -39,8 +41,7 @@ vmdk=test-ova.vmdk
ovf=test-v2v-i-ova.ovf
mf=test-ova.mf
-qemu-img convert ../test-data/phony-guests/windows.img \
- -O vmdk $d/$vmdk
+qemu-img convert $f -O vmdk $d/$vmdk
cp "$srcdir/$ovf" $d/$ovf
sha1=`do_sha1 $d/$ovf`
echo "SHA1($ovf)= $sha1" > $d/$mf
diff --git a/tests/test-v2v-i-ova.sh b/tests/test-v2v-i-ova.sh
index a55966a7..7d988330 100755
--- a/tests/test-v2v-i-ova.sh
+++ b/tests/test-v2v-i-ova.sh
@@ -25,7 +25,9 @@ set -e
set -x
skip_if_skipped
-requires test -f ../test-data/phony-guests/windows.img
+f=../test-data/phony-guests/windows.img
+requires test -f $f
+requires test -s $f
export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools"
export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win"
@@ -41,8 +43,7 @@ mf=test-ova.mf
ova=test-ova.ova
raw=TestOva-sda
-qemu-img convert ../test-data/phony-guests/windows.img \
- -O vmdk $d/$vmdk
+qemu-img convert $f -O vmdk $d/$vmdk
cp "$srcdir/$ovf" $d/$ovf
sha1=`do_sha1 $d/$ovf`
echo "SHA1($ovf)= $sha1" > $d/$mf

View File

@ -1,44 +0,0 @@
From d78c3bdcda04885ee7b826a5ce43d07e778641cd Mon Sep 17 00:00:00 2001
From: Jan Kuparinen <copper_fin@hotmail.com>
Date: Fri, 13 Jan 2023 21:20:28 +0100
Subject: [PATCH] Translated using Weblate (Finnish)
Currently translated at 1.9% (25 of 1305 strings)
Translation: libguestfs/virt-v2v-docs-master
Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/virt-v2v-docs-master/fi/
---
po-docs/fi.po | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/po-docs/fi.po b/po-docs/fi.po
index 29d8ee26..5da30f77 100644
--- a/po-docs/fi.po
+++ b/po-docs/fi.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: virt-v2v 1.43.1\n"
"Report-Msgid-Bugs-To: libguestfs@redhat.com\n"
"POT-Creation-Date: 2020-08-13 13:17+0200\n"
-"PO-Revision-Date: 2022-01-25 17:16+0000\n"
+"PO-Revision-Date: 2023-01-13 20:20+0000\n"
"Last-Translator: Jan Kuparinen <copper_fin@hotmail.com>\n"
"Language-Team: Finnish <https://translate.fedoraproject.org/projects/"
"libguestfs/virt-v2v-docs-master/fi/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.15\n"
#. type: =end
#: common/mlcustomize/customize-options.pod:1
@@ -4694,7 +4694,7 @@ msgstr ""
#. type: =item
#: docs/virt-v2v-support.pod:86
msgid "Oracle Linux"
-msgstr ""
+msgstr "Oracle Linux"
#. type: =item
#: docs/virt-v2v-support.pod:88

File diff suppressed because it is too large Load Diff

View File

@ -1,49 +0,0 @@
From f395335881974767e4dbdbf73c1abf3bed961f5d Mon Sep 17 00:00:00 2001
From: Temuri Doghonadze <temuri.doghonadze@gmail.com>
Date: Fri, 13 Jan 2023 21:20:28 +0100
Subject: [PATCH] Translated using Weblate (Georgian)
Currently translated at 8.6% (38 of 439 strings)
Translation: libguestfs/virt-v2v-master
Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/virt-v2v-master/ka/
---
po/ka.po | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/po/ka.po b/po/ka.po
index 4dc891df..26d41f6b 100644
--- a/po/ka.po
+++ b/po/ka.po
@@ -6,10 +6,10 @@
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"
+"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug."
+"cgi?component=libguestfs&product=Virtualization+Tools\n"
"POT-Creation-Date: 2022-12-10 12:01+0000\n"
-"PO-Revision-Date: 2022-12-06 18:19+0000\n"
+"PO-Revision-Date: 2023-01-13 20:20+0000\n"
"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
"Language-Team: Georgian <https://translate.fedoraproject.org/projects/"
"libguestfs/virt-v2v-master/ka/>\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.14.2\n"
+"X-Generator: Weblate 4.15\n"
#: input/input_ova.ml:134 common/mltools/tools_utils.ml:235
msgid "%s"
@@ -2062,7 +2062,7 @@ msgstr ""
#: common/mltools/getopt-c.c:198
#, c-format
msgid "%s: %s: integer out of range\n"
-msgstr ""
+msgstr "%s: %s: მთელი მნიშვნელობა დიაპაზონს გარეთაა\n"
#: common/mltools/getopt-c.c:388
#, c-format

View File

@ -0,0 +1,301 @@
From cddd07669d18a5a848f82dbde27b84ef405ef9fa Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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 <lersek@redhat.com>
---
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

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,84 @@
From a0b22af28782a485cc2241dce55b8f435d8aaefc Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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 <lersek@redhat.com>
---
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

View File

@ -1,66 +0,0 @@
From e8c61da73b62b6acf13543e9421db0b0e2a43a1a Mon Sep 17 00:00:00 2001
From: Yuri Chornoivan <yurchor@ukr.net>
Date: Sat, 14 Jan 2023 22:20:05 +0100
Subject: [PATCH] Translated using Weblate (Ukrainian)
Currently translated at 100.0% (441 of 441 strings)
Translation: libguestfs/virt-v2v-master
Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/virt-v2v-master/uk/
---
po/uk.po | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/po/uk.po b/po/uk.po
index bf21a0ed..f524482a 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -12,10 +12,10 @@
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"
+"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug."
+"cgi?component=libguestfs&product=Virtualization+Tools\n"
"POT-Creation-Date: 2023-01-10 14:53+0000\n"
-"PO-Revision-Date: 2022-12-24 19:20+0000\n"
+"PO-Revision-Date: 2023-01-14 21:20+0000\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <https://translate.fedoraproject.org/projects/"
"libguestfs/virt-v2v-master/uk/>\n"
@@ -23,8 +23,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.15\n"
#: input/input_ova.ml:134 common/mltools/tools_utils.ml:235
@@ -316,12 +316,10 @@ msgid "-o disk: unknown output option -oo %s"
msgstr "-o disk: невідомий параметр виведення — «-oo %s»"
#: output/output_kubevirt.ml:56
-#, fuzzy
-#| msgid "-o disk: output directory was not specified, use '-os /dir'"
msgid "-o kubevirt: output directory was not specified, use '-os /dir'"
msgstr ""
-"-o disk: не вказано каталогу для виведення даних, скористайтеся «-os /"
-"каталог»"
+"-o kubevirt: не вказано каталогу для виведення даних, скористайтеся «-os "
+"/каталог»"
#: output/output_libvirt.ml:115
msgid ""
@@ -1204,6 +1202,8 @@ msgid ""
"YAML block contains newline character. This should not happen, please "
"report a bug against virt-v2v."
msgstr ""
+"Блок YAML містить символ розриву рядка. Такого не мало трапитися. Будь "
+"ласка, повідомте про цю ваду у virt-v2v."
#: input/input_vddk.ml:98
msgid ""

View File

@ -0,0 +1,125 @@
From 60e72acb344e89656f7b13d9e360d05cc983a419 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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 <lersek@redhat.com>
---
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

View File

@ -1,34 +0,0 @@
From fd9694a3a2ea2911335cd3a85558a92b14d946fc Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Mon, 16 Jan 2023 12:19:29 +0000
Subject: [PATCH] convert: windows: Remove extraneous blank lines in source
---
convert/convert_windows.ml | 1 -
convert/windows_virtio.ml | 1 -
2 files changed, 2 deletions(-)
diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml
index 57a7ff03..b0436fe4 100644
--- a/convert/convert_windows.ml
+++ b/convert/convert_windows.ml
@@ -476,7 +476,6 @@ let convert (g : G.guestfs) _ inspect _ static_ips =
(sprintf "install-%s.ps1" msi_path) !psh_script;
) files
-
and unconfigure_xenpv () =
match xenpv_uninst with
| None -> () (* nothing to be uninstalled *)
diff --git a/convert/windows_virtio.ml b/convert/windows_virtio.ml
index d9fda13f..2ce92ece 100644
--- a/convert/windows_virtio.ml
+++ b/convert/windows_virtio.ml
@@ -215,7 +215,6 @@ and copy_qemu_ga g inspect =
(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."))
-
(* Copy all files from virtio_win directory/ISO located in [srcdir]
* subdirectory and all its subdirectories to the [destdir]. The directory
* hierarchy is not preserved, meaning all files will be directly in [destdir].

View File

@ -0,0 +1,205 @@
From 40730615d2f691bc72777b4cb7356e2177edc1e1 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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 <lersek@redhat.com>
---
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

View File

@ -1,30 +0,0 @@
From 9a5c900fdb532d553a78339a6887417dd6de70e5 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Mon, 16 Jan 2023 12:22:17 +0000
Subject: [PATCH] convert: windows: Document what copy_qemu_ga function returns
Just updates the comment.
(cherry picked from commit 7499ab10ea387b1dfd6fdd6feb2632b66545a257)
---
convert/windows_virtio.mli | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/convert/windows_virtio.mli b/convert/windows_virtio.mli
index 73ec95c7..82aad69b 100644
--- a/convert/windows_virtio.mli
+++ b/convert/windows_virtio.mli
@@ -39,8 +39,11 @@ val install_drivers
devices if we managed to install those, or legacy devices if we didn't. *)
val copy_qemu_ga : Guestfs.guestfs -> Types.inspect -> string list
-(** copy MSIs (idealy just one) with QEMU Guest Agent to Windows guest. The
- MSIs are not installed by this function. *)
+(** copy MSIs (ideally just one) with QEMU Guest Agent to Windows guest. The
+ MSIs are not installed by this function.
+
+ Returns a list of the copied [*.msi] files (empty list indicates no
+ qemu-ga installer(s) could be located). *)
(**/**)

View File

@ -0,0 +1,55 @@
From 72c9734050f0235c80ff7d685282a57836a70bd5 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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 <lersek@redhat.com>
---
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 ->

View File

@ -1,25 +0,0 @@
From 48f15935cff53836eae4c1c9afb0be8ab4f13bea Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Mon, 16 Jan 2023 15:12:16 +0000
Subject: [PATCH] convert: windows: Remove unused 'open Utils'
No function from Utils was being used by Windows_virtio, so remove the
unnecessary line.
(cherry picked from commit 26b9cd1f87f06c31cdf3020e003078737a417889)
---
convert/windows_virtio.ml | 1 -
1 file changed, 1 deletion(-)
diff --git a/convert/windows_virtio.ml b/convert/windows_virtio.ml
index 2ce92ece..6b642d21 100644
--- a/convert/windows_virtio.ml
+++ b/convert/windows_virtio.ml
@@ -25,7 +25,6 @@ open Common_gettext.Gettext
open Regedit
open Types
-open Utils
module G = Guestfs

View File

@ -0,0 +1,167 @@
From fb72e059863a60503b6011b8590c25c3a010a58f Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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 <lersek@redhat.com>
---
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 ->

View File

@ -0,0 +1,255 @@
From a99d9f2afee17688ec07e2ea0b130341a0cabce2 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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

View File

@ -1,28 +0,0 @@
From 4623b2aab891fdbeda0486ad00f1fa2a7f5533fe Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 19 Jan 2023 08:51:30 +0000
Subject: [PATCH] -o kubevirt: Fix mistake in error message
The error message was copied from output_local.ml:
virt-v2v: error: -o local: -op option cannot be used in this output mode
Reported-by: Xiaodai Wang
(cherry picked from commit be322ed49b1131e30a0b70f16d31fd29fca32b81)
---
output/output_kubevirt.ml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/output/output_kubevirt.ml b/output/output_kubevirt.ml
index 63ee8197..0a74dbbe 100644
--- a/output/output_kubevirt.ml
+++ b/output/output_kubevirt.ml
@@ -47,7 +47,7 @@ module Kubevirt = struct
if options.output_options <> [] then
error (f_"no -oo (output options) are allowed here");
if options.output_password <> None then
- error_option_cannot_be_used_in_output_mode "local" "-op";
+ error_option_cannot_be_used_in_output_mode "kubevirt" "-op";
(* -os must be set to a directory. *)
let output_storage =

View File

@ -0,0 +1,104 @@
From 4f0758a95a4b32a5c837cf86d2fa4442d3e136ec Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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

View File

@ -1,46 +0,0 @@
From 6b7ef3efe748a72edad0faa508e91b340038a586 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Fri, 20 Jan 2023 09:11:52 +0000
Subject: [PATCH] -o kubevirt: Move "cpu" element under "domain"
Apparently this element doesn't go in the obvious place (under
"resources", next to memory), but in a whole new section under "cpu",
which makes no logical sense but here we are. Also verified this
against Kubevirt examples/vm-template-fedora.yaml
Reported-by: Ming Xie
Fixes: commit bfa62b4683d312fc2fa9bb3c08963fc4846831b9
(cherry picked from commit 8db50a85f0363d90918edd1af4fc20ddc245b421)
---
output/create_kubevirt_yaml.ml | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/output/create_kubevirt_yaml.ml b/output/create_kubevirt_yaml.ml
index 205e9be3..689555e4 100644
--- a/output/create_kubevirt_yaml.ml
+++ b/output/create_kubevirt_yaml.ml
@@ -65,13 +65,13 @@ let create_kubevirt_yaml source inspect
let memory_str = sprintf "%LdMi" (source.s_memory /^ 1024_L /^ 1024_L) in
List.push_back resources ("requests", Assoc ["memory", String memory_str]);
- (* # vCPUs. XXX vendor, model, topology *)
- List.push_back resources ("cpu", Assoc ["cores", Int source.s_vcpu]);
-
(* Machine features. *)
let features = List.map (fun name -> name, List []) source.s_features in
List.push_back resources ("features", Assoc features);
+ (* # vCPUs. XXX vendor, model, topology *)
+ let cpu = "cpu", Assoc ["cores", Int source.s_vcpu] in
+
(* XXX firmware, display, sound *)
(* XXX guestcaps: rng, balloon, vsock, virtio 1.0 *)
@@ -109,6 +109,7 @@ let create_kubevirt_yaml source inspect
if !devices <> [] then
List.push_back domain ("devices", Assoc !devices);
List.push_back domain ("resources", Assoc !resources);
+ List.push_back domain cpu;
let spec = ref [] in
List.push_back spec ("domain", Assoc !domain);

View File

@ -0,0 +1,54 @@
From 67fcf66904c7f1f6da858eba35e95dad670427c0 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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<https://bugzilla.redhat.com/1854275>.
-
=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<https://bugzilla.redhat.com/1854275>.
-
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<Host> stanza to your F<~/.ssh/config>:

View File

@ -1,51 +0,0 @@
From 8009825c396358137576af522acc0b6b20243bac Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Fri, 20 Jan 2023 09:49:04 +0000
Subject: [PATCH] -o kubevirt: Error on invalid output guest names
Kubevirt supports something like RFC 1123 names (without the length
restriction). Helpfully it prints the regexp that it uses the
validate the names, so just use the same regexp.
Note that virt-v2v never renames guests (since that would add
unpredictability for automation). You must use the -on option to
rename the guest if the name is wrong. Hence this is an error, not a
warning or an attempt to rename the guest.
Reported-by: Ming Xie
Fixes: commit bfa62b4683d312fc2fa9bb3c08963fc4846831b9
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2162332
(cherry picked from commit 8a9c914544a49bed13eb5baf42290f835bdee7b5)
---
output/output_kubevirt.ml | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/output/output_kubevirt.ml b/output/output_kubevirt.ml
index 0a74dbbe..00e6a8a5 100644
--- a/output/output_kubevirt.ml
+++ b/output/output_kubevirt.ml
@@ -29,6 +29,11 @@ open Utils
open Output
open Create_kubevirt_yaml
+(* Valid output names for Kubevirt (RHBZ#2162332). *)
+let rfc1123_re =
+ PCRE.compile ~anchored:true
+ "[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*"
+
module Kubevirt = struct
type poptions = output_allocation * string * string * string
@@ -60,6 +65,12 @@ module Kubevirt = struct
let output_name = Option.default source.s_name options.output_name in
+ if not (PCRE.matches rfc1123_re output_name) then
+ error (f_"-o kubevirt: the guest name must contain only lowercase \
+ alphanumeric characters, '-' or '.', and must start and \
+ end with an alphanumeric character. Rerun virt-v2v with \
+ the '-on name' option to rename it.");
+
options.output_alloc, options.output_format, output_name, output_storage
let setup dir options source =

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,62 @@
From 970d7123c2025bc148870f4bc6fa75fa9e95905f Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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

View File

@ -0,0 +1,43 @@
From aafcd0d11453d8d58a32e66285f12ec3ba3440de Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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"],[

View File

@ -1,83 +0,0 @@
From 64a86bb9ef0298496a992a3a76d190b3895ffeee Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Fri, 20 Jan 2023 10:35:55 +0000
Subject: [PATCH] -o kubevirt: Implement -oo compressed for qcow2 files
Reported-by: Xiaodai Wang
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2162444
Updates: commit 53690a0c602a4286fdb9408fdf6a01cc352697ec
(cherry picked from commit ada18150543466955ff73a24a9b9a66ddfac270e)
---
output/output_kubevirt.ml | 30 ++++++++++++++++++++++--------
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/output/output_kubevirt.ml b/output/output_kubevirt.ml
index d41b5d8e..ee89fdbf 100644
--- a/output/output_kubevirt.ml
+++ b/output/output_kubevirt.ml
@@ -35,7 +35,7 @@ let rfc1123_re =
"[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*"
module Kubevirt = struct
- type poptions = output_allocation * string * string * string
+ type poptions = bool * output_allocation * string * string * string
type t = unit
@@ -46,11 +46,22 @@ module Kubevirt = struct
| None -> ""
let query_output_options () =
- printf (f_"No output options can be used in this mode.\n")
+ printf (f_"Output options that can be used with -o kubevirt:
+
+ -oo compressed Compress the output file (used only with -of qcow2)
+")
+
let parse_options options source =
- if options.output_options <> [] then
- error (f_"no -oo (output options) are allowed here");
+ let compressed = ref false in
+ List.iter (
+ function
+ | "compressed", "" -> compressed := true
+ | "compressed", v -> compressed := bool_of_string v
+ | k, _ ->
+ error (f_"-o kubevirt: unknown output option -oo %s") k
+ ) options.output_options;
+
if options.output_password <> None then
error_option_cannot_be_used_in_output_mode "kubevirt" "-op";
@@ -73,11 +84,13 @@ module Kubevirt = struct
end with an alphanumeric character. Rerun virt-v2v with \
the '-on name' option to rename it.");
- options.output_alloc, options.output_format, output_name, output_storage
+ !compressed, options.output_alloc, options.output_format,
+ output_name, output_storage
let setup dir options source =
let disks = get_disks dir in
- let output_alloc, output_format, output_name, output_storage = options in
+ let compressed, output_alloc, output_format, output_name, output_storage =
+ options in
List.iter (
fun (i, size) ->
@@ -86,11 +99,12 @@ module Kubevirt = struct
(* Create the actual output disk. *)
let outdisk = disk_path output_storage output_name i in
- output_to_local_file output_alloc output_format outdisk size socket
+ output_to_local_file ~compressed output_alloc output_format
+ outdisk size socket
) disks
let finalize dir options () source inspect target_meta =
- let output_alloc, output_format, output_name, output_storage = options in
+ let _, output_alloc, output_format, output_name, output_storage = options in
let doc = create_kubevirt_yaml source inspect target_meta
(disk_path output_storage output_name)

View File

@ -1,4 +1,4 @@
From da3ae25bdd18db8e4330f8b9c4d1c7bbb1f0df39 Mon Sep 17 00:00:00 2001
From 5bdd4525570d58e7b712514f1ab57cb04f7cd8d8 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Sun, 28 Sep 2014 19:14:43 +0100
Subject: [PATCH] RHEL: v2v: Select correct qemu binary for -o qemu mode
@ -16,7 +16,7 @@ support cases.
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/output/output_qemu.ml b/output/output_qemu.ml
index b667e782..3a57a009 100644
index 1a5f7f71..97cf59a8 100644
--- a/output/output_qemu.ml
+++ b/output/output_qemu.ml
@@ -142,7 +142,7 @@ module QEMU = struct

View File

@ -1,62 +0,0 @@
From 8802e8b4135c913f206508c8f7650a9f99ee6667 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Mon, 30 Jan 2023 09:17:33 +0000
Subject: [PATCH] v2v: Remove use of ~anchored
In various places we used PCRE.compile ~anchored:true (PCRE2_ANCHORED)
thinking it means that the regular expression is anchored at both
ends. However this is not what it means (it only anchors the start).
Replace with ^...$
(cherry picked from commit 8c316ed125e26583edc72eb9e953499b0078dcbd)
---
in-place/in_place.ml | 4 ++--
inspector/inspector.ml | 4 ++--
v2v/v2v.ml | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/in-place/in_place.ml b/in-place/in_place.ml
index 55541814..f76651e6 100644
--- a/in-place/in_place.ml
+++ b/in-place/in_place.ml
@@ -29,8 +29,8 @@ open Types
open Utils
(* Matches --mac command line parameters. *)
-let mac_re = PCRE.compile ~anchored:true "([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)"
-let mac_ip_re = PCRE.compile ~anchored:true "([[:xdigit:]]|:|\\.)+"
+let mac_re = PCRE.compile "^([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)$"
+let mac_ip_re = PCRE.compile "^([[:xdigit:]]|:|\\.)+$"
let rec main () =
let set_string_option_once optname optref arg =
diff --git a/inspector/inspector.ml b/inspector/inspector.ml
index 13d58df3..d12d85c2 100644
--- a/inspector/inspector.ml
+++ b/inspector/inspector.ml
@@ -30,8 +30,8 @@ open Utils
open DOM
(* Matches --mac command line parameters. *)
-let mac_re = PCRE.compile ~anchored:true "([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)"
-let mac_ip_re = PCRE.compile ~anchored:true "([[:xdigit:]]|:|\\.)+"
+let mac_re = PCRE.compile "^([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)$"
+let mac_ip_re = PCRE.compile "^([[:xdigit:]]|:|\\.)+$"
let rec main () =
let set_string_option_once optname optref arg =
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index 1e8d03ef..7a01eab5 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -34,8 +34,8 @@ open Types
open Utils
(* Matches --mac command line parameters. *)
-let mac_re = PCRE.compile ~anchored:true "([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)"
-let mac_ip_re = PCRE.compile ~anchored:true "([[:xdigit:]]|:|\\.)+"
+let mac_re = PCRE.compile "^([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)$"
+let mac_ip_re = PCRE.compile "^([[:xdigit:]]|:|\\.)+$"
let rec main () =
let set_string_option_once optname optref arg =

View File

@ -1,4 +1,4 @@
From b638c2083ee9af57d036859e8a807ad56e9e9361 Mon Sep 17 00:00:00 2001
From f063d97be8f13cc6526d3a4b4ec8be0b1d3c266f Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Tue, 30 Sep 2014 10:50:27 +0100
Subject: [PATCH] RHEL: v2v: Disable the --qemu-boot / -oo qemu-boot option
@ -44,10 +44,10 @@ index d2a1c270..0be37f5e 100644
=item B<-o null>
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
index b458607d..6cfe9e44 100644
index bc946dc1..55545e11 100644
--- a/docs/virt-v2v.pod
+++ b/docs/virt-v2v.pod
@@ -144,11 +144,6 @@ Since F<guest-domain.xml> contains the path(s) to the guest disk
@@ -146,11 +146,6 @@ Since F<guest-domain.xml> contains the path(s) to the guest disk
image(s) you do not need to specify the name of the disk image on the
command line.
@ -59,7 +59,7 @@ index b458607d..6cfe9e44 100644
=head1 OPTIONS
=over 4
@@ -507,9 +502,6 @@ This is similar to I<-o local>, except that a shell script is written
@@ -522,9 +517,6 @@ This is similar to I<-o local>, except that a shell script is written
which you can use to boot the guest in qemu. The converted disks and
shell script are written to the directory specified by I<-os>.
@ -69,7 +69,7 @@ index b458607d..6cfe9e44 100644
=item B<-o> B<rhev>
This is the same as I<-o rhv>.
@@ -588,11 +580,6 @@ For I<-o openstack> (L<virt-v2v-output-openstack(1)>) only, set a guest ID
@@ -603,11 +595,6 @@ For I<-o openstack> (L<virt-v2v-output-openstack(1)>) only, set a guest ID
which is saved on each Cinder volume in the C<virt_v2v_guest_id>
volume property.
@ -81,7 +81,7 @@ index b458607d..6cfe9e44 100644
=item B<-oo verify-server-certificate>
=item B<-oo verify-server-certificate=>C<true|false>
@@ -763,10 +750,6 @@ Print information about the source guest and stop. This option is
@@ -778,10 +765,6 @@ Print information about the source guest and stop. This option is
useful when you are setting up network and bridge maps.
See L</Networks and bridges>.
@ -93,7 +93,7 @@ index b458607d..6cfe9e44 100644
=item B<--quiet>
diff --git a/output/output_qemu.ml b/output/output_qemu.ml
index 3a57a009..4be9b650 100644
index 97cf59a8..ad3eb897 100644
--- a/output/output_qemu.ml
+++ b/output/output_qemu.ml
@@ -65,6 +65,9 @@ module QEMU = struct
@ -107,10 +107,10 @@ index 3a57a009..4be9b650 100644
let output_storage =
match options.output_storage with
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index 7a01eab5..dc747804 100644
index 3b2eafbd..696ef75e 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -272,8 +272,6 @@ let rec main () =
@@ -275,8 +275,6 @@ let rec main () =
s_"Same as -ip filename";
[ L"print-source" ], Getopt.Set print_source,
s_"Print source and stop";

View File

@ -1,34 +0,0 @@
From 628ee708464ee3d266609167c48e92f883849e4d Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Mon, 30 Jan 2023 09:01:38 +0000
Subject: [PATCH] -o kubevirt: Replace PCRE ~anchored with ^...$
Because this regexp was not anchored at both ends it would still
report a match for incorrect names.
Fixes: commit 8a9c914544a49bed13eb5baf42290f835bdee7b5
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2162332
Reported-by: Ming Xie
Cherry picked from commit 050a0ba714ddf2a5d81515c886032016aa75342c.
I did not include the update to the common module since picking that
would pull in the large changes made to the virtio driver code.
---
output/output_kubevirt.ml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/output/output_kubevirt.ml b/output/output_kubevirt.ml
index ee89fdbf..fdf0f279 100644
--- a/output/output_kubevirt.ml
+++ b/output/output_kubevirt.ml
@@ -31,8 +31,8 @@ open Create_kubevirt_yaml
(* Valid output names for Kubevirt (RHBZ#2162332). *)
let rfc1123_re =
- PCRE.compile ~anchored:true
- "[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*"
+ PCRE.compile
+ "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$"
module Kubevirt = struct
type poptions = bool * output_allocation * string * string * string

View File

@ -1,4 +1,4 @@
From d8a6a0577f0a85387a6acf394f3523674c1b704f Mon Sep 17 00:00:00 2001
From 6cee48bde007be6c8242c9e1a3b83bc153c566d9 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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 281868b5..e63ec7ce 100644
index 19c5ba91..7b3aa2e2 100644
--- a/lib/utils.ml
+++ b/lib/utils.ml
@@ -60,13 +60,14 @@ let kvm_arch = function

View File

@ -1,48 +0,0 @@
From a9630d3981cbf7f6083e82f4e22cff981d11a8b3 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 2 Feb 2023 12:29:00 +0000
Subject: [PATCH] -o libvirt: Add correct xmlns:libosinfo for Rocky Linux
Also a small whitespace fix and improve the warning message.
Updates: commit db831c167b7bf757aa79dbe3db5fa8c5fd8cfc99
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2166618
Reported-by: Ming Xie
(cherry picked from commit ebfdca56bca69284f289e3db8a6e6baf6bc617f0)
---
output/create_libvirt_xml.ml | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/output/create_libvirt_xml.ml b/output/create_libvirt_xml.ml
index e1c1f616..388fae5b 100644
--- a/output/create_libvirt_xml.ml
+++ b/output/create_libvirt_xml.ml
@@ -47,6 +47,10 @@ let get_osinfo_id = function
when major >= 8 ->
Some (sprintf "http://centos.org/centos/%d" major)
+ | { i_type = "linux"; i_distro = "rocky";
+ i_major_version = major; i_minor_version = minor } ->
+ Some (sprintf "http://rockylinux.org/rocky/%d.%d" major minor)
+
| { i_type = "linux"; i_distro = "sles";
i_major_version = major; i_minor_version = 0;
i_product_name = product } when String.find product "Desktop" >= 0 ->
@@ -140,7 +144,8 @@ let get_osinfo_id = function
| { i_type = typ; i_distro = distro;
i_major_version = major; i_minor_version = minor; i_arch = arch;
i_product_name = product } ->
- warning (f_"unknown guest operating system: %s %s %d.%d %s (%s)")
+ warning (f_"get_osinfo_id: unknown guest operating system: \
+ %s %s %d.%d %s (%s)")
typ distro major minor arch product;
None
@@ -160,7 +165,6 @@ let create_libvirt_xml ?pool source inspect
| Some genid -> List.push_back body (e "genid" [] [PCData genid])
);
-
(match get_osinfo_id inspect with
| None -> ()
| Some osinfo_id ->

View File

@ -1,23 +1,26 @@
From 94f4aaeea12ac37a5b7515251040ce3e6fd86171 Mon Sep 17 00:00:00 2001
From 7374efa8aecb97a83a1ec6d4d606651a4eb569e4 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Sun, 30 Aug 2015 03:21:57 -0400
Subject: [PATCH] RHEL: Fixes for libguestfs-winsupport.
In tests we cannot use guestfish for arbitrary Windows edits.
In virt-v2v helpers we must set the program name to virt-v2v.
For RHEL 9.3 and above, see this comment:
https://bugzilla.redhat.com/show_bug.cgi?id=2187961#c1
---
convert/convert.ml | 1 +
convert/windows_virtio.ml | 1 +
test-data/phony-guests/make-windows-img.sh | 1 +
tests/test-v2v-block-driver.sh | 6 +++++-
tests/test-v2v-virtio-win-iso.sh | 8 +++++++-
tests/test-v2v-windows-conversion.sh | 8 +++++++-
5 files changed, 17 insertions(+), 2 deletions(-)
5 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/convert/convert.ml b/convert/convert.ml
index d0d5b773..c3dd4151 100644
index 9c76f76d..caaa707e 100644
--- a/convert/convert.ml
+++ b/convert/convert.ml
@@ -51,6 +51,7 @@ let rec convert dir options source =
@@ -52,6 +52,7 @@ let rec convert dir options source =
message (f_"Opening the source");
let g = open_guestfs ~identifier:"v2v" () in
@ -25,18 +28,6 @@ index d0d5b773..c3dd4151 100644
g#set_memsize (g#get_memsize () * 2);
(* Setting the number of vCPUs allows parallel mkinitrd, but make
* sure this is not too large because each vCPU consumes guest RAM.
diff --git a/convert/windows_virtio.ml b/convert/windows_virtio.ml
index 6b642d21..2cef4234 100644
--- a/convert/windows_virtio.ml
+++ b/convert/windows_virtio.ml
@@ -256,6 +256,7 @@ and copy_from_virtio_win g inspect srcdir destdir filter missing =
let g2 =
try
let g2 = open_guestfs ~identifier:"virtio_win" () in
+ g#set_program "virt-v2v";
g2#add_drive_opts virtio_win ~readonly:true;
g2#launch ();
g2
diff --git a/test-data/phony-guests/make-windows-img.sh b/test-data/phony-guests/make-windows-img.sh
index 30908a91..73cf5144 100755
--- a/test-data/phony-guests/make-windows-img.sh
@ -49,6 +40,23 @@ index 30908a91..73cf5144 100755
sparse windows.img-t 512M
run
diff --git a/tests/test-v2v-block-driver.sh b/tests/test-v2v-block-driver.sh
index db59a2cf..a0e56bed 100755
--- a/tests/test-v2v-block-driver.sh
+++ b/tests/test-v2v-block-driver.sh
@@ -100,7 +100,11 @@ check_driver_presence ()
local virtio_dir="/Windows/Drivers/VirtIO"
- guestfish --ro -a "$img" -i >$response <<-EOM
+ guestfish >$response <<-EOM
+ add-ro $img
+ set-program virt-testing
+ run
+ mount-ro /dev/sda2 /
is-dir $virtio_dir
is-file $virtio_dir/$drv.cat
is-file $virtio_dir/$drv.inf
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

View File

@ -1,42 +0,0 @@
From 227313ca73d24eaaa0b82aca94de2278bca0f95b Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Mon, 6 Feb 2023 12:13:25 +0000
Subject: [PATCH] convert: linux: Require host cpu for all RHEL-alike >= 9
RHEL >= 9 and compatible distros like Rocky >= 9 will not boot using
the default qemu CPU. You will see an error at boot:
Fatal glibc error: CPU does not support x86-64-v2
Instead you need to use -cpu host.
In commit f28757c6d1 ("convert_linux: set "gcaps_default_cpu = false"
for x86_64 RHEL-9.0+ guests") we fixed this specifically for RHEL >= 9.
This commit extends the same fix to all RHEL family distros.
Updates: commit f28757c6d100060c65212ea55cfa59d308dcb850
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2166619
Reported-by: Ming Xie
Thanks: Laszlo Ersek
(cherry picked from commit 9f12b95bbe7bc2850ce4ba134c46a3cc5fd1167d)
---
convert/convert_linux.ml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml
index 41767e62..27bc4ae4 100644
--- a/convert/convert_linux.ml
+++ b/convert/convert_linux.ml
@@ -202,9 +202,9 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ =
(* RHEL >= 9.0 on x86_64 requires the processor to support the "x86-64-v2"
* microarchitecture level, which the default QEMU VCPU model does not
- * satisfy. Refer to RHBZ#2076013.
+ * satisfy. Refer to RHBZ#2076013 RHBZ#2166619.
*)
- let default_cpu_suffices = inspect.i_distro <> "rhel" ||
+ let default_cpu_suffices = family <> `RHEL_family ||
inspect.i_arch <> "x86_64" ||
inspect.i_major_version < 9 in

View File

@ -1,4 +1,4 @@
From ffcd5358b8f6e39962edc91aa036089adc4fcdb0 Mon Sep 17 00:00:00 2001
From 8b2bb3c153b44634fb3f93aae1c0c40655213506 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 2 Mar 2017 14:21:37 +0100
Subject: [PATCH] RHEL: v2v: -i disk: force VNC as display (RHBZ#1372671)

View File

@ -1,34 +0,0 @@
From e7aa456e26e59bfa5cca1299ef2cb5299592d9da Mon Sep 17 00:00:00 2001
From: Laszlo Ersek <lersek@redhat.com>
Date: Wed, 5 Apr 2023 17:08:28 +0200
Subject: [PATCH] detect_kernels: tighten "try" scope
We want to catch Not_found from (our own implementation of)
"List.find_map". There's no need (and it makes no sense) to push the
"prefix_len" calculation down into the "try" scope. Keep the "try" scope
as narrow as possible.
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2175703
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Vera Wu <vwu@redhat.com>
(ported from libguestfs-common commit 4003815a994944cab38d48cfc96f16382de62987)
Message-Id: <20230405150829.171720-2-lersek@redhat.com>
Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
---
convert/linux_kernels.ml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/convert/linux_kernels.ml b/convert/linux_kernels.ml
index 6e9d2bdd..75ab94c4 100644
--- a/convert/linux_kernels.ml
+++ b/convert/linux_kernels.ml
@@ -122,8 +122,8 @@ let detect_kernels (g : G.guestfs) inspect family bootloader =
*)
let modpath, version =
let prefix = "/lib/modules/" in
+ let prefix_len = String.length prefix in
try
- let prefix_len = String.length prefix in
List.find_map (
fun filename ->
let filename_len = String.length filename in

View File

@ -1,4 +1,4 @@
From 907b8c0f9f0aaf3cf5ec71c8371ea252c4acf357 Mon Sep 17 00:00:00 2001
From 28e3b929b94e213bc24fa27c58215fe8ccdb9ba1 Mon Sep 17 00:00:00 2001
From: Pino Toscano <ptoscano@redhat.com>
Date: Wed, 8 Mar 2017 11:03:40 +0100
Subject: [PATCH] RHEL: v2v: do not mention SUSE Xen hosts (RHBZ#1430203)
@ -9,7 +9,7 @@ They are not supported in RHEL.
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod
index 4a0544f8..9c3981e1 100644
index 38dc8f7b..05c4e3f5 100644
--- a/docs/virt-v2v-input-xen.pod
+++ b/docs/virt-v2v-input-xen.pod
@@ -11,7 +11,7 @@ virt-v2v-input-xen - Using virt-v2v to convert guests from Xen

View File

@ -1,97 +0,0 @@
From 9449d21eeae81d4283e74d7cdccf776e695783f0 Mon Sep 17 00:00:00 2001
From: Laszlo Ersek <lersek@redhat.com>
Date: Wed, 5 Apr 2023 17:08:29 +0200
Subject: [PATCH] detect_kernels: deal with RHEL's kernel-core /
kernel-modules-core split
In "kernel-5.14.0-269.el9", the "kernel-modules-core" subpackage got split
from the "kernel-core" subpackage. Therefore, a single binary RPM
containing *both* the "/boot/vmlinuz-5.14.0-269.el9.x86_64" file *and* the
"/lib/modules/5.14.0-269.el9.x86_64" directory no longer exists. The file
now belongs to "kernel-core", and the directory to "kernel-modules-core".
As a result, when we investigate the file list of "kernel-core" (based on
"kernel-core" providing "/boot/vmlinuz-5.14.0-269.el9.x86_64"), the first
match against "/lib/modules/" is not the actual module root directory
"/lib/modules/5.14.0-269.el9.x86_64", but the nonsensical
"/lib/modules/5.14.0-269.el9.x86_64/.vmlinuz.hmac" regular file. This
latter file is never a directory, therefore we rule out "kernel-core" as a
kernel package.
We also rule out "kernel-modules-core" (even earlier) because it does not
contain "/boot/vmlinuz-5.14.0-269.el9.x86_64".
Now, the code already deals with the case if the prospective kernel
package *does not provide a match* for the "/lib/modules/" prefix: in that
case, we construct the modpath manually, from said prefix, and the version
number found in "/boot/vmlinuz-<version>". This fallback is good, but it's
unreachable if *there is* a candidate, it's just wrong (i.e., not a
directory).
Perform the "is_dir" check on the candidate modpath earlier, so that we
can fall back to the manual modpath construction if the modpath candidate
exists, but is wrong.
With this, the original "is_dir" check becomes superfluous (duplicated)
*except* when the "Not_found" branch is taken. Therefore, hoist the
original "is_dir" check into that branch.
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2175703
Reported-by: Vera Wu <vwu@redhat.com>
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Vera Wu <vwu@redhat.com>
(ported from libguestfs-common commit 70c10a079a30ff3a84f38596d725a6c5d46e2470)
Message-Id: <20230405150829.171720-3-lersek@redhat.com>
Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
---
convert/linux_kernels.ml | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/convert/linux_kernels.ml b/convert/linux_kernels.ml
index 75ab94c4..d0b31643 100644
--- a/convert/linux_kernels.ml
+++ b/convert/linux_kernels.ml
@@ -124,7 +124,7 @@ let detect_kernels (g : G.guestfs) inspect family bootloader =
let prefix = "/lib/modules/" in
let prefix_len = String.length prefix in
try
- List.find_map (
+ let modpath, version = List.find_map (
fun filename ->
let filename_len = String.length filename in
if filename_len > prefix_len &&
@@ -134,17 +134,29 @@ let detect_kernels (g : G.guestfs) inspect family bootloader =
Some (filename, version)
) else
None
- ) files
+ ) files in
+ (* Fall back to the version in the vmlinuz file name not only if
+ * a candidate pathname couldn't be found under /lib/modules/,
+ * but also in case the candidate pathname doesn't reference a
+ * directory. See RHBZ#2175703.
+ *
+ * Note that this "is_dir" check is deliberately kept outside of
+ * the "find_map"'s mapper function above: we want the first
+ * candidate *to be* a directory, and not the first candidate
+ * *that is* a directory.
+ *)
+ if not (g#is_dir ~followsymlinks:true modpath) then
+ raise Not_found;
+ modpath, version
with Not_found ->
let version =
String.sub vmlinuz 14 (String.length vmlinuz - 14) in
let modpath = prefix ^ version in
+ (* Check that the modpath exists. *)
+ if not (g#is_dir ~followsymlinks:true modpath) then
+ raise Not_found;
modpath, version in
- (* Check that the modpath exists. *)
- if not (g#is_dir ~followsymlinks:true modpath) then
- raise Not_found;
-
(* Find the initramfs which corresponds to the kernel.
* Since the initramfs is built at runtime, and doesn't have
* to be covered by the RPM file list, this is basically

View File

@ -1,4 +1,4 @@
From ee2bf7286e96419df09d86ddf0eeb31ad869ff92 Mon Sep 17 00:00:00 2001
From a2e7cf38ee640e9e806a680cf55f78d33a3c0ee8 Mon Sep 17 00:00:00 2001
From: Pino Toscano <ptoscano@redhat.com>
Date: Tue, 26 Mar 2019 09:42:25 +0100
Subject: [PATCH] RHEL: point to KB for supported v2v hypervisors/guests
@ -8,7 +8,7 @@ Subject: [PATCH] RHEL: point to KB for supported v2v hypervisors/guests
1 file changed, 4 insertions(+), 100 deletions(-)
diff --git a/docs/virt-v2v-support.pod b/docs/virt-v2v-support.pod
index 9815f51f..1ffc0f9d 100644
index 8b64a5ea..1ffc0f9d 100644
--- a/docs/virt-v2v-support.pod
+++ b/docs/virt-v2v-support.pod
@@ -8,106 +8,10 @@ systems and guests in virt-v2v
@ -84,11 +84,11 @@ index 9815f51f..1ffc0f9d 100644
-
-=over 4
-
-=item Red Hat Enterprise Linux 3, 4, 5, 6, 7
-=item Red Hat Enterprise Linux 4, 5, 6, 7
-
-=item CentOS 3, 4, 5, 6, 7
-=item CentOS 4, 5, 6, 7
-
-=item Scientific Linux 3, 4, 5, 6, 7
-=item Scientific Linux 4, 5, 6, 7
-
-=item Oracle Linux
-

View File

@ -1,19 +1,19 @@
From 2d85522fe7b03207573952a7d95b0f621e3ff52e Mon Sep 17 00:00:00 2001
From 29b43856a1429148eece11f0579a01026d583161 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Wed, 30 Jun 2021 11:15:52 +0100
Subject: [PATCH] RHEL: Disable -o glance
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1977539
---
docs/virt-v2v-output-openstack.pod | 56 ++----------------------------
docs/virt-v2v-output-openstack.pod | 54 ++----------------------------
docs/virt-v2v.pod | 20 -----------
output/output_glance.mli | 2 +-
tests/test-v2v-o-glance.sh | 3 ++
v2v/v2v.ml | 7 +---
5 files changed, 7 insertions(+), 81 deletions(-)
5 files changed, 7 insertions(+), 79 deletions(-)
diff --git a/docs/virt-v2v-output-openstack.pod b/docs/virt-v2v-output-openstack.pod
index f5a3abad..1ab356e8 100644
index cd4862b1..54cd276e 100644
--- a/docs/virt-v2v-output-openstack.pod
+++ b/docs/virt-v2v-output-openstack.pod
@@ -10,13 +10,10 @@ virt-v2v-output-openstack - Using virt-v2v to convert guests to OpenStack
@ -47,7 +47,7 @@ index f5a3abad..1ab356e8 100644
=back
=head1 OUTPUT TO OPENSTACK
@@ -170,50 +158,10 @@ no Cinder volume type is used.
@@ -176,48 +164,10 @@ no Cinder volume type is used.
The following options are B<not> supported with OpenStack: I<-oa>,
I<-of>.
@ -60,10 +60,8 @@ index f5a3abad..1ab356e8 100644
-
-This runs the L<glance(1)> CLI program which must be installed on the
-virt-v2v conversion host. For authentication to work, you will need
-to set C<OS_*> environment variables.
-
-Normally there is a file called C<overcloudrc> or C<keystonerc_admin>
-which you can simply C<source> to set everything up.
-to set C<OS_*> environment variables. See
-L</OpenStack: Authentication> above.
-
-Virt-v2v adds metadata for the guest to Glance, describing such things
-as the guest operating system and what drivers it requires. The
@ -100,10 +98,10 @@ index f5a3abad..1ab356e8 100644
=head1 AUTHOR
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
index 6cfe9e44..d161b63f 100644
index 55545e11..8d5d54d3 100644
--- a/docs/virt-v2v.pod
+++ b/docs/virt-v2v.pod
@@ -421,14 +421,6 @@ See L</Networks and bridges> below.
@@ -435,14 +435,6 @@ See L</Networks and bridges> below.
This is the same as I<-o local>.
@ -118,7 +116,7 @@ index 6cfe9e44..d161b63f 100644
=item B<-o> B<kubevirt>
Set the output method to I<kubevirt>. B<Note the way this mode works
@@ -1172,11 +1164,6 @@ and output methods may use disk space, as outlined in the table below.
@@ -1187,11 +1179,6 @@ and output methods may use disk space, as outlined in the table below.
This temporarily places a full copy of the uncompressed source disks
in C<$VIRT_V2V_TMPDIR> (or F</var/tmp>).
@ -130,7 +128,7 @@ index 6cfe9e44..d161b63f 100644
=item I<-o local>
=item I<-o qemu>
@@ -1360,13 +1347,6 @@ instance.
@@ -1377,13 +1364,6 @@ See also L</Starting the libvirt system instance>.
Because of how Cinder volumes are presented as F</dev> block devices,
using I<-o openstack> normally requires that virt-v2v is run as root.
@ -169,10 +167,10 @@ index c0db9115..074b5e16 100755
set -e
set -x
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index dc747804..392c3dad 100644
index 696ef75e..47d2da79 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -194,7 +194,6 @@ let rec main () =
@@ -195,7 +195,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
@ -180,7 +178,7 @@ index dc747804..392c3dad 100644
| "kubevirt" -> output_mode := `Kubevirt
| "libvirt" -> output_mode := `Libvirt
| "disk" | "local" -> output_mode := `Disk
@@ -252,7 +251,7 @@ let rec main () =
@@ -255,7 +254,7 @@ let rec main () =
s_"Map network in to out";
[ L"no-trim" ], Getopt.String ("-", no_trim_warning),
s_"Ignored for backwards compatibility";
@ -189,7 +187,7 @@ index dc747804..392c3dad 100644
s_"Set output mode (default: libvirt)";
[ M"oa" ], Getopt.String ("sparse|preallocated", set_output_alloc),
s_"Set output allocation mode";
@@ -320,8 +319,6 @@ virt-v2v -i libvirtxml guest-domain.xml -o local -os /var/tmp
@@ -323,8 +322,6 @@ virt-v2v -i libvirtxml guest-domain.xml -o local -os /var/tmp
virt-v2v -i disk disk.img -o local -os /var/tmp
@ -198,7 +196,7 @@ index dc747804..392c3dad 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.
@@ -390,7 +387,6 @@ read the man page virt-v2v(1).
@@ -399,7 +396,6 @@ read the man page virt-v2v(1).
pr "input:libvirtxml\n";
pr "input:ova\n";
pr "input:vmx\n";
@ -206,7 +204,7 @@ index dc747804..392c3dad 100644
pr "output:kubevirt\n";
pr "output:libvirt\n";
pr "output:local\n";
@@ -487,7 +483,6 @@ read the man page virt-v2v(1).
@@ -496,7 +492,6 @@ read the man page virt-v2v(1).
| `Disk -> (module Output_disk.Disk)
| `Null -> (module Output_null.Null)
| `QEmu -> (module Output_qemu.QEMU)

View File

@ -1,4 +1,4 @@
From 8fbfb57de81e9962eacc493338aee6162fefb510 Mon Sep 17 00:00:00 2001
From cbebfa10e481a664a949ff07dfceca5cb45793df Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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 d161b63f..0394b421 100644
index 8d5d54d3..0738f492 100644
--- a/docs/virt-v2v.pod
+++ b/docs/virt-v2v.pod
@@ -24,9 +24,6 @@ virtualize those machines (physical to virtual, or p2v).
@ -36,7 +36,7 @@ index d161b63f..0394b421 100644
=head2 Other virt-v2v topics
L<virt-v2v-support(1)> — Supported hypervisors, virtualization
@@ -1612,7 +1605,6 @@ L<https://rwmj.wordpress.com/2015/09/18/importing-kvm-guests-to-ovirt-or-rhev/#c
@@ -1645,7 +1638,6 @@ L<https://rwmj.wordpress.com/2015/09/18/importing-kvm-guests-to-ovirt-or-rhev/#c
L<virt-p2v(1)>,
L<virt-v2v-inspector(1)>,
@ -45,7 +45,7 @@ index d161b63f..0394b421 100644
L<virt-df(1)>,
L<virt-filesystems(1)>,
diff --git a/tests/Makefile.am b/tests/Makefile.am
index a4c87398..998b871d 100644
index 5c523204..5190d055 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -77,7 +77,6 @@ TESTS = \
@ -53,14 +53,14 @@ index a4c87398..998b871d 100644
test-v2v-i-disk.sh \
test-v2v-i-ova.sh \
- test-v2v-in-place.sh \
test-v2v-block-driver.sh \
test-v2v-inspector.sh \
test-v2v-mac.sh \
test-v2v-machine-readable.sh \
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index 392c3dad..18a694ee 100644
index 47d2da79..19f08aae 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -216,12 +216,6 @@ let rec main () =
@@ -217,12 +217,6 @@ let rec main () =
warning (f_"the --vmtype option has been removed and now does nothing")
in
@ -73,7 +73,7 @@ index 392c3dad..18a694ee 100644
let argspec = [
[ L"bandwidth" ], Getopt.String ("bps", set_string_option_once "--bandwidth" bandwidth),
s_"Set bandwidth to bits per sec";
@@ -243,8 +237,6 @@ let rec main () =
@@ -246,8 +240,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";

View File

@ -1,4 +1,4 @@
From b04577d80b8933a04b1863727cabefc48d6ae0da Mon Sep 17 00:00:00 2001
From aec57da776543ede26a2f751594686ad36b51bad Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Tue, 5 Jul 2022 11:56:54 +0100
Subject: [PATCH] RHEL 9: -oo compressed: Remove nbdcopy version check and test
@ -34,10 +34,10 @@ index e419c13d..c8f743c2 100644
let g = open_guestfs () in
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 998b871d..8cf17f94 100644
index 5190d055..5169e2a6 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -83,7 +83,6 @@ TESTS = \
@@ -84,7 +84,6 @@ TESTS = \
test-v2v-networks-and-bridges.sh \
test-v2v-o-glance.sh \
test-v2v-o-libvirt.sh \

View File

@ -1,4 +1,4 @@
From 462f9b9eb810a5ac26f610d03b601906c9bc674e Mon Sep 17 00:00:00 2001
From d9c11fcfdf832f9d3d35855e7e7458efc1908515 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
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 8cf17f94..8b2a8685 100644
index 5169e2a6..a1c61f8f 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -97,7 +97,6 @@ TESTS = \
@@ -98,7 +98,6 @@ TESTS = \
test-v2v-sound.sh \
test-v2v-virtio-win-iso.sh \
test-v2v-fedora-conversion.sh \

View File

@ -0,0 +1,157 @@
From 3e2962dad1245b8c7d1255faaa6820adc0648d14 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Fri, 28 Apr 2023 12:28:19 +0100
Subject: [PATCH] RHEL 9: Remove --block-driver option
Go back to the old default of always installing virtio-blk drivers in
Windows guests.
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2190387
---
docs/virt-v2v-in-place.pod | 10 ----------
docs/virt-v2v.pod | 10 ----------
in-place/in_place.ml | 11 +----------
tests/Makefile.am | 1 -
v2v/v2v.ml | 11 +----------
5 files changed, 2 insertions(+), 41 deletions(-)
diff --git a/docs/virt-v2v-in-place.pod b/docs/virt-v2v-in-place.pod
index ce57e229..6e1c5363 100644
--- a/docs/virt-v2v-in-place.pod
+++ b/docs/virt-v2v-in-place.pod
@@ -47,16 +47,6 @@ Display help.
See I<--network> below.
-=item B<--block-driver> B<virtio-blk>
-
-=item B<--block-driver> B<virtio-scsi>
-
-When choosing a block driver for Windows guests, prefer C<virtio-blk> or
-C<virtio-scsi>. The default is C<virtio-blk>.
-
-Note this has no effect for Linux guests at the moment. That may be
-added in future.
-
=item B<--colors>
=item B<--colours>
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
index 0738f492..021ac897 100644
--- a/docs/virt-v2v.pod
+++ b/docs/virt-v2v.pod
@@ -197,16 +197,6 @@ The options are silently ignored for other input methods.
See I<--network> below.
-=item B<--block-driver> B<virtio-blk>
-
-=item B<--block-driver> B<virtio-scsi>
-
-When choosing a block driver for Windows guests, prefer C<virtio-blk> or
-C<virtio-scsi>. The default is C<virtio-blk>.
-
-Note this has no effect for Linux guests at the moment. That may be
-added in future.
-
=item B<--colors>
=item B<--colours>
diff --git a/in-place/in_place.ml b/in-place/in_place.ml
index e8c260c2..2049db16 100644
--- a/in-place/in_place.ml
+++ b/in-place/in_place.ml
@@ -43,7 +43,6 @@ let rec main () =
let bandwidth = ref None in
let bandwidth_file = ref None in
- let block_driver = ref None in
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 () =
let argspec = [
[ S 'b'; L"bridge" ], Getopt.String ("in:out", add_bridge),
s_"Map bridge in to out";
- [ L"block-driver" ], Getopt.String ("driver", set_string_option_once "--block-driver" block_driver),
- s_"Prefer 'virtio-blk' or 'virtio-scsi'";
[ 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).
(* Dereference the arguments. *)
let args = List.rev !args in
- let block_driver =
- match !block_driver with
- | None | Some "virtio-blk" -> Virtio_blk
- | Some "virtio-scsi" -> Virtio_SCSI
- | Some driver ->
- error (f_"unknown block driver --block-driver %s") driver in
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).
(* Get the conversion options. *)
let conv_options = {
- Convert.block_driver = block_driver;
+ Convert.block_driver = Virtio_blk;
keep_serial_console = true;
ks = opthandle.ks;
network_map;
diff --git a/tests/Makefile.am b/tests/Makefile.am
index a1c61f8f..8e22ab64 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -77,7 +77,6 @@ TESTS = \
test-v2v-floppy.sh \
test-v2v-i-disk.sh \
test-v2v-i-ova.sh \
- test-v2v-block-driver.sh \
test-v2v-inspector.sh \
test-v2v-mac.sh \
test-v2v-machine-readable.sh \
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index 19f08aae..89c08fc5 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -48,7 +48,6 @@ let rec main () =
let bandwidth = ref None in
let bandwidth_file = ref None in
- let block_driver = ref None in
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 () =
s_"Set bandwidth dynamically from file";
[ S 'b'; L"bridge" ], Getopt.String ("in:out", add_bridge),
s_"Map bridge in to out";
- [ L"block-driver" ], Getopt.String ("driver", set_string_option_once "--block-driver" block_driver),
- s_"Prefer 'virtio-blk' or 'virtio-scsi'";
[ 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).
(* Dereference the arguments. *)
let args = List.rev !args in
- let block_driver =
- match !block_driver with
- | None | Some "virtio-blk" -> Virtio_blk
- | Some "virtio-scsi" -> Virtio_SCSI
- | Some driver ->
- error (f_"unknown block driver --block-driver %s") driver in
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).
(* Get the conversion options. *)
let conv_options = {
- Convert.block_driver = block_driver;
+ Convert.block_driver = Virtio_blk;
keep_serial_console = not remove_serial_console;
ks = opthandle.ks;
network_map;

View File

@ -7,7 +7,7 @@ set -e
# ./copy-patches.sh
project=virt-v2v
rhel_version=9.2
rhel_version=9.4
# Check we're in the right directory.
if [ ! -f $project.spec ]; then

View File

@ -1,17 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAmO9fDsRHHJpY2hAYW5u
ZXhpYS5vcmcACgkQkXOPc+G3aKAa2g//RQunlKur+nTvnmfpY7gYJJxuJqF0XAq0
aWoMF3GTGKbmgsKjvRMd3biVeNSeYRz8+cgy+ns7Ci7rlRw2fxG5INtZXX1rjVRN
9j5xQo+fYLHtp48OB2NIZ9qi5dAqSDgdgZ1oHFzzWJJ4dHw9zoMDUW77g8Hi74g4
jCXoxq61LMAfNpB8hFrN44xgDD3N15A8IWZEy81bBRQBER6yreZ4Ey1WrgCbF/ti
4RjUt98THxbQ1/fP5bDCXpagVSS3h70ZPyYl2gRFVNeEmPekUj4YZP4CvCEb74TF
HFJU6go2YzLah+UeG/z1ln8jl2BZdKd0K58tCHwsYvpOeQ1P0jopR6vtnKEAO9py
6YV2N5JOEA/EQsLDzyn8Hdk70WgceDjCo6Lkpukblk3sL8WfcnoGSysXWrRfQXnC
ktf2yE3vA5IOdd3Bs6yXKSvgp/vmfuLHjAlC7m4Si5MnVuhRWVcrdGmQEKuWb6hO
4GRFNiUWZOSDjxWo93M9U3Ur3iv5chb+i9wYLEceKysk4+IKjbqfutg195m1N3GU
Qn4sF6clXMRM5vzU9BUx4Y6kZLki8dWYgxNirw9/u/APfqHiycT08pCVZ7iCnExP
Q7MpgL6fFNgnwR1hEVHxO6a0kxK0jJh/cWBFHKx6Pkqv4GdXOpUcoKWmugbViLoE
gjRPHbHXzVM=
=bDBY
-----END PGP SIGNATURE-----

View File

@ -0,0 +1,17 @@
-----BEGIN PGP SIGNATURE-----
iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAmWW5kYRHHJpY2hAYW5u
ZXhpYS5vcmcACgkQkXOPc+G3aKBddxAAvM08lmWH0IlpLwKX06TwnVERt8fXD++p
bjRrfj2mOoayoN/B1oE61laCdZgCzPtN6MC/aW94LITaGJWHi7YYqdgdRgL1NqeC
n0tu8t14XsCT1xTIOa1ndb018+a5ppIcOnmGAj4naM5uA50rgRwChdSOTP/H10+J
93M2rvvak8aVdeWEhnMJyqWG2mFJ0YselJ+cMu66XFBkK7wg4UwCzzJ4Blqb1Igd
W/wctLDLqPVAxI85P/2p2dt+N4vzOnT/jr+dFxXOJg99E6iwa3qPCdzGHmszjhyC
uNhq/pWMt5tSk34IwYduyk1b9mlx9dCQsyREwrVomsdZD+XrUZHhrGrlcVJDfT07
2DCkVnGAoH0DRmz3t69KJS9U1JgzkaTDNaezkLlIZ7VZOdaC5nK74efnN0yinBkJ
9GhmR0qbk4/QVKeNWSftu4Rd9OUtRSaEMH0kO/S42vl3fW59u+ZGMEz26Ar4x/q7
jLx3vKfduJbpvberc3kQ2p9jQbUjlyFOTtnTAf84ckyIkvEMwpEhlyfchctPji/K
IaJ4Yd0KnKiLg/GH9Eon79cadAV2hzvYb2FZYI1RcrbRH+nZvGLgSbvHobqESERT
hBBXrAhaazRdxbOVqwMV9d+lq4llzUJJMOVCsK/PLnigrl5OCLQNQ2IVBbPv8WFD
VMg/9mGiUj0=
=lbFv
-----END PGP SIGNATURE-----

View File

@ -11,15 +11,15 @@
%endif
# The source directory.
%global source_directory 2.2-stable
%global source_directory 2.4-stable
Name: virt-v2v
Epoch: 1
Version: 2.2.0
Release: 6%{?dist}
Version: 2.4.0
Release: 2%{?dist}
Summary: Convert a virtual machine to run on KVM
License: GPLv2+
License: GPL-2.0-or-later AND LGPL-2.0-or-later
URL: https://github.com/libguestfs/virt-v2v
Source0: http://download.libguestfs.org/virt-v2v/%{source_directory}/%{name}-%{version}.tar.gz
@ -33,40 +33,35 @@ Source2: libguestfs.keyring
Source3: copy-patches.sh
# Patches are maintained in the following repository:
# https://github.com/libguestfs/virt-v2v/commits/rhel-9.2
# https://github.com/libguestfs/virt-v2v/commits/rhel-9.4
# Patches.
Patch0001: 0001-test-v2v-fedora-btrfs-conversion-spell-out-btrfs-fea.patch
Patch0002: 0002-test-v2v-i-ova-spell-out-ntfs-feature-group-dependen.patch
Patch0003: 0003-Translated-using-Weblate-Finnish.patch
Patch0004: 0004-Translated-using-Weblate-Georgian.patch
Patch0005: 0005-Update-translation-files.patch
Patch0006: 0006-Translated-using-Weblate-Ukrainian.patch
Patch0007: 0007-convert-windows-Remove-extraneous-blank-lines-in-sou.patch
Patch0008: 0008-convert-windows-Document-what-copy_qemu_ga-function-.patch
Patch0009: 0009-convert-windows-Remove-unused-open-Utils.patch
Patch0010: 0010-o-kubevirt-Fix-mistake-in-error-message.patch
Patch0011: 0011-o-kubevirt-Move-cpu-element-under-domain.patch
Patch0012: 0012-o-kubevirt-Error-on-invalid-output-guest-names.patch
Patch0013: 0013-Split-long-lines-in-messages.patch
Patch0014: 0014-o-kubevirt-Implement-oo-compressed-for-qcow2-files.patch
Patch0015: 0015-v2v-Remove-use-of-anchored.patch
Patch0016: 0016-o-kubevirt-Replace-PCRE-anchored-with.patch
Patch0017: 0017-o-libvirt-Add-correct-xmlns-libosinfo-for-Rocky-Linu.patch
Patch0018: 0018-convert-linux-Require-host-cpu-for-all-RHEL-alike-9.patch
Patch0019: 0019-detect_kernels-tighten-try-scope.patch
Patch0020: 0020-detect_kernels-deal-with-RHEL-s-kernel-core-kernel-m.patch
Patch0021: 0021-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch
Patch0022: 0022-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch
Patch0023: 0023-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch
Patch0024: 0024-RHEL-Fixes-for-libguestfs-winsupport.patch
Patch0025: 0025-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
Patch0026: 0026-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch
Patch0027: 0027-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch
Patch0028: 0028-RHEL-Disable-o-glance.patch
Patch0029: 0029-RHEL-Remove-the-in-place-option.patch
Patch0030: 0030-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch
Patch0031: 0031-RHEL-9-tests-Remove-btrfs-test.patch
Patch0001: 0001-virt-v2v-i-vmx-Remove-scp-T-option.patch
Patch0002: 0002-Translated-using-Weblate-Polish.patch
Patch0003: 0003-Update-translation-files.patch
Patch0004: 0004-virt-v2v-i-vmx-Refactor-ssh-scp-code-into-a-new-modu.patch
Patch0005: 0005-virt-v2v-i-vmx-Simplify-scp-wrapper.patch
Patch0006: 0006-virt-v2v-i-vmx-Add-the-input-password-to-vmx_source.patch
Patch0007: 0007-virt-v2v-i-vmx-Remove-dependency-of-ssh.ml-on-Xml.ur.patch
Patch0008: 0008-input-nbdkit_ssh-Make-retry-filter-optional.patch
Patch0009: 0009-virt-v2v-i-vmx-Replace-external-ssh-scp-with-nbdkit-.patch
Patch0010: 0010-input-nbdkit_ssh-Make-password-parameter-optional.patch
Patch0011: 0011-input-ssh-Rearrange-parameters-specifying-ssh-server.patch
Patch0012: 0012-docs-Remove-paragraph-about-ip-passwords-and-ssh-scp.patch
Patch0013: 0013-input-ssh-Use-nbdinfo-can-connect-instead-of-size.patch
Patch0014: 0014-build-Document-that-nbdinfo-and-nbdcopy-are-required.patch
Patch0015: 0015-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch
Patch0016: 0016-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch
Patch0017: 0017-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch
Patch0018: 0018-RHEL-Fixes-for-libguestfs-winsupport.patch
Patch0019: 0019-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
Patch0020: 0020-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch
Patch0021: 0021-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch
Patch0022: 0022-RHEL-Disable-o-glance.patch
Patch0023: 0023-RHEL-Remove-the-in-place-option.patch
Patch0024: 0024-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch
Patch0025: 0025-RHEL-9-tests-Remove-btrfs-test.patch
Patch0026: 0026-RHEL-9-Remove-block-driver-option.patch
%if !0%{?rhel}
# libguestfs hasn't been built on i686 for a while since there is no
@ -94,7 +89,7 @@ BuildRequires: /usr/bin/pod2man
BuildRequires: gcc
BuildRequires: ocaml >= 4.04
BuildRequires: libguestfs-devel >= 1:1.44
BuildRequires: libguestfs-devel >= 1:1.49.8-1
BuildRequires: augeas-devel
BuildRequires: bash-completion
BuildRequires: file-devel
@ -131,14 +126,15 @@ BuildRequires: nbdkit-python-plugin
BuildRequires: nbdkit-cow-filter >= 1.28.3-1.el9
%ifarch x86_64
BuildRequires: glibc-static
BuildRequires: sqlite
%endif
%if 0%{verify_tarball_signature}
BuildRequires: gnupg2
%endif
Requires: libguestfs%{?_isa} >= 1:1.48.4-4.el9
Requires: guestfs-tools >= 1.42
Requires: libguestfs%{?_isa} >= 1:1.49.8-1
Requires: guestfs-tools >= 1.49.7-1
# XFS is the default filesystem in Fedora and RHEL.
Requires: libguestfs-xfs
@ -301,15 +297,29 @@ fi
export LIBGUESTFS_DEBUG=1
export LIBGUESTFS_TRACE=1
# Work around RHBZ#2216496.
export LIBGUESTFS_APPEND=nosmp
# The built in tests take a very long time to run under TCG (in Koji),
# so just perform a very simple conversion to check things are
# working.
for f in windows.img fedora.img; do
make -C test-data/phony-guests $f
if -s test-data/phony-guests/$f; then
if test -s test-data/phony-guests/$f; then
./run virt-v2v -v -x -i disk test-data/phony-guests/$f -o null
fi
done
# Individual tests we do want to run for checking backports.
# The "windows.img" target below is harmless; it is already made by the
# loop above (even if only with zero size, due to RHEL9 lacking NTFS
# support). Repeat it here effectively for documentation purposes, as
# the upstream test suite depends on "windows.img", for formatting
# "windows.vmdk", regardless of the TESTS we want to run. The real
# target we need to make here is "fedora-luks-on-lvm.img".
make -C test-data/phony-guests windows.img fedora-luks-on-lvm.img
make -C tests TESTS=test-v2v-fedora-luks-on-lvm-conversion.sh check
%endif
@ -335,6 +345,7 @@ done
%{_mandir}/man1/virt-v2v-release-notes-1.42.1*
%{_mandir}/man1/virt-v2v-release-notes-2.0.1*
%{_mandir}/man1/virt-v2v-release-notes-2.2.1*
%{_mandir}/man1/virt-v2v-release-notes-2.4.1*
%{_mandir}/man1/virt-v2v-support.1*
%{_datadir}/virt-tools
@ -355,9 +366,42 @@ done
%changelog
* Mon Jan 22 2024 Richard W.M. Jones <rjones@redhat.com> - 1:2.4.0-2
- Rebase to virt-v2v 2.4.0
- -it ssh: Double quote ssh command which tests remote file exists
resolves: RHEL-12105
- Implement --key all:...
resolves: RHEL-18142
- Fix off-by-one error causing rare crash
resolves: RHEL-19061
- Improve the error message for -i vmx with a .vmdk file
resolves: RHEL-19564
- Fix -i vmx when remote filename contains literal '*'
resolves: RHEL-21365
- Fix virt-v2v --version output
resolves: RHEL-22262
* Mon Jul 03 2023 Laszlo Ersek <lersek@redhat.com> - 1:2.3.4-5
- improve UX when running as root and we can't chown v2v tmpdir or socks
- make the appliance kernel UP in %check, for working around RHBZ#2216496
resolves: rhbz#2182024
* Tue Jun 20 2023 Laszlo Ersek <lersek@redhat.com> - 1:2.3.4-3
- recognize "--key /dev/mapper/VG-LV:key:password"
- enable the %%check tests for real
resolves: rhbz#2168506
* Fri Apr 28 2023 Richard W.M. Jones <rjones@redhat.com> - 1:2.3.4-2
- Rebase to virt-v2v 2.3.4
resolves: rhbz#2187961, rhbz#2175703, rhbz#2172075, rhbz#2168082,
rhbz#1986386
- Remove --block-driver option downstream
resolves: rhbz#2190387
* Sun Apr 09 2023 Laszlo Ersek <lersek@redhat.com> - 1:2.2.0-6
- cope with kernel-core / kernel-modules-core subpackage split in RHEL-9.2 guests
resolves: rhbz#2184970
* Mon Feb 06 2023 Richard W.M. Jones <rjones@redhat.com> - 1:2.2.0-5
- Rebase to virt-v2v 2.2.0
resolves: rhbz#2135762