Rebase to virt-v2v 2.9.5
resolves: RHEL-111241
This commit is contained in:
parent
c6d4be1cf0
commit
b75d10f0d5
@ -1,47 +0,0 @@
|
||||
From 7566e3e433bd6ea44785b08164506fd013fe2b51 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 8 Jul 2025 11:11:48 +0100
|
||||
Subject: [PATCH] docs: Move -oo verify-server-certificate docs to alphabetical
|
||||
place
|
||||
|
||||
This option wasn't in alphabetical order.
|
||||
|
||||
(cherry picked from commit 378967fc4984af4f06c586886a1148aebede8cff)
|
||||
---
|
||||
docs/virt-v2v.pod | 16 ++++++++--------
|
||||
1 file changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index 3cfb0948..3eefe404 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -611,14 +611,6 @@ volume property.
|
||||
When using I<-o qemu> only, this boots the guest immediately after
|
||||
virt-v2v finishes.
|
||||
|
||||
-=item B<-oo verify-server-certificate>
|
||||
-
|
||||
-=item B<-oo verify-server-certificate=>C<true|false>
|
||||
-
|
||||
-For I<-o openstack> (L<virt-v2v-output-openstack(1)>) only, this can
|
||||
-be used to disable SSL certification validation when connecting to
|
||||
-OpenStack by specifying I<-oo verify-server-certificate=false>.
|
||||
-
|
||||
=item B<-oo os->*B<=>*
|
||||
|
||||
For I<-o openstack> (L<virt-v2v-output-openstack(1)>) only, set optional
|
||||
@@ -736,6 +728,14 @@ The OVF format understood by oVirt REST API.
|
||||
For backward compatibility the default is I<ovirtexp>, but this may change in
|
||||
the future.
|
||||
|
||||
+=item B<-oo verify-server-certificate>
|
||||
+
|
||||
+=item B<-oo verify-server-certificate=>C<true|false>
|
||||
+
|
||||
+For I<-o openstack> (L<virt-v2v-output-openstack(1)>) only, this can
|
||||
+be used to disable SSL certification validation when connecting to
|
||||
+OpenStack by specifying I<-oo verify-server-certificate=false>.
|
||||
+
|
||||
=item B<-op> file
|
||||
|
||||
Supply a file containing a password to be used when connecting to the
|
||||
@ -0,0 +1,25 @@
|
||||
From a6978649ccf9e8c8412db98a6af47f4fbae1c8cf Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Fri, 29 Aug 2025 11:06:01 +0100
|
||||
Subject: [PATCH] m4/guestfs-perl.m4: IPC::Run3 is now required by podwrapper
|
||||
|
||||
Add it to the list of perl module that we check.
|
||||
|
||||
Fixes: commit bdcc947b4e968e8e7ac4e56b87563e0e3d456294
|
||||
---
|
||||
m4/guestfs-perl.m4 | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/m4/guestfs-perl.m4 b/m4/guestfs-perl.m4
|
||||
index 27d91011..68100df2 100644
|
||||
--- a/m4/guestfs-perl.m4
|
||||
+++ b/m4/guestfs-perl.m4
|
||||
@@ -42,7 +42,7 @@ dnl Check for Perl modules needed by Perl documentation and tests.
|
||||
dnl XXX These should probably be required.
|
||||
AS_IF([test "x$PERL" != "xno"],[
|
||||
missing_perl_modules=no
|
||||
- for pm in Pod::Usage Getopt::Long Sys::Guestfs ; do
|
||||
+ for pm in Pod::Usage Getopt::Long IPC::Run3 Sys::Guestfs ; do
|
||||
AC_MSG_CHECKING([for $pm])
|
||||
if ! $PERL -M$pm -e1 >&AS_MESSAGE_LOG_FD 2>&1; then
|
||||
AC_MSG_RESULT([no])
|
||||
@ -1,4 +1,4 @@
|
||||
From 2cdab0acc99796d9e885697c6d9e50255bb3956b Mon Sep 17 00:00:00 2001
|
||||
From 340400e92649a4124d00fa0f6a8e95c7d99e89f4 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.
|
||||
@ -19,17 +19,17 @@ https://bugzilla.redhat.com/show_bug.cgi?id=2187961#c1
|
||||
7 files changed, 40 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/convert/convert.ml b/convert/convert.ml
|
||||
index ff82ad54..45d48a95 100644
|
||||
index 74160f1d..32a954c6 100644
|
||||
--- a/convert/convert.ml
|
||||
+++ b/convert/convert.ml
|
||||
@@ -53,6 +53,7 @@ let rec convert input_disks options source =
|
||||
@@ -55,6 +55,7 @@ let rec convert input_disks options source =
|
||||
|
||||
message (f_"Opening the source");
|
||||
let g = open_guestfs ~identifier:"v2v" () in
|
||||
+ g#set_program "virt-v2v";
|
||||
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.
|
||||
let memsize =
|
||||
match options.memsize with
|
||||
| None ->
|
||||
diff --git a/test-data/phony-guests/make-windows-img.sh b/test-data/phony-guests/make-windows-img.sh
|
||||
index b52d2522..8d036ee6 100755
|
||||
--- a/test-data/phony-guests/make-windows-img.sh
|
||||
@ -43,10 +43,10 @@ index b52d2522..8d036ee6 100755
|
||||
run
|
||||
|
||||
diff --git a/tests/test-block-driver.sh b/tests/test-block-driver.sh
|
||||
index 595e969c..0b8ac6ea 100755
|
||||
index 1ea2181e..00aa8b41 100755
|
||||
--- a/tests/test-block-driver.sh
|
||||
+++ b/tests/test-block-driver.sh
|
||||
@@ -100,7 +100,11 @@ check_driver_presence ()
|
||||
@@ -99,7 +99,11 @@ check_driver_presence ()
|
||||
|
||||
local virtio_dir="/Windows/Drivers/VirtIO"
|
||||
|
||||
@ -60,10 +60,10 @@ index 595e969c..0b8ac6ea 100755
|
||||
is-file $virtio_dir/$drv.cat
|
||||
is-file $virtio_dir/$drv.inf
|
||||
diff --git a/tests/test-in-place.sh b/tests/test-in-place.sh
|
||||
index e66d2647..38d05de5 100755
|
||||
index 0c6432cf..2d17029c 100755
|
||||
--- a/tests/test-in-place.sh
|
||||
+++ b/tests/test-in-place.sh
|
||||
@@ -89,6 +89,12 @@ mktest ()
|
||||
@@ -88,6 +88,12 @@ mktest ()
|
||||
:> "$script"
|
||||
:> "$expected"
|
||||
|
||||
@ -76,7 +76,7 @@ index e66d2647..38d05de5 100755
|
||||
firstboot_dir="/Program Files/Guestfs/Firstboot"
|
||||
mktest "is-dir \"$firstboot_dir\"" true
|
||||
mktest "is-file \"$firstboot_dir/firstboot.bat\"" true
|
||||
@@ -101,7 +107,7 @@ for drv in netkvm vioscsi viostor; do
|
||||
@@ -100,7 +106,7 @@ for drv in netkvm vioscsi viostor; do
|
||||
done
|
||||
done
|
||||
|
||||
@ -86,10 +86,10 @@ index e66d2647..38d05de5 100755
|
||||
|
||||
# Test the base image remained untouched
|
||||
diff --git a/tests/test-virtio-win-iso.sh b/tests/test-virtio-win-iso.sh
|
||||
index ccc42550..cd92db92 100755
|
||||
index 1ee343fd..0216a39b 100755
|
||||
--- a/tests/test-virtio-win-iso.sh
|
||||
+++ b/tests/test-virtio-win-iso.sh
|
||||
@@ -82,6 +82,12 @@ mktest ()
|
||||
@@ -80,6 +80,12 @@ mktest ()
|
||||
:> "$script"
|
||||
:> "$expected"
|
||||
|
||||
@ -102,7 +102,7 @@ index ccc42550..cd92db92 100755
|
||||
firstboot_dir="/Program Files/Guestfs/Firstboot"
|
||||
mktest "is-dir \"$firstboot_dir\"" true
|
||||
mktest "is-file \"$firstboot_dir/firstboot.bat\"" true
|
||||
@@ -94,5 +100,5 @@ for drv in netkvm vioscsi viostor; do
|
||||
@@ -92,5 +98,5 @@ for drv in netkvm vioscsi viostor; do
|
||||
done
|
||||
done
|
||||
|
||||
@ -110,10 +110,10 @@ index ccc42550..cd92db92 100755
|
||||
+guestfish --ro -a "$d/windows-sda" < "$script" > "$response"
|
||||
diff -u "$expected" "$response"
|
||||
diff --git a/tests/test-windows-conversion.sh b/tests/test-windows-conversion.sh
|
||||
index bfe04904..eeddcb86 100755
|
||||
index db688ddf..74f28bbb 100755
|
||||
--- a/tests/test-windows-conversion.sh
|
||||
+++ b/tests/test-windows-conversion.sh
|
||||
@@ -76,6 +76,12 @@ mktest ()
|
||||
@@ -74,6 +74,12 @@ mktest ()
|
||||
:> "$script"
|
||||
:> "$expected"
|
||||
|
||||
@ -126,7 +126,7 @@ index bfe04904..eeddcb86 100755
|
||||
firstboot_dir="/Program Files/Guestfs/Firstboot"
|
||||
mktest "is-dir \"$firstboot_dir\"" true
|
||||
mktest "is-file \"$firstboot_dir/firstboot.bat\"" true
|
||||
@@ -83,7 +89,7 @@ mktest "is-dir \"$firstboot_dir/scripts\"" true
|
||||
@@ -81,7 +87,7 @@ mktest "is-dir \"$firstboot_dir/scripts\"" true
|
||||
virtio_dir="/Windows/Drivers/VirtIO"
|
||||
mktest "ls \"$virtio_dir\"" "$(cat test-windows-conversion-ls.txt)"
|
||||
|
||||
@ -136,10 +136,10 @@ index bfe04904..eeddcb86 100755
|
||||
|
||||
# We also update the Registry several times, for firstboot, and (ONLY
|
||||
diff --git a/tests/test-windows-phony.sh b/tests/test-windows-phony.sh
|
||||
index fa5f6a17..3f5dfe5e 100755
|
||||
index 22c0fb9e..96420ff9 100755
|
||||
--- a/tests/test-windows-phony.sh
|
||||
+++ b/tests/test-windows-phony.sh
|
||||
@@ -71,6 +71,17 @@ mktest ()
|
||||
@@ -69,6 +69,17 @@ mktest ()
|
||||
:> "$script"
|
||||
:> "$expected"
|
||||
|
||||
@ -157,7 +157,7 @@ index fa5f6a17..3f5dfe5e 100755
|
||||
firstboot_dir="/Program Files/Guestfs/Firstboot"
|
||||
mktest "is-dir \"$firstboot_dir\"" true
|
||||
mktest "is-file \"$firstboot_dir/firstboot.bat\"" true
|
||||
@@ -80,7 +91,7 @@ mktest "ls \"$virtio_dir\"" "$(cat test-phony-$guestname-ls.txt)"
|
||||
@@ -78,7 +89,7 @@ mktest "ls \"$virtio_dir\"" "$(cat test-phony-$guestname-ls.txt)"
|
||||
osinfo_name="${guestname%-32}"
|
||||
mktest "inspect-get-osinfo /dev/sda2" "$osinfo_name"
|
||||
|
||||
@ -1,67 +0,0 @@
|
||||
From c2c829eb22add09de338da065214c9b6aced42e2 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 10 Jul 2025 09:13:54 +0100
|
||||
Subject: [PATCH] input/input_vddk.ml: Fix escaping of export=... parameter
|
||||
|
||||
Commit b49ee14368 ("input: vddk: Use single nbdkit-vddk-plugin
|
||||
instance with exports") switched to using the new nbdkit-vddk-plugin
|
||||
export feature, where we can run a single nbdkit instance and choose
|
||||
which disk we want to see using the NBD protocol exportname feature.
|
||||
|
||||
As part of this, we are required to set an export parameter, which is
|
||||
a wildcard that all exportnames must match. This is a safety feature
|
||||
so that nbdkit will only serve a subset of the VMware files, instead
|
||||
of allowing anyone who can attach to the nbdkit socket to read any
|
||||
file on the server. (The socket is further protected by not being
|
||||
readable to users other than the user running virt-v2v.)
|
||||
|
||||
We compute this by doing a longest common prefix of all the disk names
|
||||
associated with a guest.
|
||||
|
||||
Ming Xie found a case where this failed. Given two names called:
|
||||
|
||||
"[datastore1 (3)] esx8.0-win11-efi-secureboot-with-vtpm-and-turn-on-bitlocker/esx8.0-win11-efi-secureboot-with-vtpm-and-turn-on-bitlocker.vmdk"
|
||||
"[datastore1 (3)] esx8.0-win11-efi-secureboot-with-vtpm-and-turn-on-bitlocker/esx8.0-win11-efi-secureboot-with-vtpm-and-turn-on-bitlocker_1.vmdk"
|
||||
|
||||
we computed the wildcard:
|
||||
|
||||
"\[datastore1 (3)\] esx8.0-win11-efi-secureboot-with-vtpm-and-turn-on-bitlocker/esx8.0-win11-efi-secureboot-with-vtpm-and-turn-on-bitlocker\*.vmdk"
|
||||
|
||||
However the escaping is wrong. We correctly escape the '[' and ']'
|
||||
characters, but incorrectly escape the '*' character (which is meant
|
||||
to be a wildcard).
|
||||
|
||||
This caused failure to convert when a guest has multiple disks and
|
||||
nbdkit >= 1.44 is installed.
|
||||
|
||||
Reported-by: Ming Xie
|
||||
Fixes: commit 076727e55f4d4fed246097d3f89ebfe83e3de88f
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-102734
|
||||
(cherry picked from commit 5461976e229873a203062848c0de30e70067b3fb)
|
||||
---
|
||||
input/input_vddk.ml | 5 ++---
|
||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/input/input_vddk.ml b/input/input_vddk.ml
|
||||
index b70d76fb..39356129 100644
|
||||
--- a/input/input_vddk.ml
|
||||
+++ b/input/input_vddk.ml
|
||||
@@ -446,7 +446,7 @@ See also the virt-v2v-input-vmware(1) manual.") libNN
|
||||
let wildcard =
|
||||
match files with
|
||||
| [] -> assert false (* can't happen, see assert above *)
|
||||
- | [f] -> f
|
||||
+ | [f] -> fnmatch_escape f
|
||||
| files ->
|
||||
(* Calculate the longest common prefix across all the files,
|
||||
* then set the wildcard to this.
|
||||
@@ -454,8 +454,7 @@ See also the virt-v2v-input-vmware(1) manual.") libNN
|
||||
* XXX Is every file we want to read called *.vmdk?
|
||||
*)
|
||||
let prefix = String.longest_common_prefix files in
|
||||
- prefix ^ "*.vmdk" in
|
||||
- let wildcard = fnmatch_escape wildcard in
|
||||
+ fnmatch_escape prefix ^ "*.vmdk" in
|
||||
|
||||
let socket = sprintf "%s/in0" dir in
|
||||
On_exit.unlink socket;
|
||||
@ -1,76 +0,0 @@
|
||||
From 5fda965d292bd1b5b62e47d357ddf046dfa007b6 Mon Sep 17 00:00:00 2001
|
||||
From: Vadim Rozenfeld <vrozenfe@redhat.com>
|
||||
Date: Thu, 10 Jul 2025 10:12:56 +1000
|
||||
Subject: [PATCH] Modify configure_pnputil_install script to check pending
|
||||
reboot status and report PnPUtil execution status
|
||||
|
||||
This change adds checks for system reboot status and reports
|
||||
the result of PnPUtil driver installation attempt.
|
||||
|
||||
Related: https://issues.redhat.com/browse/RHEL-100682
|
||||
|
||||
Signed-off-by: Vadim Rozenfeld <vrozenfe@redhat.com>
|
||||
(cherry picked from commit 594b05d6940c8719167d10c0cdfaa253349060ab)
|
||||
---
|
||||
convert/convert_windows.ml | 48 +++++++++++++++++++++++++++++++++++---
|
||||
1 file changed, 45 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml
|
||||
index 71e867a5..8f0ff87b 100644
|
||||
--- a/convert/convert_windows.ml
|
||||
+++ b/convert/convert_windows.ml
|
||||
@@ -396,9 +396,51 @@ let convert (g : G.guestfs) source inspect i_firmware
|
||||
and configure_pnputil_install () =
|
||||
let fb_script = "@echo off\n\
|
||||
\n\
|
||||
- echo Wait for VirtIO drivers to be installed\n\
|
||||
- %systemroot%\\Sysnative\\PnPutil -i -a \
|
||||
- %systemroot%\\Drivers\\Virtio\\*.inf" in
|
||||
+ setlocal EnableDelayedExpansion\n\
|
||||
+ set inf_dir=%systemroot%\\Drivers\\Virtio\\\n\
|
||||
+ echo Installing drivers from %inf_dir%\n\
|
||||
+ set REBOOT_PENDING=0\n\
|
||||
+ \n\
|
||||
+ timeout /t 10 /nobreak\n\
|
||||
+ \n\
|
||||
+ reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\Auto Update\\RebootRequired\"\n\
|
||||
+ if %errorlevel%==0 (\n\
|
||||
+ echo Windows Update: Reboot required.\n\
|
||||
+ set REBOOT_PENDING=1\n\
|
||||
+ )\n\
|
||||
+ \n\
|
||||
+ reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Component Based Servicing\\RebootPending\"\n\
|
||||
+ if %errorlevel%==0 (\n\
|
||||
+ echo CBS: Reboot required.\n\
|
||||
+ set REBOOT_PENDING=1\n\
|
||||
+ )\n\
|
||||
+ \n\
|
||||
+ reg query \"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\" /v PendingFileRenameOperations\n\
|
||||
+ if %errorlevel%==0 (\n\
|
||||
+ echo Session Manager: Reboot required.\n\
|
||||
+ set REBOOT_PENDING=1\n\
|
||||
+ )\n\
|
||||
+ \n\
|
||||
+ if \"%REBOOT_PENDING%\"==\"1\" (\n\
|
||||
+ echo A reboot is pending.\n\
|
||||
+ exit /b 249\n\
|
||||
+ ) else (\n\
|
||||
+ echo No pending reboot detected.\n\
|
||||
+ )\n\
|
||||
+ \n\
|
||||
+ for %%f in (\"%inf_dir%*.inf\") do (\n\
|
||||
+ echo Installing: %%~nxf.\n\
|
||||
+ %systemroot%\\Sysnative\\PnPutil -i -a \"%%f\"\n\
|
||||
+ if !errorlevel! NEQ 0 (\n\
|
||||
+ echo Failed to install %%~nxf.\n\
|
||||
+ exit /b 249\n\
|
||||
+ ) else (\n\
|
||||
+ echo Successfully installed %%~nxf.\n\
|
||||
+ )\n\
|
||||
+ )\n\
|
||||
+ echo All drivers installed successfully.\n\
|
||||
+ exit /b 0\n\
|
||||
+ )" in
|
||||
|
||||
(* Set priority higher than that of "network-configure" firstboot script. *)
|
||||
Firstboot.add_firstboot_script g inspect.i_root ~prio:2000
|
||||
@ -1,4 +1,4 @@
|
||||
From de879aad4bd0d17e884d571da3348965a9d02756 Mon Sep 17 00:00:00 2001
|
||||
From 3234be3b16565e4bee797bcf9e29be764ff7268c 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,10 +16,10 @@ support cases.
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/output/output_qemu.ml b/output/output_qemu.ml
|
||||
index 47a6f4ff..909b6e10 100644
|
||||
index 63299423..853f43d4 100644
|
||||
--- a/output/output_qemu.ml
|
||||
+++ b/output/output_qemu.ml
|
||||
@@ -164,7 +164,7 @@ module QEMU = struct
|
||||
@@ -165,7 +165,7 @@ module QEMU = struct
|
||||
* module deals with shell and qemu comma quoting.
|
||||
*)
|
||||
let cmd = Qemuopts.create () in
|
||||
@ -1,4 +1,4 @@
|
||||
From 21c7424d64065fe77d4bfd6c05f0ca85e0a08229 Mon Sep 17 00:00:00 2001
|
||||
From 59db6c7c45273b404d2a97143dfa9c0a9686511c 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
|
||||
@ -43,10 +43,10 @@ index 49f00754..bdf12c5d 100644
|
||||
=item B<-o null>
|
||||
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index e228fb33..35886561 100644
|
||||
index fbb5bbd6..faf6b355 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -160,11 +160,6 @@ Since F<guest-domain.xml> contains the path(s) to the guest disk
|
||||
@@ -167,11 +167,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.
|
||||
|
||||
@ -58,17 +58,17 @@ index e228fb33..35886561 100644
|
||||
=head1 OPTIONS
|
||||
|
||||
=over 4
|
||||
@@ -549,9 +544,6 @@ This is similar to I<-o local>, except that a shell script is written
|
||||
@@ -575,9 +570,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>.
|
||||
|
||||
-When using this output mode, you can also specify the I<-oo qemu-boot>
|
||||
-option which boots the guest under qemu immediately.
|
||||
-
|
||||
ifelse(ENABLE_OVIRT, yes, `
|
||||
=item B<-o> B<vdsm>
|
||||
|
||||
Set the output method to I<vdsm>.
|
||||
@@ -622,11 +614,6 @@ For I<-o openstack> (L<virt-v2v-output-openstack(1)>) only, set a guest ID
|
||||
@@ -650,11 +642,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 e228fb33..35886561 100644
|
||||
|
||||
For I<-o openstack> (L<virt-v2v-output-openstack(1)>) only, set optional
|
||||
diff --git a/output/output_qemu.ml b/output/output_qemu.ml
|
||||
index 909b6e10..37371aad 100644
|
||||
index 853f43d4..dff08b66 100644
|
||||
--- a/output/output_qemu.ml
|
||||
+++ b/output/output_qemu.ml
|
||||
@@ -65,6 +65,9 @@ module QEMU = struct
|
||||
@ -1,50 +0,0 @@
|
||||
From 1162c9c21497e24e3388689fd2c58e8dfa043bc4 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Sun, 13 Jul 2025 12:29:28 +0100
|
||||
Subject: [PATCH] Update the common submodule
|
||||
|
||||
Pick up this commit from the submodule:
|
||||
|
||||
commit b40e534fefb74af32bd496904e44ce9bca1a7b34
|
||||
Author: Vadim Rozenfeld <vrozenfe@redhat.com>
|
||||
Date: Thu Jul 10 10:48:04 2025 +1000
|
||||
|
||||
Modify the firstboot script to check the scripts
|
||||
|
||||
which is required for commit 594b05d694 ("Modify
|
||||
configure_pnputil_install script to check pending reboot status and
|
||||
report PnPUtil execution status") to work properly.
|
||||
|
||||
Updates: commit 594b05d6940c8719167d10c0cdfaa253349060ab
|
||||
(cherry picked from commit 3e08788aaebf96d86452dc2c88d610dc0b72d02e)
|
||||
---
|
||||
common | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Submodule common 0e9caa17..10d2b626:
|
||||
diff --git a/common/mlcustomize/firstboot.ml b/common/mlcustomize/firstboot.ml
|
||||
index 6aca4c34..5f2642b0 100644
|
||||
--- a/common/mlcustomize/firstboot.ml
|
||||
+++ b/common/mlcustomize/firstboot.ml
|
||||
@@ -305,13 +305,19 @@ if not exist \"%%scripts_done%%\" (
|
||||
:: Pick the next script to run.
|
||||
for %%%%f in (\"%%scripts%%\"\\*.bat) do (
|
||||
echo running \"%%%%f\"
|
||||
- move \"%%%%f\" \"%%scripts_done%%\"
|
||||
- pushd \"%%scripts_done%%\"
|
||||
+ pushd \"%%scripts%%\"
|
||||
call \"%%%%~nf\"
|
||||
set elvl=!errorlevel!
|
||||
echo .... exit code !elvl!
|
||||
popd
|
||||
|
||||
+ if !elvl! NEQ 249 (
|
||||
+ echo Script succeeded, moving to scripts-done
|
||||
+ move \"%%%%f\" \"%%scripts_done%%\"
|
||||
+ ) else (
|
||||
+ echo Script failed, will retry on next boot
|
||||
+ )
|
||||
+
|
||||
:: Reboot the computer. This is necessary to free any locked
|
||||
:: files which may prevent later scripts from running.
|
||||
shutdown /r /t 0 /y
|
||||
@ -1,27 +0,0 @@
|
||||
From 90376739e05166de15a94637f64e6b2256f5d90a Mon Sep 17 00:00:00 2001
|
||||
From: Vadim Rozenfeld <vrozenfe@redhat.com>
|
||||
Date: Tue, 15 Jul 2025 18:35:16 +1000
|
||||
Subject: [PATCH] Ignore ERROR_NO_MORE_ITEMS status from PnPUtil.
|
||||
|
||||
This status indicates the target device already has a
|
||||
better or newer driver installed.
|
||||
|
||||
Signed-off-by: Vadim Rozenfeld <vrozenfe@redhat.com>
|
||||
(cherry picked from commit 523aff28975532a4fe715193c28c2ede21741392)
|
||||
---
|
||||
convert/convert_windows.ml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml
|
||||
index 8f0ff87b..2ff9bcfa 100644
|
||||
--- a/convert/convert_windows.ml
|
||||
+++ b/convert/convert_windows.ml
|
||||
@@ -431,7 +431,7 @@ let convert (g : G.guestfs) source inspect i_firmware
|
||||
for %%f in (\"%inf_dir%*.inf\") do (\n\
|
||||
echo Installing: %%~nxf.\n\
|
||||
%systemroot%\\Sysnative\\PnPutil -i -a \"%%f\"\n\
|
||||
- if !errorlevel! NEQ 0 (\n\
|
||||
+ if !errorlevel! neq 0 if !errorlevel! neq 259 (\n\
|
||||
echo Failed to install %%~nxf.\n\
|
||||
exit /b 249\n\
|
||||
) else (\n\
|
||||
@ -1,4 +1,4 @@
|
||||
From 04ee519268f9805ac0a9c54fe20e26ccb99c8550 Mon Sep 17 00:00:00 2001
|
||||
From 0a943cb304e66aba748b2d36cb2d65cd1a55180b 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
|
||||
@ -1,4 +1,4 @@
|
||||
From 4f5301bfa39c09df4ce4368abbafcb53ea139efc Mon Sep 17 00:00:00 2001
|
||||
From d0244f8ef20d18dd7c26c441f80261661d413e1f 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)
|
||||
@ -9,7 +9,7 @@ The SDL output mode is not supported in RHEL's qemu-kvm.
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/input/input_disk.ml b/input/input_disk.ml
|
||||
index 8b027fed..6dd1b0cf 100644
|
||||
index 2997efa2..00c11f80 100644
|
||||
--- a/input/input_disk.ml
|
||||
+++ b/input/input_disk.ml
|
||||
@@ -78,7 +78,7 @@ module Disk = struct
|
||||
@ -1,50 +0,0 @@
|
||||
From 4835c9c91cff55f1411a0413c1469e212124ba03 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Wed, 16 Jul 2025 13:10:01 +0100
|
||||
Subject: [PATCH] v2v: Print the version of libnbd / nbdcopy in debug output
|
||||
|
||||
We didn't previously log the version of libnbd or nbdcopy, and nbdcopy
|
||||
itself won't tell us (because we don't use the nbdcopy --verbose
|
||||
option). However this information can be useful to know. This commit
|
||||
enhances the verbose output of virt-v2v to include this.
|
||||
|
||||
With current versions of nbdcopy it will look like this:
|
||||
|
||||
info: nbdcopy version:
|
||||
nbdcopy 1.23.4
|
||||
libnbd 1.23.4
|
||||
|
||||
Note the second line is the version of the installed library, which in
|
||||
some (very unusual, and probably broken) situations might be different
|
||||
from the version of the nbdcopy binary, which is why both are logged.
|
||||
|
||||
libnbd 1.23.5 will soon enhance the output to include the downstream
|
||||
package version (such as the RPM version) which is even more useful.
|
||||
In future the output will look like:
|
||||
|
||||
info: nbdcopy version:
|
||||
nbdcopy 1.23.5 (libnbd-1.23.5-1.fc43)
|
||||
libnbd 1.23.5 (libnbd-1.23.5-1.fc43)
|
||||
|
||||
See: https://gitlab.com/nbdkit/libnbd/-/merge_requests/28
|
||||
(cherry picked from commit a8a0caf54ccaf52db70988494b6f5a397a1af105)
|
||||
---
|
||||
v2v/v2v.ml | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
|
||||
index d32993d4..c780ab1d 100644
|
||||
--- a/v2v/v2v.ml
|
||||
+++ b/v2v/v2v.ml
|
||||
@@ -469,6 +469,11 @@ read the man page virt-v2v(1).
|
||||
(* Do the copy. *)
|
||||
with_open_out (v2vdir // "copy") (fun _ -> ());
|
||||
|
||||
+ if verbose () then (
|
||||
+ eprintf "info: nbdcopy version:\n%!";
|
||||
+ ignore (Sys.command (sprintf "%s --version >&2" Config.nbdcopy))
|
||||
+ );
|
||||
+
|
||||
(* Get the list of disks and corresponding NBD URIs. *)
|
||||
let disks =
|
||||
List.combine input_disks output_disks |>
|
||||
@ -1,4 +1,4 @@
|
||||
From a3ca5d7c85f44c55bccc8b964e00e4937a54a3b4 Mon Sep 17 00:00:00 2001
|
||||
From ba4244a69a6b0aa104c5801204542ae0dcb3a104 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
|
||||
@ -1,101 +0,0 @@
|
||||
From ef40dab47ba94ca47e6a268853d415d9311aca04 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Wed, 9 Jul 2025 09:38:50 +0100
|
||||
Subject: [PATCH] vddk: Remove -io vddk-noextents option
|
||||
|
||||
Commit 191b8cf418 ("input: Add undocumented -io vddk-noextents=true
|
||||
option") added an option which could be used to insert the nbdkit
|
||||
noextents filter on top of the VDDK source. This was designed so we
|
||||
could test in production if this improved performance (which it
|
||||
didn't).
|
||||
|
||||
Since then we've spent more time investigating problems with
|
||||
QueryAllocatedBlocks and believe we have a better solution in nbdkit.
|
||||
See:
|
||||
https://gitlab.com/nbdkit/nbdkit/-/commit/5a882e74cae3dbaa09bf3b942a02f9947b12f6e5
|
||||
|
||||
Reverts: commit 191b8cf418076ae3766b134ffa96eee048c7eb9d
|
||||
---
|
||||
README | 1 -
|
||||
input/input_vddk.ml | 35 -----------------------------------
|
||||
2 files changed, 36 deletions(-)
|
||||
|
||||
diff --git a/README b/README
|
||||
index 49082a96..1cdbef15 100644
|
||||
--- a/README
|
||||
+++ b/README
|
||||
@@ -71,7 +71,6 @@ REQUIREMENTS
|
||||
+ nbdkit-blocksize-filter
|
||||
+ nbdkit-cow-filter
|
||||
+ nbdkit-multi-conn-filter
|
||||
- + nbdkit-noextents-filter
|
||||
+ nbdkit-rate-filter
|
||||
+ nbdkit-retry-filter
|
||||
|
||||
diff --git a/input/input_vddk.ml b/input/input_vddk.ml
|
||||
index 39356129..12f43729 100644
|
||||
--- a/input/input_vddk.ml
|
||||
+++ b/input/input_vddk.ml
|
||||
@@ -58,7 +58,6 @@ All other settings are optional:
|
||||
-io vddk-file=FILE Override nbdkit-vddk-plugin file= parameter
|
||||
-io vddk-libdir=LIBDIR VDDK library parent directory
|
||||
-io vddk-nfchostport=PORT VDDK nfchostport
|
||||
- -io vddk-noextents=true Avoid slow VDDK QueryAllocatedBlocks API
|
||||
-io vddk-port=PORT VDDK port
|
||||
-io vddk-snapshot=SNAPSHOT-MOREF
|
||||
VDDK snapshot moref
|
||||
@@ -79,7 +78,6 @@ information on these settings.
|
||||
"file";
|
||||
"libdir";
|
||||
"nfchostport";
|
||||
- "noextents";
|
||||
"port";
|
||||
"snapshot";
|
||||
"thumbprint";
|
||||
@@ -208,9 +206,6 @@ information on these settings.
|
||||
try Some (List.assoc "libdir" io_options) with Not_found -> None in
|
||||
let nfchostport =
|
||||
try Some (List.assoc "nfchostport" io_options) with Not_found -> None in
|
||||
- let noextents =
|
||||
- try bool_of_string (List.assoc "noextents" io_options)
|
||||
- with Not_found -> false in
|
||||
let port =
|
||||
try Some (List.assoc "port" io_options) with Not_found -> None in
|
||||
let snapshot =
|
||||
@@ -318,36 +313,6 @@ See also the virt-v2v-input-vmware(1) manual.") libNN
|
||||
*)
|
||||
Nbdkit.add_filter_if_available cmd "retry";
|
||||
|
||||
- (* VDDK's QueryAllocatedBlocks API is infamously slow. It appears
|
||||
- * to block all other requests while it is running. This API is
|
||||
- * also only called during the copy phase, not during conversion
|
||||
- * (or if it is, extremely rarely).
|
||||
- *
|
||||
- * If fstrim was successful, then trimmed blocks are stored in
|
||||
- * the COW filter (see below), and so requests for extents stop
|
||||
- * at that layer. However for areas of the disk that fstrim
|
||||
- * thinks contain data, we still have to go through to VDDK to
|
||||
- * fetch extents.
|
||||
- *
|
||||
- * We could therefore add nbdkit-noextents-filter here (below COW,
|
||||
- * above VDDK plugin) which stops extents requests from going
|
||||
- * to VDDK, which would stop QueryAllocatedBlocks ever being
|
||||
- * called. In my testing this is a moderate performance win.
|
||||
- *
|
||||
- * However ... in the case where fstrim failed, or for filesystems
|
||||
- * or partitions on the disk that we don't understand, doing this
|
||||
- * would mean that those are copied completely, as there would be
|
||||
- * no extent data (nbdcopy will still sparsify them on the target,
|
||||
- * but we'd have to copy all the bits from VMware). Because
|
||||
- * here we don't know if this is the case, be conservative and
|
||||
- * actually don't use this filter.
|
||||
- *
|
||||
- * If used, this filter should be close to the plugin and MUST
|
||||
- * be below the COW filter.
|
||||
- *)
|
||||
- if noextents then
|
||||
- Nbdkit.add_filter_if_available cmd "noextents";
|
||||
-
|
||||
(* Split very large requests to avoid out of memory errors on the
|
||||
* server. Since we're using this filter, also add minblock=512
|
||||
* although it will make no difference.
|
||||
@ -1,4 +1,4 @@
|
||||
From 867666d94ada861146fcd0ae6643c0d69c2e4513 Mon Sep 17 00:00:00 2001
|
||||
From a3c45a46b4011ec3c363cac6b66897fa11ef95de 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: tests: Remove btrfs test
|
||||
@ -9,7 +9,7 @@ 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 3a8bab3c..f9c748ed 100644
|
||||
index 26e41cc5..00d6eed5 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -64,7 +64,6 @@ TESTS = \
|
||||
@ -1,114 +0,0 @@
|
||||
From cdb7ffa3a378a1832c92f40aef9e7dd6d8d093ff Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Wed, 9 Jul 2025 09:48:35 +0100
|
||||
Subject: [PATCH] curl, ssh, vddk, file: Add nbdkit-count-filter
|
||||
|
||||
nbdkit-count-filter, added in nbdkit 1.45.1, prints a debug message
|
||||
which just records the number of bytes read, written, trimmed or
|
||||
zeroed. This is useful for determining how many bytes were actually
|
||||
copied over the wire or written to disk, and that's a common question
|
||||
that we currently have no easy way to answer. For more details about
|
||||
this filter see:
|
||||
https://gitlab.com/nbdkit/nbdkit/-/commit/3512c3ce9308b4d940119ac6cc87f1baa9afb655
|
||||
https://libguestfs.org/nbdkit-count-filter.1.html
|
||||
|
||||
Use this filter (if available) unconditionally for all inputs that
|
||||
read over the network, and for the common file-based outputs
|
||||
(specifically -o kubevirt).
|
||||
|
||||
It is only enabled if we're producing debug output (ie. conversion
|
||||
logs).
|
||||
---
|
||||
README | 1 +
|
||||
input/input_vddk.ml | 7 +++++++
|
||||
input/nbdkit_curl.ml | 7 +++++++
|
||||
input/nbdkit_ssh.ml | 7 +++++++
|
||||
output/output.ml | 2 ++
|
||||
5 files changed, 24 insertions(+)
|
||||
|
||||
diff --git a/README b/README
|
||||
index 1cdbef15..407869b4 100644
|
||||
--- a/README
|
||||
+++ b/README
|
||||
@@ -69,6 +69,7 @@ REQUIREMENTS
|
||||
+ nbdkit-vddk-plugin
|
||||
|
||||
+ nbdkit-blocksize-filter
|
||||
+ + nbdkit-count-filter
|
||||
+ nbdkit-cow-filter
|
||||
+ nbdkit-multi-conn-filter
|
||||
+ nbdkit-rate-filter
|
||||
diff --git a/input/input_vddk.ml b/input/input_vddk.ml
|
||||
index 12f43729..e88befa2 100644
|
||||
--- a/input/input_vddk.ml
|
||||
+++ b/input/input_vddk.ml
|
||||
@@ -313,6 +313,13 @@ See also the virt-v2v-input-vmware(1) manual.") libNN
|
||||
*)
|
||||
Nbdkit.add_filter_if_available cmd "retry";
|
||||
|
||||
+ (* Add the count filter if available, to report bytes read.
|
||||
+ * Since it writes a debug message, only do this if verbose.
|
||||
+ * This should be close to the plugin so we're reporting what
|
||||
+ * is read over the wire.
|
||||
+ *)
|
||||
+ if verbose () then Nbdkit.add_filter_if_available cmd "count";
|
||||
+
|
||||
(* Split very large requests to avoid out of memory errors on the
|
||||
* server. Since we're using this filter, also add minblock=512
|
||||
* although it will make no difference.
|
||||
diff --git a/input/nbdkit_curl.ml b/input/nbdkit_curl.ml
|
||||
index d8c832b8..f8a0213e 100644
|
||||
--- a/input/nbdkit_curl.ml
|
||||
+++ b/input/nbdkit_curl.ml
|
||||
@@ -58,6 +58,13 @@ let create_curl ?bandwidth ?cookie_script ?cookie_script_renew ?cor
|
||||
*)
|
||||
Nbdkit.add_filter_if_available cmd "retry";
|
||||
|
||||
+ (* Add the count filter if available, to report bytes read.
|
||||
+ * Since it writes a debug message, only do this if verbose.
|
||||
+ * This should be close to the plugin so we're reporting what
|
||||
+ * is read over the wire.
|
||||
+ *)
|
||||
+ if verbose () then Nbdkit.add_filter_if_available cmd "count";
|
||||
+
|
||||
(* IMPORTANT! Add the COW filter. It must be furthest away
|
||||
* except for the rate filter.
|
||||
*)
|
||||
diff --git a/input/nbdkit_ssh.ml b/input/nbdkit_ssh.ml
|
||||
index e6d99ede..4e4c918f 100644
|
||||
--- a/input/nbdkit_ssh.ml
|
||||
+++ b/input/nbdkit_ssh.ml
|
||||
@@ -54,6 +54,13 @@ let create_ssh ?bandwidth ?cor ?(retry=true)
|
||||
if retry then
|
||||
Nbdkit.add_filter_if_available cmd "retry";
|
||||
|
||||
+ (* Add the count filter if available, to report bytes read.
|
||||
+ * Since it writes a debug message, only do this if verbose.
|
||||
+ * This should be close to the plugin so we're reporting what
|
||||
+ * is read over the wire.
|
||||
+ *)
|
||||
+ if verbose () then Nbdkit.add_filter_if_available cmd "count";
|
||||
+
|
||||
(* IMPORTANT! Add the COW filter. It must be furthest away
|
||||
* except for the rate filter.
|
||||
*)
|
||||
diff --git a/output/output.ml b/output/output.ml
|
||||
index b3629372..65325538 100644
|
||||
--- a/output/output.ml
|
||||
+++ b/output/output.ml
|
||||
@@ -98,6 +98,7 @@ let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false)
|
||||
let cmd = Nbdkit.create "file" in
|
||||
Nbdkit.add_arg cmd "file" filename;
|
||||
Nbdkit.add_arg cmd "cache" "none";
|
||||
+ if verbose () then Nbdkit.add_filter_if_available cmd "count";
|
||||
let _, pid = Nbdkit.run_unix socket cmd in
|
||||
pid
|
||||
|
||||
@@ -197,6 +198,7 @@ let create_local_output_disks dir
|
||||
let cmd = Nbdkit.create "file" in
|
||||
Nbdkit.add_arg cmd "dir" output_storage;
|
||||
Nbdkit.add_arg cmd "cache" "none";
|
||||
+ if verbose () then Nbdkit.add_filter_if_available cmd "count";
|
||||
let _, pid = Nbdkit.run_unix socket cmd in
|
||||
On_exit.kill pid;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
From 40333a5f19e6442d0765e11c5b7f8cc4adb8b090 Mon Sep 17 00:00:00 2001
|
||||
From f16be60b633c5a9ca47e51c31a42755c4747ce59 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 9 Jul 2024 11:30:09 +0100
|
||||
Subject: [PATCH] RHEL: Add warning about virt-v2v-in-place not being supported
|
||||
@ -10,7 +10,7 @@ Fixes: https://issues.redhat.com/browse/RHEL-40903
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/docs/virt-v2v-in-place.pod b/docs/virt-v2v-in-place.pod
|
||||
index 3d0d1b28..9714bbac 100644
|
||||
index 69d2092e..7c0a4d90 100644
|
||||
--- a/docs/virt-v2v-in-place.pod
|
||||
+++ b/docs/virt-v2v-in-place.pod
|
||||
@@ -16,6 +16,10 @@ virt-v2v-in-place - Convert a guest to use KVM in-place
|
||||
@ -25,10 +25,10 @@ index 3d0d1b28..9714bbac 100644
|
||||
run on KVM. It does this conversion in place, modifying the original
|
||||
disk.
|
||||
diff --git a/in-place/in_place.ml b/in-place/in_place.ml
|
||||
index a91ee39d..dba0772c 100644
|
||||
index 7e490867..6c2790af 100644
|
||||
--- a/in-place/in_place.ml
|
||||
+++ b/in-place/in_place.ml
|
||||
@@ -211,6 +211,9 @@ read the man page virt-v2v-in-place(1).
|
||||
@@ -229,6 +229,9 @@ read the man page virt-v2v-in-place(1).
|
||||
let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ~machine_readable:true usage_msg in
|
||||
Getopt.parse opthandle.getopt;
|
||||
|
||||
@ -1,233 +0,0 @@
|
||||
From 71d68738920971f0216cfe77f6873a518369045f Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 8 Jul 2025 10:40:48 +0100
|
||||
Subject: [PATCH] -o kubevirt: Add -oo disk to allow disk names to be
|
||||
overridden
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-101599
|
||||
---
|
||||
docs/virt-v2v.pod | 15 +++++++--
|
||||
output/output_kubevirt.ml | 58 ++++++++++++++++++++++++++------
|
||||
tests/Makefile.am | 2 ++
|
||||
tests/test-o-kubevirt-oo-disk.sh | 52 ++++++++++++++++++++++++++++
|
||||
4 files changed, 115 insertions(+), 12 deletions(-)
|
||||
create mode 100755 tests/test-o-kubevirt-oo-disk.sh
|
||||
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index 3eefe404..5020d179 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -466,8 +466,9 @@ Set the output method to I<kubevirt>. B<Note the way this mode works
|
||||
is experimental and will change in future.>
|
||||
|
||||
In this mode, the converted guest is written to a local directory
|
||||
-specified by I<-os /dir> (the directory must exist). The converted
|
||||
-guest’s disks are written to:
|
||||
+specified by I<-os /dir> (the directory must exist).
|
||||
+
|
||||
+By default the converted guest’s disks are written to:
|
||||
|
||||
/dir/name-sda
|
||||
/dir/name-sdb
|
||||
@@ -479,6 +480,8 @@ and guest metadata is created in the associated YAML file:
|
||||
|
||||
where C<name> is the guest name.
|
||||
|
||||
+You can override the disk paths by using I<-oo disk=...> option(s).
|
||||
+
|
||||
=item B<-o> B<libvirt>
|
||||
|
||||
Set the output method to I<libvirt>. This is the default.
|
||||
@@ -600,6 +603,14 @@ For outputs which support qcow2 format (I<-of qcow2>), this writes a
|
||||
compressed qcow2 file. It is the equivalent to the I<-c> option of
|
||||
L<qemu-img(1)>.
|
||||
|
||||
+=item B<-oo disk=>DISK
|
||||
+
|
||||
+For I<-o kubevirt> this overrides the path to each output disk,
|
||||
+instead of using the default which is C<DISK-sda> etc in the output
|
||||
+storage (I<-os>) path. If you use this option at all, you must repeat
|
||||
+it once for each guest disk. If you don't use it, then the default
|
||||
+method of putting disks in the output storage path is used.
|
||||
+
|
||||
=item B<-oo guest-id=>C<ID>
|
||||
|
||||
For I<-o openstack> (L<virt-v2v-output-openstack(1)>) only, set a guest ID
|
||||
diff --git a/output/output_kubevirt.ml b/output/output_kubevirt.ml
|
||||
index 76ecd39d..eae9c049 100644
|
||||
--- a/output/output_kubevirt.ml
|
||||
+++ b/output/output_kubevirt.ml
|
||||
@@ -35,7 +35,8 @@ 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 = bool * output_allocation * string * string * string
|
||||
+ type poptions =
|
||||
+ bool * string list option * output_allocation * string * string * string
|
||||
|
||||
type t = unit
|
||||
|
||||
@@ -49,15 +50,18 @@ module Kubevirt = struct
|
||||
printf (f_"Output options that can be used with -o kubevirt:
|
||||
|
||||
-oo compressed Compress the output file (used only with -of qcow2)
|
||||
+ -oo disk=disk1 Specify filename of output disk (if used, must be
|
||||
+ given once for each disk, else -os path is used)
|
||||
")
|
||||
|
||||
-
|
||||
let parse_options options source =
|
||||
let compressed = ref false in
|
||||
+ let disks = ref [] in
|
||||
List.iter (
|
||||
function
|
||||
| "compressed", "" -> compressed := true
|
||||
| "compressed", v -> compressed := bool_of_string v
|
||||
+ | "disk", v -> List.push_back disks v
|
||||
| k, _ ->
|
||||
error (f_"-o kubevirt: unknown output option ‘-oo %s’") k
|
||||
) options.output_options;
|
||||
@@ -84,23 +88,57 @@ module Kubevirt = struct
|
||||
end with an alphanumeric character. Rerun virt-v2v with \
|
||||
the '-on name' option to rename it.");
|
||||
|
||||
- !compressed, options.output_alloc, options.output_format,
|
||||
+ let disks = match !disks with [] -> None | disks -> Some disks in
|
||||
+
|
||||
+ !compressed, disks,
|
||||
+ options.output_alloc, options.output_format,
|
||||
output_name, output_storage
|
||||
|
||||
let setup dir options source input_disks =
|
||||
- let compressed, output_alloc, output_format, output_name, output_storage =
|
||||
- options in
|
||||
+ let compressed, disks,
|
||||
+ output_alloc, output_format, output_name, output_storage = options in
|
||||
|
||||
let uris =
|
||||
- create_local_output_disks dir ~compressed output_alloc output_format
|
||||
- output_name output_storage input_disks in
|
||||
+ match disks with
|
||||
+ | None ->
|
||||
+ create_local_output_disks dir ~compressed
|
||||
+ output_alloc output_format output_name output_storage input_disks
|
||||
+ | Some disks ->
|
||||
+ (* -oo disk specified, so create the disks by hand. *)
|
||||
+ let nr_input_disks = List.length input_disks
|
||||
+ and nr_output_disks = List.length disks in
|
||||
+ if nr_input_disks <> nr_output_disks then
|
||||
+ error (f_"incorrect number of '-oo disk' parameters. This guest \
|
||||
+ has %d disks, but the parameter was used %d times.")
|
||||
+ nr_input_disks nr_output_disks;
|
||||
+
|
||||
+ let input_sizes = get_disk_sizes input_disks in
|
||||
+ List.mapi (
|
||||
+ fun i (disk, size) ->
|
||||
+ let socket = sprintf "%s/out%d" dir i in
|
||||
+ On_exit.unlink socket;
|
||||
+
|
||||
+ output_to_local_file ~compressed
|
||||
+ output_alloc output_format disk size socket;
|
||||
+
|
||||
+ NBD_URI.Unix (socket, None)
|
||||
+ ) (List.combine disks input_sizes)
|
||||
+ in
|
||||
+
|
||||
(), uris
|
||||
|
||||
let finalize dir options () output_disks source inspect target_meta =
|
||||
- let _, output_alloc, output_format, output_name, output_storage = options in
|
||||
+ let _, disks,
|
||||
+ 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)
|
||||
+ (* This function will return the disk path for the i'th disk. *)
|
||||
+ let disk_path =
|
||||
+ match disks with
|
||||
+ | None -> Output.disk_path output_storage output_name
|
||||
+ | Some disks -> List.nth disks
|
||||
+ in
|
||||
+
|
||||
+ let doc = create_kubevirt_yaml source inspect target_meta disk_path
|
||||
output_format output_name in
|
||||
|
||||
let file = output_storage // output_name ^ ".yaml" in
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||
index 62237092..3a8bab3c 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -95,6 +95,7 @@ TESTS = \
|
||||
test-networks-and-bridges.sh \
|
||||
test-o-glance.sh \
|
||||
test-o-kubevirt-fedora.sh \
|
||||
+ test-o-kubevirt-oo-disk.sh \
|
||||
test-o-kubevirt-windows.sh \
|
||||
test-o-libvirt.sh \
|
||||
test-o-local-qcow2-compressed.sh \
|
||||
@@ -288,6 +289,7 @@ EXTRA_DIST += \
|
||||
test-o-glance.sh \
|
||||
test-o-kubevirt-fedora.sh \
|
||||
test-o-kubevirt-fedora.yaml.expected \
|
||||
+ test-o-kubevirt-oo-disk.sh \
|
||||
test-o-kubevirt-windows.sh \
|
||||
test-o-kubevirt-windows.yaml.expected \
|
||||
test-o-libvirt.sh \
|
||||
diff --git a/tests/test-o-kubevirt-oo-disk.sh b/tests/test-o-kubevirt-oo-disk.sh
|
||||
new file mode 100755
|
||||
index 00000000..e1e6fd61
|
||||
--- /dev/null
|
||||
+++ b/tests/test-o-kubevirt-oo-disk.sh
|
||||
@@ -0,0 +1,52 @@
|
||||
+#!/bin/bash -
|
||||
+# libguestfs virt-v2v test script
|
||||
+# Copyright (C) 2018-2025 Red Hat Inc.
|
||||
+#
|
||||
+# This program is free software; you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 2 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+#
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program; if not, write to the Free Software
|
||||
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
+
|
||||
+# Test -o kubevirt + -oo disk option.
|
||||
+
|
||||
+set -e
|
||||
+set -x
|
||||
+
|
||||
+source ./functions.sh
|
||||
+set -e
|
||||
+set -x
|
||||
+
|
||||
+skip_if_skipped
|
||||
+requires test -f ../test-data/phony-guests/fedora.img
|
||||
+
|
||||
+libvirt_uri="test://$abs_top_builddir/test-data/phony-guests/guests.xml"
|
||||
+fedora=../test-data/phony-guests/fedora.img
|
||||
+
|
||||
+d=test-o-kubevirt-oo-disk.d
|
||||
+rm -rf $d
|
||||
+cleanup_fn rm -r $d
|
||||
+mkdir $d
|
||||
+
|
||||
+# Run virt-v2v -o kubevirt.
|
||||
+$VG virt-v2v --debug-gc \
|
||||
+ -i libvirt -ic "$libvirt_uri" fedora \
|
||||
+ -o kubevirt -oo disk=$d/disk.img -os $d
|
||||
+
|
||||
+ls -l $d
|
||||
+
|
||||
+cat $d/fedora.yaml
|
||||
+
|
||||
+# Check the disk was created.
|
||||
+test -f $d/disk.img
|
||||
+
|
||||
+# Check the default path was _not_ created.
|
||||
+! test -f $d/fedora-sda
|
||||
@ -1,4 +1,4 @@
|
||||
From 687965a4797104fe20f8dc6eaab93d11a6b15775 Mon Sep 17 00:00:00 2001
|
||||
From 6954c74fcd5c5da71e20ec7f4613bcc9c7e3f934 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Wed, 13 Aug 2025 18:03:41 +0100
|
||||
Subject: [PATCH] RHEL 10: m4: Depend on libguestfs 1.56.1-2.el10 for
|
||||
@ -1,141 +0,0 @@
|
||||
From ab8623d45801d50e0d9450033ba74a31fdb872fc Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 8 Jul 2025 11:08:08 +0100
|
||||
Subject: [PATCH] output: Add optional ?create parameter
|
||||
|
||||
This parameter of Output.create_local_output_disks and
|
||||
Output.output_to_local_file allows the default creation of disks to be
|
||||
skipped. It defaults to true (ie. create them) which is the normal
|
||||
behaviour.
|
||||
|
||||
This allows output modes to implement the '-oo create=false' option,
|
||||
although none do so far.
|
||||
---
|
||||
output/output.ml | 61 ++++++++++++++++++++++++++---------------------
|
||||
output/output.mli | 5 +++-
|
||||
2 files changed, 38 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/output/output.ml b/output/output.ml
|
||||
index 65325538..15cb50db 100644
|
||||
--- a/output/output.ml
|
||||
+++ b/output/output.ml
|
||||
@@ -66,7 +66,9 @@ let error_if_disk_count_gt input_disks n =
|
||||
|
||||
type on_exit_kill = Kill | KillAndWait
|
||||
|
||||
-let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false)
|
||||
+let output_to_local_file ?(changeuid = fun f -> f ())
|
||||
+ ?(compressed = false)
|
||||
+ ?(create = true)
|
||||
?(on_exit_kill = Kill)
|
||||
output_alloc output_format filename size socket =
|
||||
(* Check nbdkit is installed and has the required plugin. *)
|
||||
@@ -83,13 +85,15 @@ let output_to_local_file ?(changeuid = fun f -> f ()) ?(compressed = false)
|
||||
is a local qcow2-format file, i.e. ‘-of qcow2’")
|
||||
);
|
||||
|
||||
- let g = open_guestfs () in
|
||||
- let preallocation =
|
||||
- match output_alloc with
|
||||
- | Preallocated -> Some "full"
|
||||
- | Sparse -> None in
|
||||
- changeuid (
|
||||
- fun () -> g#disk_create ?preallocation filename output_format size
|
||||
+ if create then (
|
||||
+ let g = open_guestfs () in
|
||||
+ let preallocation =
|
||||
+ match output_alloc with
|
||||
+ | Preallocated -> Some "full"
|
||||
+ | Sparse -> None in
|
||||
+ changeuid (
|
||||
+ fun () -> g#disk_create ?preallocation filename output_format size
|
||||
+ )
|
||||
);
|
||||
|
||||
let pid =
|
||||
@@ -151,6 +155,7 @@ let disk_path os name i =
|
||||
|
||||
let create_local_output_disks dir
|
||||
?(compressed = false)
|
||||
+ ?(create = true)
|
||||
output_alloc output_format output_name output_storage
|
||||
input_disks =
|
||||
let input_sizes = get_disk_sizes input_disks in
|
||||
@@ -171,25 +176,27 @@ let create_local_output_disks dir
|
||||
error (f_"nbdkit-file-plugin is not installed or not working");
|
||||
|
||||
(* We still have to create the output disks. *)
|
||||
- let g = open_guestfs () in
|
||||
- let preallocation =
|
||||
- match output_alloc with
|
||||
- | Preallocated -> Some "full"
|
||||
- | Sparse -> None in
|
||||
- List.iter (
|
||||
- fun (size, filename) ->
|
||||
- g#disk_create ?preallocation filename output_format size;
|
||||
+ if create then (
|
||||
+ let g = open_guestfs () in
|
||||
+ let preallocation =
|
||||
+ match output_alloc with
|
||||
+ | Preallocated -> Some "full"
|
||||
+ | Sparse -> None in
|
||||
+ List.iter (
|
||||
+ fun (size, filename) ->
|
||||
+ g#disk_create ?preallocation filename output_format size;
|
||||
|
||||
- (* We've had issues with there not being enough space to write
|
||||
- * the disk image. Run df on the output filename. df follows
|
||||
- * symlinks and reports the space on the filesystem. But don't
|
||||
- * fail here if df cannot be run.
|
||||
- *)
|
||||
- if verbose () then (
|
||||
- let cmd = sprintf "df %s 1>&2" (quote filename) in
|
||||
- ignore (Sys.command cmd)
|
||||
- )
|
||||
- ) (List.combine input_sizes output_disk_names);
|
||||
+ (* We've had issues with there not being enough space to write
|
||||
+ * the disk image. Run df on the output filename. df follows
|
||||
+ * symlinks and reports the space on the filesystem. But don't
|
||||
+ * fail here if df cannot be run.
|
||||
+ *)
|
||||
+ if verbose () then (
|
||||
+ let cmd = sprintf "df %s 1>&2" (quote filename) in
|
||||
+ ignore (Sys.command cmd)
|
||||
+ )
|
||||
+ ) (List.combine input_sizes output_disk_names)
|
||||
+ );
|
||||
|
||||
let socket = sprintf "%s/out0" dir in
|
||||
On_exit.unlink socket;
|
||||
@@ -220,7 +227,7 @@ let create_local_output_disks dir
|
||||
On_exit.unlink socket;
|
||||
|
||||
(* Create the actual output disk. *)
|
||||
- output_to_local_file ~compressed output_alloc output_format
|
||||
+ output_to_local_file ~compressed ~create output_alloc output_format
|
||||
outdisk size socket;
|
||||
|
||||
NBD_URI.Unix (socket, None)
|
||||
diff --git a/output/output.mli b/output/output.mli
|
||||
index 51bdde06..63a1c3f6 100644
|
||||
--- a/output/output.mli
|
||||
+++ b/output/output.mli
|
||||
@@ -84,6 +84,7 @@ val error_if_disk_count_gt : NBD_URI.t list -> int -> unit
|
||||
|
||||
val create_local_output_disks : string ->
|
||||
?compressed:bool ->
|
||||
+ ?create:bool ->
|
||||
Types.output_allocation ->
|
||||
string -> string -> string ->
|
||||
NBD_URI.t list ->
|
||||
@@ -98,7 +99,9 @@ val create_local_output_disks : string ->
|
||||
type on_exit_kill = Kill | KillAndWait
|
||||
|
||||
val output_to_local_file : ?changeuid:((unit -> unit) -> unit) ->
|
||||
- ?compressed:bool -> ?on_exit_kill:on_exit_kill ->
|
||||
+ ?compressed:bool ->
|
||||
+ ?create:bool ->
|
||||
+ ?on_exit_kill:on_exit_kill ->
|
||||
Types.output_allocation ->
|
||||
string -> string -> int64 -> string ->
|
||||
unit
|
||||
@ -1,119 +0,0 @@
|
||||
From b0ac37f6c9f6ab8da44e631e9cb6af5649548634 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 8 Jul 2025 11:15:56 +0100
|
||||
Subject: [PATCH] -o kubevirt: Add -oo create=false to avoid disk creation
|
||||
|
||||
Indicate that an external process will create the disks, so normal
|
||||
creation of disks by virt-v2v should be skipped.
|
||||
|
||||
Testing
|
||||
-------
|
||||
|
||||
I couldn't think of a way to add a test this since g#disk_create
|
||||
(implemented in libguestfs.git:lib/create.c) will open(O_TRUNC) +
|
||||
truncate(2) the existing disk, so the inode will remain the same.
|
||||
Instead I tested it by hand by not creating the disk and observing the
|
||||
error from nbdkit:
|
||||
|
||||
nbdkit: error: realpath: /var/tmp/disk.img: No such file or directory
|
||||
virt-v2v: error: nbdkit did not start up. There may be errors printed by
|
||||
nbdkit above.
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-101599
|
||||
---
|
||||
docs/virt-v2v.pod | 5 +++++
|
||||
output/output_kubevirt.ml | 17 +++++++++++------
|
||||
2 files changed, 16 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index 5020d179..e228fb33 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -603,6 +603,11 @@ For outputs which support qcow2 format (I<-of qcow2>), this writes a
|
||||
compressed qcow2 file. It is the equivalent to the I<-c> option of
|
||||
L<qemu-img(1)>.
|
||||
|
||||
+=item B<-oo create=false>
|
||||
+
|
||||
+For I<-o kubevirt>, indicate that another management process will
|
||||
+create the output disks, so do not (re-)create them in virt-v2v.
|
||||
+
|
||||
=item B<-oo disk=>DISK
|
||||
|
||||
For I<-o kubevirt> this overrides the path to each output disk,
|
||||
diff --git a/output/output_kubevirt.ml b/output/output_kubevirt.ml
|
||||
index eae9c049..8a5ab56d 100644
|
||||
--- a/output/output_kubevirt.ml
|
||||
+++ b/output/output_kubevirt.ml
|
||||
@@ -36,7 +36,8 @@ let rfc1123_re =
|
||||
|
||||
module Kubevirt = struct
|
||||
type poptions =
|
||||
- bool * string list option * output_allocation * string * string * string
|
||||
+ bool * bool * string list option *
|
||||
+ output_allocation * string * string * string
|
||||
|
||||
type t = unit
|
||||
|
||||
@@ -50,17 +51,21 @@ module Kubevirt = struct
|
||||
printf (f_"Output options that can be used with -o kubevirt:
|
||||
|
||||
-oo compressed Compress the output file (used only with -of qcow2)
|
||||
+ -oo create=false Do not create the output disks
|
||||
-oo disk=disk1 Specify filename of output disk (if used, must be
|
||||
given once for each disk, else -os path is used)
|
||||
")
|
||||
|
||||
let parse_options options source =
|
||||
let compressed = ref false in
|
||||
+ let create = ref true in
|
||||
let disks = ref [] in
|
||||
List.iter (
|
||||
function
|
||||
| "compressed", "" -> compressed := true
|
||||
| "compressed", v -> compressed := bool_of_string v
|
||||
+ | "create", "" -> create := true
|
||||
+ | "create", v -> create := bool_of_string v
|
||||
| "disk", v -> List.push_back disks v
|
||||
| k, _ ->
|
||||
error (f_"-o kubevirt: unknown output option ‘-oo %s’") k
|
||||
@@ -90,18 +95,18 @@ module Kubevirt = struct
|
||||
|
||||
let disks = match !disks with [] -> None | disks -> Some disks in
|
||||
|
||||
- !compressed, disks,
|
||||
+ !compressed, !create, disks,
|
||||
options.output_alloc, options.output_format,
|
||||
output_name, output_storage
|
||||
|
||||
let setup dir options source input_disks =
|
||||
- let compressed, disks,
|
||||
+ let compressed, create, disks,
|
||||
output_alloc, output_format, output_name, output_storage = options in
|
||||
|
||||
let uris =
|
||||
match disks with
|
||||
| None ->
|
||||
- create_local_output_disks dir ~compressed
|
||||
+ create_local_output_disks dir ~compressed ~create
|
||||
output_alloc output_format output_name output_storage input_disks
|
||||
| Some disks ->
|
||||
(* -oo disk specified, so create the disks by hand. *)
|
||||
@@ -118,7 +123,7 @@ module Kubevirt = struct
|
||||
let socket = sprintf "%s/out%d" dir i in
|
||||
On_exit.unlink socket;
|
||||
|
||||
- output_to_local_file ~compressed
|
||||
+ output_to_local_file ~compressed ~create
|
||||
output_alloc output_format disk size socket;
|
||||
|
||||
NBD_URI.Unix (socket, None)
|
||||
@@ -128,7 +133,7 @@ module Kubevirt = struct
|
||||
(), uris
|
||||
|
||||
let finalize dir options () output_disks source inspect target_meta =
|
||||
- let _, disks,
|
||||
+ let _, _, disks,
|
||||
output_alloc, output_format, output_name, output_storage = options in
|
||||
|
||||
(* This function will return the disk path for the i'th disk. *)
|
||||
@ -1,543 +0,0 @@
|
||||
From ef4fb3f73251ee72eb2c2c2e1f20a4392dc8a299 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 8 Jul 2024 09:35:54 +0100
|
||||
Subject: [PATCH] RHEL: Remove input from Xen
|
||||
|
||||
Originally this bug was to remove input from RHEL 5 Xen only. This
|
||||
change actually removes all conversions from Xen as in RHEL 9 we only
|
||||
supported RHEL 5 Xen.
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-37687
|
||||
---
|
||||
docs/Makefile.am | 14 ----
|
||||
docs/virt-v2v-input-xen.pod | 154 ------------------------------------
|
||||
docs/virt-v2v.pod | 50 ++----------
|
||||
input/Makefile.am | 2 -
|
||||
input/input_xen_ssh.ml | 136 -------------------------------
|
||||
input/input_xen_ssh.mli | 21 -----
|
||||
input/select_input.ml | 4 -
|
||||
v2v/v2v.ml | 1 -
|
||||
8 files changed, 5 insertions(+), 377 deletions(-)
|
||||
delete mode 100644 docs/virt-v2v-input-xen.pod
|
||||
delete mode 100644 input/input_xen_ssh.ml
|
||||
delete mode 100644 input/input_xen_ssh.mli
|
||||
|
||||
diff --git a/docs/Makefile.am b/docs/Makefile.am
|
||||
index 14b0b074..aa899304 100644
|
||||
--- a/docs/Makefile.am
|
||||
+++ b/docs/Makefile.am
|
||||
@@ -23,7 +23,6 @@ EXTRA_DIST = \
|
||||
virt-v2v-hacking.pod \
|
||||
virt-v2v-in-place.pod \
|
||||
virt-v2v-input-vmware.pod \
|
||||
- virt-v2v-input-xen.pod \
|
||||
virt-v2v-inspector.pod \
|
||||
virt-v2v-open.pod \
|
||||
virt-v2v-output-local.pod \
|
||||
@@ -45,7 +44,6 @@ man_MANS = \
|
||||
virt-v2v-hacking.1 \
|
||||
virt-v2v-in-place.1 \
|
||||
virt-v2v-input-vmware.1 \
|
||||
- virt-v2v-input-xen.1 \
|
||||
virt-v2v-inspector.1 \
|
||||
virt-v2v-open.1 \
|
||||
virt-v2v-output-local.1 \
|
||||
@@ -64,7 +62,6 @@ noinst_DATA = \
|
||||
$(top_builddir)/website/virt-v2v-hacking.1.html \
|
||||
$(top_builddir)/website/virt-v2v-in-place.1.html \
|
||||
$(top_builddir)/website/virt-v2v-input-vmware.1.html \
|
||||
- $(top_builddir)/website/virt-v2v-input-xen.1.html \
|
||||
$(top_builddir)/website/virt-v2v-inspector.1.html \
|
||||
$(top_builddir)/website/virt-v2v-open.1.html \
|
||||
$(top_builddir)/website/virt-v2v-output-local.1.html \
|
||||
@@ -125,17 +122,6 @@ stamp-virt-v2v-input-vmware.pod: virt-v2v-input-vmware.pod
|
||||
$<
|
||||
touch $@
|
||||
|
||||
-virt-v2v-input-xen.1 $(top_builddir)/website/virt-v2v-input-xen.1.html: stamp-virt-v2v-input-xen.pod
|
||||
-
|
||||
-stamp-virt-v2v-input-xen.pod: virt-v2v-input-xen.pod
|
||||
- $(PODWRAPPER) \
|
||||
- --man virt-v2v-input-xen.1 \
|
||||
- --html $(top_builddir)/website/virt-v2v-input-xen.1.html \
|
||||
- --license GPLv2+ \
|
||||
- --warning safe \
|
||||
- $<
|
||||
- touch $@
|
||||
-
|
||||
virt-v2v-inspector.1 $(top_builddir)/website/virt-v2v-inspector.1.html: stamp-virt-v2v-inspector.pod
|
||||
|
||||
stamp-virt-v2v-inspector.pod: virt-v2v-inspector.pod
|
||||
diff --git a/docs/virt-v2v-input-xen.pod b/docs/virt-v2v-input-xen.pod
|
||||
deleted file mode 100644
|
||||
index 0417e89f..00000000
|
||||
--- a/docs/virt-v2v-input-xen.pod
|
||||
+++ /dev/null
|
||||
@@ -1,154 +0,0 @@
|
||||
-=head1 NAME
|
||||
-
|
||||
-virt-v2v-input-xen - Using virt-v2v to convert guests from Xen
|
||||
-
|
||||
-=head1 SYNOPSIS
|
||||
-
|
||||
- virt-v2v -ic 'xen+ssh://root@xen.example.com'
|
||||
- -ip passwordfile
|
||||
- GUEST_NAME [-o* options]
|
||||
-
|
||||
-=head1 DESCRIPTION
|
||||
-
|
||||
-This page documents how to use L<virt-v2v(1)> to convert guests from
|
||||
-RHEL 5 Xen, or SLES and OpenSUSE Xen hosts.
|
||||
-
|
||||
-=head1 INPUT FROM XEN
|
||||
-
|
||||
-=head2 SSH authentication
|
||||
-
|
||||
-You can use SSH password authentication, by supplying the name of a
|
||||
-file containing the password to the I<-ip> option (note this option
|
||||
-does I<not> take the password directly). You may need to adjust
|
||||
-F</etc/ssh/sshd_config> on the Xen server to set
|
||||
-C<PasswordAuthentication yes>.
|
||||
-
|
||||
-If you are not using password authentication, an alternative is to use
|
||||
-ssh-agent, and add your ssh public key to
|
||||
-F</root/.ssh/authorized_keys> (on the Xen host). After doing this,
|
||||
-you should check that passwordless access works from the virt-v2v
|
||||
-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>:
|
||||
-
|
||||
- Host xen.example.com
|
||||
- KexAlgorithms +diffie-hellman-group14-sha1
|
||||
- MACs +hmac-sha1
|
||||
- HostKeyAlgorithms +ssh-rsa
|
||||
- PubkeyAcceptedKeyTypes +ssh-rsa
|
||||
- PubkeyAcceptedAlgorithms +ssh-rsa
|
||||
-
|
||||
-(C<PubkeyAcceptedKeyTypes> and C<PubkeyAcceptedAlgorithms> have
|
||||
-identical meaning; the former is the old option name, the latter is the
|
||||
-new one. Virt-v2v uses both C<libssh> and C<ssh> when converting a guest
|
||||
-from Xen, and on some operating systems, C<libssh> and C<ssh> may not
|
||||
-both accept the same option variant.)
|
||||
-
|
||||
-When connecting to RHEL 5 sshd from RHEL 9, the SHA1 algorithm's use in
|
||||
-signatures has to be re-enabled at the OpenSSL level, in addition to the
|
||||
-above SSH configuration. Create a file called F<$HOME/openssl-sha1.cnf>
|
||||
-with the following contents:
|
||||
-
|
||||
- .include /etc/ssl/openssl.cnf
|
||||
- [openssl_init]
|
||||
- alg_section = evp_properties
|
||||
- [evp_properties]
|
||||
- rh-allow-sha1-signatures = yes
|
||||
-
|
||||
-and export the following variable into the environment of the
|
||||
-C<virt-v2v> process:
|
||||
-
|
||||
- OPENSSL_CONF=$HOME/openssl-sha1.cnf
|
||||
-
|
||||
-Note that the C<OPENSSL_CONF> environment variable will only take effect
|
||||
-if the libvirt client library used by virt-v2v is at least version
|
||||
-8.6.0.
|
||||
-
|
||||
-=head2 Test libvirt connection to remote Xen host
|
||||
-
|
||||
-Use the L<virsh(1)> command to list the guests on the remote Xen host:
|
||||
-
|
||||
- $ virsh -c xen+ssh://root@xen.example.com list --all
|
||||
- Id Name State
|
||||
- ----------------------------------------------------
|
||||
- 0 Domain-0 running
|
||||
- - rhel49-x86_64-pv shut off
|
||||
-
|
||||
-You should also try dumping the metadata from any guest on your
|
||||
-server, like this:
|
||||
-
|
||||
- $ virsh -c xen+ssh://root@xen.example.com dumpxml rhel49-x86_64-pv
|
||||
- <domain type='xen'>
|
||||
- <name>rhel49-x86_64-pv</name>
|
||||
- [...]
|
||||
- </domain>
|
||||
-
|
||||
-B<If the above commands do not work, then virt-v2v is not going to
|
||||
-work either>. Fix your libvirt configuration or the remote server
|
||||
-before continuing.
|
||||
-
|
||||
-B<If the guest disks are located on a host block device>, then the
|
||||
-conversion will fail. See L</Xen or ssh conversions from block devices>
|
||||
-below for a workaround.
|
||||
-
|
||||
-=head2 Importing a guest
|
||||
-
|
||||
-To import a particular guest from a Xen server, do:
|
||||
-
|
||||
- $ virt-v2v -ic 'xen+ssh://root@xen.example.com' \
|
||||
- rhel49-x86_64-pv \
|
||||
- -o local -os /var/tmp
|
||||
-
|
||||
-where C<rhel49-x86_64-pv> is the name of the guest (which must be shut
|
||||
-down).
|
||||
-
|
||||
-In this case the output flags are set to write the converted guest to
|
||||
-a temporary directory as this is just an example, but you can also
|
||||
-write to libvirt or any other supported target.
|
||||
-
|
||||
-=head2 Xen or ssh conversions from block devices
|
||||
-
|
||||
-Currently virt-v2v cannot directly access a Xen guest (or any guest
|
||||
-located remotely over ssh) if that guest’s disks are located on host
|
||||
-block devices.
|
||||
-
|
||||
-To tell if a Xen guest uses host block devices, look at the guest XML.
|
||||
-You will see:
|
||||
-
|
||||
- <disk type='block' device='disk'>
|
||||
- ...
|
||||
- <source dev='/dev/VG/guest'/>
|
||||
-
|
||||
-where C<type='block'>, C<source dev=> and C</dev/...> are all
|
||||
-indications that the disk is located on a host block device.
|
||||
-
|
||||
-This happens because the qemu ssh block driver that we use to access
|
||||
-remote disks uses the ssh sftp protocol, and this protocol cannot
|
||||
-correctly detect the size of host block devices.
|
||||
-
|
||||
-The workaround is to copy the block device from the remote Xen
|
||||
-server to a regular local file, copy the libvirt guest XML,
|
||||
-adjust the C<disk> element to point to the local file, and use
|
||||
-C<-i libvirtxml> mode instead.
|
||||
-
|
||||
-=head1 SEE ALSO
|
||||
-
|
||||
-L<virt-v2v(1)>.
|
||||
-
|
||||
-=head1 AUTHOR
|
||||
-
|
||||
-Richard W.M. Jones
|
||||
-
|
||||
-=head1 COPYRIGHT
|
||||
-
|
||||
-Copyright (C) 2009-2025 Red Hat Inc.
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index 35886561..8e31fd0b 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -12,7 +12,7 @@ virt-v2v - Convert a guest to use KVM
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Virt-v2v converts a single guest from a foreign hypervisor to run on
|
||||
-KVM. It can read Linux and Windows guests running on VMware, Xen,
|
||||
+KVM. It can read Linux and Windows guests running on VMware,
|
||||
Hyper-V and some other hypervisors, and convert them to KVM managed by
|
||||
libvirt, OpenStack, oVirt, or several other targets. It can modify
|
||||
the guest to make it bootable on KVM and install virtio drivers so it
|
||||
@@ -59,8 +59,6 @@ management systems, guests.
|
||||
|
||||
L<virt-v2v-input-vmware(1)> — Input from VMware.
|
||||
|
||||
-L<virt-v2v-input-xen(1)> — Input from Xen.
|
||||
-
|
||||
L<virt-v2v-output-local(1)> — Output to local files or local libvirt.
|
||||
|
||||
L<virt-v2v-output-ovirt(1)> — Output to oVirt
|
||||
@@ -189,10 +187,6 @@ This is only supported for:
|
||||
|
||||
=item *
|
||||
|
||||
-L<input from Xen|virt-v2v-input-xen(1)>
|
||||
-
|
||||
-=item *
|
||||
-
|
||||
L<input from VMware VMX|virt-v2v-input-vmware(1)/INPUT FROM VMWARE VMX>
|
||||
when using the SSH transport method
|
||||
|
||||
@@ -304,12 +298,10 @@ hypervisor. See L<virt-v2v-input-vmware(1)>.
|
||||
Specify a libvirt connection URI to use when reading the guest. This
|
||||
is only used when S<I<-i libvirt>>.
|
||||
|
||||
-Only local libvirt connections, VMware vCenter connections, or RHEL 5
|
||||
-Xen remote connections can be used. Other remote libvirt connections
|
||||
-will not work in general.
|
||||
+Only local libvirt connections or VMware vCenter connections.
|
||||
+Other remote libvirt connections will not work in general.
|
||||
|
||||
-See also L<virt-v2v-input-vmware(1)>,
|
||||
-L<virt-v2v-input-xen(1)>.
|
||||
+See also L<virt-v2v-input-vmware(1)>.
|
||||
|
||||
=item B<-if> format
|
||||
|
||||
@@ -883,7 +875,7 @@ bandwidth. Virt-v2v should be able to copy guest data at gigabit
|
||||
ethernet speeds or greater.
|
||||
|
||||
Ensure that the network connections between servers (conversion
|
||||
-server, NFS server, vCenter, Xen) are as fast and as low latency as
|
||||
+server, NFS server, vCenter) are as fast and as low latency as
|
||||
possible.
|
||||
|
||||
=head2 Disk space
|
||||
@@ -1182,38 +1174,6 @@ changes to the Windows Registry and filesystem.
|
||||
|
||||
=head1 NOTES
|
||||
|
||||
-=head2 Xen paravirtualized guests
|
||||
-
|
||||
-Older versions of virt-v2v could turn a Xen paravirtualized (PV) guest
|
||||
-into a KVM guest by installing a new kernel. This version of virt-v2v
|
||||
-does I<not> attempt to install any new kernels. Instead it will give
|
||||
-you an error if there are I<only> Xen PV kernels available.
|
||||
-
|
||||
-Therefore before conversion you should check that a regular kernel is
|
||||
-installed. For some older Linux distributions, this means installing
|
||||
-a kernel from the table below:
|
||||
-
|
||||
- RHEL 4 i686 with > 10GB of RAM: install 'kernel-hugemem'
|
||||
- i686 SMP: install 'kernel-smp'
|
||||
- other i686: install 'kernel'
|
||||
- x86-64 SMP with > 8 CPUs: install 'kernel-largesmp'
|
||||
- x86-64 SMP: install 'kernel-smp'
|
||||
- other x86-64: install 'kernel'
|
||||
-
|
||||
- RHEL 5 i686: install 'kernel-PAE'
|
||||
- x86-64: install 'kernel'
|
||||
-
|
||||
- SLES 10 i586 with > 10GB of RAM: install 'kernel-bigsmp'
|
||||
- i586 SMP: install 'kernel-smp'
|
||||
- other i586: install 'kernel-default'
|
||||
- x86-64 SMP: install 'kernel-smp'
|
||||
- other x86-64: install 'kernel-default'
|
||||
-
|
||||
- SLES 11+ i586: install 'kernel-pae'
|
||||
- x86-64: install 'kernel-default'
|
||||
-
|
||||
- Windows (Does not apply, as there is no Xen PV Windows kernel)
|
||||
-
|
||||
=head2 Enabling virtio
|
||||
|
||||
"Virtio" is the name for a set of drivers which make disk (block
|
||||
diff --git a/input/Makefile.am b/input/Makefile.am
|
||||
index d5e77f76..98ea5223 100644
|
||||
--- a/input/Makefile.am
|
||||
+++ b/input/Makefile.am
|
||||
@@ -29,7 +29,6 @@ SOURCES_MLI = \
|
||||
input_vcenter_https.mli \
|
||||
input_vddk.mli \
|
||||
input_vmx.mli \
|
||||
- input_xen_ssh.mli \
|
||||
name_from_disk.mli \
|
||||
nbdkit_curl.mli \
|
||||
nbdkit_ssh.mli \
|
||||
@@ -60,7 +59,6 @@ SOURCES_ML = \
|
||||
input_vcenter_https.ml \
|
||||
input_vddk.ml \
|
||||
input_vmx.ml \
|
||||
- input_xen_ssh.ml \
|
||||
select_input.ml
|
||||
|
||||
# We pretend that we're building a C library. automake handles the
|
||||
diff --git a/input/input_xen_ssh.ml b/input/input_xen_ssh.ml
|
||||
deleted file mode 100644
|
||||
index 45864cfe..00000000
|
||||
--- a/input/input_xen_ssh.ml
|
||||
+++ /dev/null
|
||||
@@ -1,136 +0,0 @@
|
||||
-(* helper-v2v-input
|
||||
- * Copyright (C) 2009-2025 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 Printf
|
||||
-open Unix
|
||||
-
|
||||
-open Std_utils
|
||||
-open Tools_utils
|
||||
-open Common_gettext.Gettext
|
||||
-
|
||||
-open Types
|
||||
-open Utils
|
||||
-
|
||||
-open Parse_libvirt_xml
|
||||
-open Input
|
||||
-
|
||||
-module XenSSH = struct
|
||||
- let to_string options args =
|
||||
- let xs = args in
|
||||
- let xs =
|
||||
- match options.input_conn with
|
||||
- | Some ic -> ("-ic " ^ ic) :: xs
|
||||
- | None -> xs in
|
||||
- let xs = "-i libvirt" :: xs in
|
||||
- String.concat " " xs
|
||||
-
|
||||
- let query_input_options () =
|
||||
- printf (f_"No input options can be used in this mode.\n")
|
||||
-
|
||||
- let setup dir options args =
|
||||
- if options.input_options <> [] then
|
||||
- error (f_"no -io (input options) are allowed here");
|
||||
-
|
||||
- if not options.read_only then
|
||||
- error (f_"in-place mode does not work with Xen over SSH source");
|
||||
-
|
||||
- (* Get the guest name. *)
|
||||
- let guest =
|
||||
- match args with
|
||||
- | [arg] -> arg
|
||||
- | _ ->
|
||||
- error (f_"-i libvirt: expecting a libvirt guest name \
|
||||
- on the command line") in
|
||||
-
|
||||
- (* -ic must be set. *)
|
||||
- let input_conn =
|
||||
- match options.input_conn with
|
||||
- | Some ic -> ic
|
||||
- | None ->
|
||||
- error (f_"-i libvirt: expecting -ic parameter for \
|
||||
- Xen over SSH connection") in
|
||||
-
|
||||
- let uri =
|
||||
- try Xml.parse_uri input_conn
|
||||
- with Invalid_argument msg ->
|
||||
- error (f_"could not parse '-ic %s'. Original error message was: %s")
|
||||
- input_conn msg in
|
||||
-
|
||||
- (* Connect to the hypervisor. *)
|
||||
- let conn =
|
||||
- let auth = Libvirt_utils.auth_for_password_file
|
||||
- ?password_file:options.input_password () in
|
||||
- Libvirt.Connect.connect_auth ~name:input_conn auth in
|
||||
-
|
||||
- (* Parse the libvirt XML. *)
|
||||
- let source, disks, _ = parse_libvirt_domain conn guest in
|
||||
-
|
||||
- let server =
|
||||
- match uri.Xml.uri_server with
|
||||
- | Some server -> server
|
||||
- | None ->
|
||||
- error (f_"‘-ic %s’ URL does not contain a host name field")
|
||||
- input_conn in
|
||||
-
|
||||
- let port =
|
||||
- match uri.uri_port with
|
||||
- | 0 | 22 -> None
|
||||
- | i -> Some (string_of_int i) in
|
||||
-
|
||||
- let user = uri.uri_user in
|
||||
-
|
||||
- let password =
|
||||
- match options.input_password with
|
||||
- | None -> None
|
||||
- | Some ip -> Some (Nbdkit_ssh.PasswordFile ip) in
|
||||
-
|
||||
- (* Create an nbdkit instance for each disk. *)
|
||||
- let uris =
|
||||
- List.mapi (
|
||||
- fun i { d_format = format; d_type } ->
|
||||
- let socket = sprintf "%s/in%d" dir i in
|
||||
- On_exit.unlink socket;
|
||||
-
|
||||
- (match d_type with
|
||||
- | NBD _ | HTTP _ -> (* These should never happen? *)
|
||||
- assert false
|
||||
-
|
||||
- | BlockDev _ ->
|
||||
- (* Conversion from a remote block device over SSH isn't
|
||||
- * supported because OpenSSH sftp server doesn't know how
|
||||
- * to get the size of a block device. Therefore we disallow
|
||||
- * this and refer users to the manual.
|
||||
- *)
|
||||
- error (f_"input from xen over ssh does not support disks stored \
|
||||
- on remote block devices. See virt-v2v-input-xen(1) \
|
||||
- section \"Xen or ssh conversions from block devices\".")
|
||||
-
|
||||
- | LocalFile path ->
|
||||
- let cor = dir // "convert" in
|
||||
- let bandwidth = options.bandwidth in
|
||||
- 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
|
||||
- );
|
||||
-
|
||||
- NBD_URI.Unix (socket, None)
|
||||
- ) disks in
|
||||
-
|
||||
- source, uris
|
||||
-end
|
||||
diff --git a/input/input_xen_ssh.mli b/input/input_xen_ssh.mli
|
||||
deleted file mode 100644
|
||||
index 339309b8..00000000
|
||||
--- a/input/input_xen_ssh.mli
|
||||
+++ /dev/null
|
||||
@@ -1,21 +0,0 @@
|
||||
-(* virt-v2v
|
||||
- * Copyright (C) 2009-2025 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.
|
||||
- *)
|
||||
-
|
||||
-(** Input from Xen over SSH *)
|
||||
-
|
||||
-module XenSSH : Input.INPUT
|
||||
diff --git a/input/select_input.ml b/input/select_input.ml
|
||||
index a5eb1433..bbf0180f 100644
|
||||
--- a/input/select_input.ml
|
||||
+++ b/input/select_input.ml
|
||||
@@ -90,10 +90,6 @@ let select_input ?(allow_remote = true) input_mode input_conn input_transport =
|
||||
| Some server, Some ("esx"|"gsx"|"vpx"), Some Input.VDDK, true ->
|
||||
(module Input_vddk.VDDK)
|
||||
|
||||
- (* Xen over SSH *)
|
||||
- | Some server, Some "xen+ssh", _, true ->
|
||||
- (module Input_xen_ssh.XenSSH)
|
||||
-
|
||||
(* Old virt-v2v also supported qemu+ssh://. However I am
|
||||
* deliberately not supporting this in new virt-v2v. Don't
|
||||
* use virt-v2v if a guest already runs on KVM.
|
||||
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
|
||||
index c780ab1d..1811f9e6 100644
|
||||
--- a/v2v/v2v.ml
|
||||
+++ b/v2v/v2v.ml
|
||||
@@ -335,7 +335,6 @@ read the man page virt-v2v(1).
|
||||
pr "virt-v2v-2.0\n";
|
||||
pr "libguestfs-rewrite\n";
|
||||
pr "vcenter-https\n";
|
||||
- pr "xen-ssh\n";
|
||||
pr "vddk\n";
|
||||
pr "colours-option\n";
|
||||
pr "vdsm-compat-option\n";
|
||||
@ -1,239 +0,0 @@
|
||||
From 5c5d4163dfa7cbdd10450d677a85aeaf87e1a14b 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: Remove -o glance
|
||||
|
||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1977539
|
||||
---
|
||||
docs/virt-v2v-output-openstack.pod | 54 ++----------------------------
|
||||
docs/virt-v2v.pod | 20 -----------
|
||||
output/output_glance.mli | 2 +-
|
||||
output/select_output.ml | 5 ---
|
||||
output/select_output.mli | 1 -
|
||||
tests/test-o-glance.sh | 3 ++
|
||||
v2v/v2v.ml | 2 --
|
||||
7 files changed, 6 insertions(+), 81 deletions(-)
|
||||
|
||||
diff --git a/docs/virt-v2v-output-openstack.pod b/docs/virt-v2v-output-openstack.pod
|
||||
index 9bef76ea..04595816 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
|
||||
[-oo verify-server-certificate=false]
|
||||
[-oo os-username=admin] [-oo os-*=*]
|
||||
|
||||
- virt-v2v [-i* options] -o glance
|
||||
-
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This page documents how to use L<virt-v2v(1)> to convert guests to run
|
||||
-on OpenStack. There are two output modes you can select, but only
|
||||
-I<-o openstack> should be used normally.
|
||||
+on OpenStack.
|
||||
|
||||
=over 4
|
||||
|
||||
@@ -27,15 +24,6 @@ Full description: L</OUTPUT TO OPENSTACK>
|
||||
This is the modern method for uploading to OpenStack via the REST API.
|
||||
Guests can be directly converted into Cinder volumes.
|
||||
|
||||
-=item B<-o glance>
|
||||
-
|
||||
-Full description: L</OUTPUT TO GLANCE>
|
||||
-
|
||||
-This is the old method for uploading to Glance. Unfortunately Glance
|
||||
-is not well suited to storing converted guests (since virt-v2v deals
|
||||
-with "pets" not templated "cattle"), so this method is not recommended
|
||||
-unless you really know what you are doing.
|
||||
-
|
||||
=back
|
||||
|
||||
=head1 OUTPUT TO OPENSTACK
|
||||
@@ -176,48 +164,10 @@ no Cinder volume type is used.
|
||||
The following options are B<not> supported with OpenStack: I<-oa>,
|
||||
I<-of>.
|
||||
|
||||
-=head1 OUTPUT TO GLANCE
|
||||
-
|
||||
-Note this is a legacy option. In most cases you should use
|
||||
-L</OUTPUT TO OPENSTACK> instead.
|
||||
-
|
||||
-To output to OpenStack Glance, use the I<-o glance> option.
|
||||
-
|
||||
-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. 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
|
||||
-command C<glance image-show> will display the metadata as "Property"
|
||||
-fields such as C<os_type> and C<hw_disk_bus>.
|
||||
-
|
||||
-=head2 Glance and sparseness
|
||||
-
|
||||
-Glance image upload doesn't appear to correctly handle sparseness.
|
||||
-For this reason, using qcow2 will be faster and use less space on the
|
||||
-Glance server. Use the virt-v2v S<I<-of qcow2>> option.
|
||||
-
|
||||
-=head2 Glance and multiple disks
|
||||
-
|
||||
-If the guest has a single disk, then the name of the disk in Glance
|
||||
-will be the name of the guest. You can control this using the I<-on>
|
||||
-option.
|
||||
-
|
||||
-Glance doesn't have a concept of associating multiple disks with a
|
||||
-single guest, and Nova doesn't allow you to boot a guest from multiple
|
||||
-Glance disks either. If the guest has multiple disks, then the first
|
||||
-(assumed to be the system disk) will have the name of the guest, and
|
||||
-the second and subsequent data disks will be called
|
||||
-C<I<guestname>-disk2>, C<I<guestname>-disk3> etc. It may be best to
|
||||
-leave the system disk in Glance, and import the data disks to Cinder.
|
||||
-
|
||||
=head1 SEE ALSO
|
||||
|
||||
L<virt-v2v(1)>,
|
||||
-L<https://docs.openstack.org/python-openstackclient/latest/cli/man/openstack.html>,
|
||||
-L<glance(1)>.
|
||||
+L<https://docs.openstack.org/python-openstackclient/latest/cli/man/openstack.html>.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index 8e31fd0b..fde60a8c 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -439,14 +439,6 @@ See L</Networks and bridges> below.
|
||||
|
||||
This is the same as I<-o local>.
|
||||
|
||||
-=item B<-o> B<glance>
|
||||
-
|
||||
-This is a legacy option. You should probably use I<-o openstack>
|
||||
-instead.
|
||||
-
|
||||
-Set the output method to OpenStack Glance. In this mode the converted
|
||||
-guest is uploaded to Glance. See L<virt-v2v-output-openstack(1)>.
|
||||
-
|
||||
=item B<-o> B<kubevirt>
|
||||
|
||||
Set the output method to I<kubevirt>. B<Note the way this mode works
|
||||
@@ -897,11 +889,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>).
|
||||
|
||||
-=item I<-o glance>
|
||||
-
|
||||
-This temporarily places a full copy of the output disks in
|
||||
-C<$VIRT_V2V_TMPDIR> (or F</var/tmp>).
|
||||
-
|
||||
=item I<-o local>
|
||||
|
||||
=item I<-o qemu>
|
||||
@@ -1053,13 +1040,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.
|
||||
|
||||
-=item Writing to Glance
|
||||
-
|
||||
-This does I<not> need root (in fact it probably won’t work), but may
|
||||
-require either a special user and/or for you to source a script that
|
||||
-sets authentication environment variables. Consult the Glance
|
||||
-documentation.
|
||||
-
|
||||
=item Writing to block devices
|
||||
|
||||
This normally requires root. See the next section.
|
||||
diff --git a/output/output_glance.mli b/output/output_glance.mli
|
||||
index 83d67576..7ab1503c 100644
|
||||
--- a/output/output_glance.mli
|
||||
+++ b/output/output_glance.mli
|
||||
@@ -18,4 +18,4 @@
|
||||
|
||||
(** [-o glance] output mode. *)
|
||||
|
||||
-module Glance : Output.OUTPUT
|
||||
+(*module Glance : Output.OUTPUT*)
|
||||
diff --git a/output/select_output.ml b/output/select_output.ml
|
||||
index ab4bfe4d..b1f7d0ab 100644
|
||||
--- a/output/select_output.ml
|
||||
+++ b/output/select_output.ml
|
||||
@@ -21,7 +21,6 @@ open Common_gettext.Gettext
|
||||
|
||||
type output_mode =
|
||||
| Disk
|
||||
- | Glance
|
||||
| Kubevirt
|
||||
| Libvirt
|
||||
| Null
|
||||
@@ -33,7 +32,6 @@ type output_mode =
|
||||
|
||||
let output_modes = [
|
||||
Disk;
|
||||
- Glance;
|
||||
Kubevirt;
|
||||
Libvirt;
|
||||
Null;
|
||||
@@ -46,7 +44,6 @@ let output_modes = [
|
||||
|
||||
let string_of_output_mode = function
|
||||
| Disk -> "disk"
|
||||
- | Glance -> "glance"
|
||||
| Kubevirt -> "kubevirt"
|
||||
| Libvirt -> "libvirt"
|
||||
| Null -> "null"
|
||||
@@ -57,7 +54,6 @@ let string_of_output_mode = function
|
||||
| VDSM -> "vdsm"
|
||||
|
||||
let output_mode_of_string = function
|
||||
- | "glance" -> Glance
|
||||
| "kubevirt" -> Kubevirt
|
||||
| "libvirt" -> Libvirt
|
||||
| "disk" | "local" -> Disk
|
||||
@@ -75,7 +71,6 @@ let select_output = function
|
||||
| Some Disk -> (module Output_disk.Disk)
|
||||
| Some Null -> (module Output_null.Null)
|
||||
| Some QEmu -> (module Output_qemu.QEMU)
|
||||
- | Some Glance -> (module Output_glance.Glance)
|
||||
| Some Kubevirt -> (module Output_kubevirt.Kubevirt)
|
||||
| Some Openstack -> (module Output_openstack.Openstack)
|
||||
| Some OVirt_Upload -> (module Output_ovirt_upload.OVirtUpload)
|
||||
diff --git a/output/select_output.mli b/output/select_output.mli
|
||||
index a509a1db..093c9b9a 100644
|
||||
--- a/output/select_output.mli
|
||||
+++ b/output/select_output.mli
|
||||
@@ -18,7 +18,6 @@
|
||||
|
||||
type output_mode =
|
||||
| Disk
|
||||
- | Glance
|
||||
| Kubevirt
|
||||
| Libvirt
|
||||
| Null
|
||||
diff --git a/tests/test-o-glance.sh b/tests/test-o-glance.sh
|
||||
index 9e32d2bf..632579ee 100755
|
||||
--- a/tests/test-o-glance.sh
|
||||
+++ b/tests/test-o-glance.sh
|
||||
@@ -20,6 +20,9 @@
|
||||
|
||||
set -e
|
||||
|
||||
+# Feature is disabled in RHEL 9.
|
||||
+exit 77
|
||||
+
|
||||
source ./functions.sh
|
||||
set -e
|
||||
set -x
|
||||
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
|
||||
index 1811f9e6..5d3a9dbb 100644
|
||||
--- a/v2v/v2v.ml
|
||||
+++ b/v2v/v2v.ml
|
||||
@@ -267,8 +267,6 @@ virt-v2v -i libvirtxml guest-domain.xml -o local -os /var/tmp
|
||||
|
||||
virt-v2v -i disk disk.img -o local -os /var/tmp
|
||||
|
||||
-virt-v2v -i disk disk.img -o glance
|
||||
-
|
||||
There is a companion front-end called \"virt-p2v\" which comes as an
|
||||
ISO or CD image that can be booted on physical machines.
|
||||
|
||||
@ -1,157 +0,0 @@
|
||||
From 0c2aebab2d1c3cf7a02c16dd6a5af4ae55a69995 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: 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 6c02a99c..3d0d1b28 100644
|
||||
--- a/docs/virt-v2v-in-place.pod
|
||||
+++ b/docs/virt-v2v-in-place.pod
|
||||
@@ -72,16 +72,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 fde60a8c..0e68de10 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -212,16 +212,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 604a662d..a91ee39d 100644
|
||||
--- a/in-place/in_place.ml
|
||||
+++ b/in-place/in_place.ml
|
||||
@@ -49,7 +49,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
|
||||
@@ -162,8 +161,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 (input_modes, set_input_mode),
|
||||
s_"Set input mode (default: libvirt)";
|
||||
[ M"ic" ], Getopt.String ("uri", set_string_option_once "-ic" input_conn),
|
||||
@@ -230,12 +227,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 customize_ops = get_customize_ops () in
|
||||
let input_conn = !input_conn in
|
||||
let input_mode = !input_mode in
|
||||
@@ -298,7 +289,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 f9c748ed..c0aa8498 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -57,7 +57,6 @@ TESTS_ENVIRONMENT = $(top_builddir)/run --test
|
||||
|
||||
TESTS = \
|
||||
test-bad-networks-and-bridges.sh \
|
||||
- test-block-driver.sh \
|
||||
test-cdrom.sh \
|
||||
test-checksum-bad.sh \
|
||||
test-checksum-good-qcow2.sh \
|
||||
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
|
||||
index 5d3a9dbb..2e8071db 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
|
||||
@@ -201,8 +200,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'";
|
||||
[ S 'i' ], Getopt.String (input_modes, set_input_mode),
|
||||
s_"Set input mode (default: libvirt)";
|
||||
[ M"ic" ], Getopt.String ("uri", set_string_option_once "-ic" input_conn),
|
||||
@@ -295,12 +292,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 customize_ops = get_customize_ops () in
|
||||
let input_conn = !input_conn in
|
||||
let input_mode = !input_mode in
|
||||
@@ -413,7 +404,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;
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,24 +0,0 @@
|
||||
From 74cbf6c5f6c65736a5b5e70aa8876564948645fa Mon Sep 17 00:00:00 2001
|
||||
From: Vadim Rozenfeld <vrozenfe@redhat.com>
|
||||
Date: Fri, 18 Jul 2025 19:31:34 +1000
|
||||
Subject: [PATCH] remove timeout before installing virtio-win drivers
|
||||
|
||||
Signed-off-by: Vadim Rozenfeld <vrozenfe@redhat.com>
|
||||
(cherry picked from commit 07192e2bf5e73dd4d3d7d3c1faa940c7a67e2d72)
|
||||
---
|
||||
convert/convert_windows.ml | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml
|
||||
index 2ff9bcfa..f416b3ad 100644
|
||||
--- a/convert/convert_windows.ml
|
||||
+++ b/convert/convert_windows.ml
|
||||
@@ -401,8 +401,6 @@ let convert (g : G.guestfs) source inspect i_firmware
|
||||
echo Installing drivers from %inf_dir%\n\
|
||||
set REBOOT_PENDING=0\n\
|
||||
\n\
|
||||
- timeout /t 10 /nobreak\n\
|
||||
- \n\
|
||||
reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\Auto Update\\RebootRequired\"\n\
|
||||
if %errorlevel%==0 (\n\
|
||||
echo Windows Update: Reboot required.\n\
|
||||
@ -1,81 +0,0 @@
|
||||
From c674bb5596460fddea5478208dc2cec17993189e Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Wed, 13 Aug 2025 16:55:27 +0100
|
||||
Subject: [PATCH] v2v: Fix SELinux relabelling
|
||||
|
||||
Update the common submodule to pick up:
|
||||
|
||||
Richard W.M. Jones (3):
|
||||
mlcustomize/SELinux_relabel.ml: Add comment
|
||||
mlcustomize/SELinux_relabel.ml: Use new guestfs_setfiles API
|
||||
mlcustomize/SELinux_relabel.ml: Relabel every mountpoint
|
||||
|
||||
This allows SELinux relabelling to work for Linux guests that have a
|
||||
split-/usr configuration.
|
||||
|
||||
This requires libguestfs >= 1.57.1, for the new guestfs_setfiles API.
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-108174
|
||||
Reported-by: Germano Veit Michel
|
||||
Thanks: Ming Xie
|
||||
(cherry picked from commit e4c53263d08e8aa40b0d911d470ea2930dbb27c7)
|
||||
---
|
||||
common | 2 +-
|
||||
m4/guestfs-libraries.m4 | 6 ++----
|
||||
2 files changed, 3 insertions(+), 5 deletions(-)
|
||||
|
||||
Submodule common 10d2b626..89f1eb2d:
|
||||
diff --git a/common/mlcustomize/SELinux_relabel.ml b/common/mlcustomize/SELinux_relabel.ml
|
||||
index 2f3a09bf..f1729e3f 100644
|
||||
--- a/common/mlcustomize/SELinux_relabel.ml
|
||||
+++ b/common/mlcustomize/SELinux_relabel.ml
|
||||
@@ -1,5 +1,5 @@
|
||||
(* virt-customize
|
||||
- * Copyright (C) 2016 Red Hat Inc.
|
||||
+ * Copyright (C) 2016-2025 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
|
||||
@@ -24,6 +24,10 @@ open Printf
|
||||
|
||||
module G = Guestfs
|
||||
|
||||
+(* XXX A lot of this code could usefully be moved into
|
||||
+ * [libguestfs.git/daemon/selinux.ml].
|
||||
+ *)
|
||||
+
|
||||
let rec relabel (g : G.guestfs) =
|
||||
(* Is the guest using SELinux? (Otherwise this is a no-op). *)
|
||||
if is_selinux_guest g then (
|
||||
@@ -109,5 +113,13 @@ and use_setfiles g =
|
||||
g#copy_attributes ~all:true old_specfile specfile
|
||||
);
|
||||
|
||||
+ (* Get the list of mountpoints, since setfiles does not cross
|
||||
+ * filesystems (RHEL-108174).
|
||||
+ *)
|
||||
+ let mps = g#mountpoints () |>
|
||||
+ List.map snd |> (* the list of directories *)
|
||||
+ List.sort compare |> (* sort them for consistency *)
|
||||
+ Array.of_list in
|
||||
+
|
||||
(* Relabel everything. *)
|
||||
- g#selinux_relabel ~force:true specfile "/"
|
||||
+ g#setfiles ~force:true specfile mps
|
||||
diff --git a/m4/guestfs-libraries.m4 b/m4/guestfs-libraries.m4
|
||||
index fa13e0f6..f1d5d127 100644
|
||||
--- a/m4/guestfs-libraries.m4
|
||||
+++ b/m4/guestfs-libraries.m4
|
||||
@@ -19,10 +19,8 @@ dnl Any C libraries required by virt-v2v.
|
||||
|
||||
dnl Of course we need libguestfs.
|
||||
dnl
|
||||
-dnl We need libguestfs 1.55.6 for guestfs_sh_out.
|
||||
-dnl We need libguestfs 1.55.12 for guestfs_btrfs_scrub_full.
|
||||
-dnl We need libguestfs 1.55.13 for guestfs_e2fsck FORCENO flag.
|
||||
-PKG_CHECK_MODULES([LIBGUESTFS], [libguestfs >= 1.55.13])
|
||||
+dnl We need libguestfs 1.57.1 for guestfs_setfiles.
|
||||
+PKG_CHECK_MODULES([LIBGUESTFS], [libguestfs >= 1.57.1])
|
||||
printf "libguestfs version is "; $PKG_CONFIG --modversion libguestfs
|
||||
|
||||
dnl And libnbd.
|
||||
@ -1,98 +0,0 @@
|
||||
From c00234c61eb2a49b2961b24672e41f15d8d734b8 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 21 Aug 2025 09:45:44 +0100
|
||||
Subject: [PATCH] convert: Model target boot device
|
||||
|
||||
SeaBIOS recently changed how it works so it no longer initializes all
|
||||
disks at boot. To get around this, for some Linux BIOS guests, we
|
||||
will have to assign a boot order to the disks, with <boot order='1'>
|
||||
for the disk that contains the GRUB bootloader, and higher boot orders
|
||||
assigned to the other disks.
|
||||
|
||||
As the first step, model the target boot device.
|
||||
|
||||
In the current commit this is always unset (set to 'None'), so this
|
||||
does nothing.
|
||||
|
||||
(cherry picked from commit e512d84bc8e18734aac7659e839f32c960f6fb0a)
|
||||
---
|
||||
convert/convert.ml | 8 ++++++--
|
||||
lib/types.ml | 3 ++-
|
||||
lib/types.mli | 15 ++++++++++++++-
|
||||
3 files changed, 22 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/convert/convert.ml b/convert/convert.ml
|
||||
index 45d48a95..f8a35506 100644
|
||||
--- a/convert/convert.ml
|
||||
+++ b/convert/convert.ml
|
||||
@@ -136,7 +136,8 @@ let rec convert input_disks options source =
|
||||
get_target_firmware i_firmware guestcaps source output in
|
||||
|
||||
(* Create target metadata file. *)
|
||||
- let target_meta = { guestcaps; target_buses; target_firmware; target_nics } in
|
||||
+ let target_meta = { guestcaps; target_buses; target_nics;
|
||||
+ target_firmware; target_boot_device = None } in
|
||||
|
||||
(* This is a good place to dump everything we know about the guest. *)
|
||||
if verbose () then debug_info source inspect target_meta mpstats;
|
||||
@@ -366,7 +367,8 @@ and get_target_firmware i_firmware guestcaps source output =
|
||||
* is enabled.
|
||||
*)
|
||||
and debug_info source inspect
|
||||
- { guestcaps; target_buses; target_firmware; target_nics }
|
||||
+ { guestcaps; target_buses; target_nics;
|
||||
+ target_firmware; target_boot_device }
|
||||
mpstats =
|
||||
eprintf "info:\n";
|
||||
eprintf "%s\n" (string_of_source source);
|
||||
@@ -374,6 +376,8 @@ and debug_info source inspect
|
||||
eprintf "%s\n" (string_of_guestcaps guestcaps);
|
||||
eprintf "%s\n" (string_of_target_buses target_buses);
|
||||
eprintf "target firmware: %s\n" (string_of_target_firmware target_firmware);
|
||||
+ eprintf "target boot device: %s\n"
|
||||
+ (match target_boot_device with None -> "" | Some i -> string_of_int i);
|
||||
eprintf "target NICs:\n";
|
||||
List.iter (fun nic -> eprintf "%s\n" (string_of_source_nic nic))
|
||||
target_nics;
|
||||
diff --git a/lib/types.ml b/lib/types.ml
|
||||
index 0196a3fd..bd4ab31c 100644
|
||||
--- a/lib/types.ml
|
||||
+++ b/lib/types.ml
|
||||
@@ -485,8 +485,9 @@ let string_of_target_buses buses =
|
||||
type target_meta = {
|
||||
guestcaps : guestcaps;
|
||||
target_buses : target_buses;
|
||||
+ target_nics : target_nics;
|
||||
target_firmware : target_firmware;
|
||||
- target_nics : target_nics
|
||||
+ target_boot_device : int option;
|
||||
}
|
||||
|
||||
type root_choice = AskRoot | SingleRoot | FirstRoot | RootDev of string
|
||||
diff --git a/lib/types.mli b/lib/types.mli
|
||||
index b3815c8e..0c43b149 100644
|
||||
--- a/lib/types.mli
|
||||
+++ b/lib/types.mli
|
||||
@@ -367,8 +367,21 @@ val string_of_target_buses : target_buses -> string
|
||||
type target_meta = {
|
||||
guestcaps : guestcaps;
|
||||
target_buses : target_buses;
|
||||
+ target_nics : target_nics;
|
||||
+
|
||||
target_firmware : target_firmware;
|
||||
- target_nics : target_nics
|
||||
+
|
||||
+ target_boot_device : int option;
|
||||
+ (** The disk index of the device containing the bootloader (index
|
||||
+ starting from 0).
|
||||
+
|
||||
+ For libvirt guests this should usually be mapped to
|
||||
+ [<boot order='1'>] for this disk, and [<boot order='N'>]
|
||||
+ where N > 1 for each other disk (order does not matter
|
||||
+ for the other disks).
|
||||
+
|
||||
+ This is only necessary for SeaBIOS so only collected for
|
||||
+ a subset of BIOS guests (RHEL-108991). *)
|
||||
}
|
||||
|
||||
(** {2 Command line parameters} *)
|
||||
@ -1,184 +0,0 @@
|
||||
From e7abf2e39ed17e324b54c00f2386f56152660522 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 21 Aug 2025 09:53:42 +0100
|
||||
Subject: [PATCH] output: Add boot order depending on target boot device
|
||||
|
||||
If no target boot device was specified, we number them <boot order='1'>
|
||||
through <boot order='N'> for each disk.
|
||||
|
||||
If a target boot device was specified, then that disk has
|
||||
<boot order='1'>, and the remaining disks are numbered sequentially
|
||||
starting at 2.
|
||||
|
||||
(cherry picked from commit 08e57a392aa5e0720e8787968a562808cb0a31fe)
|
||||
---
|
||||
lib/create_ovf.ml | 19 ++++++++-----------
|
||||
output/create_libvirt_xml.ml | 16 +++++++++++++++-
|
||||
output/output_qemu.ml | 16 +++++++++++++---
|
||||
tests/test-cdrom.expected | 1 +
|
||||
tests/test-floppy.expected | 1 +
|
||||
tests/test-i-ova.xml | 1 +
|
||||
6 files changed, 39 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/lib/create_ovf.ml b/lib/create_ovf.ml
|
||||
index 0af62c88..f74ba3a7 100644
|
||||
--- a/lib/create_ovf.ml
|
||||
+++ b/lib/create_ovf.ml
|
||||
@@ -544,7 +544,7 @@ let create_meta_files output_alloc output_format sd_uuid image_uuids sizes =
|
||||
|
||||
(* Create the OVF file. *)
|
||||
let rec create_ovf source inspect
|
||||
- { guestcaps; target_firmware; target_nics }
|
||||
+ { guestcaps; target_nics; target_firmware; target_boot_device }
|
||||
sizes
|
||||
output_alloc output_format
|
||||
output_name
|
||||
@@ -763,7 +763,7 @@ let rec create_ovf source inspect
|
||||
] in
|
||||
|
||||
(* Add disks to the OVF XML. *)
|
||||
- add_disks sizes guestcaps output_alloc output_format
|
||||
+ add_disks sizes guestcaps target_boot_device output_alloc output_format
|
||||
sd_uuid image_uuids vol_uuids need_actual_sizes output_disks
|
||||
ovf_flavour ovf;
|
||||
|
||||
@@ -813,7 +813,7 @@ and get_flavoured_section ovf ovirt_path esd_path esd_path_attr = function
|
||||
with Not_found -> assert false
|
||||
|
||||
(* This modifies the OVF DOM, adding a section for each disk. *)
|
||||
-and add_disks sizes guestcaps output_alloc output_format
|
||||
+and add_disks sizes guestcaps target_boot_device output_alloc output_format
|
||||
sd_uuid image_uuids vol_uuids need_actual_sizes output_disks
|
||||
ovf_flavour ovf =
|
||||
let references =
|
||||
@@ -838,14 +838,11 @@ and add_disks sizes guestcaps output_alloc output_format
|
||||
(* Iterate over the disks, adding them to the OVF document. *)
|
||||
List.iteri (
|
||||
fun i (size, image_uuid, vol_uuid, output_uri) ->
|
||||
- (* This sets the boot order to boot the first disk first. This
|
||||
- * isn't generally correct. We should copy over the boot order
|
||||
- * from the source hypervisor. See long discussion in
|
||||
- * https://bugzilla.redhat.com/show_bug.cgi?id=1308535 for
|
||||
- * what we should be doing. (XXX)
|
||||
- *)
|
||||
- let is_bootable_drive = i == 0 in
|
||||
- let boot_order = i+1 in
|
||||
+ let is_bootable_drive, boot_order =
|
||||
+ match target_boot_device with
|
||||
+ | None -> i = 0, i+1
|
||||
+ | Some disk_index when disk_index = i -> true, 1
|
||||
+ | Some _ -> false, i+2 in
|
||||
|
||||
let fileref =
|
||||
match ovf_flavour with
|
||||
diff --git a/output/create_libvirt_xml.ml b/output/create_libvirt_xml.ml
|
||||
index 7ab8d34c..59f2f1f8 100644
|
||||
--- a/output/create_libvirt_xml.ml
|
||||
+++ b/output/create_libvirt_xml.ml
|
||||
@@ -41,7 +41,8 @@ let get_osinfo_id inspect =
|
||||
None
|
||||
|
||||
let create_libvirt_xml ?pool source inspect
|
||||
- { guestcaps; target_buses; target_firmware; target_nics }
|
||||
+ { guestcaps; target_buses; target_nics; target_firmware;
|
||||
+ target_boot_device }
|
||||
target_features outdisk_name output_format output_name =
|
||||
(* The main body of the libvirt XML document. *)
|
||||
let body = ref [] in
|
||||
@@ -206,6 +207,18 @@ let create_libvirt_xml ?pool source inspect
|
||||
| BusSlotDisk d ->
|
||||
let outdisk = outdisk_name d.s_disk_id in
|
||||
|
||||
+ let boot_order =
|
||||
+ match target_boot_device with
|
||||
+ | None ->
|
||||
+ (* No known boot device, just number them sequentially. *)
|
||||
+ i+1
|
||||
+ | Some disk_index when disk_index = i ->
|
||||
+ (* For the boot disk, use order 1. *)
|
||||
+ 1
|
||||
+ | Some _ ->
|
||||
+ (* For the others number them sequentially starting at 2. *)
|
||||
+ i+2 in
|
||||
+
|
||||
e "disk" (
|
||||
[
|
||||
"type", if pool = None then "file" else "volume";
|
||||
@@ -231,6 +244,7 @@ let create_libvirt_xml ?pool source inspect
|
||||
"dev", drive_prefix ^ drive_name i;
|
||||
"bus", bus_name;
|
||||
] [];
|
||||
+ e "boot" [ "order", string_of_int boot_order ] [];
|
||||
]
|
||||
|
||||
| BusSlotRemovable { s_removable_type = CDROM } ->
|
||||
diff --git a/output/output_qemu.ml b/output/output_qemu.ml
|
||||
index 37371aad..dff08b66 100644
|
||||
--- a/output/output_qemu.ml
|
||||
+++ b/output/output_qemu.ml
|
||||
@@ -108,7 +108,8 @@ module QEMU = struct
|
||||
let _, qemu_boot, output_alloc, output_format,
|
||||
output_name, output_storage = options in
|
||||
|
||||
- let { guestcaps; target_buses; target_firmware } = target_meta in
|
||||
+ let { guestcaps; target_buses;
|
||||
+ target_firmware; target_boot_device } = target_meta in
|
||||
|
||||
(* Start the shell script. Write it to a temporary file
|
||||
* which we rename at the end.
|
||||
@@ -282,8 +283,17 @@ module QEMU = struct
|
||||
* "disk_id".
|
||||
*)
|
||||
let outdisk = disk_path output_storage output_name disk_id in
|
||||
- arg_list "-drive" [ "file=" ^ outdisk; "format=" ^ output_format;
|
||||
- "if=none"; "id=" ^ backend_name; "media=disk" ]
|
||||
+ let bootindex =
|
||||
+ match target_boot_device with
|
||||
+ | None -> disk_id+1
|
||||
+ | Some disk_index when disk_index = disk_id -> 1
|
||||
+ | Some _ -> disk_id+2 in
|
||||
+ arg_list "-drive" [ "file=" ^ outdisk;
|
||||
+ "format=" ^ output_format;
|
||||
+ "if=none";
|
||||
+ "id=" ^ backend_name;
|
||||
+ "media=disk";
|
||||
+ sprintf "bootindex=%d" bootindex ]
|
||||
|
||||
and add_cdrom_backend backend_name =
|
||||
(* Add a drive (back-end) for an "ide-cd" or "scsi-cd" device (front-end).
|
||||
diff --git a/tests/test-cdrom.expected b/tests/test-cdrom.expected
|
||||
index 17bd152d..806461e7 100644
|
||||
--- a/tests/test-cdrom.expected
|
||||
+++ b/tests/test-cdrom.expected
|
||||
@@ -1,6 +1,7 @@
|
||||
<disk type='file' device='disk'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
<target dev='vda' bus='virtio'/>
|
||||
+ <boot order='1'/>
|
||||
</disk>
|
||||
<disk device='cdrom' type='file'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
diff --git a/tests/test-floppy.expected b/tests/test-floppy.expected
|
||||
index a718c21f..c5bd913b 100644
|
||||
--- a/tests/test-floppy.expected
|
||||
+++ b/tests/test-floppy.expected
|
||||
@@ -1,6 +1,7 @@
|
||||
<disk type='file' device='disk'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
<target dev='vda' bus='virtio'/>
|
||||
+ <boot order='1'/>
|
||||
</disk>
|
||||
<disk device='floppy' type='file'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
diff --git a/tests/test-i-ova.xml b/tests/test-i-ova.xml
|
||||
index f1d8f2e3..08b5b9f2 100644
|
||||
--- a/tests/test-i-ova.xml
|
||||
+++ b/tests/test-i-ova.xml
|
||||
@@ -27,6 +27,7 @@
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source file='TestOva-sda'/>
|
||||
<target dev='vda' bus='virtio'/>
|
||||
+ <boot order='1'/>
|
||||
</disk>
|
||||
<disk device='cdrom' type='file'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
@ -1,78 +0,0 @@
|
||||
From 46af95ecd11c9eda5fd4195b62528b1eea214550 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 21 Aug 2025 10:27:41 +0100
|
||||
Subject: [PATCH] convert: Detect target boot device for Linux guests
|
||||
|
||||
If the guest is Linux, try to detect the boot device, so we can set
|
||||
<boot order='N'> appropriately. We do this for BIOS or UEFI here, but
|
||||
this only really matters for SeaBIOS.
|
||||
|
||||
Suggested-by: Gerd Hoffmann
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-108991
|
||||
(cherry picked from commit ca6ec6317e20a633315f783a8ba4ece3c2fc01f2)
|
||||
---
|
||||
convert/convert.ml | 37 ++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 36 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/convert/convert.ml b/convert/convert.ml
|
||||
index f8a35506..728ea5a1 100644
|
||||
--- a/convert/convert.ml
|
||||
+++ b/convert/convert.ml
|
||||
@@ -95,6 +95,10 @@ let rec convert input_disks options source =
|
||||
let root = Choose_root.choose_root options.root_choice g in
|
||||
let inspect = Mount_filesystems.mount_filesystems g root in
|
||||
|
||||
+ (* Detect boot device. *)
|
||||
+ message (f_"Detecting the boot device");
|
||||
+ let target_boot_device = get_target_boot_device g inspect in
|
||||
+
|
||||
let mpstats = get_mpstats g in
|
||||
check_guest_free_space inspect mpstats;
|
||||
|
||||
@@ -137,7 +141,7 @@ let rec convert input_disks options source =
|
||||
|
||||
(* Create target metadata file. *)
|
||||
let target_meta = { guestcaps; target_buses; target_nics;
|
||||
- target_firmware; target_boot_device = None } in
|
||||
+ target_firmware; target_boot_device } in
|
||||
|
||||
(* This is a good place to dump everything we know about the guest. *)
|
||||
if verbose () then debug_info source inspect target_meta mpstats;
|
||||
@@ -362,6 +366,37 @@ and get_target_firmware i_firmware guestcaps source output =
|
||||
|
||||
target_firmware
|
||||
|
||||
+and get_target_boot_device g inspect =
|
||||
+ (* We only do it for Linux, as most likely Windows never(?) boots
|
||||
+ * from any drive other than C:. We can revisit this decision
|
||||
+ * if someone reports a bug.
|
||||
+ *)
|
||||
+ match inspect.i_type with
|
||||
+ | "linux" ->
|
||||
+ (try
|
||||
+ (* In sane cases, the Grub stage1/boot.img (ie. the boot sector) is
|
||||
+ * always on the same drive as /boot. So we can just find out
|
||||
+ * where /boot is mounted and use that.
|
||||
+ *)
|
||||
+ let boot_mountpoint = List.assoc "/boot" inspect.i_mountpoints in
|
||||
+ let boot_device = g#part_to_dev boot_mountpoint in
|
||||
+ let boot_device = g#device_index boot_device in
|
||||
+ Some boot_device
|
||||
+ with
|
||||
+ | Not_found -> None
|
||||
+ | G.Error msg
|
||||
+ (* Returned by part_to_dev if the /boot mountpoint is not
|
||||
+ * a partition name.
|
||||
+ *)
|
||||
+ when String.find msg "device name is not a partition" >= 0 -> None
|
||||
+ | G.Error msg
|
||||
+ (* Returned by device_index if the /boot device is not
|
||||
+ * a normal drive name (eg. /dev/mdX).
|
||||
+ *)
|
||||
+ when String.find msg "device not found" >= 0 -> None
|
||||
+ )
|
||||
+ | _ -> None
|
||||
+
|
||||
(* After conversion we dump as much information about the guest
|
||||
* as we can in one place. Note this is only called when verbose
|
||||
* is enabled.
|
||||
@ -7,7 +7,7 @@ set -e
|
||||
# ./copy-patches.sh
|
||||
|
||||
project=virt-v2v
|
||||
rhel_version=10.1
|
||||
rhel_version=10.2
|
||||
|
||||
# Check we're in the right directory.
|
||||
if [ ! -f $project.spec ]; then
|
||||
|
||||
4
sources
4
sources
@ -1,2 +1,2 @@
|
||||
SHA512 (virt-v2v-2.8.1.tar.gz) = 70da68563e870955ca013e6d55be8f56ad65dde6f84909f06fae7ab928227a566e8949bb90e839fffce2ad4ebc604b2cfa1c5547394c8d1bd092bb95f9e6435c
|
||||
SHA512 (virt-v2v-2.8.1.tar.gz.sig) = 1236dd21272c53dbafb4cd0ac4177bcf73600ff52ea8949b878793eafb1829a67880043c6e03c2d82c691d986ea8a7daa60508f4ae22345c961a939b3b6a43b0
|
||||
SHA512 (virt-v2v-2.9.5.tar.gz) = 035a9bcbae6143364bd5b0c5236520a89e1d2543e46c4fdfaba1fe0f71db09af8899e75f67669f77318340dce54bcdc4810462e97c2913ef2663f9bc0264398d
|
||||
SHA512 (virt-v2v-2.9.5.tar.gz.sig) = bc7963e14432b945b688d3efc88d8df13a7a3960c949add5a4de6c128a5db9b2f769333b12e9a255e96663a932d1789de8a1253d6934610d81f376205941b3a5
|
||||
|
||||
184
virt-v2v.spec
184
virt-v2v.spec
@ -2,12 +2,50 @@
|
||||
%global verify_tarball_signature 1
|
||||
|
||||
# The source directory.
|
||||
%global source_directory 2.8-stable
|
||||
%global source_directory 2.9-development
|
||||
|
||||
%if !0%{?rhel}
|
||||
# Optional features enabled in this build for Fedora.
|
||||
%global with_block_driver 1
|
||||
%global with_glance 1
|
||||
%global with_ovirt 1
|
||||
%global with_xen 1
|
||||
|
||||
# libguestfs hasn't been built on i686 for a while since there is no
|
||||
# kernel built for this architecture any longer and libguestfs rather
|
||||
# fundamentally depends on the kernel. Therefore we must exclude this
|
||||
# arch. Note there is no bug filed for this because we do not ever
|
||||
# expect that libguestfs or virt-v2v will be available on i686 so
|
||||
# there is nothing that needs fixing.
|
||||
ExcludeArch: %{ix86}
|
||||
|
||||
# Version extra string for Fedora.
|
||||
%global version_extra fedora=%{fedora},release=%{release}
|
||||
|
||||
%else
|
||||
|
||||
# Optional features enabled in this build for RHEL.
|
||||
%global with_block_driver 0
|
||||
%global with_glance 0
|
||||
%global with_ovirt 0
|
||||
%global with_xen 0
|
||||
|
||||
# Architectures where virt-v2v is shipped on RHEL:
|
||||
#
|
||||
# not on aarch64 because it is not useful there
|
||||
# not on %%{power64} because of RHBZ#1287826
|
||||
# not on s390x because it is not useful there
|
||||
ExclusiveArch: x86_64
|
||||
|
||||
# Version extra string for RHEL.
|
||||
%global version_extra rhel=%{rhel},release=%{release}
|
||||
|
||||
%endif
|
||||
|
||||
Name: virt-v2v
|
||||
Epoch: 1
|
||||
Version: 2.8.1
|
||||
Release: 9%{?dist}
|
||||
Version: 2.9.5
|
||||
Release: 1%{?dist}
|
||||
Summary: Convert a virtual machine to run on KVM
|
||||
|
||||
License: GPL-2.0-or-later AND LGPL-2.0-or-later
|
||||
@ -24,69 +62,39 @@ Source2: libguestfs.keyring
|
||||
Source3: copy-patches.sh
|
||||
|
||||
# Patches are maintained in the following repository:
|
||||
# https://github.com/libguestfs/virt-v2v/commits/rhel-10.1
|
||||
# https://github.com/libguestfs/virt-v2v/commits/rhel-10.2
|
||||
|
||||
# Patches.
|
||||
Patch0001: 0001-docs-Move-oo-verify-server-certificate-docs-to-alpha.patch
|
||||
Patch0002: 0002-input-input_vddk.ml-Fix-escaping-of-export-.-paramet.patch
|
||||
Patch0003: 0003-Modify-configure_pnputil_install-script-to-check.patch
|
||||
Patch0004: 0004-Update-the-common-submodule.patch
|
||||
Patch0005: 0005-Ignore-ERROR_NO_MORE_ITEMS-status-from-PnPUtil.patch
|
||||
Patch0006: 0006-v2v-Print-the-version-of-libnbd-nbdcopy-in-debug-out.patch
|
||||
Patch0007: 0007-vddk-Remove-io-vddk-noextents-option.patch
|
||||
Patch0008: 0008-curl-ssh-vddk-file-Add-nbdkit-count-filter.patch
|
||||
Patch0009: 0009-o-kubevirt-Add-oo-disk-to-allow-disk-names-to-be-ove.patch
|
||||
Patch0010: 0010-output-Add-optional-create-parameter.patch
|
||||
Patch0011: 0011-o-kubevirt-Add-oo-create-false-to-avoid-disk-creatio.patch
|
||||
Patch0012: 0012-RHEL-Fixes-for-libguestfs-winsupport.patch
|
||||
Patch0013: 0013-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch
|
||||
Patch0014: 0014-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch
|
||||
Patch0015: 0015-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch
|
||||
Patch0016: 0016-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
|
||||
Patch0017: 0017-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch
|
||||
Patch0018: 0018-RHEL-Remove-input-from-Xen.patch
|
||||
Patch0019: 0019-RHEL-Remove-o-glance.patch
|
||||
Patch0020: 0020-RHEL-tests-Remove-btrfs-test.patch
|
||||
Patch0021: 0021-RHEL-Remove-block-driver-option.patch
|
||||
Patch0022: 0022-RHEL-Remove-o-ovirt-o-ovirt-upload-and-o-vdsm-modes.patch
|
||||
Patch0023: 0023-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch
|
||||
Patch0024: 0024-remove-timeout-before-installing-virtio-win-drivers.patch
|
||||
Patch0025: 0025-v2v-Fix-SELinux-relabelling.patch
|
||||
Patch0026: 0026-RHEL-10-m4-Depend-on-libguestfs-1.56.1-2.el10-for-gu.patch
|
||||
Patch0027: 0027-convert-Model-target-boot-device.patch
|
||||
Patch0028: 0028-output-Add-boot-order-depending-on-target-boot-devic.patch
|
||||
Patch0029: 0029-convert-Detect-target-boot-device-for-Linux-guests.patch
|
||||
|
||||
%if !0%{?rhel}
|
||||
# libguestfs hasn't been built on i686 for a while since there is no
|
||||
# kernel built for this architecture any longer and libguestfs rather
|
||||
# fundamentally depends on the kernel. Therefore we must exclude this
|
||||
# arch. Note there is no bug filed for this because we do not ever
|
||||
# expect that libguestfs or virt-v2v will be available on i686 so
|
||||
# there is nothing that needs fixing.
|
||||
ExcludeArch: %{ix86}
|
||||
%else
|
||||
# Architectures where virt-v2v is shipped on RHEL:
|
||||
#
|
||||
# not on aarch64 because it is not useful there
|
||||
# not on %%{power64} because of RHBZ#1287826
|
||||
# not on s390x because it is not useful there
|
||||
ExclusiveArch: x86_64
|
||||
%endif
|
||||
Patch0001: 0001-m4-guestfs-perl.m4-IPC-Run3-is-now-required-by-podwr.patch
|
||||
Patch0002: 0002-RHEL-Fixes-for-libguestfs-winsupport.patch
|
||||
Patch0003: 0003-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch
|
||||
Patch0004: 0004-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch
|
||||
Patch0005: 0005-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch
|
||||
Patch0006: 0006-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
|
||||
Patch0007: 0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch
|
||||
Patch0008: 0008-RHEL-tests-Remove-btrfs-test.patch
|
||||
Patch0009: 0009-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch
|
||||
Patch0010: 0010-RHEL-10-m4-Depend-on-libguestfs-1.56.1-2.el10-for-gu.patch
|
||||
|
||||
BuildRequires: autoconf, automake, libtool
|
||||
BuildRequires: make
|
||||
BuildRequires: /usr/bin/pod2man
|
||||
BuildRequires: perl(Pod::Usage)
|
||||
BuildRequires: perl(Getopt::Long)
|
||||
BuildRequires: perl(IPC::Run3)
|
||||
BuildRequires: gcc
|
||||
BuildRequires: ocaml >= 4.08
|
||||
|
||||
BuildRequires: libguestfs-devel >= 1:1.56.1-2.el10
|
||||
BuildRequires: augeas-devel
|
||||
BuildRequires: bash-completion
|
||||
%if !0%{?rhel}
|
||||
BuildRequires: bash-completion-devel
|
||||
%endif
|
||||
BuildRequires: file
|
||||
BuildRequires: gettext-devel
|
||||
BuildRequires: json-c-devel
|
||||
BuildRequires: libnbd-devel >= 1.14
|
||||
BuildRequires: libnbd-devel >= 1.22
|
||||
BuildRequires: libosinfo-devel
|
||||
BuildRequires: libvirt-daemon-kvm
|
||||
BuildRequires: libvirt-devel
|
||||
@ -110,12 +118,10 @@ BuildRequires: glibc-utils
|
||||
BuildRequires: %{_bindir}/qemu-nbd
|
||||
BuildRequires: %{_bindir}/nbdcopy
|
||||
BuildRequires: %{_bindir}/nbdinfo
|
||||
BuildRequires: nbdkit-server >= 1.44
|
||||
BuildRequires: nbdkit-file-plugin
|
||||
BuildRequires: nbdkit-null-plugin
|
||||
%if !0%{?rhel}
|
||||
BuildRequires: nbdkit-python-plugin
|
||||
%endif
|
||||
BuildRequires: nbdkit-cow-filter >= 1.28.3-1.el9
|
||||
BuildRequires: nbdkit-cow-filter
|
||||
BuildRequires: mingw-srvany-redistributable >= 1.1-6
|
||||
%ifarch x86_64
|
||||
BuildRequires: glibc-static
|
||||
@ -152,24 +158,19 @@ Requires: edk2-ovmf
|
||||
Requires: edk2-aarch64
|
||||
%endif
|
||||
|
||||
%if !0%{?rhel}
|
||||
%if !%{with_ovirt}
|
||||
Requires: /usr/bin/python3
|
||||
%else
|
||||
%if 0%{?rhel} == 9
|
||||
Requires: platform-python
|
||||
# Python is not needed by RHEL 10.
|
||||
%endif
|
||||
%endif
|
||||
Requires: libnbd >= 1.10
|
||||
Requires: libnbd >= 1.22
|
||||
Requires: %{_bindir}/qemu-nbd
|
||||
Requires: %{_bindir}/nbdcopy
|
||||
Requires: %{_bindir}/nbdinfo
|
||||
Requires: nbdkit-server >= 1.28.3-1.el9
|
||||
Requires: nbdkit-server >= 1.44
|
||||
Requires: nbdkit-curl-plugin
|
||||
Requires: nbdkit-file-plugin
|
||||
Requires: nbdkit-nbd-plugin
|
||||
Requires: nbdkit-null-plugin
|
||||
%if !0%{?rhel}
|
||||
%if !%{with_ovirt}
|
||||
Requires: nbdkit-python-plugin
|
||||
%endif
|
||||
Requires: nbdkit-ssh-plugin
|
||||
@ -177,9 +178,9 @@ Requires: nbdkit-ssh-plugin
|
||||
Requires: nbdkit-vddk-plugin
|
||||
%endif
|
||||
Requires: nbdkit-blocksize-filter
|
||||
Requires: nbdkit-cow-filter >= 1.28.3-1.el9
|
||||
Requires: nbdkit-count-filter
|
||||
Requires: nbdkit-cow-filter
|
||||
Requires: nbdkit-multi-conn-filter
|
||||
Requires: nbdkit-noextents-filter
|
||||
Requires: nbdkit-rate-filter
|
||||
Requires: nbdkit-retry-filter
|
||||
|
||||
@ -245,11 +246,27 @@ autoreconf -fiv
|
||||
|
||||
%build
|
||||
%configure \
|
||||
%if !0%{?rhel}
|
||||
--with-extra="fedora=%{fedora},release=%{release}" \
|
||||
%if %{with_block_driver}
|
||||
--enable-block-driver \
|
||||
%else
|
||||
--with-extra="rhel=%{rhel},release=%{release}" \
|
||||
--disable-block-driver \
|
||||
%endif
|
||||
%if %{with_glance}
|
||||
--enable-glance \
|
||||
%else
|
||||
--disable-glance \
|
||||
%endif
|
||||
%if %{with_ovirt}
|
||||
--enable-ovirt \
|
||||
%else
|
||||
--disable-ovirt \
|
||||
%endif
|
||||
%if %{with_xen}
|
||||
--enable-xen \
|
||||
%else
|
||||
--disable-xen \
|
||||
%endif
|
||||
--with-extra="%{version_extra}"
|
||||
|
||||
make V=1 %{?_smp_mflags}
|
||||
|
||||
@ -276,6 +293,23 @@ rm -f $RPM_BUILD_ROOT%{_mandir}/man1/virt-v2v-output-ovirt.1*
|
||||
|
||||
|
||||
%check
|
||||
# Check that the binary runs and the features match those configured.
|
||||
./run virt-v2v --version
|
||||
./run virt-v2v --machine-readable | tee machine-readable.out
|
||||
grep "virt-v2v-2.0" machine-readable.out
|
||||
grep "input:disk" machine-readable.out
|
||||
%if %{with_block_driver}
|
||||
grep "block-driver-option" machine-readable.out
|
||||
%endif
|
||||
%if %{with_glance}
|
||||
grep "output:glance" machine-readable.out
|
||||
%endif
|
||||
%if %{with_ovirt}
|
||||
grep "output:ovirt$" machine-readable.out
|
||||
grep "output:ovirt-upload" machine-readable.out
|
||||
grep "output:vdsm" machine-readable.out
|
||||
%endif
|
||||
|
||||
%ifarch x86_64
|
||||
# Only run the tests with non-debug (ie. non-Rawhide) kernels.
|
||||
# XXX This tests for any debug kernel installed.
|
||||
@ -314,15 +348,17 @@ done
|
||||
%{_mandir}/man1/virt-v2v.1*
|
||||
%{_mandir}/man1/virt-v2v-hacking.1*
|
||||
%{_mandir}/man1/virt-v2v-input-vmware.1*
|
||||
%if !0%{?rhel}
|
||||
%if %{with_xen}
|
||||
%{_mandir}/man1/virt-v2v-input-xen.1*
|
||||
%endif
|
||||
%if !0%{?rhel}
|
||||
%{_mandir}/man1/virt-v2v-in-place.1*
|
||||
%endif
|
||||
%{_mandir}/man1/virt-v2v-inspector.1*
|
||||
%{_mandir}/man1/virt-v2v-open.1*
|
||||
%{_mandir}/man1/virt-v2v-output-local.1*
|
||||
%{_mandir}/man1/virt-v2v-output-openstack.1*
|
||||
%if !0%{?rhel}
|
||||
%if %{with_ovirt}
|
||||
%{_mandir}/man1/virt-v2v-output-ovirt.1*
|
||||
%endif
|
||||
%{_mandir}/man1/virt-v2v-release-notes-1.42.1*
|
||||
@ -346,7 +382,11 @@ done
|
||||
|
||||
|
||||
%changelog
|
||||
* Aug 21 2025 Richard W.M. Jones <rjones@redhat.com> - 1:2.8.1-9
|
||||
* Fri Aug 29 2025 Richard W.M. Jones <rjones@redhat.com> - 1:2.9.5-1
|
||||
- Rebase to virt-v2v 2.9.5
|
||||
resolves: RHEL-111241
|
||||
|
||||
* Thu Aug 21 2025 Richard W.M. Jones <rjones@redhat.com> - 1:2.8.1-9
|
||||
- Rebase to virt-v2v 2.8.1
|
||||
related: RHEL-81735
|
||||
- Fix virt-v2v -v --install dnf5 error
|
||||
|
||||
Loading…
Reference in New Issue
Block a user