Rebase to virt-v2v 2.9.5

resolves: RHEL-111241
This commit is contained in:
Richard W.M. Jones 2025-08-29 13:16:02 +01:00
parent c6d4be1cf0
commit b75d10f0d5
33 changed files with 181 additions and 7257 deletions

View File

@ -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

View File

@ -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])

View File

@ -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"

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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\

View File

@ -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

View File

@ -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

View File

@ -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 |>

View File

@ -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

View File

@ -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.

View File

@ -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 = \

View File

@ -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;

View File

@ -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;

View File

@ -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
-guests disks are written to:
+specified by I<-os /dir> (the directory must exist).
+
+By default the converted guests 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

View File

@ -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

View File

@ -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

View File

@ -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. *)

View File

@ -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 guests 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";

View File

@ -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 wont 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.

View File

@ -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

View File

@ -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\

View File

@ -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.

View File

@ -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} *)

View File

@ -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'/>

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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