Import from AlmaLinux stable repository
This commit is contained in:
parent
7b7bd9216c
commit
9b2ebea91b
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +1,2 @@
|
||||
SOURCES/libguestfs.keyring
|
||||
SOURCES/virt-v2v-2.2.0.tar.gz
|
||||
SOURCES/virt-v2v-2.4.0.tar.gz
|
||||
|
@ -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
|
||||
|
@ -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
|
39
SOURCES/0001-virt-v2v-i-vmx-Remove-scp-T-option.patch
Normal file
39
SOURCES/0001-virt-v2v-i-vmx-Remove-scp-T-option.patch
Normal 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 -> ""
|
48
SOURCES/0002-Translated-using-Weblate-Polish.patch
Normal file
48
SOURCES/0002-Translated-using-Weblate-Polish.patch
Normal 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"
|
@ -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
|
@ -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
|
1604
SOURCES/0003-Update-translation-files.patch
Normal file
1604
SOURCES/0003-Update-translation-files.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
|
@ -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
84
SOURCES/0005-virt-v2v-i-vmx-Simplify-scp-wrapper.patch
Normal file
84
SOURCES/0005-virt-v2v-i-vmx-Simplify-scp-wrapper.patch
Normal 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
|
@ -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 ""
|
@ -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
|
@ -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].
|
@ -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
|
@ -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). *)
|
||||
|
||||
(**/**)
|
||||
|
@ -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 ->
|
@ -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
|
||||
|
@ -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 ->
|
@ -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
|
@ -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 =
|
@ -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
|
@ -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);
|
@ -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>:
|
@ -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
@ -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
|
@ -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"],[
|
@ -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)
|
@ -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
|
@ -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 =
|
@ -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";
|
@ -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
|
@ -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
|
@ -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 ->
|
@ -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
|
@ -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
|
||||
|
@ -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)
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
||||
-
|
@ -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)
|
@ -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";
|
@ -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 \
|
@ -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 \
|
157
SOURCES/0026-RHEL-9-Remove-block-driver-option.patch
Normal file
157
SOURCES/0026-RHEL-9-Remove-block-driver-option.patch
Normal 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;
|
@ -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
|
||||
|
@ -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-----
|
17
SOURCES/virt-v2v-2.4.0.tar.gz.sig
Normal file
17
SOURCES/virt-v2v-2.4.0.tar.gz.sig
Normal 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-----
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user