Rebase to virt-v2v 2.7.10

related: RHEL-81735
Fix virt-v2v -v --install dnf5 error
resolves: RHEL-83288
Print blkhash of converted image in virt-v2v debugging output
resolves: RHEL-85514
This commit is contained in:
Richard W.M. Jones 2025-03-31 13:38:48 +01:00
parent c3ef9bc846
commit c7438ea845
39 changed files with 2000 additions and 5171 deletions

View File

@ -1,60 +0,0 @@
From 8dd5577174fe23ace5ecba7a81d2516315a0b301 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Wed, 30 Oct 2024 10:16:35 +0000
Subject: [PATCH] lib: OVF: Add preliminary support for Windows Server 2025
Unfortunately support has not yet been added to oVirt. However I have
inferred the correct ostype value based on existing entries.
Also pull in the following commit from the common submodule:
Richard W.M. Jones (1):
mlcustomize: Add heuristic support for Windows Server 2025
Related: https://issues.redhat.com/browse/RHEL-65009
Related: https://issues.redhat.com/browse/RHEL-65010
Reported-by: Ming Xie
---
common | 2 +-
lib/create_ovf.ml | 4 +++-
2 files changed, 4 insertions(+), 2 deletions(-)
Submodule common e9eea65a..2d42128e:
diff --git a/common/mlcustomize/inject_virtio_win.ml b/common/mlcustomize/inject_virtio_win.ml
index 88c1c8cf..7e46f318 100644
--- a/common/mlcustomize/inject_virtio_win.ml
+++ b/common/mlcustomize/inject_virtio_win.ml
@@ -522,6 +522,8 @@ and virtio_iso_path_matches_guest_os t path =
(10, 0, not_client, ((=) "win2k19"))
else if pathelem "2k22" || pathelem "win2022" then
(10, 0, not_client, ((=) "win2k22"))
+ else if pathelem "2k25" || pathelem "win2025" then
+ (10, 0, not_client, ((=) "win2k25"))
else
raise Not_found in
diff --git a/lib/create_ovf.ml b/lib/create_ovf.ml
index f0b32e01..e2c19b08 100644
--- a/lib/create_ovf.ml
+++ b/lib/create_ovf.ml
@@ -242,10 +242,11 @@ and get_ostype = function
| "win2k16" -> "windows_2016x64"
| "win2k19" -> "windows_2019x64"
| "win2k22" -> "windows_2022"
+ | "win2k25" -> "windows_2025"
| _ ->
warning (f_"unknown Windows 10 variant: %s (%s)")
osinfo product;
- "windows_2022"
+ "windows_2025"
)
| { i_type = typ; i_distro = distro;
@@ -448,6 +449,7 @@ and get_ovirt_osid = function
| "win2k16" -> (* windows_2016x64 *) 29
| "win2k19" -> (* windows_2019x64 *) 31
| "win2k22" -> (* windows_2022 *) 37
+ (*| "win2k25" -> (* windows_2025 *) not yet known - 2024/10 *)
| _ ->
warning (f_"unknown Windows 10 variant: %s (%s)")
osinfo product;

View File

@ -0,0 +1,119 @@
From 610a5d66eca090169cc91e76a16f5a045139e607 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Sat, 22 Mar 2025 13:11:58 +0000
Subject: [PATCH] v2v/v2v_unit_tests.ml: Remove use of oUnit
---
v2v/Makefile.am | 12 +++---------
v2v/v2v_unit_tests.ml | 29 ++++++++++++-----------------
2 files changed, 15 insertions(+), 26 deletions(-)
diff --git a/v2v/Makefile.am b/v2v/Makefile.am
index 9747c3a2..2e0ecaaa 100644
--- a/v2v/Makefile.am
+++ b/v2v/Makefile.am
@@ -125,12 +125,8 @@ virt_v2v_LINK = \
virttoolsdatadir = $(datadir)/virt-tools
-if HAVE_OCAML_PKG_OUNIT
-TESTS = \
- v2v_unit_tests
-check_PROGRAMS = \
- v2v_unit_tests
-endif
+TESTS = v2v_unit_tests
+check_PROGRAMS = v2v_unit_tests
v2v_unit_tests_BOBJECTS = \
../lib/create_ovf.cmo \
@@ -146,10 +142,8 @@ v2v_unit_tests_CFLAGS = $(virt_v2v_CFLAGS)
if !HAVE_OCAMLOPT
# Can't call this v2v_unit_tests_OBJECTS because automake gets confused.
v2v_unit_tests_THEOBJECTS = $(v2v_unit_tests_BOBJECTS)
-v2v_unit_tests.cmo: OCAMLPACKAGES += -package ounit2
else
v2v_unit_tests_THEOBJECTS = $(v2v_unit_tests_XOBJECTS)
-v2v_unit_tests.cmx: OCAMLPACKAGES += -package ounit2
endif
v2v_unit_tests_DEPENDENCIES = \
@@ -166,7 +160,7 @@ v2v_unit_tests_DEPENDENCIES = \
v2v_unit_tests_LINK = \
$(top_srcdir)/ocaml-link.sh -cclib '$(OCAMLCLIBS)' -- \
$(OCAMLFIND) $(BEST) $(OCAMLFLAGS) \
- $(OCAMLPACKAGES) -package ounit2 \
+ $(OCAMLPACKAGES) \
$(OCAMLLINKFLAGS) \
$(v2v_unit_tests_THEOBJECTS) -o $@
diff --git a/v2v/v2v_unit_tests.ml b/v2v/v2v_unit_tests.ml
index 89da6488..581b0e11 100644
--- a/v2v/v2v_unit_tests.ml
+++ b/v2v/v2v_unit_tests.ml
@@ -20,14 +20,19 @@
open Printf
-open OUnit2
-
open Std_utils
open Tools_utils
open Types
open Utils
+let assert_equal ?(cmp = fun a b -> a = b) ~printer a b =
+ if not (cmp a b) then
+ failwithf "FAIL: %s <> %s" (printer a) (printer b)
+
+let assert_bool name b =
+ if not b then failwithf "FAIL: %s" name
+
let inspect_defaults = {
i_type = ""; i_distro = ""; i_osinfo = ""; i_arch = "";
i_major_version = 0; i_minor_version = 0;
@@ -40,7 +45,8 @@ let inspect_defaults = {
i_drive_mappings = [];
}
-let test_get_ostype ctx =
+(* Test Create_ovf.get_ostype *)
+let () =
let printer = identity in
assert_equal ~printer "RHEL6"
(Create_ovf.get_ostype {
@@ -112,14 +118,15 @@ let test_get_ostype ctx =
i_product_variant = "Server";
i_arch = "x86_64" })
-let test_qemu_img_supports ctx =
+(* Test Utils.qemu_img_supports_offset_and_size *)
+let () =
(* No assertion here, we don't know if qemu-img supports the
* feature, so just run the code and make sure it doesn't crash.
*)
ignore (Utils.qemu_img_supports_offset_and_size ())
(* Test the VMX file parser in the Parse_vmx module. *)
-let test_vmx_parse_string ctx =
+let () =
let cmp = Parse_vmx.equal in
let printer = Parse_vmx.to_string 0 in
@@ -259,15 +266,3 @@ foo.a.b = \"abc\"
foo.a.c = \"abc\"
" in
assert_equal ~cmp ~printer t2 t1
-
-(* Suites declaration. *)
-let suite =
- "virt-v2v" >:::
- [
- "Create_ovf.get_ostype" >:: test_get_ostype;
- "Utils.qemu_img_supports" >:: test_qemu_img_supports;
- "Parse_vmx.parse_string" >::test_vmx_parse_string;
- ]
-
-let () =
- run_test_tt_main suite

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,77 @@
From cffd129d8fd47554255d52ad611d58a30b6b9951 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Mon, 31 Mar 2025 11:06:09 +0100
Subject: [PATCH] v2v: Use nbdcopy --blkhash in verbose mode
In verbose mode, and if nbdcopy supports it, add the nbdcopy --blkhash
option. This will compute and print a hash of the disk as we are
copying it (more precisely, a hash of the source disk after conversion
changes have been made). This will allow users to detect any
corruption during or after writing the output.
This feature requires nbdcopy >= 1.23.1
It adds some overhead to the copy, but (a) we're almost always copying
over the network which is slow anyway and (b) this is only done in
verbose mode where there's a lot of overhead from the output anyway.
However keep an eye on this overhead.
Note what is printed is a blkhash, not a regular checksum. See:
https://gitlab.com/nirs/blkhash/
Fixes: https://issues.redhat.com/browse/RHEL-85508
Fixes: https://issues.redhat.com/browse/RHEL-85512
Fixes: https://issues.redhat.com/browse/RHEL-85514
---
lib/utils.ml | 8 ++++++++
lib/utils.mli | 3 +++
v2v/v2v.ml | 3 +++
3 files changed, 14 insertions(+)
diff --git a/lib/utils.ml b/lib/utils.ml
index eab69d5a..9568a9d9 100644
--- a/lib/utils.ml
+++ b/lib/utils.ml
@@ -180,6 +180,14 @@ let error_if_no_ssh_agent () =
is not set). This is required by qemu to do passwordless \
ssh access. See the virt-v2v(1) man page for more information.")
+let nbdcopy_supports_blkhash =
+ let check =
+ lazy (
+ let cmd = sprintf "%s --help | grep -sq -- --blkhash" Config.nbdcopy in
+ 0 = Sys.command cmd
+ ) in
+ fun () -> Lazy.force check
+
(* Create the directory containing inX and outX sockets. *)
let create_v2v_directory () =
let d = Mkdtemp.temp_dir "v2v." in
diff --git a/lib/utils.mli b/lib/utils.mli
index 9c394eca..a79628bd 100644
--- a/lib/utils.mli
+++ b/lib/utils.mli
@@ -68,6 +68,9 @@ val chown_for_libvirt_rhbz_1045069 : string -> unit
val error_if_no_ssh_agent : unit -> unit
+val nbdcopy_supports_blkhash : unit -> bool
+(** Return true if [nbdcopy] supports the [--blkhash] flag. *)
+
val create_v2v_directory : unit -> string
(** Create the directory containing inX and outX sockets. *)
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index c0ca26ec..1fcf8e61 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -728,6 +728,9 @@ and nbdcopy ?request_size output_alloc input_uri output_uri =
min 64 (target_buffer_size / request_size) in
List.push_back cmd (sprintf "--requests=%d" requests);
+ if verbose () && nbdcopy_supports_blkhash () then
+ List.push_back cmd "--blkhash";
+
List.push_back cmd "--flush";
(*List.push_back cmd "--verbose";*)

View File

@ -1,4 +1,4 @@
From 8d792ee85d5fc188cba79faff477ef5f73d73022 Mon Sep 17 00:00:00 2001
From 7236e9f76c1c0e41d1e95971adc638e39887dea8 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 26c1ba48..07dae8c2 100644
index 2a21b5cf..39778724 100644
--- a/output/output_qemu.ml
+++ b/output/output_qemu.ml
@@ -131,7 +131,7 @@ module QEMU = struct
@@ -159,7 +159,7 @@ module QEMU = struct
* module deals with shell and qemu comma quoting.
*)
let cmd = Qemuopts.create () in

View File

@ -1,4 +1,4 @@
From f2dbe2f1c595c1201b0f404950b3c4c57f11c04b Mon Sep 17 00:00:00 2001
From dabda2010e51d05ccab05d29e5977c58908b5440 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
@ -17,7 +17,7 @@ qemu script.
4 files changed, 5 insertions(+), 23 deletions(-)
diff --git a/docs/virt-v2v-output-local.pod b/docs/virt-v2v-output-local.pod
index d2a1c270..0be37f5e 100644
index 5a342434..bdf12c5d 100644
--- a/docs/virt-v2v-output-local.pod
+++ b/docs/virt-v2v-output-local.pod
@@ -9,7 +9,7 @@ or libvirt
@ -44,7 +44,7 @@ index d2a1c270..0be37f5e 100644
=item B<-o null>
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
index 5345a6c9..a1e8fb30 100644
index 084f29e7..97d9397f 100644
--- a/docs/virt-v2v.pod
+++ b/docs/virt-v2v.pod
@@ -157,11 +157,6 @@ Since F<guest-domain.xml> contains the path(s) to the guest disk
@ -81,7 +81,7 @@ index 5345a6c9..a1e8fb30 100644
=item B<-oo verify-server-certificate>
=item B<-oo verify-server-certificate=>C<true|false>
@@ -793,10 +780,6 @@ Print information about the source guest and stop. This option is
@@ -806,10 +793,6 @@ Print information about the source guest and stop. This option is
useful when you are setting up network and bridge maps.
See L</Networks and bridges>.
@ -93,7 +93,7 @@ index 5345a6c9..a1e8fb30 100644
=item B<--quiet>
diff --git a/output/output_qemu.ml b/output/output_qemu.ml
index 07dae8c2..b6f24565 100644
index 39778724..416000cd 100644
--- a/output/output_qemu.ml
+++ b/output/output_qemu.ml
@@ -65,6 +65,9 @@ module QEMU = struct
@ -107,11 +107,11 @@ index 07dae8c2..b6f24565 100644
let output_storage =
match options.output_storage with
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index 194e6233..6baa111f 100644
index 1fcf8e61..77a37eca 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -277,8 +277,6 @@ let rec main () =
s_"Same as -ip filename";
@@ -280,8 +280,6 @@ let rec main () =
s_"Run up to N instances of nbdcopy in parallel";
[ L"print-source" ], Getopt.Set print_source,
s_"Print source and stop";
- [ L"qemu-boot" ], Getopt.Unit (fun () -> set_output_option_compat "qemu-boot" ""),

View File

@ -1,4 +1,4 @@
From c9da5056aa7b0d939724b325808a587f79fdb01e Mon Sep 17 00:00:00 2001
From 6f02c25c8000ccfa7eb0daa6c886fa6b99c15eef Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Fri, 24 Apr 2015 09:45:41 -0400
Subject: [PATCH] RHEL: Fix list of supported sound cards to match RHEL qemu
@ -9,10 +9,10 @@ Subject: [PATCH] RHEL: Fix list of supported sound cards to match RHEL qemu
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/lib/utils.ml b/lib/utils.ml
index bf010a0a..4c9b7415 100644
index 9568a9d9..b30ac256 100644
--- a/lib/utils.ml
+++ b/lib/utils.ml
@@ -60,13 +60,14 @@ let kvm_arch = function
@@ -66,13 +66,14 @@ let kvm_arch = function
(* Does qemu support the given sound card? *)
let qemu_supports_sound_card = function
| Types.AC97
@ -27,5 +27,5 @@ index bf010a0a..4c9b7415 100644
- -> true
+ -> false
(* Find the UEFI firmware. *)
let find_uefi_firmware guest_arch =
let compare_app2_versions app1 app2 =
let i = compare app1.Guestfs.app2_epoch app2.Guestfs.app2_epoch in

View File

@ -1,7 +1,7 @@
From de77ecd123658dd28362da72783424f4a3ff5deb Mon Sep 17 00:00:00 2001
From c30041193a17787a7904b3154213f145cc798a15 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.
Subject: [PATCH] RHEL: Fixes for libguestfs-winsupport
In tests we cannot use guestfish for arbitrary Windows edits.
In virt-v2v helpers we must set the program name to virt-v2v.
@ -9,16 +9,17 @@ In virt-v2v helpers we must set the program name to virt-v2v.
For RHEL 9.3 and above, see this comment:
https://bugzilla.redhat.com/show_bug.cgi?id=2187961#c1
---
convert/convert.ml | 1 +
test-data/phony-guests/make-windows-img.sh | 1 +
tests/test-v2v-block-driver.sh | 6 +++++-
tests/test-v2v-in-place.sh | 8 +++++++-
tests/test-v2v-virtio-win-iso.sh | 8 +++++++-
tests/test-v2v-windows-conversion.sh | 8 +++++++-
6 files changed, 28 insertions(+), 4 deletions(-)
convert/convert.ml | 1 +
test-data/phony-guests/make-windows-img.sh | 1 +
tests/test-block-driver.sh | 6 +++++-
tests/test-in-place.sh | 8 +++++++-
tests/test-virtio-win-iso.sh | 8 +++++++-
tests/test-windows-conversion.sh | 8 +++++++-
tests/test-windows-phony.sh | 13 ++++++++++++-
7 files changed, 40 insertions(+), 5 deletions(-)
diff --git a/convert/convert.ml b/convert/convert.ml
index 64b36c97..604902d1 100644
index 1deb1478..ed8ad537 100644
--- a/convert/convert.ml
+++ b/convert/convert.ml
@@ -53,6 +53,7 @@ let rec convert dir options source =
@ -30,21 +31,21 @@ index 64b36c97..604902d1 100644
(* Setting the number of vCPUs allows parallel mkinitrd, but make
* sure this is not too large because each vCPU consumes guest RAM.
diff --git a/test-data/phony-guests/make-windows-img.sh b/test-data/phony-guests/make-windows-img.sh
index 501c2a93..28b2744f 100755
index b52d2522..8d036ee6 100755
--- a/test-data/phony-guests/make-windows-img.sh
+++ b/test-data/phony-guests/make-windows-img.sh
@@ -37,6 +37,7 @@ fi
@@ -49,6 +49,7 @@ fi
# Create a disk image.
guestfish <<EOF
+set-program virt-testing
sparse windows.img-t 512M
sparse $IMAGENAME-t 512M
run
diff --git a/tests/test-v2v-block-driver.sh b/tests/test-v2v-block-driver.sh
index db59a2cf..a0e56bed 100755
--- a/tests/test-v2v-block-driver.sh
+++ b/tests/test-v2v-block-driver.sh
diff --git a/tests/test-block-driver.sh b/tests/test-block-driver.sh
index 595e969c..0b8ac6ea 100755
--- a/tests/test-block-driver.sh
+++ b/tests/test-block-driver.sh
@@ -100,7 +100,11 @@ check_driver_presence ()
local virtio_dir="/Windows/Drivers/VirtIO"
@ -58,10 +59,10 @@ index db59a2cf..a0e56bed 100755
is-dir $virtio_dir
is-file $virtio_dir/$drv.cat
is-file $virtio_dir/$drv.inf
diff --git a/tests/test-v2v-in-place.sh b/tests/test-v2v-in-place.sh
index 4373f140..2b31b0bb 100755
--- a/tests/test-v2v-in-place.sh
+++ b/tests/test-v2v-in-place.sh
diff --git a/tests/test-in-place.sh b/tests/test-in-place.sh
index e66d2647..38d05de5 100755
--- a/tests/test-in-place.sh
+++ b/tests/test-in-place.sh
@@ -89,6 +89,12 @@ mktest ()
:> "$script"
:> "$expected"
@ -84,10 +85,10 @@ index 4373f140..2b31b0bb 100755
diff -u "$expected" "$response"
# Test the base image remained untouched
diff --git a/tests/test-v2v-virtio-win-iso.sh b/tests/test-v2v-virtio-win-iso.sh
index 68fb879b..2e133034 100755
--- a/tests/test-v2v-virtio-win-iso.sh
+++ b/tests/test-v2v-virtio-win-iso.sh
diff --git a/tests/test-virtio-win-iso.sh b/tests/test-virtio-win-iso.sh
index ccc42550..cd92db92 100755
--- a/tests/test-virtio-win-iso.sh
+++ b/tests/test-virtio-win-iso.sh
@@ -82,6 +82,12 @@ mktest ()
:> "$script"
:> "$expected"
@ -108,10 +109,10 @@ index 68fb879b..2e133034 100755
-guestfish --ro -a "$d/windows-sda" -i < "$script" > "$response"
+guestfish --ro -a "$d/windows-sda" < "$script" > "$response"
diff -u "$expected" "$response"
diff --git a/tests/test-v2v-windows-conversion.sh b/tests/test-v2v-windows-conversion.sh
index a4cf191d..1ff41f6a 100755
--- a/tests/test-v2v-windows-conversion.sh
+++ b/tests/test-v2v-windows-conversion.sh
diff --git a/tests/test-windows-conversion.sh b/tests/test-windows-conversion.sh
index bfe04904..eeddcb86 100755
--- a/tests/test-windows-conversion.sh
+++ b/tests/test-windows-conversion.sh
@@ -76,6 +76,12 @@ mktest ()
:> "$script"
:> "$expected"
@ -125,12 +126,41 @@ index a4cf191d..1ff41f6a 100755
firstboot_dir="/Program Files/Guestfs/Firstboot"
mktest "is-dir \"$firstboot_dir\"" true
mktest "is-file \"$firstboot_dir/firstboot.bat\"" true
@@ -88,7 +94,7 @@ for drv in netkvm vioscsi viostor; do
done
done
@@ -83,7 +89,7 @@ mktest "is-dir \"$firstboot_dir/scripts\"" true
virtio_dir="/Windows/Drivers/VirtIO"
mktest "ls \"$virtio_dir\"" "$(cat test-windows-conversion-ls.txt)"
-guestfish --ro -a "$d/windows-sda" -i < "$script" > "$response"
+guestfish --ro -a "$d/windows-sda" < "$script" > "$response"
diff -u "$expected" "$response"
# 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 066ff0ff..3f761b68 100755
--- a/tests/test-windows-phony.sh
+++ b/tests/test-windows-phony.sh
@@ -69,6 +69,17 @@ mktest ()
:> "$script"
:> "$expected"
+cat >> "$script" <<EOF
+ set-program virt-testing
+ run
+ inspect-os
+ mount /dev/sda2 /
+EOF
+
+cat >> "$expected" <<EOF
+/dev/sda2
+EOF
+
firstboot_dir="/Program Files/Guestfs/Firstboot"
mktest "is-dir \"$firstboot_dir\"" true
mktest "is-file \"$firstboot_dir/firstboot.bat\"" true
@@ -78,5 +89,5 @@ mktest "ls \"$virtio_dir\"" "$(cat test-phony-$guestname-ls.txt)"
osinfo_name="${guestname%-32}"
mktest "inspect-get-osinfo /dev/sda2" "$osinfo_name"
-guestfish --ro -a "$d/$guestname-sda" -i < "$script" > "$response"
+guestfish --ro -a "$d/$guestname-sda" < "$script" > "$response"
diff -u "$expected" "$response"

View File

@ -1,4 +1,4 @@
From 1c85b582fc38f379b54efe344dc2323db95acc78 Mon Sep 17 00:00:00 2001
From 1fdd651db409b8432a836f4097296d551d22ff07 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,12 +9,12 @@ 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 cf1f811b..27fc80de 100644
index 61ac9a8b..a54f06f9 100644
--- a/input/input_disk.ml
+++ b/input/input_disk.ml
@@ -77,7 +77,7 @@ module Disk = struct
s_features = [ "acpi"; "apic"; "pae" ];
@@ -78,7 +78,7 @@ module Disk = struct
s_firmware = UnknownFirmware; (* causes virt-v2v to autodetect *)
s_uefi_secureboot = false;
s_display =
- Some { s_display_type = Window; s_keymap = None; s_password = None;
+ Some { s_display_type = VNC; s_keymap = None; s_password = None;

View File

@ -1,4 +1,4 @@
From 6b7b2934d54d5273bb6c444ddabccef3a64c5eee Mon Sep 17 00:00:00 2001
From aea6d02693e0f3afc36c5052d70e04ff58b95c32 Mon Sep 17 00:00:00 2001
From: Pino Toscano <ptoscano@redhat.com>
Date: Tue, 26 Mar 2019 09:42:25 +0100
Subject: [PATCH] RHEL: point to KB for supported v2v hypervisors/guests
@ -8,7 +8,7 @@ Subject: [PATCH] RHEL: point to KB for supported v2v hypervisors/guests
1 file changed, 4 insertions(+), 92 deletions(-)
diff --git a/docs/virt-v2v-support.pod b/docs/virt-v2v-support.pod
index e6415692..1ffc0f9d 100644
index 60cd1b69..f563389e 100644
--- a/docs/virt-v2v-support.pod
+++ b/docs/virt-v2v-support.pod
@@ -8,98 +8,10 @@ systems and guests in virt-v2v

View File

@ -1,4 +1,4 @@
From 0b4fc69b54bf5a8fafc9bed62749ff2c91eeb21d Mon Sep 17 00:00:00 2001
From 9657cdcf89cd7ae09fe1890908655fb9e08b64fa 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
@ -11,19 +11,19 @@ Fixes: https://issues.redhat.com/browse/RHEL-37687
---
docs/Makefile.am | 14 ----
docs/virt-v2v-input-xen.pod | 154 ------------------------------------
docs/virt-v2v.pod | 52 ++----------
docs/virt-v2v.pod | 50 ++----------
input/Makefile.am | 4 +-
input/input_xen_ssh.ml | 132 -------------------------------
input/input_xen_ssh.mli | 21 -----
inspector/inspector.ml | 4 -
v2v/v2v.ml | 5 --
8 files changed, 6 insertions(+), 380 deletions(-)
8 files changed, 6 insertions(+), 378 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 0f6a3e21..7cb6e09a 100644
index dc36487c..36a831bf 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -23,7 +23,6 @@ EXTRA_DIST = \
@ -70,7 +70,7 @@ index 0f6a3e21..7cb6e09a 100644
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 4a0544f8..00000000
index 0417e89f..00000000
--- a/docs/virt-v2v-input-xen.pod
+++ /dev/null
@@ -1,154 +0,0 @@
@ -227,9 +227,9 @@ index 4a0544f8..00000000
-
-=head1 COPYRIGHT
-
-Copyright (C) 2009-2020 Red Hat Inc.
-Copyright (C) 2009-2025 Red Hat Inc.
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
index a1e8fb30..ca75c255 100644
index 97d9397f..036b72ab 100644
--- a/docs/virt-v2v.pod
+++ b/docs/virt-v2v.pod
@@ -12,7 +12,7 @@ virt-v2v - Convert a guest to use KVM
@ -277,7 +277,7 @@ index a1e8fb30..ca75c255 100644
=item B<-if> format
@@ -859,40 +851,6 @@ __CUSTOMIZE_OPTIONS__
@@ -872,38 +864,6 @@ __CUSTOMIZE_OPTIONS__
=head1 NOTES
@ -292,8 +292,6 @@ index a1e8fb30..ca75c255 100644
-installed. For some older Linux distributions, this means installing
-a kernel from the table below:
-
- RHEL 3 (Does not apply, as there was no Xen PV kernel)
-
- RHEL 4 i686 with > 10GB of RAM: install 'kernel-hugemem'
- i686 SMP: install 'kernel-smp'
- other i686: install 'kernel'
@ -318,7 +316,7 @@ index a1e8fb30..ca75c255 100644
=head2 Enabling virtio
"Virtio" is the name for a set of drivers which make disk (block
@@ -1184,7 +1142,7 @@ bandwidth. Virt-v2v should be able to copy guest data at gigabit
@@ -1229,7 +1189,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
@ -328,7 +326,7 @@ index a1e8fb30..ca75c255 100644
=head3 Disk space
diff --git a/input/Makefile.am b/input/Makefile.am
index 4153f878..2f4ceb0c 100644
index 19f30b47..a33b826a 100644
--- a/input/Makefile.am
+++ b/input/Makefile.am
@@ -29,7 +29,6 @@ SOURCES_MLI = \
@ -351,12 +349,12 @@ index 4153f878..2f4ceb0c 100644
# compilation of the C sources for us. At the end we take the C
diff --git a/input/input_xen_ssh.ml b/input/input_xen_ssh.ml
deleted file mode 100644
index c4235a4b..00000000
index 77ee0ea1..00000000
--- a/input/input_xen_ssh.ml
+++ /dev/null
@@ -1,132 +0,0 @@
-(* helper-v2v-input
- * Copyright (C) 2009-2021 Red Hat Inc.
- * 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
@ -489,12 +487,12 @@ index c4235a4b..00000000
-end
diff --git a/input/input_xen_ssh.mli b/input/input_xen_ssh.mli
deleted file mode 100644
index fa048231..00000000
index 339309b8..00000000
--- a/input/input_xen_ssh.mli
+++ /dev/null
@@ -1,21 +0,0 @@
-(* virt-v2v
- * Copyright (C) 2009-2021 Red Hat Inc.
- * 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
@ -515,7 +513,7 @@ index fa048231..00000000
-
-module XenSSH : Input.INPUT
diff --git a/inspector/inspector.ml b/inspector/inspector.ml
index 1ad67bbc..d7cbf449 100644
index 0a04b312..47d50347 100644
--- a/inspector/inspector.ml
+++ b/inspector/inspector.ml
@@ -296,10 +296,6 @@ read the man page virt-v2v-inspector(1).
@ -530,10 +528,10 @@ index 1ad67bbc..d7cbf449 100644
* 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 6baa111f..9a622da0 100644
index 77a37eca..9999b639 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -398,7 +398,6 @@ read the man page virt-v2v(1).
@@ -404,7 +404,6 @@ read the man page virt-v2v(1).
pr "virt-v2v-2.0\n";
pr "libguestfs-rewrite\n";
pr "vcenter-https\n";
@ -541,7 +539,7 @@ index 6baa111f..9a622da0 100644
pr "vddk\n";
pr "colours-option\n";
pr "vdsm-compat-option\n";
@@ -463,10 +462,6 @@ read the man page virt-v2v(1).
@@ -470,10 +469,6 @@ read the man page virt-v2v(1).
| Some server, Some ("esx"|"gsx"|"vpx"), Some `VDDK ->
(module Input_vddk.VDDK)

View File

@ -1,84 +0,0 @@
From af62ac81540fc6baf10c572ae5440dd4b678b073 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 2 Dec 2021 11:56:05 +0000
Subject: [PATCH] RHEL: Remove the --in-place option
This disables the virt-v2v --in-place option which we do not
wish to support in RHEL.
---
docs/virt-v2v.pod | 8 --------
tests/Makefile.am | 1 -
v2v/v2v.ml | 8 --------
3 files changed, 17 deletions(-)
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
index 6e26e62c..2230a556 100644
--- a/docs/virt-v2v.pod
+++ b/docs/virt-v2v.pod
@@ -25,9 +25,6 @@ virtualize those machines (physical to virtual, or p2v).
To estimate the disk space needed before conversion, see
L<virt-v2v-inspector(1)>.
-For in-place conversion, there is a separate tool called
-L<virt-v2v-in-place(1)>.
-
=head2 Input and Output
You normally run virt-v2v with several I<-i*> options controlling the
@@ -40,10 +37,6 @@ The input and output sides of virt-v2v are separate and unrelated.
Virt-v2v can read from any input and write to any output. Therefore
these sides of virt-v2v are documented separately in this manual.
-Virt-v2v normally copies from the input to the output, called "copying
-mode". In this case the source guest is always left unchanged.
-In-place conversions may be done using L<virt-v2v-in-place(1)>.
-
=head2 Customization
Virt-v2v can also customize the guest during conversion, using the
@@ -1639,7 +1632,6 @@ L<https://rwmj.wordpress.com/2015/09/18/importing-kvm-guests-to-ovirt-or-rhev/#c
L<virt-p2v(1)>,
L<virt-v2v-inspector(1)>,
-L<virt-v2v-in-place(1)>,
L<virt-customize(1)>,
L<virt-df(1)>,
L<virt-filesystems(1)>,
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 1c3d6064..cee516c4 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -77,7 +77,6 @@ TESTS = \
test-v2v-floppy.sh \
test-v2v-i-disk.sh \
test-v2v-i-ova.sh \
- test-v2v-in-place.sh \
test-v2v-block-driver.sh \
test-v2v-inspector.sh \
test-v2v-mac.sh \
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index 801aaf7d..c18aeaa1 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -219,12 +219,6 @@ let rec main () =
warning (f_"the --vmtype option has been removed and now does nothing")
in
- (* Options that are errors. *)
- let in_place_error _ =
- error (f_"The --in-place option has been replaced by the \
- virt-v2v-in-place program")
- in
-
let argspec = [
[ L"bandwidth" ], Getopt.String ("bps", set_string_option_once "--bandwidth" bandwidth),
s_"Set bandwidth to bits per sec";
@@ -248,8 +242,6 @@ let rec main () =
s_"Use password from file to connect to input hypervisor";
[ M"it" ], Getopt.String ("transport", set_string_option_once "-it" input_transport),
s_"Input transport";
- [ L"in-place" ], Getopt.Unit in_place_error,
- s_"Use virt-v2v-in-place instead";
[ L"mac" ], Getopt.String ("mac:network|bridge|ip:out", add_mac),
s_"Map NIC to network or bridge or assign static IP";
[ S 'n'; L"network" ], Getopt.String ("in:out", add_network),

View File

@ -1,4 +1,4 @@
From dce2fe3c583cb6a8259667337df31c6c361fa670 Mon Sep 17 00:00:00 2001
From 96eafd9ddef8733602d1c517e0cabe29afb5e414 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
@ -8,12 +8,12 @@ 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 +-
tests/test-v2v-o-glance.sh | 3 ++
tests/test-o-glance.sh | 3 ++
v2v/v2v.ml | 7 +---
5 files changed, 7 insertions(+), 79 deletions(-)
diff --git a/docs/virt-v2v-output-openstack.pod b/docs/virt-v2v-output-openstack.pod
index cd4862b1..54cd276e 100644
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
@ -98,7 +98,7 @@ index cd4862b1..54cd276e 100644
=head1 AUTHOR
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
index ca75c255..6e26e62c 100644
index 036b72ab..45ccd4d7 100644
--- a/docs/virt-v2v.pod
+++ b/docs/virt-v2v.pod
@@ -438,14 +438,6 @@ See L</Networks and bridges> below.
@ -116,7 +116,7 @@ index ca75c255..6e26e62c 100644
=item B<-o> B<kubevirt>
Set the output method to I<kubevirt>. B<Note the way this mode works
@@ -1164,11 +1156,6 @@ and output methods may use disk space, as outlined in the table below.
@@ -1211,11 +1203,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>).
@ -128,7 +128,7 @@ index ca75c255..6e26e62c 100644
=item I<-o local>
=item I<-o qemu>
@@ -1371,13 +1358,6 @@ See also L</Starting the libvirt system instance>.
@@ -1418,13 +1405,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.
@ -143,7 +143,7 @@ index ca75c255..6e26e62c 100644
This normally requires root. See the next section.
diff --git a/output/output_glance.mli b/output/output_glance.mli
index 972320a2..9befc461 100644
index 83d67576..7ab1503c 100644
--- a/output/output_glance.mli
+++ b/output/output_glance.mli
@@ -18,4 +18,4 @@
@ -152,10 +152,10 @@ index 972320a2..9befc461 100644
-module Glance : Output.OUTPUT
+(*module Glance : Output.OUTPUT*)
diff --git a/tests/test-v2v-o-glance.sh b/tests/test-v2v-o-glance.sh
index c0db9115..074b5e16 100755
--- a/tests/test-v2v-o-glance.sh
+++ b/tests/test-v2v-o-glance.sh
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
@ -167,10 +167,10 @@ index c0db9115..074b5e16 100755
set -e
set -x
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index 9a622da0..801aaf7d 100644
index 9999b639..c1eb12ab 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -197,7 +197,6 @@ let rec main () =
@@ -198,7 +198,6 @@ let rec main () =
if !output_mode <> `Not_set then
error (f_"%s option used more than once on the command line") "-o";
match mode with
@ -178,7 +178,7 @@ index 9a622da0..801aaf7d 100644
| "kubevirt" -> output_mode := `Kubevirt
| "libvirt" -> output_mode := `Libvirt
| "disk" | "local" -> output_mode := `Disk
@@ -257,7 +256,7 @@ let rec main () =
@@ -258,7 +257,7 @@ let rec main () =
s_"Map network in to out";
[ L"no-trim" ], Getopt.String ("-", no_trim_warning),
s_"Ignored for backwards compatibility";
@ -187,7 +187,7 @@ index 9a622da0..801aaf7d 100644
s_"Set output mode (default: libvirt)";
[ M"oa" ], Getopt.String ("sparse|preallocated", set_output_alloc),
s_"Set output allocation mode";
@@ -333,8 +332,6 @@ virt-v2v -i libvirtxml guest-domain.xml -o local -os /var/tmp
@@ -336,8 +335,6 @@ virt-v2v -i libvirtxml guest-domain.xml -o local -os /var/tmp
virt-v2v -i disk disk.img -o local -os /var/tmp
@ -196,7 +196,7 @@ index 9a622da0..801aaf7d 100644
There is a companion front-end called \"virt-p2v\" which comes as an
ISO or CD image that can be booted on physical machines.
@@ -411,7 +408,6 @@ read the man page virt-v2v(1).
@@ -418,7 +415,6 @@ read the man page virt-v2v(1).
pr "input:libvirtxml\n";
pr "input:ova\n";
pr "input:vmx\n";
@ -204,7 +204,7 @@ index 9a622da0..801aaf7d 100644
pr "output:kubevirt\n";
pr "output:libvirt\n";
pr "output:local\n";
@@ -504,7 +500,6 @@ read the man page virt-v2v(1).
@@ -511,7 +507,6 @@ read the man page virt-v2v(1).
| `Disk -> (module Output_disk.Disk)
| `Null -> (module Output_null.Null)
| `QEmu -> (module Output_qemu.QEMU)

View File

@ -1,22 +0,0 @@
From b7614e03e7e6584296fb4b74d951997bfd24b848 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
RHEL does not have btrfs so this test always fails.
---
tests/Makefile.am | 1 -
1 file changed, 1 deletion(-)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index cee516c4..ddecdfbf 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -101,7 +101,6 @@ TESTS = \
test-v2v-sound.sh \
test-v2v-virtio-win-iso.sh \
test-v2v-fedora-conversion.sh \
- test-v2v-fedora-btrfs-conversion.sh \
test-v2v-fedora-luks-on-lvm-conversion.sh \
test-v2v-fedora-lvm-on-luks-conversion.sh \
test-v2v-fedora-md-conversion.sh \

View File

@ -0,0 +1,22 @@
From 0e086ed0e10eee2e51cd7cbb767c9943308c8f27 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
RHEL does not have btrfs so this test always fails.
---
tests/Makefile.am | 1 -
1 file changed, 1 deletion(-)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 51faa63d..d5ce6bd3 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -64,7 +64,6 @@ TESTS = \
test-checksum-good.sh \
test-checksum-print.sh \
test-customize.sh \
- test-fedora-btrfs-conversion.sh \
test-fedora-conversion.sh \
test-fedora-luks-on-lvm-conversion.sh \
test-fedora-lvm-on-luks-conversion.sh \

View File

@ -1,4 +1,4 @@
From e0af932e291fdb9f87b071a873152f757f8ad71c Mon Sep 17 00:00:00 2001
From 9b6362a804d2e1350b365308edcffbc5def1353d 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
@ -16,10 +16,10 @@ Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2190387
5 files changed, 2 insertions(+), 41 deletions(-)
diff --git a/docs/virt-v2v-in-place.pod b/docs/virt-v2v-in-place.pod
index 4304c0d6..b7384210 100644
index fb3bc9a4..3e73bfc1 100644
--- a/docs/virt-v2v-in-place.pod
+++ b/docs/virt-v2v-in-place.pod
@@ -51,16 +51,6 @@ Display help.
@@ -72,16 +72,6 @@ Display help.
See I<--network> below.
@ -37,10 +37,10 @@ index 4304c0d6..b7384210 100644
=item B<--colours>
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
index 2230a556..eb7da9ca 100644
index 45ccd4d7..661c18e9 100644
--- a/docs/virt-v2v.pod
+++ b/docs/virt-v2v.pod
@@ -202,16 +202,6 @@ The options are silently ignored for other input methods.
@@ -209,16 +209,6 @@ The options are silently ignored for other input methods.
See I<--network> below.
@ -58,10 +58,10 @@ index 2230a556..eb7da9ca 100644
=item B<--colours>
diff --git a/in-place/in_place.ml b/in-place/in_place.ml
index 8286dbc5..2dc406e2 100644
index 70af0dfb..caf34a0b 100644
--- a/in-place/in_place.ml
+++ b/in-place/in_place.ml
@@ -43,7 +43,6 @@ let rec main () =
@@ -49,7 +49,6 @@ let rec main () =
let bandwidth = ref None in
let bandwidth_file = ref None in
@ -69,7 +69,7 @@ index 8286dbc5..2dc406e2 100644
let input_conn = ref None in
let input_format = ref None in
let input_password = ref None in
@@ -159,8 +158,6 @@ let rec main () =
@@ -172,8 +171,6 @@ let rec main () =
let argspec = [
[ S 'b'; L"bridge" ], Getopt.String ("in:out", add_bridge),
s_"Map bridge in to out";
@ -78,7 +78,7 @@ index 8286dbc5..2dc406e2 100644
[ S 'i' ], Getopt.String ("disk|libvirt|libvirtxml|ova|vmx", set_input_mode),
s_"Set input mode (default: libvirt)";
[ M"ic" ], Getopt.String ("uri", set_string_option_once "-ic" input_conn),
@@ -225,12 +222,6 @@ read the man page virt-v2v-in-place(1).
@@ -240,12 +237,6 @@ read the man page virt-v2v-in-place(1).
(* Dereference the arguments. *)
let args = List.rev !args in
@ -91,7 +91,7 @@ index 8286dbc5..2dc406e2 100644
let customize_ops = get_customize_ops () in
let input_conn = !input_conn in
let input_mode = !input_mode in
@@ -316,7 +307,7 @@ read the man page virt-v2v-in-place(1).
@@ -333,7 +324,7 @@ read the man page virt-v2v-in-place(1).
(* Get the conversion options. *)
let conv_options = {
@ -101,19 +101,19 @@ index 8286dbc5..2dc406e2 100644
ks = opthandle.ks;
network_map;
diff --git a/tests/Makefile.am b/tests/Makefile.am
index ddecdfbf..b41fed7f 100644
index d5ce6bd3..ffcbf722 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -77,7 +77,6 @@ TESTS = \
test-v2v-floppy.sh \
test-v2v-i-disk.sh \
test-v2v-i-ova.sh \
- test-v2v-block-driver.sh \
test-v2v-inspector.sh \
test-v2v-mac.sh \
test-v2v-machine-readable.sh \
@@ -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 c18aeaa1..d09c200c 100644
index c1eb12ab..40782651 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -48,7 +48,6 @@ let rec main () =
@ -124,7 +124,7 @@ index c18aeaa1..d09c200c 100644
let input_conn = ref None in
let input_format = ref None in
let input_password = ref None in
@@ -226,8 +225,6 @@ let rec main () =
@@ -233,8 +232,6 @@ let rec main () =
s_"Set bandwidth dynamically from file";
[ S 'b'; L"bridge" ], Getopt.String ("in:out", add_bridge),
s_"Map bridge in to out";
@ -133,7 +133,7 @@ index c18aeaa1..d09c200c 100644
[ L"compressed" ], Getopt.Unit (fun () -> set_output_option_compat "compressed" ""),
s_"Compress output file (-of qcow2 only)";
[ S 'i' ], Getopt.String ("disk|libvirt|libvirtxml|ova|vmx", set_input_mode),
@@ -352,12 +349,6 @@ read the man page virt-v2v(1).
@@ -363,12 +360,6 @@ read the man page virt-v2v(1).
(* Dereference the arguments. *)
let args = List.rev !args in
@ -146,7 +146,7 @@ index c18aeaa1..d09c200c 100644
let customize_ops = get_customize_ops () in
let input_conn = !input_conn in
let input_mode = !input_mode in
@@ -526,7 +517,7 @@ read the man page virt-v2v(1).
@@ -541,7 +532,7 @@ read the man page virt-v2v(1).
(* Get the conversion options. *)
let conv_options = {

View File

@ -1,24 +0,0 @@
From fe167d94ed81b41b025f55cbd6ca97ce404986ce 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
Fixes: https://issues.redhat.com/browse/RHEL-40903
---
in-place/in_place.ml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/in-place/in_place.ml b/in-place/in_place.ml
index 2dc406e2..9d24de78 100644
--- a/in-place/in_place.ml
+++ b/in-place/in_place.ml
@@ -206,6 +206,9 @@ read the man page virt-v2v-in-place(1).
let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ~machine_readable:true usage_msg in
Getopt.parse opthandle.getopt;
+ warning "virt-v2v-in-place is NOT SUPPORTED for command line use. \
+ It is almost always better to use virt-v2v instead of this tool.";
+
(* Print the version, easier than asking users to tell us. *)
debug "info: %s: %s %s (%s)"
prog Config.package_name Config.package_version_full

View File

@ -1,4 +1,4 @@
From 4a460f0ae97f59d9bff9ff568d45588fe4241b7e Mon Sep 17 00:00:00 2001
From 5c9deb0c0f4dc4c7ed23c094b908f203ff017913 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Mon, 8 Jul 2024 09:56:54 +0100
Subject: [PATCH] RHEL: Remove -o rhv, -o rhv-upload and -o vdsm modes
@ -30,16 +30,16 @@ Fixes: https://issues.redhat.com/browse/RHEL-36712
output/rhv-upload-transfer.py | 298 ----------
output/rhv-upload-vmcheck.py | 72 ---
tests/Makefile.am | 15 -
tests/test-v2v-o-rhv-upload-module/imageio.py | 71 ---
tests/test-o-rhv-upload-module/imageio.py | 71 ---
.../ovirtsdk4/__init__.py | 150 -----
.../ovirtsdk4/types.py | 184 ------
tests/test-v2v-o-rhv-upload-oo-query.sh | 41 --
tests/test-v2v-o-rhv-upload.sh | 74 ---
tests/test-v2v-o-rhv.ovf.expected | 113 ----
tests/test-v2v-o-rhv.sh | 87 ---
tests/test-v2v-o-vdsm-oo-query.sh | 41 --
tests/test-v2v-o-vdsm-options.ovf.expected | 113 ----
tests/test-v2v-o-vdsm-options.sh | 96 ----
tests/test-o-rhv-upload-oo-query.sh | 41 --
tests/test-o-rhv-upload.sh | 74 ---
tests/test-o-rhv.ovf.expected | 113 ----
tests/test-o-rhv.sh | 87 ---
tests/test-o-vdsm-oo-query.sh | 41 --
tests/test-o-vdsm-options.ovf.expected | 113 ----
tests/test-o-vdsm-options.sh | 96 ----
v2v/v2v.ml | 31 +-
36 files changed, 5 insertions(+), 4226 deletions(-)
delete mode 100644 docs/virt-v2v-output-rhv.pod
@ -63,19 +63,19 @@ Fixes: https://issues.redhat.com/browse/RHEL-36712
delete mode 100644 output/rhv-upload-precheck.py
delete mode 100644 output/rhv-upload-transfer.py
delete mode 100644 output/rhv-upload-vmcheck.py
delete mode 100755 tests/test-v2v-o-rhv-upload-module/imageio.py
delete mode 100644 tests/test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py
delete mode 100644 tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py
delete mode 100755 tests/test-v2v-o-rhv-upload-oo-query.sh
delete mode 100755 tests/test-v2v-o-rhv-upload.sh
delete mode 100644 tests/test-v2v-o-rhv.ovf.expected
delete mode 100755 tests/test-v2v-o-rhv.sh
delete mode 100755 tests/test-v2v-o-vdsm-oo-query.sh
delete mode 100644 tests/test-v2v-o-vdsm-options.ovf.expected
delete mode 100755 tests/test-v2v-o-vdsm-options.sh
delete mode 100755 tests/test-o-rhv-upload-module/imageio.py
delete mode 100644 tests/test-o-rhv-upload-module/ovirtsdk4/__init__.py
delete mode 100644 tests/test-o-rhv-upload-module/ovirtsdk4/types.py
delete mode 100755 tests/test-o-rhv-upload-oo-query.sh
delete mode 100755 tests/test-o-rhv-upload.sh
delete mode 100644 tests/test-o-rhv.ovf.expected
delete mode 100755 tests/test-o-rhv.sh
delete mode 100755 tests/test-o-vdsm-oo-query.sh
delete mode 100644 tests/test-o-vdsm-options.ovf.expected
delete mode 100755 tests/test-o-vdsm-options.sh
diff --git a/docs/Makefile.am b/docs/Makefile.am
index 7cb6e09a..4c341f8b 100644
index 36a831bf..d7c2cb85 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -26,7 +26,6 @@ EXTRA_DIST = \
@ -122,7 +122,7 @@ index 7cb6e09a..4c341f8b 100644
stamp-virt-v2v-release-notes-1.42.pod: virt-v2v-release-notes-1.42.pod
diff --git a/docs/virt-v2v-output-rhv.pod b/docs/virt-v2v-output-rhv.pod
deleted file mode 100644
index 2ce697f4..00000000
index e12702fa..00000000
--- a/docs/virt-v2v-output-rhv.pod
+++ /dev/null
@@ -1,232 +0,0 @@
@ -357,9 +357,9 @@ index 2ce697f4..00000000
-
-=head1 COPYRIGHT
-
-Copyright (C) 2009-2020 Red Hat Inc.
-Copyright (C) 2009-2025 Red Hat Inc.
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
index eb7da9ca..de92db84 100644
index 661c18e9..b5476745 100644
--- a/docs/virt-v2v.pod
+++ b/docs/virt-v2v.pod
@@ -14,7 +14,7 @@ virt-v2v - Convert a guest to use KVM
@ -371,7 +371,7 @@ index eb7da9ca..de92db84 100644
other targets. It can modify the guest to make it bootable on KVM and
install virtio drivers so it will run quickly.
@@ -54,8 +54,6 @@ L<virt-v2v-input-vmware(1)> — Input from VMware.
@@ -61,8 +61,6 @@ L<virt-v2v-input-vmware(1)> — Input from VMware.
L<virt-v2v-output-local(1)> — Output to local files or local libvirt.
@ -380,7 +380,7 @@ index eb7da9ca..de92db84 100644
L<virt-v2v-output-openstack(1)> — Output to OpenStack.
L<virt-v2v-release-notes-1.42(1)> — Release notes for 1.42 release.
@@ -85,21 +83,6 @@ disks to F</var/lib/libvirt/images>.
@@ -92,21 +90,6 @@ disks to F</var/lib/libvirt/images>.
For more information see L<virt-v2v-input-vmware(1)>.
@ -402,7 +402,7 @@ index eb7da9ca..de92db84 100644
=head2 Convert from ESXi hypervisor over SSH to local libvirt
You have an ESXi hypervisor called C<esxi.example.com> with SSH access
@@ -479,14 +462,6 @@ no metadata is written.
@@ -486,14 +469,6 @@ no metadata is written.
Set the output method to OpenStack. See L<virt-v2v-output-openstack(1)>.
@ -417,7 +417,7 @@ index eb7da9ca..de92db84 100644
=item B<-o> B<qemu>
Set the output method to I<qemu>.
@@ -495,40 +470,6 @@ This is similar to I<-o local>, except that a shell script is written
@@ -502,40 +477,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>.
@ -458,7 +458,7 @@ index eb7da9ca..de92db84 100644
=item B<-oa> B<sparse>
=item B<-oa> B<preallocated>
@@ -591,117 +532,11 @@ For I<-o openstack> (L<virt-v2v-output-openstack(1)>) only, set optional
@@ -598,117 +539,11 @@ For I<-o openstack> (L<virt-v2v-output-openstack(1)>) only, set optional
OpenStack authentication. For example I<-oo os-username=>NAME is
equivalent to C<openstack --os-username=NAME>.
@ -576,7 +576,7 @@ index eb7da9ca..de92db84 100644
=item B<-op> file
Supply a file containing a password to be used when connecting to the
@@ -719,28 +554,8 @@ For I<-o libvirt>, this is a libvirt directory pool
@@ -726,28 +561,8 @@ For I<-o libvirt>, this is a libvirt directory pool
For I<-o local> and I<-o qemu>, this is a directory name.
The directory must exist.
@ -602,10 +602,10 @@ index eb7da9ca..de92db84 100644
-You will get an error if virt-v2v is unable to mount/write to the
-Export Storage Domain.
-
=item B<--print-source>
=item B<--parallel> N
Print information about the source guest and stop. This option is
@@ -1302,26 +1117,6 @@ require either root or a special user:
Enable parallel copying if the guest has multiple disks. I<N> is the
@@ -1356,26 +1171,6 @@ require either root or a special user:
=over 4
@ -632,7 +632,7 @@ index eb7da9ca..de92db84 100644
=item Writing to libvirt
When using I<-o libvirt>, you may need to run virt-v2v as root so that
@@ -1428,7 +1223,6 @@ virt-v2v binary. Typical output looks like this:
@@ -1483,7 +1278,6 @@ virt-v2v binary. Typical output looks like this:
virt-v2v
libguestfs-rewrite
colours-option
@ -641,7 +641,7 @@ index eb7da9ca..de92db84 100644
[...]
output:local
diff --git a/output/Makefile.am b/output/Makefile.am
index 1e6799c3..09638c25 100644
index 69f5393e..981cf589 100644
--- a/output/Makefile.am
+++ b/output/Makefile.am
@@ -17,14 +17,7 @@
@ -671,7 +671,7 @@ index 1e6799c3..09638c25 100644
- rhv-upload-precheck.py \
- rhv-upload-transfer.py \
- rhv-upload-vmcheck.py \
test-v2v-python-syntax.sh
test-python-syntax.sh
SOURCES_MLI = \
@@ -54,16 +40,6 @@ SOURCES_MLI = \
@ -739,12 +739,12 @@ index 1e6799c3..09638c25 100644
# objects and OCaml objects and link them into the OCaml library.
diff --git a/output/output_rhv.ml b/output/output_rhv.ml
deleted file mode 100644
index 13c2d8dc..00000000
index e10b2010..00000000
--- a/output/output_rhv.ml
+++ /dev/null
@@ -1,317 +0,0 @@
-(* virt-v2v
- * Copyright (C) 2009-2021 Red Hat Inc.
- * 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
@ -1062,12 +1062,12 @@ index 13c2d8dc..00000000
-end
diff --git a/output/output_rhv.mli b/output/output_rhv.mli
deleted file mode 100644
index 08f3f2d0..00000000
index ceb12c3f..00000000
--- a/output/output_rhv.mli
+++ /dev/null
@@ -1,21 +0,0 @@
-(* virt-v2v
- * Copyright (C) 2009-2021 Red Hat Inc.
- * 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
@ -1089,12 +1089,12 @@ index 08f3f2d0..00000000
-module RHV : Output.OUTPUT
diff --git a/output/output_rhv_upload.ml b/output/output_rhv_upload.ml
deleted file mode 100644
index 63624860..00000000
index 8133db2b..00000000
--- a/output/output_rhv_upload.ml
+++ /dev/null
@@ -1,520 +0,0 @@
-(* virt-v2v
- * Copyright (C) 2009-2021 Red Hat Inc.
- * 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
@ -1615,12 +1615,12 @@ index 63624860..00000000
-end
diff --git a/output/output_rhv_upload.mli b/output/output_rhv_upload.mli
deleted file mode 100644
index 35457596..00000000
index 7106a3f1..00000000
--- a/output/output_rhv_upload.mli
+++ /dev/null
@@ -1,21 +0,0 @@
-(* virt-v2v
- * Copyright (C) 2009-2021 Red Hat Inc.
- * 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
@ -1817,12 +1817,12 @@ index c1bafa15..00000000
-val code : string
diff --git a/output/output_vdsm.ml b/output/output_vdsm.ml
deleted file mode 100644
index 3052fb9c..00000000
index 8ab2e766..00000000
--- a/output/output_vdsm.ml
+++ /dev/null
@@ -1,237 +0,0 @@
-(* virt-v2v
- * Copyright (C) 2009-2021 Red Hat Inc.
- * 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
@ -2060,12 +2060,12 @@ index 3052fb9c..00000000
-end
diff --git a/output/output_vdsm.mli b/output/output_vdsm.mli
deleted file mode 100644
index 2260d7e6..00000000
index c598f5df..00000000
--- a/output/output_vdsm.mli
+++ /dev/null
@@ -1,21 +0,0 @@
-(* virt-v2v
- * Copyright (C) 2009-2021 Red Hat Inc.
- * 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
@ -2087,13 +2087,13 @@ index 2260d7e6..00000000
-module VDSM : Output.OUTPUT
diff --git a/output/rhv-upload-cancel.py b/output/rhv-upload-cancel.py
deleted file mode 100644
index b36e1904..00000000
index 82122a2a..00000000
--- a/output/rhv-upload-cancel.py
+++ /dev/null
@@ -1,96 +0,0 @@
-# -*- python -*-
-# oVirt or RHV upload cancel used by virt-v2v -o rhv-upload
-# Copyright (C) 2019-2021 Red Hat Inc.
-# Copyright (C) 2019-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
@ -2332,13 +2332,13 @@ index 9af2c167..00000000
- " Jobs still running for correlation id %s" % correlation_id)
diff --git a/output/rhv-upload-finalize.py b/output/rhv-upload-finalize.py
deleted file mode 100644
index 12fd39ec..00000000
index ee14873e..00000000
--- a/output/rhv-upload-finalize.py
+++ /dev/null
@@ -1,174 +0,0 @@
-# -*- python -*-
-# oVirt or RHV upload finalize used by virt-v2v -o rhv-upload
-# Copyright (C) 2018-2021 Red Hat Inc.
-# 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
@ -2512,13 +2512,13 @@ index 12fd39ec..00000000
-connection.close()
diff --git a/output/rhv-upload-plugin.py b/output/rhv-upload-plugin.py
deleted file mode 100644
index 8bc79a4a..00000000
index b7a42005..00000000
--- a/output/rhv-upload-plugin.py
+++ /dev/null
@@ -1,525 +0,0 @@
-# -*- python -*-
-# oVirt or RHV upload nbdkit plugin used by virt-v2v -o rhv-upload
-# Copyright (C) 2018-2021 Red Hat Inc.
-# 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
@ -3043,13 +3043,13 @@ index 8bc79a4a..00000000
- (r.status, r.reason))
diff --git a/output/rhv-upload-precheck.py b/output/rhv-upload-precheck.py
deleted file mode 100644
index 0bbb738d..00000000
index 539a7508..00000000
--- a/output/rhv-upload-precheck.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# -*- python -*-
-# oVirt or RHV pre-upload checks used by virt-v2v -o rhv-upload
-# Copyright (C) 2018-2020 Red Hat Inc.
-# 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
@ -3184,13 +3184,13 @@ index 0bbb738d..00000000
-json.dump(results, sys.stdout)
diff --git a/output/rhv-upload-transfer.py b/output/rhv-upload-transfer.py
deleted file mode 100644
index ed96153b..00000000
index 322418e2..00000000
--- a/output/rhv-upload-transfer.py
+++ /dev/null
@@ -1,298 +0,0 @@
-# -*- python -*-
-# oVirt or RHV upload start transfer used by virt-v2v -o rhv-upload
-# Copyright (C) 2018-2021 Red Hat Inc.
-# 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
@ -3488,13 +3488,13 @@ index ed96153b..00000000
-json.dump(results, sys.stdout)
diff --git a/output/rhv-upload-vmcheck.py b/output/rhv-upload-vmcheck.py
deleted file mode 100644
index cd500574..00000000
index 42cc24e8..00000000
--- a/output/rhv-upload-vmcheck.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# -*- python -*-
-# oVirt or RHV VM existence check used by virt-v2v -o rhv-upload
-# Copyright (C) 2018-2020 Red Hat Inc.
-# 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
@ -3565,54 +3565,47 @@ index cd500574..00000000
-
-# Otherwise everything is OK, exit with no error.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b41fed7f..2cf57248 100644
index ffcbf722..e54569f1 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -70,8 +70,6 @@ TESTS = \
test-v2v-i-ova-two-disks.sh \
test-v2v-i-vmx.sh \
test-v2v-it-vddk-io-query.sh \
- test-v2v-o-rhv-upload-oo-query.sh \
- test-v2v-o-vdsm-oo-query.sh \
test-v2v-bad-networks-and-bridges.sh \
test-v2v-cdrom.sh \
test-v2v-floppy.sh \
@@ -89,9 +87,6 @@ TESTS = \
test-v2v-o-null.sh \
test-v2v-o-openstack.sh \
test-v2v-o-qemu.sh \
- test-v2v-o-rhv.sh \
- test-v2v-o-rhv-upload.sh \
- test-v2v-o-vdsm-options.sh \
test-v2v-oa-option-qcow2.sh \
test-v2v-oa-option-raw.sh \
test-v2v-of-option.sh \
@@ -258,16 +253,6 @@ EXTRA_DIST += \
test-v2v-o-null.sh \
test-v2v-o-openstack.sh \
test-v2v-o-qemu.sh \
- test-v2v-o-rhv.ovf.expected \
- test-v2v-o-rhv.sh \
- test-v2v-o-rhv-upload.sh \
- test-v2v-o-rhv-upload-module/imageio.py \
- test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py \
- test-v2v-o-rhv-upload-module/ovirtsdk4/types.py \
- test-v2v-o-rhv-upload-oo-query.sh \
- test-v2v-o-vdsm-oo-query.sh \
- test-v2v-o-vdsm-options.ovf.expected \
- test-v2v-o-vdsm-options.sh \
test-v2v-oa-option-qcow2.sh \
test-v2v-oa-option-raw.sh \
test-v2v-of-option.sh \
diff --git a/tests/test-v2v-o-rhv-upload-module/imageio.py b/tests/test-v2v-o-rhv-upload-module/imageio.py
@@ -99,11 +99,6 @@ TESTS = \
test-o-null.sh \
test-o-openstack.sh \
test-o-qemu.sh \
- test-o-rhv-upload-oo-query.sh \
- test-o-rhv-upload.sh \
- test-o-rhv.sh \
- test-o-vdsm-oo-query.sh \
- test-o-vdsm-options.sh \
test-oa-option-qcow2.sh \
test-oa-option-raw.sh \
test-of-option.sh \
@@ -288,16 +283,6 @@ EXTRA_DIST += \
test-o-null.sh \
test-o-openstack.sh \
test-o-qemu.sh \
- test-o-rhv-upload-module/imageio.py \
- test-o-rhv-upload-module/ovirtsdk4/__init__.py \
- test-o-rhv-upload-module/ovirtsdk4/types.py \
- test-o-rhv-upload-oo-query.sh \
- test-o-rhv-upload.sh \
- test-o-rhv.ovf.expected \
- test-o-rhv.sh \
- test-o-vdsm-oo-query.sh \
- test-o-vdsm-options.ovf.expected \
- test-o-vdsm-options.sh \
test-oa-option-qcow2.sh \
test-oa-option-raw.sh \
test-of-option.sh \
diff --git a/tests/test-o-rhv-upload-module/imageio.py b/tests/test-o-rhv-upload-module/imageio.py
deleted file mode 100755
index b9a491d7..00000000
--- a/tests/test-v2v-o-rhv-upload-module/imageio.py
index 70ea2ef4..00000000
--- a/tests/test-o-rhv-upload-module/imageio.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env python3
-# -*- python -*-
-# Copyright (C) 2018-2021 Red Hat Inc.
-# 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
@ -3629,7 +3622,7 @@ index b9a491d7..00000000
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-# Fake imageio web server used as a test harness.
-# See v2v/test-v2v-o-rhv-upload.sh
-# See v2v/test-o-rhv-upload.sh
-
-import sys
-import threading
@ -3681,10 +3674,10 @@ index b9a491d7..00000000
-sys.stdout.flush()
-
-httpd.serve_forever()
diff --git a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py b/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py
diff --git a/tests/test-o-rhv-upload-module/ovirtsdk4/__init__.py b/tests/test-o-rhv-upload-module/ovirtsdk4/__init__.py
deleted file mode 100644
index e33d0714..00000000
--- a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py
index fefc9821..00000000
--- a/tests/test-o-rhv-upload-module/ovirtsdk4/__init__.py
+++ /dev/null
@@ -1,150 +0,0 @@
-# -*- python -*-
@ -3705,7 +3698,7 @@ index e33d0714..00000000
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-# Fake ovirtsdk4 module used as a test harness.
-# See v2v/test-v2v-o-rhv-upload.sh
-# See v2v/test-o-rhv-upload.sh
-
-class Error(Exception):
- pass
@ -3837,10 +3830,10 @@ index e33d0714..00000000
-
- def list(self, search=None):
- return []
diff --git a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py b/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py
diff --git a/tests/test-o-rhv-upload-module/ovirtsdk4/types.py b/tests/test-o-rhv-upload-module/ovirtsdk4/types.py
deleted file mode 100644
index 38d89573..00000000
--- a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py
index 397432f1..00000000
--- a/tests/test-o-rhv-upload-module/ovirtsdk4/types.py
+++ /dev/null
@@ -1,184 +0,0 @@
-# -*- python -*-
@ -3861,7 +3854,7 @@ index 38d89573..00000000
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-# Fake ovirtsdk4 module used as a test harness.
-# See v2v/test-v2v-o-rhv-upload.sh
-# See v2v/test-o-rhv-upload.sh
-
-import os
-from enum import Enum
@ -4027,10 +4020,10 @@ index 38d89573..00000000
- name = "DC"
- storage_domains = [StorageDomain()]
- clusters = [Cluster()]
diff --git a/tests/test-v2v-o-rhv-upload-oo-query.sh b/tests/test-v2v-o-rhv-upload-oo-query.sh
diff --git a/tests/test-o-rhv-upload-oo-query.sh b/tests/test-o-rhv-upload-oo-query.sh
deleted file mode 100755
index 5ef56b90..00000000
--- a/tests/test-v2v-o-rhv-upload-oo-query.sh
index 5dda6e04..00000000
--- a/tests/test-o-rhv-upload-oo-query.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/bash -
@ -4062,9 +4055,9 @@ index 5ef56b90..00000000
-skip_if_skipped
-
-export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools"
-export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win"
-export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win/drivers"
-
-f=test-v2v-o-rhv-upload-oo-query.actual
-f=test-o-rhv-upload-oo-query.actual
-rm -f $f
-
-$VG virt-v2v --debug-gc \
@ -4074,10 +4067,10 @@ index 5ef56b90..00000000
-grep -- "-oo rhv-verifypeer" $f
-
-rm $f
diff --git a/tests/test-v2v-o-rhv-upload.sh b/tests/test-v2v-o-rhv-upload.sh
diff --git a/tests/test-o-rhv-upload.sh b/tests/test-o-rhv-upload.sh
deleted file mode 100755
index 15d5d028..00000000
--- a/tests/test-v2v-o-rhv-upload.sh
index 718f6ce8..00000000
--- a/tests/test-o-rhv-upload.sh
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/bin/bash -
@ -4101,7 +4094,7 @@ index 15d5d028..00000000
-# Test -o rhv-upload.
-#
-# These uses a test harness (see
-# tests/test-v2v-o-rhv-upload-module/ovirtsdk4) to fake responses from
-# tests/test-o-rhv-upload-module/ovirtsdk4) to fake responses from
-# oVirt.
-
-set -e
@ -4113,21 +4106,21 @@ index 15d5d028..00000000
-
-skip_if_skipped
-requires python3 --version
-requires nbdkit $VIRT_V2V_NBDKIT_PYTHON_PLUGIN --version
-requires test -f ../test-data/phony-guests/windows.img
-requires nbdkit python --version
-requires test -s ../test-data/phony-guests/windows.img
-
-libvirt_uri="test://$abs_top_builddir/test-data/phony-guests/guests.xml"
-f=../test-data/phony-guests/windows.img
-
-export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools"
-export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win"
-export PYTHONPATH=$srcdir/test-v2v-o-rhv-upload-module:$PYTHONPATH
-export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win/drivers"
-export PYTHONPATH=$srcdir/test-o-rhv-upload-module:$PYTHONPATH
-
-# Run the imageio process and get the port number.
-log=test-v2v-o-rhv-upload.webserver.log
-log=test-o-rhv-upload.webserver.log
-rm -f $log
-cleanup_fn rm -f $log
-$srcdir/test-v2v-o-rhv-upload-module/imageio.py >$log 2>&1 &
-$srcdir/test-o-rhv-upload-module/imageio.py >$log 2>&1 &
-pid=$!
-cleanup_fn kill $pid
-export IMAGEIO_PORT=
@ -4154,10 +4147,10 @@ index 15d5d028..00000000
- -oo rhv-cafile=/dev/null \
- -op /dev/null \
- -os Storage
diff --git a/tests/test-v2v-o-rhv.ovf.expected b/tests/test-v2v-o-rhv.ovf.expected
diff --git a/tests/test-o-rhv.ovf.expected b/tests/test-o-rhv.ovf.expected
deleted file mode 100644
index 4f437d88..00000000
--- a/tests/test-v2v-o-rhv.ovf.expected
--- a/tests/test-o-rhv.ovf.expected
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
@ -4273,10 +4266,10 @@ index 4f437d88..00000000
- </Section>
- </Content>
-</ovf:Envelope>
diff --git a/tests/test-v2v-o-rhv.sh b/tests/test-v2v-o-rhv.sh
diff --git a/tests/test-o-rhv.sh b/tests/test-o-rhv.sh
deleted file mode 100755
index e6ec7c61..00000000
--- a/tests/test-v2v-o-rhv.sh
index 173d762c..00000000
--- a/tests/test-o-rhv.sh
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/bin/bash -
@ -4306,15 +4299,15 @@ index e6ec7c61..00000000
-set -x
-
-skip_if_skipped
-requires test -f ../test-data/phony-guests/windows.img
-requires test -s ../test-data/phony-guests/windows.img
-
-libvirt_uri="test://$abs_top_builddir/test-data/phony-guests/guests.xml"
-f=../test-data/phony-guests/windows.img
-
-export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools"
-export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win"
-export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win/drivers"
-
-d=test-v2v-o-rhv.d
-d=test-o-rhv.d
-rm -rf $d
-cleanup_fn rm -r $d
-mkdir $d
@ -4365,11 +4358,11 @@ index e6ec7c61..00000000
- -e 's/\<ovf:vm_snapshot_id='"'$RE_UUID'/ovf:vm_snapshot_id='#UUID#'/g" \
- "$OVF"
-
-diff -u "$srcdir/test-v2v-o-rhv.ovf.expected" "$OVF"
diff --git a/tests/test-v2v-o-vdsm-oo-query.sh b/tests/test-v2v-o-vdsm-oo-query.sh
-diff -u "$srcdir/test-o-rhv.ovf.expected" "$OVF"
diff --git a/tests/test-o-vdsm-oo-query.sh b/tests/test-o-vdsm-oo-query.sh
deleted file mode 100755
index 7d4cae4e..00000000
--- a/tests/test-v2v-o-vdsm-oo-query.sh
index e940044d..00000000
--- a/tests/test-o-vdsm-oo-query.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/bash -
@ -4401,9 +4394,9 @@ index 7d4cae4e..00000000
-skip_if_skipped
-
-export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools"
-export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win"
-export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win/drivers"
-
-f=test-v2v-o-vdsm-oo-query.actual
-f=test-o-vdsm-oo-query.actual
-rm -f $f
-
-$VG virt-v2v --debug-gc \
@ -4413,10 +4406,10 @@ index 7d4cae4e..00000000
-grep -- "-oo vdsm-image-uuid" $f
-
-rm $f
diff --git a/tests/test-v2v-o-vdsm-options.ovf.expected b/tests/test-v2v-o-vdsm-options.ovf.expected
diff --git a/tests/test-o-vdsm-options.ovf.expected b/tests/test-o-vdsm-options.ovf.expected
deleted file mode 100644
index 9f71a44e..00000000
--- a/tests/test-v2v-o-vdsm-options.ovf.expected
--- a/tests/test-o-vdsm-options.ovf.expected
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
@ -4532,15 +4525,15 @@ index 9f71a44e..00000000
- </VirtualHardwareSection>
- </VirtualSystem>
-</ovf:Envelope>
diff --git a/tests/test-v2v-o-vdsm-options.sh b/tests/test-v2v-o-vdsm-options.sh
diff --git a/tests/test-o-vdsm-options.sh b/tests/test-o-vdsm-options.sh
deleted file mode 100755
index e8f8c538..00000000
--- a/tests/test-v2v-o-vdsm-options.sh
index a8c5b208..00000000
--- a/tests/test-o-vdsm-options.sh
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/bin/bash -
-# libguestfs virt-v2v test script
-# Copyright (C) 2014-2020 Red Hat Inc.
-# Copyright (C) 2014-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
@ -4566,15 +4559,15 @@ index e8f8c538..00000000
-set -x
-
-skip_if_skipped
-requires test -f ../test-data/phony-guests/windows.img
-requires test -s ../test-data/phony-guests/windows.img
-
-libvirt_uri="test://$abs_top_builddir/test-data/phony-guests/guests.xml"
-f=../test-data/phony-guests/windows.img
-
-export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools"
-export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win"
-export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win/drivers"
-
-d=test-v2v-o-vdsm-options.d
-d=test-o-vdsm-options.d
-rm -rf $d
-cleanup_fn rm -r $d
-mkdir $d
@ -4632,13 +4625,13 @@ index e8f8c538..00000000
- -e 's/\<ovf:vm_snapshot_id='"'$RE_UUID'/ovf:vm_snapshot_id='#UUID#'/g" \
- "$OVF"
-
-diff -u "$srcdir/test-v2v-o-vdsm-options.ovf.expected" \
-diff -u "$srcdir/test-o-vdsm-options.ovf.expected" \
- "$OVF"
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index d09c200c..8be1e5cb 100644
index 40782651..2e23642a 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -201,11 +201,7 @@ let rec main () =
@@ -202,11 +202,7 @@ let rec main () =
| "disk" | "local" -> output_mode := `Disk
| "null" -> output_mode := `Null
| "openstack" | "osp" | "rhosp" -> output_mode := `Openstack
@ -4650,7 +4643,7 @@ index d09c200c..8be1e5cb 100644
| s ->
error (f_"unknown -o option: %s") s
in
@@ -245,7 +241,7 @@ let rec main () =
@@ -254,7 +250,7 @@ let rec main () =
s_"Map network in to out";
[ L"no-trim" ], Getopt.String ("-", no_trim_warning),
s_"Ignored for backwards compatibility";
@ -4659,7 +4652,7 @@ index d09c200c..8be1e5cb 100644
s_"Set output mode (default: libvirt)";
[ M"oa" ], Getopt.String ("sparse|preallocated", set_output_alloc),
s_"Set output allocation mode";
@@ -283,18 +279,6 @@ let rec main () =
@@ -294,18 +290,6 @@ let rec main () =
s_"Same as -io vddk-thumbprint=thumbprint";
[ L"vddk-transports" ], Getopt.String ("transports", set_input_option_compat "vddk-transports"),
s_"Same as -io vddk-transports=transports";
@ -4678,7 +4671,7 @@ index d09c200c..8be1e5cb 100644
[ L"vmtype" ], Getopt.String ("-", vmtype_warning),
s_"Ignored for backwards compatibility";
] in
@@ -314,9 +298,6 @@ let rec main () =
@@ -325,9 +309,6 @@ let rec main () =
virt-v2v -ic vpx://vcenter.example.com/Datacenter/esxi -os imported esx_guest
@ -4688,7 +4681,7 @@ index d09c200c..8be1e5cb 100644
virt-v2v -i libvirtxml guest-domain.xml -o local -os /var/tmp
virt-v2v -i disk disk.img -o local -os /var/tmp
@@ -380,7 +361,6 @@ read the man page virt-v2v(1).
@@ -394,7 +375,6 @@ read the man page virt-v2v(1).
pr "vcenter-https\n";
pr "vddk\n";
pr "colours-option\n";
@ -4696,7 +4689,7 @@ index d09c200c..8be1e5cb 100644
pr "io/oo\n";
pr "mac-option\n";
pr "bandwidth-option\n";
@@ -397,9 +377,6 @@ read the man page virt-v2v(1).
@@ -412,9 +392,6 @@ read the man page virt-v2v(1).
pr "output:null\n";
pr "output:openstack\n";
pr "output:qemu\n";
@ -4706,7 +4699,7 @@ index d09c200c..8be1e5cb 100644
pr "convert:linux\n";
pr "convert:windows\n";
List.iter (pr "ovf:%s\n") Create_ovf.ovf_flavours;
@@ -484,10 +461,7 @@ read the man page virt-v2v(1).
@@ -499,10 +476,7 @@ read the man page virt-v2v(1).
| `Null -> (module Output_null.Null)
| `QEmu -> (module Output_qemu.QEMU)
| `Kubevirt -> (module Output_kubevirt.Kubevirt)
@ -4718,7 +4711,7 @@ index d09c200c..8be1e5cb 100644
let output_options = {
Output.output_alloc = output_alloc;
@@ -512,7 +486,6 @@ read the man page virt-v2v(1).
@@ -527,7 +501,6 @@ read the man page virt-v2v(1).
*)
let remove_serial_console =
match output_mode with

View File

@ -0,0 +1,40 @@
From 7ac8099864720bbca1001a2abbdbfe7296ebd7fe 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
Fixes: https://issues.redhat.com/browse/RHEL-40903
---
docs/virt-v2v-in-place.pod | 4 ++++
in-place/in_place.ml | 3 +++
2 files changed, 7 insertions(+)
diff --git a/docs/virt-v2v-in-place.pod b/docs/virt-v2v-in-place.pod
index 3e73bfc1..bd959fe4 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
=head1 DESCRIPTION
+B<virt-v2v-in-place is NOT SUPPORTED for command line use in Red Hat
+Enterprise Linux>. It is almost always better to use L<virt-v2v(1)>
+instead of this tool.
+
Virt-v2v-in-place converts a single guest from a foreign hypervisor to
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 caf34a0b..fe436b37 100644
--- a/in-place/in_place.ml
+++ b/in-place/in_place.ml
@@ -221,6 +221,9 @@ read the man page virt-v2v-in-place(1).
let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ~machine_readable:true usage_msg in
Getopt.parse opthandle.getopt;
+ warning "virt-v2v-in-place is NOT SUPPORTED for command line use. \
+ It is almost always better to use virt-v2v instead of this tool.";
+
(* Print the version, easier than asking users to tell us. *)
debug "info: %s: %s %s (%s)"
prog Config.package_name Config.package_version_full

View File

@ -1,33 +0,0 @@
From d903b78c675ca51a6d62fb83bc5b94a64861b0d9 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Wed, 30 Oct 2024 15:39:31 +0000
Subject: [PATCH] in-place: Add a warning about checking the exit code
(cherry picked from commit 8b768fd9b17412ee8893447dc0f1e75bc612df58)
(cherry picked from commit a794e7936064812540f0bb8b37827fa562a6fba4)
---
docs/virt-v2v-in-place.pod | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/docs/virt-v2v-in-place.pod b/docs/virt-v2v-in-place.pod
index b7384210..4057dae5 100644
--- a/docs/virt-v2v-in-place.pod
+++ b/docs/virt-v2v-in-place.pod
@@ -35,6 +35,17 @@ If the guest has been copied to local libvirt then:
virt-v2v-in-place -i libvirt guest
+=head2 Exit code
+
+If virt-v2v-in-place fails it will return a non-zero (error) exit
+code. In this case, the disk image will be in an B<unknown, possibly
+corrupted state>.
+
+If the image contains important information you should ensure you have
+a backup before trying a virt-v2v-in-place conversion. And you should
+check the exit code is zero before using the disk image after a
+conversion.
+
=head1 EXAMPLES
=head1 OPTIONS

View File

@ -1,31 +0,0 @@
From 837646d510e74d77ad80d4859aa03012682ce01b Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Fri, 15 Nov 2024 14:00:07 +0000
Subject: [PATCH] -i libvirt: Trim whitespace around name
In -i libvirt / -i libvirtxml we didn't trim whitespace
around the name, so:
<name> foo </name>
would set the input name to the literal string " foo ".
(cherry picked from commit 9cb76069040543ce25003ac8c620aff3724964fc)
(cherry picked from commit 669acaf0f56ffdb85a1d72fb37ff2958600003cc)
---
input/parse_libvirt_xml.ml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/input/parse_libvirt_xml.ml b/input/parse_libvirt_xml.ml
index 4d0fcdf3..8009a05a 100644
--- a/input/parse_libvirt_xml.ml
+++ b/input/parse_libvirt_xml.ml
@@ -78,7 +78,7 @@ let parse_libvirt_xml ?conn xml =
match xpath_string "/domain/name/text()" with
| None | Some "" ->
error (f_"in the libvirt XML metadata, <name> is missing or empty")
- | Some s -> s in
+ | Some s -> String.trim s in
let genid =
match xpath_string "/domain/genid/text()" with
| None | Some "" -> None

View File

@ -1,963 +0,0 @@
From 49e77856e1e127eabe14ac07ee9c33ce6b8c067b Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Fri, 15 Nov 2024 11:49:26 +0000
Subject: [PATCH] -o qemu: Replace hard-coded UEFI paths
Update the qemu shell script to simply find the UEFI paths as
required.
Remove lib/uefi.ml:find_uefi_firmware as this function is no longer
needed.
Remove common/mlv2v/ everywhere. This contained a list of UEFI code
and NVRAM files which is no longer used.
Update common submodule. This pulls in:
Richard W.M. Jones (5):
mlcustomize/customize_run.ml: Move 'in' to new line
mlstdutils/guestfs_config: Define host_os
mlcustomize, mltools: Check guest OS is compatible before allowing --run
Remove mlv2v/ subdirectory
qemuopts: Add ability to add raw, unquoted output to qemu scripts
qemuopts: Fix missing break statement
(cherry picked from commit 69b4e83935b03e10c5da9b93f987eb8ddd2cde31)
(cherry picked from commit faf29e12e7928345ca0178923f468fee34d067e8)
---
Makefile.am | 1 -
common | 2 +-
configure.ac | 1 -
convert/Makefile.am | 2 -
in-place/Makefile.am | 4 +-
input/Makefile.am | 2 -
inspector/Makefile.am | 4 +-
lib/Makefile.am | 1 -
lib/utils.ml | 20 -------
lib/utils.mli | 4 --
ocaml-dep.sh.in | 1 -
output/Makefile.am | 2 -
output/output_qemu.ml | 121 +++++++++++++++++++++++-------------------
output/qemuopts-c.c | 12 +++++
output/qemuopts.ml | 1 +
output/qemuopts.mli | 4 ++
po/POTFILES-ml | 1 -
v2v/Makefile.am | 5 +-
18 files changed, 87 insertions(+), 101 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 51370188..4cc87324 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -37,7 +37,6 @@ SUBDIRS += common/mlxml
SUBDIRS += common/mltools
SUBDIRS += common/mlcustomize
SUBDIRS += common/mldrivers
-SUBDIRS += common/mlv2v
SUBDIRS += lib
SUBDIRS += input
SUBDIRS += output
Submodule common 2d42128e..faee2645:
diff --git a/common/.gitignore b/common/.gitignore
index 49915e31..44f49eb6 100644
--- a/common/.gitignore
+++ b/common/.gitignore
@@ -58,7 +58,6 @@ Makefile.in
/mlutils/.depend
/mlutils/c_utils_unit_tests
/mlutils/oUnit-*
-/mlv2v/.depend
/mlvisit/.depend
/mlvisit/visit_tests
/mlxml/.depend
diff --git a/common/mlcustomize/customize_run.ml b/common/mlcustomize/customize_run.ml
index 1d7c13ea..5ec5ed11 100644
--- a/common/mlcustomize/customize_run.ml
+++ b/common/mlcustomize/customize_run.ml
@@ -44,21 +44,13 @@ let run (g : G.guestfs) root (ops : ops) =
let debug_logfile () =
try g#download logfile "/dev/stderr"
with exn ->
- warning (f_"log file %s: %s (ignored)") logfile (Printexc.to_string exn) in
+ warning (f_"log file %s: %s (ignored)") logfile (Printexc.to_string exn)
+ in
(* Useful wrapper for scripts. *)
let do_run ~display ?(warn_failed_no_network = false) cmd =
- let incompatible_fn () =
- let guest_arch = g#inspect_get_arch root in
- error (f_"host cpu (%s) and guest arch (%s) are not compatible, \
- so you cannot use command line options that involve \
- running commands in the guest. Use --firstboot scripts \
- instead.")
- Guestfs_config.host_cpu guest_arch
- in
-
try
- run_in_guest_command g root ~logfile ~incompatible_fn cmd
+ run_in_guest_command g root ~logfile cmd
with
G.Error msg ->
debug_logfile ();
diff --git a/common/mlstdutils/guestfs_config.ml.in b/common/mlstdutils/guestfs_config.ml.in
index 0ab95bd9..84929581 100644
--- a/common/mlstdutils/guestfs_config.ml.in
+++ b/common/mlstdutils/guestfs_config.ml.in
@@ -22,4 +22,5 @@ let package_version = "@PACKAGE_VERSION@"
let package_version_full = "@PACKAGE_VERSION_FULL@"
let prefix = "@prefix@"
let datadir = prefix ^ "/share"
+let host_os = "@host_os@"
let host_cpu = "@host_cpu@"
diff --git a/common/mlstdutils/guestfs_config.mli b/common/mlstdutils/guestfs_config.mli
index 78df3040..70161c01 100644
--- a/common/mlstdutils/guestfs_config.mli
+++ b/common/mlstdutils/guestfs_config.mli
@@ -31,5 +31,8 @@ val prefix : string
val datadir : string
(** The configure value [@datadir@] *)
+val host_os : string
+(** The configure value [@host_os@] *)
+
val host_cpu : string
(** The configure value [@host_cpu@] *)
diff --git a/common/mltools/tools_utils.ml b/common/mltools/tools_utils.ml
index 23f16c51..1ff72ff3 100644
--- a/common/mltools/tools_utils.ml
+++ b/common/mltools/tools_utils.ml
@@ -737,11 +737,21 @@ let run_in_guest_command g root ?logfile ?incompatible_fn cmd =
(* Is the host_cpu compatible with the guest arch? ie. Can we
* run commands in this guest?
*)
+ let guest_os = g#inspect_get_type root in
+ let guest_os_compatible =
+ String.is_prefix Guestfs_config.host_os "linux" &&
+ guest_os = "linux" in
let guest_arch = g#inspect_get_arch root in
let guest_arch_compatible = guest_arch_compatible guest_arch in
- if not guest_arch_compatible then (
+ if not guest_os_compatible || not guest_arch_compatible then (
match incompatible_fn with
- | None -> ()
+ | None ->
+ error (f_"host (%s/%s) and guest (%s/%s) are not compatible, \
+ so you cannot use command line options that involve \
+ running commands in the guest. Use --firstboot scripts \
+ instead.")
+ Guestfs_config.host_os Guestfs_config.host_cpu
+ guest_os guest_arch
| Some fn -> fn ()
)
else (
diff --git a/common/mltools/tools_utils.mli b/common/mltools/tools_utils.mli
index 193ba7b6..4d627676 100644
--- a/common/mltools/tools_utils.mli
+++ b/common/mltools/tools_utils.mli
@@ -233,9 +233,15 @@ val with_timeout : string -> int -> ?sleep:int -> (unit -> 'a option) -> 'a
val run_in_guest_command : Guestfs.guestfs -> string -> ?logfile:string -> ?incompatible_fn:(unit -> unit) -> string -> unit
(** [run_in_guest_command g root ?incompatible_archs_fn cmd]
runs a command in the guest, which is already mounted for the
- specified [root]. The command is run directly in case the
- architecture of the host and the guest are compatible, optionally
- calling [?incompatible_fn] in case they are not.
+ specified [root].
+
+ The command is run directly in the case that the host and guest
+ are compatible.
+
+ If they are not compatible, the command is not run and an error
+ is printed. However you can override the error by setting
+ [?incompatible_fn], which is called so you can do something else
+ (like install a firstboot script).
[?logfile] is an optional file in the guest to where redirect
stdout and stderr of the command. *)
diff --git a/common/mlv2v/Makefile.am b/common/mlv2v/Makefile.am
deleted file mode 100644
index 945f9813..00000000
--- a/common/mlv2v/Makefile.am
+++ /dev/null
@@ -1,91 +0,0 @@
-# libguestfs OCaml virt-v2v generated code
-# Copyright (C) 2011-2019 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.
-
-include $(top_srcdir)/subdir-rules.mk
-
-EXTRA_DIST = \
- $(generator_built) \
- $(SOURCES_MLI) \
- $(SOURCES_ML) \
- $(SOURCES_C)
-
-generator_built = \
- uefi.mli \
- uefi.ml
-
-SOURCES_MLI = \
- uefi.mli
-
-SOURCES_ML = \
- uefi.ml
-
-SOURCES_C = \
- dummy.c
-
-# We pretend that we're building a C library. automake handles the
-# compilation of the C sources for us. At the end we take the C
-# objects and OCaml objects and link them into the OCaml library.
-# This C library is never used.
-
-noinst_LIBRARIES = libmlv2v.a
-
-if !HAVE_OCAMLOPT
-MLV2V_CMA = mlv2v.cma
-else
-MLV2V_CMA = mlv2v.cmxa
-endif
-
-noinst_DATA = $(MLV2V_CMA)
-
-libmlv2v_a_SOURCES = $(SOURCES_C)
-libmlv2v_a_CPPFLAGS = \
- -DCAML_NAME_SPACE \
- -I. \
- -I$(top_builddir) \
- -I$(shell $(OCAMLC) -where)
-libmlv2v_a_CFLAGS = \
- $(WARN_CFLAGS) $(WERROR_CFLAGS) \
- -fPIC
-
-BOBJECTS = $(SOURCES_ML:.ml=.cmo)
-XOBJECTS = $(BOBJECTS:.cmo=.cmx)
-
-OCAMLPACKAGES = \
- -package str,unix \
- -I $(builddir)
-OCAMLPACKAGES_TESTS = $(MLV2V_CMA)
-
-OCAMLFLAGS = $(OCAML_FLAGS) $(OCAML_WARN_ERROR) -ccopt '$(CFLAGS)'
-
-if !HAVE_OCAMLOPT
-OBJECTS = $(BOBJECTS)
-else
-OBJECTS = $(XOBJECTS)
-endif
-
-libmlv2v_a_DEPENDENCIES = $(OBJECTS)
-
-$(MLV2V_CMA): $(OBJECTS) libmlv2v.a
- $(OCAMLFIND) mklib $(OCAMLPACKAGES) \
- $(OBJECTS) $(libmlv2v_a_OBJECTS) -o mlv2v
-
-# OCaml dependencies.
-.depend: $(srcdir)/*.mli $(srcdir)/*.ml
- $(top_builddir)/ocaml-dep.sh $^
--include .depend
-
-.PHONY: docs
diff --git a/common/mlv2v/dummy.c b/common/mlv2v/dummy.c
deleted file mode 100644
index ebab6198..00000000
--- a/common/mlv2v/dummy.c
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Dummy source, to be used for OCaml-based tools with no C sources. */
-enum { foo = 1 };
diff --git a/common/mlv2v/uefi.ml b/common/mlv2v/uefi.ml
deleted file mode 100644
index 7a2610f2..00000000
--- a/common/mlv2v/uefi.ml
+++ /dev/null
@@ -1,71 +0,0 @@
-(* libguestfs generated file
- * WARNING: THIS FILE IS GENERATED
- * from the code in the generator/ subdirectory.
- * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
- *
- * Copyright (C) 2009-2023 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.
- *)
-
-type uefi_firmware = {
- code : string;
- code_debug : string option;
- vars : string;
- flags : uefi_flags;
-}
-and uefi_flags = uefi_flag list
-and uefi_flag = UEFI_FLAG_SECURE_BOOT_REQUIRED
-
-let uefi_aarch64_firmware = [
- { code = "/usr/share/AAVMF/AAVMF_CODE.fd";
- code_debug = Some "/usr/share/AAVMF/AAVMF_CODE.verbose.fd";
- vars = "/usr/share/AAVMF/AAVMF_VARS.fd";
- flags = [];
- };
- { code = "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw";
- code_debug = None;
- vars = "/usr/share/edk2/aarch64/vars-template-pflash.raw";
- flags = [];
- };
-]
-
-let uefi_x86_64_firmware = [
- { code = "/usr/share/OVMF/OVMF_CODE.fd";
- code_debug = None;
- vars = "/usr/share/OVMF/OVMF_VARS.fd";
- flags = [];
- };
- { code = "/usr/share/OVMF/OVMF_CODE.secboot.fd";
- code_debug = None;
- vars = "/usr/share/OVMF/OVMF_VARS.fd";
- flags = [UEFI_FLAG_SECURE_BOOT_REQUIRED];
- };
- { code = "/usr/share/edk2/ovmf/OVMF_CODE.fd";
- code_debug = None;
- vars = "/usr/share/edk2/ovmf/OVMF_VARS.fd";
- flags = [];
- };
- { code = "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd";
- code_debug = None;
- vars = "/usr/share/edk2/ovmf/OVMF_VARS.fd";
- flags = [UEFI_FLAG_SECURE_BOOT_REQUIRED];
- };
- { code = "/usr/share/qemu/ovmf-x86_64-code.bin";
- code_debug = None;
- vars = "/usr/share/qemu/ovmf-x86_64-vars.bin";
- flags = [];
- };
-]
diff --git a/common/mlv2v/uefi.mli b/common/mlv2v/uefi.mli
deleted file mode 100644
index 33789979..00000000
--- a/common/mlv2v/uefi.mli
+++ /dev/null
@@ -1,35 +0,0 @@
-(* libguestfs generated file
- * WARNING: THIS FILE IS GENERATED
- * from the code in the generator/ subdirectory.
- * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
- *
- * Copyright (C) 2009-2023 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.
- *)
-
-(** UEFI paths. *)
-
-type uefi_firmware = {
- code : string; (** code file *)
- code_debug : string option; (** code debug file *)
- vars : string; (** vars template file *)
- flags : uefi_flags; (** flags *)
-}
-and uefi_flags = uefi_flag list
-and uefi_flag = UEFI_FLAG_SECURE_BOOT_REQUIRED
-
-val uefi_aarch64_firmware : uefi_firmware list
-val uefi_x86_64_firmware : uefi_firmware list
diff --git a/common/qemuopts/qemuopts.c b/common/qemuopts/qemuopts.c
index b12fe38f..7dd9136d 100644
--- a/common/qemuopts/qemuopts.c
+++ b/common/qemuopts/qemuopts.c
@@ -76,13 +76,14 @@ enum qopt_type {
QOPT_FLAG,
QOPT_ARG,
QOPT_ARG_NOQUOTE,
+ QOPT_RAW,
QOPT_ARG_LIST,
};
struct qopt {
enum qopt_type type;
char *flag; /* eg. "-m" */
- char *value; /* Value, for QOPT_ARG, QOPT_ARG_NOQUOTE. */
+ char *value; /* Value, for QOPT_ARG, QOPT_ARG_NOQUOTE, QOPT_RAW */
char **values; /* List of values, for QOPT_ARG_LIST. */
};
@@ -353,6 +354,27 @@ qemuopts_add_arg_noquote (struct qemuopts *qopts, const char *flag,
return 0;
}
+int
+qemuopts_add_raw (struct qemuopts *qopts, const char *str)
+{
+ struct qopt *qopt;
+ char *value_copy;
+
+ value_copy = strdup (str);
+ if (value_copy == NULL)
+ return -1;
+
+ if ((qopt = extend_options (qopts)) == NULL) {
+ free (value_copy);
+ return -1;
+ }
+
+ qopt->type = QOPT_RAW;
+ qopt->value = value_copy;
+
+ return 0;
+}
+
/**
* Start an argument that takes a comma-separated list of fields.
*
@@ -724,6 +746,12 @@ qemuopts_to_channel (struct qemuopts *qopts, FILE *fp)
shell_and_comma_quote (qopts->options[i].values[j], fp);
}
break;
+
+ case QOPT_RAW:
+ fprintf (fp, "%s%s",
+ nl, qopts->options[i].value);
+ break;
+
}
}
fputc ('\n', fp);
@@ -769,6 +797,12 @@ qemuopts_to_argv (struct qemuopts *qopts)
case QOPT_ARG:
case QOPT_ARG_LIST:
n += 2;
+ break;
+
+ /* Raw is incompatible with using argv. */
+ case QOPT_RAW:
+ errno = EINVAL;
+ return NULL;
}
}
@@ -845,6 +879,10 @@ qemuopts_to_argv (struct qemuopts *qopts)
}
ret[n][len] = '\0';
n++;
+ break;
+
+ case QOPT_RAW:
+ abort ();
}
}
@@ -924,7 +962,8 @@ qemuopts_to_config_channel (struct qemuopts *qopts, FILE *fp)
return -1;
case QOPT_ARG_NOQUOTE:
- /* arg_noquote is incompatible with this function. */
+ case QOPT_RAW:
+ /* arg_noquote and raw are incompatible with this function. */
errno = EINVAL;
return -1;
@@ -960,6 +999,7 @@ qemuopts_to_config_channel (struct qemuopts *qopts, FILE *fp)
case QOPT_FLAG:
case QOPT_ARG_NOQUOTE:
case QOPT_ARG:
+ case QOPT_RAW:
abort ();
case QOPT_ARG_LIST:
diff --git a/common/qemuopts/qemuopts.h b/common/qemuopts/qemuopts.h
index 08efcd9a..29f81475 100644
--- a/common/qemuopts/qemuopts.h
+++ b/common/qemuopts/qemuopts.h
@@ -31,6 +31,7 @@ extern int qemuopts_add_flag (struct qemuopts *qopts, const char *flag);
extern int qemuopts_add_arg (struct qemuopts *qopts, const char *flag, const char *value);
extern int qemuopts_add_arg_format (struct qemuopts *qopts, const char *flag, const char *fs, ...) __attribute__((format (printf,3,4)));
extern int qemuopts_add_arg_noquote (struct qemuopts *qopts, const char *flag, const char *value);
+extern int qemuopts_add_raw (struct qemuopts *qopts, const char *str);
extern int qemuopts_start_arg_list (struct qemuopts *qopts, const char *flag);
extern int qemuopts_append_arg_list (struct qemuopts *qopts, const char *value);
extern int qemuopts_append_arg_list_format (struct qemuopts *qopts, const char *fs, ...) __attribute__((format (printf,2,3)));
diff --git a/configure.ac b/configure.ac
index 0c8473bd..8d6a506b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -137,7 +137,6 @@ AC_CONFIG_FILES([Makefile
common/mlstdutils/guestfs_config.ml
common/mltools/Makefile
common/mlutils/Makefile
- common/mlv2v/Makefile
common/mlxml/Makefile
common/qemuopts/Makefile
common/utils/Makefile
diff --git a/convert/Makefile.am b/convert/Makefile.am
index 2d34fe7c..2809c555 100644
--- a/convert/Makefile.am
+++ b/convert/Makefile.am
@@ -83,7 +83,6 @@ OCAMLPACKAGES = \
-I $(top_builddir)/common/mlpcre \
-I $(top_builddir)/common/mltools \
-I $(top_builddir)/common/mldrivers \
- -I $(top_builddir)/common/mlv2v \
-I $(top_builddir)/common/mlxml
if HAVE_OCAML_PKG_GETTEXT
OCAMLPACKAGES += -package gettext-stub
@@ -113,7 +112,6 @@ OCAMLLINKFLAGS = \
mltools.$(MLARCHIVE) \
mlcustomize.$(MLARCHIVE) \
mldrivers.$(MLARCHIVE) \
- mlv2v.$(MLARCHIVE) \
mlv2vlib.$(MLARCHIVE) \
$(LINK_CUSTOM_OCAMLC_ONLY)
diff --git a/in-place/Makefile.am b/in-place/Makefile.am
index 2217ff40..2fecb3a7 100644
--- a/in-place/Makefile.am
+++ b/in-place/Makefile.am
@@ -64,8 +64,7 @@ OCAMLPACKAGES = \
-I $(top_builddir)/common/mlxml \
-I $(top_builddir)/common/mltools \
-I $(top_builddir)/common/mlcustomize \
- -I $(top_builddir)/common/mldrivers \
- -I $(top_builddir)/common/mlv2v
+ -I $(top_builddir)/common/mldrivers
if HAVE_OCAML_PKG_GETTEXT
OCAMLPACKAGES += -package gettext-stub
endif
@@ -101,7 +100,6 @@ OCAMLLINKFLAGS = \
mllibvirt.$(MLARCHIVE) \
mlcustomize.$(MLARCHIVE) \
mldrivers.$(MLARCHIVE) \
- mlv2v.$(MLARCHIVE) \
mlv2vlib.$(MLARCHIVE) \
mlconvert.$(MLARCHIVE) \
mlinput.$(MLARCHIVE) \
diff --git a/input/Makefile.am b/input/Makefile.am
index 2f4ceb0c..0b97074a 100644
--- a/input/Makefile.am
+++ b/input/Makefile.am
@@ -102,7 +102,6 @@ OCAMLPACKAGES = \
-I $(top_builddir)/common/mlgettext \
-I $(top_builddir)/common/mlpcre \
-I $(top_builddir)/common/mltools \
- -I $(top_builddir)/common/mlv2v \
-I $(top_builddir)/common/mlxml
if HAVE_OCAML_PKG_GETTEXT
OCAMLPACKAGES += -package gettext-stub
@@ -130,7 +129,6 @@ OCAMLLINKFLAGS = \
mlxml.$(MLARCHIVE) \
mltools.$(MLARCHIVE) \
mllibvirt.$(MLARCHIVE) \
- mlv2v.$(MLARCHIVE) \
mlv2vlib.$(MLARCHIVE) \
$(LINK_CUSTOM_OCAMLC_ONLY)
diff --git a/inspector/Makefile.am b/inspector/Makefile.am
index 51ac71f9..172b2dc0 100644
--- a/inspector/Makefile.am
+++ b/inspector/Makefile.am
@@ -64,8 +64,7 @@ OCAMLPACKAGES = \
-I $(top_builddir)/common/mlxml \
-I $(top_builddir)/common/mltools \
-I $(top_builddir)/common/mlcustomize \
- -I $(top_builddir)/common/mldrivers \
- -I $(top_builddir)/common/mlv2v
+ -I $(top_builddir)/common/mldrivers
if HAVE_OCAML_PKG_GETTEXT
OCAMLPACKAGES += -package gettext-stub
endif
@@ -101,7 +100,6 @@ OCAMLLINKFLAGS = \
mllibvirt.$(MLARCHIVE) \
mlcustomize.$(MLARCHIVE) \
mldrivers.$(MLARCHIVE) \
- mlv2v.$(MLARCHIVE) \
mlv2vlib.$(MLARCHIVE) \
mlconvert.$(MLARCHIVE) \
mlinput.$(MLARCHIVE) \
diff --git a/lib/Makefile.am b/lib/Makefile.am
index a8776019..5cec771c 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -87,7 +87,6 @@ OCAMLPACKAGES = \
-I $(top_builddir)/common/mlstdutils \
-I $(top_builddir)/common/mltools \
-I $(top_builddir)/common/mlutils \
- -I $(top_builddir)/common/mlv2v \
-I $(top_builddir)/common/mlxml
OCAMLPACKAGES_TESTS = $(MLV2VLIB_CMA)
diff --git a/lib/utils.ml b/lib/utils.ml
index 4c9b7415..c4cfd89b 100644
--- a/lib/utils.ml
+++ b/lib/utils.ml
@@ -69,26 +69,6 @@ let qemu_supports_sound_card = function
| Types.USBAudio
-> false
-(* Find the UEFI firmware. *)
-let find_uefi_firmware guest_arch =
- let files =
- (* The lists of firmware are actually defined in common/utils/uefi.c. *)
- match guest_arch with
- | "x86_64" -> Uefi.uefi_x86_64_firmware
- | "aarch64" -> Uefi.uefi_aarch64_firmware
- | arch ->
- error (f_"dont know how to convert UEFI guests for architecture %s")
- guest_arch in
- let rec loop = function
- | [] ->
- error (f_"cannot find firmware for UEFI guests.\n\nYou probably \
- need to install OVMF (x86-64), or AAVMF (aarch64)")
- | ({ Uefi.code; vars = vars_template } as ret) :: rest ->
- if Sys.file_exists code && Sys.file_exists vars_template then ret
- else loop rest
- in
- loop files
-
let compare_app2_versions app1 app2 =
let i = compare app1.Guestfs.app2_epoch app2.Guestfs.app2_epoch in
if i <> 0 then i
diff --git a/lib/utils.mli b/lib/utils.mli
index 46d05306..afe61a4e 100644
--- a/lib/utils.mli
+++ b/lib/utils.mli
@@ -36,10 +36,6 @@ val kvm_arch : string -> string
val qemu_supports_sound_card : Types.source_sound_model -> bool
(** Does qemu support the given sound card? *)
-val find_uefi_firmware : string -> Uefi.uefi_firmware
-(** Find the UEFI firmware for the guest architecture.
- This cannot return an error, it calls [error] and fails instead. *)
-
val compare_app2_versions : Guestfs.application2 -> Guestfs.application2 -> int
(** Compare two app versions. *)
diff --git a/ocaml-dep.sh.in b/ocaml-dep.sh.in
index 7f3130e5..565f880f 100755
--- a/ocaml-dep.sh.in
+++ b/ocaml-dep.sh.in
@@ -41,7 +41,6 @@ common/mlprogress
common/mlstdutils
common/mltools
common/mlutils
-common/mlv2v
common/mlvisit
common/mlxml
lib
diff --git a/output/Makefile.am b/output/Makefile.am
index 09638c25..e71891eb 100644
--- a/output/Makefile.am
+++ b/output/Makefile.am
@@ -107,7 +107,6 @@ OCAMLPACKAGES = \
-I $(top_builddir)/common/mlgettext \
-I $(top_builddir)/common/mlpcre \
-I $(top_builddir)/common/mltools \
- -I $(top_builddir)/common/mlv2v \
-I $(top_builddir)/common/mlxml
if HAVE_OCAML_PKG_GETTEXT
OCAMLPACKAGES += -package gettext-stub
@@ -138,7 +137,6 @@ OCAMLLINKFLAGS = \
mlxml.$(MLARCHIVE) \
mltools.$(MLARCHIVE) \
mllibvirt.$(MLARCHIVE) \
- mlv2v.$(MLARCHIVE) \
mlv2vlib.$(MLARCHIVE) \
$(LINK_CUSTOM_OCAMLC_ONLY)
diff --git a/output/output_qemu.ml b/output/output_qemu.ml
index b6f24565..fd0182d6 100644
--- a/output/output_qemu.ml
+++ b/output/output_qemu.ml
@@ -105,30 +105,56 @@ module QEMU = struct
let { guestcaps; target_buses; target_firmware } = target_meta in
+ (* Start the shell script. Write it to a temporary file
+ * which we rename at the end.
+ *)
let file = output_storage // output_name ^ ".sh" in
+ let tmpfile = file ^ ".tmp" in
+ On_exit.unlink tmpfile;
- let uefi_firmware =
- match target_firmware with
- | TargetBIOS -> None
- | TargetUEFI -> Some (find_uefi_firmware guestcaps.gcaps_arch) in
- let machine, secure_boot_required =
- match guestcaps.gcaps_machine, uefi_firmware with
- | _, Some { Uefi.flags }
- when List.mem Uefi.UEFI_FLAG_SECURE_BOOT_REQUIRED flags ->
- (* Force machine type to Q35 because PC does not support
- * secure boot. We must remove this when we get the
- * correct machine type from libosinfo in future. XXX
- *)
- Q35, true
- | machine, _ ->
- machine, false in
- let smm = secure_boot_required in
+ let chan = open_out tmpfile in
+ let fpf fs = fprintf chan fs in
+ fpf "#!/bin/sh -\n";
+ fpf "\n";
- let machine_str =
- match machine with
- | I440FX -> "pc"
- | Q35 -> "q35"
- | Virt -> "virt" in
+ (* Allow the user to override our choice of machine type. *)
+ let () =
+ let machine_str =
+ match guestcaps.gcaps_machine with
+ | I440FX -> "pc"
+ | Q35 -> "q35"
+ | Virt -> "virt" in
+ fpf "machine=%s\n" machine_str;
+ fpf "\n" in
+
+ (* If the firmware is UEFI, locate the OVMF files. *)
+ (match target_firmware with
+ | TargetBIOS -> ()
+ | TargetUEFI ->
+ let prefix =
+ match guestcaps.gcaps_arch with
+ | "x86_64" ->
+ fpf "uefi_dir=/usr/share/OVMF\n"; "OVMF"
+ | "aarch64" ->
+ fpf "uefi_dir=/usr/share/AAVMF\n"; "AAVMF"
+ | arch ->
+ error (f_"dont know how to convert UEFI guests \
+ for architecture %s")
+ arch in
+ fpf "uefi_code=\"$( \
+ find $uefi_dir -name '%s_CODE*.fd' -print -quit )\"\n"
+ prefix;
+ fpf "uefi_vars_template=\"$( \
+ find $uefi_dir -name '%s_VARS.fd' -print -quit )\"\n"
+ prefix;
+ fpf "\n";
+ fpf "# Make a copy of the UEFI variables template\n";
+ fpf "uefi_vars=\"$(mktemp)\"\n";
+ fpf "cp \"$uefi_vars_template\" \"$uefi_vars\"\n";
+ fpf "\n";
+ fpf "# You may need to set this 'on' to use secure boot\n";
+ fpf "smm=off\n";
+ );
(* Construct the command line. Note that the [Qemuopts]
* module deals with shell and qemu comma quoting.
@@ -152,20 +178,17 @@ module QEMU = struct
if not guestcaps.gcaps_rtc_utc then arg "-rtc" "base=localtime";
- arg_list "-machine" (machine_str ::
- (if smm then ["smm=on"] else []) @
- ["accel=kvm:tcg"]);
+ arg_noquote "-machine" "$machine${smm:+,smm=$smm},accel=kvm:tcg";
- (match uefi_firmware with
- | None -> ()
- | Some { Uefi.code } ->
- if secure_boot_required then
- arg_list "-global"
- ["driver=cfi.pflash01"; "property=secure"; "value=on"];
- arg_list "-drive"
- ["if=pflash"; "format=raw"; "file=" ^ code; "readonly=on"];
- arg_noquote "-drive" "if=pflash,format=raw,file=\"$uefi_vars\"";
- );
+ fpf "if [ \"$uefi_code\" != \"\" ]; then\n";
+ fpf " uefi_args=\"\\\n";
+ fpf " -global driver=cfi.pflash01,property=secure,value=$smm \\\n";
+ fpf " -drive if=pflash,format=raw,file=$uefi_code,readonly=on \\\n";
+ fpf " -drive if=pflash,format=raw,file=$uefi_vars \\\n";
+ fpf " \"\n";
+ fpf "fi\n";
+ fpf "\n";
+ Qemuopts.raw cmd "$uefi_args";
arg "-m" (Int64.to_string (source.s_memory /^ 1024L /^ 1024L));
@@ -209,7 +232,7 @@ module QEMU = struct
Array.exists floppy_filter target_buses.target_floppy_bus in
if ide_ctrl_needed then (
- match machine with
+ match guestcaps.gcaps_machine with
| I440FX -> ()
(* The PC machine has a built-in controller of type "piix3-ide"
* providing buses "ide.0" and "ide.1", with each bus fitting two
@@ -232,7 +255,7 @@ module QEMU = struct
arg_list "-device" [ "virtio-scsi-pci"; "id=scsi0" ];
if floppy_ctrl_needed then (
- match machine with
+ match guestcaps.gcaps_machine with
| I440FX -> ()
(* The PC machine has a built-in controller of type "isa-fdc"
* providing bus "floppy-bus.0", fitting two devices.
@@ -283,7 +306,7 @@ module QEMU = struct
*)
let backend_name = sprintf "drive-ide-%d" frontend_ctr
and ide_bus, ide_unit =
- match machine with
+ match guestcaps.gcaps_machine with
| I440FX -> frontend_ctr / 2, frontend_ctr mod 2
| Q35 -> frontend_ctr, 0
| Virt -> 0, 0 (* should never happen, see warning above *) in
@@ -450,25 +473,13 @@ module QEMU = struct
if inspect.i_type = "linux" then
arg "-serial" "stdio";
- (* Write the qemu script. *)
- with_open_out file (
- fun chan ->
- let fpf fs = fprintf chan fs in
- fpf "#!/bin/sh -\n";
- fpf "\n";
-
- (match uefi_firmware with
- | None -> ()
- | Some { Uefi.vars = vars_template } ->
- fpf "# Make a copy of the UEFI variables template\n";
- fpf "uefi_vars=\"$(mktemp)\"\n";
- fpf "cp %s \"$uefi_vars\"\n" (quote vars_template);
- fpf "\n"
- );
-
- Qemuopts.to_chan cmd chan
- );
+ (* Write the qemu command. *)
+ Qemuopts.to_chan cmd chan;
+ (* Finish off by renaming the temporary file to the final file
+ * and making it executable.
+ *)
+ Unix.rename tmpfile file;
Unix.chmod file 0o755;
(* If -oo qemu-boot option was specified then we should boot the guest. *)
diff --git a/output/qemuopts-c.c b/output/qemuopts-c.c
index 03c40206..1d080737 100644
--- a/output/qemuopts-c.c
+++ b/output/qemuopts-c.c
@@ -176,6 +176,18 @@ guestfs_int_qemuopts_arg_list (value qoptsv, value flagv, value valuesv)
CAMLreturn (Val_unit);
}
+value
+guestfs_int_qemuopts_raw (value qoptsv, value strv)
+{
+ CAMLparam2 (qoptsv, strv);
+ struct qemuopts *qopts = Qopts_val (qoptsv);
+
+ if (qemuopts_add_raw (qopts, String_val (strv)) == -1)
+ unix_error (errno, (char *) "qemuopts_add_raw", strv);
+
+ CAMLreturn (Val_unit);
+}
+
value
guestfs_int_qemuopts_to_script (value qoptsv, value strv)
{
diff --git a/output/qemuopts.ml b/output/qemuopts.ml
index 1ba57dba..bc4e33d7 100644
--- a/output/qemuopts.ml
+++ b/output/qemuopts.ml
@@ -25,6 +25,7 @@ external flag : t -> string -> unit = "guestfs_int_qemuopts_flag"
external arg : t -> string -> string -> unit = "guestfs_int_qemuopts_arg"
external arg_noquote : t -> string -> string -> unit = "guestfs_int_qemuopts_arg_noquote"
external arg_list : t -> string -> string list -> unit = "guestfs_int_qemuopts_arg_list"
+external raw : t -> string -> unit = "guestfs_int_qemuopts_raw"
external to_script : t -> string -> unit = "guestfs_int_qemuopts_to_script"
external _to_chan : t -> Unix.file_descr -> unit = "guestfs_int_qemuopts_to_chan"
diff --git a/output/qemuopts.mli b/output/qemuopts.mli
index 5c39a32f..bd65405f 100644
--- a/output/qemuopts.mli
+++ b/output/qemuopts.mli
@@ -53,6 +53,10 @@ val arg_list : t -> string -> string list -> unit
This does both qemu comma-quoting and shell-quoting as required. *)
+val raw : t -> string -> unit
+(** [raw "stuff"] adds [stuff] to the command line completely
+ unquoted. Use with care. *)
+
val to_script : t -> string -> unit
(** [to_script t "./file.sh"] writes the resulting command line to
a file. The file begins with [#!/bin/sh] and is chmod 0755. *)
diff --git a/po/POTFILES-ml b/po/POTFILES-ml
index e88a18b0..7f1d1cdb 100644
--- a/po/POTFILES-ml
+++ b/po/POTFILES-ml
@@ -42,7 +42,6 @@ common/mltools/urandom.ml
common/mltools/xpath_helpers.ml
common/mlutils/c_utils.ml
common/mlutils/unix_utils.ml
-common/mlv2v/uefi.ml
common/mlxml/xml.ml
in-place/in_place.ml
input/OVA.ml
diff --git a/v2v/Makefile.am b/v2v/Makefile.am
index d609ab02..9378eb89 100644
--- a/v2v/Makefile.am
+++ b/v2v/Makefile.am
@@ -67,8 +67,7 @@ OCAMLPACKAGES = \
-I $(top_builddir)/common/mlxml \
-I $(top_builddir)/common/mltools \
-I $(top_builddir)/common/mlcustomize \
- -I $(top_builddir)/common/mldrivers \
- -I $(top_builddir)/common/mlv2v
+ -I $(top_builddir)/common/mldrivers
if HAVE_OCAML_PKG_GETTEXT
OCAMLPACKAGES += -package gettext-stub
endif
@@ -104,7 +103,6 @@ OCAMLLINKFLAGS = \
mllibvirt.$(MLARCHIVE) \
mlcustomize.$(MLARCHIVE) \
mldrivers.$(MLARCHIVE) \
- mlv2v.$(MLARCHIVE) \
mlv2vlib.$(MLARCHIVE) \
mlconvert.$(MLARCHIVE) \
mlinput.$(MLARCHIVE) \
@@ -164,7 +162,6 @@ v2v_unit_tests_DEPENDENCIES = \
../common/mltools/mltools.$(MLARCHIVE) \
../common/mlcustomize/mlcustomize.$(MLARCHIVE) \
../common/mldrivers/mldrivers.$(MLARCHIVE) \
- ../common/mlv2v/mlv2v.$(MLARCHIVE) \
$(top_srcdir)/ocaml-link.sh
v2v_unit_tests_LINK = \
$(top_srcdir)/ocaml-link.sh -cclib '$(OCAMLCLIBS)' -- \

View File

@ -1,33 +0,0 @@
From 6da3da6a74890e055a5f29d123632358c4fbd462 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Fri, 15 Nov 2024 14:04:48 +0000
Subject: [PATCH] -o qemu: Add set -e, -x at the top of the output script
This adds:
set -e
#set -x
The second command is commented so that users can enable it if they
want to see the output.
(cherry picked from commit e09aaad7e787803ff5e383fa6b5276c888b42ef5)
(cherry picked from commit f43d92473d3da0a5f6a2da6e44ca8416ad824d8f)
---
output/output_qemu.ml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/output/output_qemu.ml b/output/output_qemu.ml
index fd0182d6..b0c2ff01 100644
--- a/output/output_qemu.ml
+++ b/output/output_qemu.ml
@@ -116,6 +116,9 @@ module QEMU = struct
let fpf fs = fprintf chan fs in
fpf "#!/bin/sh -\n";
fpf "\n";
+ fpf "set -e\n";
+ fpf "#set -x\n";
+ fpf "\n";
(* Allow the user to override our choice of machine type. *)
let () =

View File

@ -1,277 +0,0 @@
From de71ce60bff586dad2d554d3de344dd7d2d13c86 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Mon, 2 Dec 2024 15:22:43 +0000
Subject: [PATCH] v2v: Implement --parallel=N for parallel disk copies
When set, run up to N copies of nbdcopy in parallel. This only
applies for guests with multiple disks.
The default, as for all older versions of virt-v2v, is to copy disks
one at a time.
(cherry picked from commit fd1148f79581b148525eb12154aef7603ccf0baa)
(cherry picked from commit 037a603c2d5cf9d2d5f8157116dbf14945277dc2)
---
docs/virt-v2v.pod | 13 +++++++
lib/utils.ml | 6 ++++
lib/utils.mli | 4 +++
tests/Makefile.am | 2 ++
tests/test-v2v-i-disk-parallel.sh | 54 +++++++++++++++++++++++++++++
v2v/v2v.ml | 56 +++++++++++++++++++++++++------
6 files changed, 125 insertions(+), 10 deletions(-)
create mode 100755 tests/test-v2v-i-disk-parallel.sh
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
index de92db84..f0857ebf 100644
--- a/docs/virt-v2v.pod
+++ b/docs/virt-v2v.pod
@@ -556,6 +556,19 @@ The directory must exist.
For I<-o openstack>, this is the optional Cinder volume type.
+=item B<--parallel> N
+
+Enable parallel copying if the guest has multiple disks. I<N> is the
+maximum number of parallel L<nbdcopy(1)> instances to run.
+
+The default is to run at most one instance of nbdcopy
+(ie. I<--parallel=1>). All versions of virt-v2v E<le> 2.7.2 also did
+disk copies one at a time.
+
+Within each guest disk, nbdcopy tries to copy in parallel if the
+underlying endpoints support that. This is not affected by this
+command line option. See the L<nbdcopy(1)> manual page for details.
+
=item B<--print-source>
Print information about the source guest and stop. This option is
diff --git a/lib/utils.ml b/lib/utils.ml
index c4cfd89b..f2da9e80 100644
--- a/lib/utils.ml
+++ b/lib/utils.ml
@@ -29,6 +29,12 @@ let large_tmpdir =
try Sys.getenv "VIRT_V2V_TMPDIR"
with Not_found -> (open_guestfs ())#get_cachedir ()
+let string_of_process_status = function
+ | Unix.WEXITED 0 -> s_"success"
+ | WEXITED i -> sprintf (f_"exited with non-zero error code %d") i
+ | WSIGNALED i -> sprintf (f_"signalled by signal %d") i
+ | WSTOPPED i -> sprintf (f_"stopped by signal %d") i
+
(* Is SELinux enabled and enforcing on the host? *)
let have_selinux =
0 = Sys.command "getenforce 2>/dev/null | grep -isq Enforcing"
diff --git a/lib/utils.mli b/lib/utils.mli
index afe61a4e..e7ee13d1 100644
--- a/lib/utils.mli
+++ b/lib/utils.mli
@@ -23,6 +23,10 @@ val large_tmpdir : string
such as overlays in this directory. Small temporary files can
use the default behaviour eg. of {!Filename.temp_file} *)
+val string_of_process_status : Unix.process_status -> string
+(** Convert a process status (such as returned by {!Unix.wait}) into
+ a printable string. *)
+
val have_selinux : bool
(** True if SELinux is enabled and enforcing on the host. *)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2cf57248..0035262e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -74,6 +74,7 @@ TESTS = \
test-v2v-cdrom.sh \
test-v2v-floppy.sh \
test-v2v-i-disk.sh \
+ test-v2v-i-disk-parallel.sh \
test-v2v-i-ova.sh \
test-v2v-inspector.sh \
test-v2v-mac.sh \
@@ -185,6 +186,7 @@ EXTRA_DIST += \
test-v2v-floppy.expected \
test-v2v-floppy.sh \
test-v2v-i-disk.sh \
+ test-v2v-i-disk-parallel.sh \
test-v2v-i-ova-as-root.ovf \
test-v2v-i-ova-as-root.sh \
test-v2v-i-ova-bad-sha1.sh \
diff --git a/tests/test-v2v-i-disk-parallel.sh b/tests/test-v2v-i-disk-parallel.sh
new file mode 100755
index 00000000..a6470fdd
--- /dev/null
+++ b/tests/test-v2v-i-disk-parallel.sh
@@ -0,0 +1,54 @@
+#!/bin/bash -
+# libguestfs virt-v2v test script
+# Copyright (C) 2014-2024 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# Test --parallel option.
+
+set -e
+
+source ./functions.sh
+set -e
+set -x
+
+skip_if_skipped
+windows=../test-data/phony-guests/windows.img
+requires test -f $windows
+
+export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools"
+
+d=test-v2v-i-disk-parallel.d
+rm -rf $d
+cleanup_fn rm -rf $d
+mkdir $d
+
+truncate -s $((100*1024*1024)) $d/disk-2.img $d/disk-3.img $d/disk-4.img
+
+$VG virt-v2v --debug-gc \
+ --parallel=2 \
+ -i disk \
+ $windows \
+ $d/disk-2.img \
+ $d/disk-3.img \
+ $d/disk-4.img \
+ -o local -os $d
+
+# Test the libvirt XML metadata and output disks were created.
+test -f $d/windows.xml
+test -f $d/windows-sda
+test -f $d/windows-sdb
+test -f $d/windows-sdc
+test -f $d/windows-sdd
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index 8be1e5cb..b7dbce3a 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -79,6 +79,7 @@ let rec main () =
)
in
+ let parallel = ref 1 in
let network_map = Networks.create () in
let static_ips = ref [] in
let rec add_network str =
@@ -259,6 +260,8 @@ let rec main () =
s_"Set output storage location";
[ L"password-file" ], Getopt.String ("filename", set_string_option_once "-ip" input_password),
s_"Same as -ip filename";
+ [ L"parallel" ], Getopt.Set_int ("N", parallel),
+ s_"Run up to N instances of nbdcopy in parallel";
[ L"print-source" ], Getopt.Set print_source,
s_"Print source and stop";
[ L"root" ], Getopt.String ("ask|... ", set_root_choice),
@@ -346,6 +349,7 @@ read the man page virt-v2v(1).
| `Preallocated -> Types.Preallocated in
let output_mode = !output_mode in
let output_name = !output_name in
+ let parallel = !parallel in
let print_source = !print_source in
let root_choice = !root_choice in
let static_ips = !static_ips in
@@ -365,6 +369,7 @@ read the man page virt-v2v(1).
pr "mac-option\n";
pr "bandwidth-option\n";
pr "mac-ip-option\n";
+ pr "parallel-option\n";
pr "customize-ops\n";
pr "input:disk\n";
pr "input:libvirt\n";
@@ -551,12 +556,15 @@ read the man page virt-v2v(1).
else
List.rev acc
in
- let disks = loop [] 0 in
- let nr_disks = List.length disks in
+ let disks = ref (loop [] 0) in
+ let nr_disks = List.length !disks in
(* Copy the disks. *)
- List.iter (
- fun (i, input_socket, output_socket) ->
+ let nbdcopy_pids = ref [] in
+ let rec copy_loop () =
+ if List.length !nbdcopy_pids < parallel && !disks <> [] then (
+ (* Schedule another nbdcopy process. *)
+ let i, input_socket, output_socket = List.pop_front disks in
message (f_"Copying disk %d/%d") (i+1) nr_disks;
let request_size = Output_module.request_size
@@ -576,8 +584,33 @@ read the man page virt-v2v(1).
flush Stdlib.stderr
);
- nbdcopy ?request_size output_alloc input_uri output_uri
- ) disks;
+ let pid = nbdcopy ?request_size output_alloc input_uri output_uri in
+ List.push_front pid nbdcopy_pids;
+
+ copy_loop ();
+ )
+ else if !nbdcopy_pids <> [] then (
+ (* Wait for one nbdcopy instance to exit. *)
+ let pid, status = wait () in
+ (* If this internal error turns up in real world scenarios then
+ * we may need to change the [wait] above so it only waits on
+ * the nbdcopy PIDs.
+ *)
+ if not (List.mem pid !nbdcopy_pids) then
+ error (f_"internal error: wait returned unexpected \
+ process ID %d status \"%s\"")
+ pid (string_of_process_status status);
+ nbdcopy_pids := List.filter ((<>) pid) !nbdcopy_pids;
+ (match status with
+ | WEXITED 0 -> copy_loop ()
+ | WEXITED _ | WSIGNALED _ | WSTOPPED _ ->
+ error "nbdcopy %s" (string_of_process_status status)
+ );
+ )
+ in
+ copy_loop ();
+ assert (!disks == []);
+ assert (!nbdcopy_pids == []);
(* End of copying phase. *)
unlink (v2vdir // "copy");
@@ -615,6 +648,7 @@ and check_host_free_space () =
\"Minimum free space check in the host\".")
large_tmpdir (human_size free_space)
+(* Start nbdcopy as a background process, returning the PID. *)
and nbdcopy ?request_size output_alloc input_uri output_uri =
(* XXX It's possible that some output modes know whether
* --target-is-zero which would be a useful optimization.
@@ -642,10 +676,12 @@ and nbdcopy ?request_size output_alloc input_uri output_uri =
if not (quiet ()) then List.push_back cmd "--progress";
if output_alloc = Types.Preallocated then List.push_back cmd "--allocated";
- let cmd = !cmd in
-
- if run_command cmd <> 0 then
- error (f_"nbdcopy command failed, see earlier error messages")
+ let args = Array.of_list !cmd in
+ match fork () with
+ | 0 ->
+ (* Child process (nbdcopy). *)
+ execvp "nbdcopy" args
+ | pid -> pid
(* Run nbdinfo on a URI and collect the information. However don't
* fail if nbdinfo is not installed since this is just used for debugging.

File diff suppressed because it is too large Load Diff

View File

@ -1,244 +0,0 @@
From a661b06677d7fdd63b6e7315b759ded900f3a540 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 5 Dec 2024 15:19:15 +0000
Subject: [PATCH] tests: Sort the tests into alphabetical order
The list of tests had grown organically over a very long time.
Also rename the "odd one out" rhbz* to test-rhbz*.
(cherry picked from commit d80c05a27098c6affaca4363372cae2354d9bc4f)
(cherry picked from commit a9d2eb43fdd5f1d115cc5b048a4b252a533d72cd)
---
.gitignore | 2 +-
configure.ac | 2 +-
tests/Makefile.am | 58 +++++++++----------
tests/rhbz1232192.xml | 26 +++++++++
tests/{rhbz1232192.sh => test-rhbz1232192.sh} | 2 +-
...1232192.xml.in => test-rhbz1232192.xml.in} | 0
6 files changed, 58 insertions(+), 32 deletions(-)
create mode 100644 tests/rhbz1232192.xml
rename tests/{rhbz1232192.sh => test-rhbz1232192.sh} (95%)
rename tests/{rhbz1232192.xml.in => test-rhbz1232192.xml.in} (100%)
diff --git a/.gitignore b/.gitignore
index b8abc3f8..9dcd4611 100644
--- a/.gitignore
+++ b/.gitignore
@@ -121,13 +121,13 @@ Makefile.in
/test-data/phony-guests/windows-system
/tests/functions.sh
/tests/libvirt-is-version
-/tests/rhbz1232192.xml
/tests/test-cdrom.xml
/tests/test-conversion-of-*.sh
/tests/test-floppy.xml
/tests/test-mac.xml
/tests/test-networks-and-bridges.xml
/tests/test-print-source.xml
+/tests/test-rhbz1232192.xml
/tests/test-sound.xml
/tests/windows.vmdk
/v2v/.depend
diff --git a/configure.ac b/configure.ac
index 300b421e..623c634d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -163,12 +163,12 @@ AC_CONFIG_FILES([Makefile
test-data/phony-guests/guests.xml
tests/functions.sh
tests/Makefile
- tests/rhbz1232192.xml
tests/test-cdrom.xml
tests/test-floppy.xml
tests/test-mac.xml
tests/test-networks-and-bridges.xml
tests/test-print-source.xml
+ tests/test-rhbz1232192.xml
tests/test-sound.xml
v2v/Makefile])
diff --git a/tests/Makefile.am b/tests/Makefile.am
index c466b59a..fac18bbe 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -56,6 +56,17 @@ libvirt_is_version_CFLAGS = \
TESTS_ENVIRONMENT = $(top_builddir)/run --test
TESTS = \
+ test-bad-networks-and-bridges.sh \
+ test-cdrom.sh \
+ test-customize.sh \
+ test-fedora-btrfs-conversion.sh \
+ test-fedora-conversion.sh \
+ test-fedora-luks-on-lvm-conversion.sh \
+ test-fedora-lvm-on-luks-conversion.sh \
+ test-fedora-md-conversion.sh \
+ test-floppy.sh \
+ test-i-disk-parallel.sh \
+ test-i-disk.sh \
test-i-ova-bad-sha1.sh \
test-i-ova-bad-sha256.sh \
test-i-ova-directory.sh \
@@ -68,16 +79,11 @@ TESTS = \
test-i-ova-subfolders.sh \
test-i-ova-tar.sh \
test-i-ova-two-disks.sh \
- test-i-vmx.sh \
- test-it-vddk-io-query.sh \
- test-bad-networks-and-bridges.sh \
- test-cdrom.sh \
- test-floppy.sh \
- test-i-disk.sh \
- test-i-disk-parallel.sh \
test-i-ova.sh \
+ test-i-vmx.sh \
test-in-place.sh \
test-inspector.sh \
+ test-it-vddk-io-query.sh \
test-mac.sh \
test-machine-readable.sh \
test-networks-and-bridges.sh \
@@ -94,16 +100,10 @@ TESTS = \
test-of-option.sh \
test-on-option.sh \
test-print-source.sh \
+ test-rhbz1232192.sh \
test-sound.sh \
test-virtio-win-iso.sh \
- test-fedora-conversion.sh \
- test-fedora-btrfs-conversion.sh \
- test-fedora-luks-on-lvm-conversion.sh \
- test-fedora-lvm-on-luks-conversion.sh \
- test-fedora-md-conversion.sh \
test-windows-conversion.sh \
- test-customize.sh \
- rhbz1232192.sh \
$(SLOW_TESTS) \
$(ROOT_TESTS)
@@ -179,16 +179,17 @@ EXTRA_DIST += \
test-bad-networks-and-bridges.sh \
test-cdrom.expected \
test-cdrom.sh \
+ test-conversion-of.sh \
test-customize.sh \
- test-fedora-conversion.sh \
test-fedora-btrfs-conversion.sh \
+ test-fedora-conversion.sh \
test-fedora-luks-on-lvm-conversion.sh \
test-fedora-lvm-on-luks-conversion.sh \
test-fedora-md-conversion.sh \
test-floppy.expected \
test-floppy.sh \
- test-i-disk.sh \
test-i-disk-parallel.sh \
+ test-i-disk.sh \
test-i-ova-as-root.ovf \
test-i-ova-as-root.sh \
test-i-ova-bad-sha1.sh \
@@ -223,33 +224,33 @@ EXTRA_DIST += \
test-i-ova.ovf \
test-i-ova.sh \
test-i-ova.xml \
- test-i-vmx.sh \
test-i-vmx-1.expected \
- test-i-vmx-2.expected \
- test-i-vmx-3.expected \
- test-i-vmx-4.expected \
- test-i-vmx-5.expected \
- test-i-vmx-6.expected \
- test-i-vmx-7.expected \
test-i-vmx-1.vmx \
+ test-i-vmx-2.expected \
test-i-vmx-2.vmx \
+ test-i-vmx-3.expected \
test-i-vmx-3.vmx \
+ test-i-vmx-4.expected \
test-i-vmx-4.vmx \
+ test-i-vmx-5.expected \
test-i-vmx-5.vmx \
+ test-i-vmx-6.expected \
test-i-vmx-6.vmx \
+ test-i-vmx-7.expected \
test-i-vmx-7.vmx \
+ test-i-vmx.sh \
test-in-place.sh \
test-inspector.sh \
test-it-vddk-io-query.sh \
- test-machine-readable.sh \
test-mac-expected.xml \
test-mac.sh \
- test-networks-and-bridges.sh \
+ test-machine-readable.sh \
test-networks-and-bridges-expected.xml \
+ test-networks-and-bridges.sh \
test-o-glance.sh \
test-o-kubevirt-fedora.sh \
- test-o-kubevirt-windows.sh \
test-o-kubevirt-fedora.yaml.expected \
+ test-o-kubevirt-windows.sh \
test-o-kubevirt-windows.yaml.expected \
test-o-libvirt.sh \
test-o-local-qcow2-compressed.sh \
@@ -262,9 +263,8 @@ EXTRA_DIST += \
test-on-option.sh \
test-print-source.expected \
test-print-source.sh \
- test-conversion-of.sh \
+ test-rhbz1232192.sh \
test-sound.sh \
test-trim.sh \
test-virtio-win-iso.sh \
- test-windows-conversion.sh \
- rhbz1232192.sh
+ test-windows-conversion.sh
diff --git a/tests/rhbz1232192.xml b/tests/rhbz1232192.xml
new file mode 100644
index 00000000..cf0d7a45
--- /dev/null
+++ b/tests/rhbz1232192.xml
@@ -0,0 +1,26 @@
+<domain type='kvm'>
+ <name>rhbz1232192</name>
+ <memory>1048576</memory>
+ <vcpu>2</vcpu>
+ <os>
+ <type>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <features>
+ <acpi/>
+ <apic/>
+ <pae/>
+ </features>
+ <devices>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='raw'/>
+ <source file='/home/rjones/d/virt-v2v-rhel-9.6/test-data/phony-guests/windows.img'/>
+ <target dev='hda' bus='ide'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='raw'/>
+ <source file='/home/rjones/d/virt-v2v-rhel-9.6/test-data/phony-guests/blank-disk.img'/>
+ <target dev='hdb' bus='ide'/>
+ </disk>
+ </devices>
+</domain>
diff --git a/tests/rhbz1232192.sh b/tests/test-rhbz1232192.sh
similarity index 95%
rename from tests/rhbz1232192.sh
rename to tests/test-rhbz1232192.sh
index d2180439..21eb2dbd 100755
--- a/tests/rhbz1232192.sh
+++ b/tests/test-rhbz1232192.sh
@@ -32,4 +32,4 @@ requires test -f ../test-data/phony-guests/blank-disk.img
export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools"
-virt-v2v -i libvirtxml rhbz1232192.xml -o null
+virt-v2v -i libvirtxml test-rhbz1232192.xml -o null
diff --git a/tests/rhbz1232192.xml.in b/tests/test-rhbz1232192.xml.in
similarity index 100%
rename from tests/rhbz1232192.xml.in
rename to tests/test-rhbz1232192.xml.in

View File

@ -1,27 +0,0 @@
From f0e33d92b0fac09ea21fd74f85ec15728982ebed Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 5 Dec 2024 13:35:24 +0000
Subject: [PATCH] docs: Embolden whole "-O -"
Since this is typed literally make sure the whole string is
emboldened, according to our usual style.
(cherry picked from commit 3b81441fdb9e43eae3619c247e0d945d143fc92f)
(cherry picked from commit 66a6afb741d32f998633b121c2fb9813e5195820)
---
docs/virt-v2v-inspector.pod | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/virt-v2v-inspector.pod b/docs/virt-v2v-inspector.pod
index 6b2ba2a9..8201fcf9 100644
--- a/docs/virt-v2v-inspector.pod
+++ b/docs/virt-v2v-inspector.pod
@@ -138,7 +138,7 @@ Display help.
Write the output to a file called F<output.xml>.
-=item B<-O> -
+=item B<-O ->
Write the output to stdout. This is also the default if the I<-O>
option is omitted.

View File

@ -1,27 +0,0 @@
From ee644bada89eb1a00284e8ae3169488aba01b06c Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 5 Dec 2024 17:17:25 +0000
Subject: [PATCH] in-place: Fix name of program in the --help output
(cherry picked from commit 00bd17ceb1ce0ff1f837b7621596d3b1e16ccc65)
(cherry picked from commit 900641084045a53f9c59e099e7d49dbb43bda3eb)
---
in-place/in_place.ml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/in-place/in_place.ml b/in-place/in_place.ml
index 9d24de78..42075139 100644
--- a/in-place/in_place.ml
+++ b/in-place/in_place.ml
@@ -194,9 +194,9 @@ let rec main () =
Note this program modifies the guest in-place with no backup.
Normally you should use virt-v2v.
-virt-v2v -i libvirtxml guest-domain.xml
+virt-v2v-in-place -i libvirtxml guest-domain.xml
-virt-v2v -i disk disk.img
+virt-v2v-in-place -i disk disk.img
A short summary of the options is given below. For detailed help please
read the man page virt-v2v-in-place(1).

View File

@ -1,29 +0,0 @@
From 73bf9cb9a51f3112e8a80c57586442efcf53cfc1 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 5 Dec 2024 17:27:38 +0000
Subject: [PATCH] inspector: Reorder -O option in alphabetical order
Updates: commit 0805ea93796b8b57e7c9f0bc04f83ea76a9820a5
(cherry picked from commit 8efb3ac06467f32901fa0447176311ff71aa53f9)
(cherry picked from commit 908f4148d8479c0f5e74ec21471adc57696eed55)
---
inspector/inspector.ml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/inspector/inspector.ml b/inspector/inspector.ml
index d7cbf449..3e039891 100644
--- a/inspector/inspector.ml
+++ b/inspector/inspector.ml
@@ -178,10 +178,10 @@ let rec main () =
s_"Map NIC to network or bridge or assign static IP";
[ S 'n'; L"network" ], Getopt.String ("in:out", add_network),
s_"Map network in to out";
- [ L"root" ], Getopt.String ("ask|... ", set_root_choice),
- s_"How to choose root filesystem";
[ S 'O' ], Getopt.String ("output.xml", set_output_file_option),
s_"Set the output filename";
+ [ L"root" ], Getopt.String ("ask|... ", set_root_choice),
+ s_"How to choose root filesystem";
] in
(* Append virt-customize options. *)

View File

@ -1,25 +0,0 @@
From c38b6503fb7d2c39d6053b61cbe1a8cf0d85dcb1 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Sat, 7 Dec 2024 11:13:09 +0000
Subject: [PATCH] v2v: Ensure --parallel >= 1
Fixes: commit fd1148f79581b148525eb12154aef7603ccf0baa
(cherry picked from commit 755ce5dc08929ef4ef9dc0b0290d380574cb1235)
(cherry picked from commit b242c331e0e3a3d04369aaefe7e910c978491368)
---
v2v/v2v.ml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index b7dbce3a..b8430997 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -350,6 +350,8 @@ read the man page virt-v2v(1).
let output_mode = !output_mode in
let output_name = !output_name in
let parallel = !parallel in
+ if parallel < 1 then
+ error (f_"--parallel parameter must be >= 1");
let print_source = !print_source in
let root_choice = !root_choice in
let static_ips = !static_ips in

View File

@ -1,404 +0,0 @@
From d185e68293d6a39583f0539af760377a8a478eb4 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 5 Dec 2024 13:26:43 +0000
Subject: [PATCH] inspector: Move the code that creates XML output to a
separate file
Simple code motion, so that we can reuse this code in
virt-v2v-in-place.
(cherry picked from commit 3d2d65a04ae75716c084063b572ff916fa83fd1b)
(cherry picked from commit 479f2cc10e74304e2d6202ad13dd99bdc9a6923d)
---
inspector/Makefile.am | 2 +
inspector/create_inspector_xml.ml | 167 +++++++++++++++++++++++++++++
inspector/create_inspector_xml.mli | 22 ++++
inspector/inspector.ml | 144 +------------------------
4 files changed, 193 insertions(+), 142 deletions(-)
create mode 100644 inspector/create_inspector_xml.ml
create mode 100644 inspector/create_inspector_xml.mli
diff --git a/inspector/Makefile.am b/inspector/Makefile.am
index 172b2dc0..15f8cc34 100644
--- a/inspector/Makefile.am
+++ b/inspector/Makefile.am
@@ -23,9 +23,11 @@ EXTRA_DIST = \
$(SOURCES_C)
SOURCES_MLI = \
+ create_inspector_xml.mli \
inspector.mli
SOURCES_ML = \
+ create_inspector_xml.ml \
inspector.ml
SOURCES_C = \
diff --git a/inspector/create_inspector_xml.ml b/inspector/create_inspector_xml.ml
new file mode 100644
index 00000000..a3281d46
--- /dev/null
+++ b/inspector/create_inspector_xml.ml
@@ -0,0 +1,167 @@
+(* virt-v2v-inspector
+ * Copyright (C) 2009-2022 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 Std_utils
+open Tools_utils
+
+open Types
+open Utils
+open DOM
+
+(* This is where we construct the final XML document based on
+ * these inputs:
+ * - Global configuration like the version of v2v etc.
+ * - The NBD input sockets: v2vdir // "in0", "in1", etc
+ * - The inspection data (Types.inspect)
+ *)
+let rec create_inspector_xml v2vdir inspect target_meta =
+ let body = ref [] in
+
+ (* Record the version of virt-v2v etc, mainly for debugging. *)
+ List.push_back_list body [
+ Comment generated_by;
+ e "program" [] [PCData "virt-v2v-inspector"];
+ e "package" [] [PCData Config.package_name];
+ e "version" [] [PCData Config.package_version];
+ ];
+
+ (* The disks. *)
+ let disks = ref [] in
+
+ List.iter (
+ fun (i, virtual_size) ->
+ let elems = ref [] in
+ List.push_back elems (e "virtual-size" []
+ [PCData (Int64.to_string virtual_size)]);
+ (match get_input_disk_allocated v2vdir i with
+ | None -> ()
+ | Some real_size ->
+ List.push_back elems (e "allocated" [ "estimated", "true" ]
+ [PCData (Int64.to_string real_size)])
+ );
+
+ List.push_back disks (e "disk" [ "index", string_of_int i ] !elems)
+ ) (get_disks v2vdir);
+ List.push_back body (e "disks" [] !disks);
+
+ (* The <firmware> field is outside the <operatingsystem> element,
+ * since firmware is not part of the OS, and also because this is
+ * consistent with virt-drivers output.
+ *)
+ List.push_back body
+ (e "firmware"
+ ["type",
+ string_of_target_firmware target_meta.target_firmware]
+ []);
+
+ (* The inspection data. *)
+ (* NB: Keep these field names compatible with virt-inspector! *)
+ let os = ref [] in
+ List.push_back os (e "name" [] [PCData inspect.i_type]);
+ List.push_back os (e "distro" [] [PCData inspect.i_distro]);
+ List.push_back os (e "osinfo" [] [PCData inspect.i_osinfo]);
+ List.push_back os (e "arch" [] [PCData inspect.i_arch]);
+ List.push_back os (e "major_version" []
+ [PCData (string_of_int inspect.i_major_version)]);
+ List.push_back os (e "minor_version" []
+ [PCData (string_of_int inspect.i_minor_version)]);
+ if inspect.i_package_format <> "" then
+ List.push_back os (e "package_format" []
+ [PCData inspect.i_package_format]);
+ if inspect.i_package_management <> "" then
+ List.push_back os (e "package_management" []
+ [PCData inspect.i_package_management]);
+ if inspect.i_product_name <> "" then
+ List.push_back os (e "product_name" [] [PCData inspect.i_product_name]);
+ if inspect.i_product_variant <> "" then
+ List.push_back os (e "product_variant" []
+ [PCData inspect.i_product_variant]);
+
+ if inspect.i_windows_systemroot <> "" then
+ List.push_back os (e "windows_systemroot" []
+ [PCData inspect.i_windows_systemroot]);
+ if inspect.i_windows_software_hive <> "" then
+ List.push_back os (e "windows_software_hive" []
+ [PCData inspect.i_windows_software_hive]);
+ if inspect.i_windows_systemroot <> "" then
+ List.push_back os (e "windows_system_hive" []
+ [PCData inspect.i_windows_system_hive]);
+ if inspect.i_windows_current_control_set <> "" then
+ List.push_back os (e "windows_current_control_set" []
+ [PCData inspect.i_windows_current_control_set]);
+
+ List.push_back os (e "root" [] [PCData inspect.i_root]);
+ let mps = ref [] in
+ List.iter (
+ fun (fs, dev) ->
+ List.push_back mps (e "mountpoint" [ "dev", dev ] [PCData fs])
+ ) inspect.i_mountpoints;
+ List.push_back os (e "mountpoints" [] !mps);
+
+ List.push_back body (e "operatingsystem" [] !os);
+
+ (* Construct the final document. *)
+ (doc "v2v-inspection" [] !body : DOM.doc)
+
+
+(* This is a copy of {!Output.get_disks}. *)
+and get_disks dir =
+ let rec loop acc i =
+ let socket = sprintf "%s/in%d" dir i in
+ if Sys.file_exists socket then (
+ let size = Utils.with_nbd_connect_unix ~socket NBD.get_size in
+ loop ((i, size) :: acc) (i+1)
+ )
+ else
+ List.rev acc
+ in
+ loop [] 0
+
+(* This is like {!Utils.get_disk_allocated} but works on the input disks. *)
+and get_input_disk_allocated dir i =
+ let socket = sprintf "%s/in%d" dir i
+ and alloc_ctx = "base:allocation" in
+ with_nbd_connect_unix ~socket ~meta_contexts:[alloc_ctx]
+ (fun nbd ->
+ if NBD.can_meta_context nbd alloc_ctx then (
+ (* Get the list of extents, using a 2GiB chunk size as hint. *)
+ let size = NBD.get_size nbd
+ and allocated = ref 0_L
+ and fetch_offset = ref 0_L in
+ while !fetch_offset < size do
+ let remaining = size -^ !fetch_offset in
+ let fetch_size = min 0x8000_0000_L remaining in
+ NBD.block_status nbd fetch_size !fetch_offset
+ (fun ctx offset entries err ->
+ assert (ctx = alloc_ctx);
+ for i = 0 to Array.length entries / 2 - 1 do
+ let len = entries.(i * 2)
+ and typ = entries.(i * 2 + 1) in
+ assert (len > 0_L);
+ if typ &^ 1_L = 0_L then
+ allocated := !allocated +^ len;
+ fetch_offset := !fetch_offset +^ len
+ done;
+ 0
+ )
+ done;
+ Some !allocated
+ ) else None
+ )
diff --git a/inspector/create_inspector_xml.mli b/inspector/create_inspector_xml.mli
new file mode 100644
index 00000000..4f09269c
--- /dev/null
+++ b/inspector/create_inspector_xml.mli
@@ -0,0 +1,22 @@
+(* virt-v2v-in-place
+ * Copyright (C) 2009-2024 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+val create_inspector_xml : string -> Types.inspect -> Types.target_meta ->
+ DOM.doc
+(** Create the XML output of virt-v2v-inspector which contains the
+ post-conversion metadata. *)
diff --git a/inspector/inspector.ml b/inspector/inspector.ml
index 3e039891..f881baf5 100644
--- a/inspector/inspector.ml
+++ b/inspector/inspector.ml
@@ -27,7 +27,7 @@ open Getopt.OptionName
open Types
open Utils
-open DOM
+open Create_inspector_xml
(* Matches --mac command line parameters. *)
let mac_re = PCRE.compile "^([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)$"
@@ -364,7 +364,7 @@ read the man page virt-v2v-inspector(1).
);
(* Dump out the information. *)
- let doc = inspector_xml v2vdir inspect target_meta in
+ let doc = create_inspector_xml v2vdir inspect target_meta in
let chan =
match output_file with
| None -> Stdlib.stdout
@@ -400,144 +400,4 @@ and check_host_free_space () =
\"Minimum free space check in the host\".")
large_tmpdir (human_size free_space)
-(* This is a copy of {!Output.get_disks}. *)
-and get_disks dir =
- let rec loop acc i =
- let socket = sprintf "%s/in%d" dir i in
- if Sys.file_exists socket then (
- let size = Utils.with_nbd_connect_unix ~socket NBD.get_size in
- loop ((i, size) :: acc) (i+1)
- )
- else
- List.rev acc
- in
- loop [] 0
-
-(* This is like {!Utils.get_disk_allocated} but works on the input disks. *)
-and get_input_disk_allocated dir i =
- let socket = sprintf "%s/in%d" dir i
- and alloc_ctx = "base:allocation" in
- with_nbd_connect_unix ~socket ~meta_contexts:[alloc_ctx]
- (fun nbd ->
- if NBD.can_meta_context nbd alloc_ctx then (
- (* Get the list of extents, using a 2GiB chunk size as hint. *)
- let size = NBD.get_size nbd
- and allocated = ref 0_L
- and fetch_offset = ref 0_L in
- while !fetch_offset < size do
- let remaining = size -^ !fetch_offset in
- let fetch_size = min 0x8000_0000_L remaining in
- NBD.block_status nbd fetch_size !fetch_offset
- (fun ctx offset entries err ->
- assert (ctx = alloc_ctx);
- for i = 0 to Array.length entries / 2 - 1 do
- let len = entries.(i * 2)
- and typ = entries.(i * 2 + 1) in
- assert (len > 0_L);
- if typ &^ 1_L = 0_L then
- allocated := !allocated +^ len;
- fetch_offset := !fetch_offset +^ len
- done;
- 0
- )
- done;
- Some !allocated
- ) else None
- )
-
-(* This is where we construct the final XML document based on
- * these inputs:
- * - Global configuration like the version of v2v etc.
- * - The NBD input sockets: v2vdir // "in0", "in1", etc
- * - The inspection data (Types.inspect)
- *)
-and inspector_xml v2vdir inspect target_meta =
- let body = ref [] in
-
- (* Record the version of virt-v2v etc, mainly for debugging. *)
- List.push_back_list body [
- Comment generated_by;
- e "program" [] [PCData "virt-v2v-inspector"];
- e "package" [] [PCData Config.package_name];
- e "version" [] [PCData Config.package_version];
- ];
-
- (* The disks. *)
- let disks = ref [] in
-
- List.iter (
- fun (i, virtual_size) ->
- let elems = ref [] in
- List.push_back elems (e "virtual-size" []
- [PCData (Int64.to_string virtual_size)]);
- (match get_input_disk_allocated v2vdir i with
- | None -> ()
- | Some real_size ->
- List.push_back elems (e "allocated" [ "estimated", "true" ]
- [PCData (Int64.to_string real_size)])
- );
-
- List.push_back disks (e "disk" [ "index", string_of_int i ] !elems)
- ) (get_disks v2vdir);
- List.push_back body (e "disks" [] !disks);
-
- (* The <firmware> field is outside the <operatingsystem> element,
- * since firmware is not part of the OS, and also because this is
- * consistent with virt-drivers output.
- *)
- List.push_back body
- (e "firmware"
- ["type",
- string_of_target_firmware target_meta.target_firmware]
- []);
-
- (* The inspection data. *)
- (* NB: Keep these field names compatible with virt-inspector! *)
- let os = ref [] in
- List.push_back os (e "name" [] [PCData inspect.i_type]);
- List.push_back os (e "distro" [] [PCData inspect.i_distro]);
- List.push_back os (e "osinfo" [] [PCData inspect.i_osinfo]);
- List.push_back os (e "arch" [] [PCData inspect.i_arch]);
- List.push_back os (e "major_version" []
- [PCData (string_of_int inspect.i_major_version)]);
- List.push_back os (e "minor_version" []
- [PCData (string_of_int inspect.i_minor_version)]);
- if inspect.i_package_format <> "" then
- List.push_back os (e "package_format" []
- [PCData inspect.i_package_format]);
- if inspect.i_package_management <> "" then
- List.push_back os (e "package_management" []
- [PCData inspect.i_package_management]);
- if inspect.i_product_name <> "" then
- List.push_back os (e "product_name" [] [PCData inspect.i_product_name]);
- if inspect.i_product_variant <> "" then
- List.push_back os (e "product_variant" []
- [PCData inspect.i_product_variant]);
-
- if inspect.i_windows_systemroot <> "" then
- List.push_back os (e "windows_systemroot" []
- [PCData inspect.i_windows_systemroot]);
- if inspect.i_windows_software_hive <> "" then
- List.push_back os (e "windows_software_hive" []
- [PCData inspect.i_windows_software_hive]);
- if inspect.i_windows_systemroot <> "" then
- List.push_back os (e "windows_system_hive" []
- [PCData inspect.i_windows_system_hive]);
- if inspect.i_windows_current_control_set <> "" then
- List.push_back os (e "windows_current_control_set" []
- [PCData inspect.i_windows_current_control_set]);
-
- List.push_back os (e "root" [] [PCData inspect.i_root]);
- let mps = ref [] in
- List.iter (
- fun (fs, dev) ->
- List.push_back mps (e "mountpoint" [ "dev", dev ] [PCData fs])
- ) inspect.i_mountpoints;
- List.push_back os (e "mountpoints" [] !mps);
-
- List.push_back body (e "operatingsystem" [] !os);
-
- (* Construct the final document. *)
- (doc "v2v-inspection" [] !body : DOM.doc)
-
let () = run_main_and_handle_errors main

View File

@ -1,34 +0,0 @@
From aa556d82d0ab27a552fbf2e884e8ba93cbe6c9dd Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 5 Dec 2024 15:28:38 +0000
Subject: [PATCH] build: Define MLOBJECT (OCaml object file) as either cmo or
cmx
This macro expands to either cmo or cmx depending on whether we are
compiling for bytecode or native code.
This is a natural extension of the existing MLARCHIVE macro.
(cherry picked from commit 7b43b226eb3af18a5bd58b2664fb064832404a47)
(cherry picked from commit e6f1a170002bff5db70aa8a8b6987ef1122d61e1)
---
subdir-rules.mk | 2 ++
1 file changed, 2 insertions(+)
diff --git a/subdir-rules.mk b/subdir-rules.mk
index e969f357..05221b95 100644
--- a/subdir-rules.mk
+++ b/subdir-rules.mk
@@ -47,10 +47,12 @@ $(top_builddir)/generator/generator:
if !HAVE_OCAMLOPT
MLARCHIVE = cma
+MLOBJECT = cmo
LINK_CUSTOM_OCAMLC_ONLY = -output-complete-exe
BEST = c
else
MLARCHIVE = cmxa
+MLOBJECT = cmx
BEST = opt
endif

View File

@ -1,285 +0,0 @@
From 286cb463a01696250ede820971b34f9ad8717517 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 5 Dec 2024 13:36:29 +0000
Subject: [PATCH] in-place: Add new -O option to write inspector XML
When using virt-v2v-in-place there is no easy way to get the
post-conversion metadata, such as the operating system and firmware
that virt-v2v detected inside the guest.
This commit adds new, optional '-O output.xml' to write this
information out to a file. The format is identical to
virt-v2v-inspector (and roughly a superset of virt-inspector).
Fixes: https://issues.redhat.com/browse/RHEL-58032
Thanks: Martin Necas
(cherry picked from commit 2f0958e5ac5c3442c2771518c5b73d6ebcd5bd4a)
(cherry picked from commit 3dc5eb5c76fd6be2108c5b3907d9d31bbacd00a5)
---
docs/virt-v2v-in-place.pod | 18 +++++++++
in-place/Makefile.am | 2 +
in-place/in_place.ml | 39 +++++++++++++-----
tests/Makefile.am | 2 +
tests/test-in-place-xml.sh | 81 ++++++++++++++++++++++++++++++++++++++
5 files changed, 132 insertions(+), 10 deletions(-)
create mode 100755 tests/test-in-place-xml.sh
diff --git a/docs/virt-v2v-in-place.pod b/docs/virt-v2v-in-place.pod
index 4057dae5..34e99cf0 100644
--- a/docs/virt-v2v-in-place.pod
+++ b/docs/virt-v2v-in-place.pod
@@ -7,10 +7,12 @@ virt-v2v-in-place - Convert a guest to use KVM in-place
virt-v2v-in-place -i disk [other -i* options]
[virt-customize options]
filename
+ [-O output.xml]
virt-v2v-in-place -i libvirt|libvirtxml [other -i* options]
[virt-customize options]
guest
+ [-O output.xml]
=head1 DESCRIPTION
@@ -35,6 +37,14 @@ If the guest has been copied to local libvirt then:
virt-v2v-in-place -i libvirt guest
+=head2 Output XML
+
+Optionally use the I<-O> option to write post-conversion metadata
+about the guest to an XML file. This is in the same format as
+L<virt-v2v-inspector(1)>. This can be used, for example, to find out
+what operating system and firmware was found inside the guest during
+conversion.
+
=head2 Exit code
If virt-v2v-in-place fails it will return a non-zero (error) exit
@@ -205,6 +215,14 @@ are mapped to C<out>.
See L<virt-v2v(1)/Networks and bridges>.
+=item B<-O> output.xml
+
+=item B<-O ->
+
+If this option is present, write post-conversion metadata about the
+guest to the named XML file, or to stdout if I<-O -> is used. This is
+in the same format as L<virt-v2v-inspector(1)>.
+
=item B<--print-source>
Print information about the source guest and stop. This option is
diff --git a/in-place/Makefile.am b/in-place/Makefile.am
index 2fecb3a7..89e3f5f3 100644
--- a/in-place/Makefile.am
+++ b/in-place/Makefile.am
@@ -57,6 +57,7 @@ OCAMLPACKAGES = \
-I $(top_builddir)/lib \
-I $(top_builddir)/input \
-I $(top_builddir)/convert \
+ -I $(top_builddir)/inspector \
-I $(top_builddir)/common/mlstdutils \
-I $(top_builddir)/common/mlutils \
-I $(top_builddir)/common/mlgettext \
@@ -103,6 +104,7 @@ OCAMLLINKFLAGS = \
mlv2vlib.$(MLARCHIVE) \
mlconvert.$(MLARCHIVE) \
mlinput.$(MLARCHIVE) \
+ create_inspector_xml.$(MLOBJECT) \
$(LINK_CUSTOM_OCAMLC_ONLY)
virt_v2v_in_place_DEPENDENCIES = \
diff --git a/in-place/in_place.ml b/in-place/in_place.ml
index 42075139..c77533e7 100644
--- a/in-place/in_place.ml
+++ b/in-place/in_place.ml
@@ -28,6 +28,12 @@ open Getopt.OptionName
open Types
open Utils
+open Create_inspector_xml
+
+type output_xml_option =
+ | No_output_xml | Output_xml_to_stdout
+ | Output_xml_to_file of string
+
(* Matches --mac command line parameters. *)
let mac_re = PCRE.compile "^([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)$"
let mac_ip_re = PCRE.compile "^([[:xdigit:]]|:|\\.)+$"
@@ -61,6 +67,13 @@ let rec main () =
in
let network_map = Networks.create () in
+
+ let output_xml = ref No_output_xml in
+ let set_output_xml_option filename =
+ if filename = "-" then output_xml := Output_xml_to_stdout
+ else output_xml := Output_xml_to_file filename
+ in
+
let static_ips = ref [] in
let rec add_network str =
match String.split ":" str with
@@ -172,6 +185,8 @@ let rec main () =
s_"Map NIC to network or bridge or assign static IP";
[ S 'n'; L"network" ], Getopt.String ("in:out", add_network),
s_"Map network in to out";
+ [ S 'O' ], Getopt.String ("output.xml", set_output_xml_option),
+ s_"Set the output filename";
[ L"print-source" ], Getopt.Set print_source,
s_"Print source and stop";
[ L"root" ], Getopt.String ("ask|... ", set_root_choice),
@@ -228,6 +243,7 @@ read the man page virt-v2v-in-place(1).
let customize_ops = get_customize_ops () in
let input_conn = !input_conn in
let input_mode = !input_mode in
+ let output_xml = !output_xml in
let print_source = !print_source in
let root_choice = !root_choice in
let static_ips = !static_ips in
@@ -246,6 +262,7 @@ read the man page virt-v2v-in-place(1).
pr "mac-option\n";
pr "mac-ip-option\n";
pr "customize-ops\n";
+ pr "output-xml-option\n";
pr "input:disk\n";
pr "input:libvirt\n";
pr "input:libvirtxml\n";
@@ -348,16 +365,18 @@ read the man page virt-v2v-in-place(1).
ignore (Sys.command cmd)
);
- (* XXX Should we create target metadata and if so where?
- *
- * If the input mode is libvirt, there is an argument for
- * updating the libvirt XML of the guest. If the input
- * mode is disk, maybe we should write <guestname>.xml.
- *
- * For the moment we just ignore the output from the
- * conversion step.
- *)
- ignore (inspect, target_meta);
+ (* Write the post-conversion metadata, if asked. *)
+ let chan =
+ match output_xml with
+ | No_output_xml -> None
+ | Output_xml_to_stdout -> Some Stdlib.stdout
+ | Output_xml_to_file filename -> Some (open_out filename) in
+ Option.iter (
+ fun chan ->
+ let doc = create_inspector_xml v2vdir inspect target_meta in
+ DOM.doc_to_chan chan doc;
+ Stdlib.flush chan
+ ) chan;
message (f_"Finishing off");
(* As the last thing, write a file indicating success before
diff --git a/tests/Makefile.am b/tests/Makefile.am
index fac18bbe..209034b8 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -82,6 +82,7 @@ TESTS = \
test-i-ova.sh \
test-i-vmx.sh \
test-in-place.sh \
+ test-in-place-xml.sh \
test-inspector.sh \
test-it-vddk-io-query.sh \
test-mac.sh \
@@ -240,6 +241,7 @@ EXTRA_DIST += \
test-i-vmx-7.vmx \
test-i-vmx.sh \
test-in-place.sh \
+ test-in-place-xml.sh \
test-inspector.sh \
test-it-vddk-io-query.sh \
test-mac-expected.xml \
diff --git a/tests/test-in-place-xml.sh b/tests/test-in-place-xml.sh
new file mode 100755
index 00000000..e9580006
--- /dev/null
+++ b/tests/test-in-place-xml.sh
@@ -0,0 +1,81 @@
+#!/bin/bash -
+# libguestfs virt-v2v test script
+# Copyright (C) 2014-2024 Red Hat Inc.
+# Copyright (C) 2015 Parallels IP Holdings GmbH.
+#
+# 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 virt-v2v-in-place -O option.
+
+unset CDPATH
+export LANG=C
+set -e
+
+source ./functions.sh
+set -e
+set -x
+
+skip_if_skipped
+requires test -f ../test-data/phony-guests/windows.img
+
+img_base="$abs_top_builddir/test-data/phony-guests/windows.img"
+
+export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools"
+export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win"
+
+d=$PWD/test-v2v-in-place-xml.d
+rm -rf $d
+cleanup_fn rm -r $d
+mkdir $d
+
+img="$d/test.qcow2"
+qemu-img convert -f raw $img_base -O qcow2 $img
+
+out="$d/out.xml"
+
+libvirt_xml="$d/test.xml"
+rm -f $libvirt_xml
+n=windows
+cat > $libvirt_xml <<EOF
+<node>
+ <domain type='test'>
+ <name>$n</name>
+ <memory>1048576</memory>
+ <os>
+ <type>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <devices>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2'/>
+ <source file='$img'/>
+ <target dev='vda' bus='virtio'/>
+ </disk>
+ </devices>
+ </domain>
+</node>
+EOF
+
+$VG virt-v2v-in-place --debug-gc -i libvirt -ic "test://$libvirt_xml" \
+ $n -O $out
+cat $out
+
+# Expect certain elements to be present.
+grep '^<v2v-inspection' $out
+grep '<program>virt-v2v-inspector</program>' $out
+grep '<disks>' $out
+grep "<disk index='0'>" $out
+grep '<distro>windows</distro>' $out
+grep '<osinfo>win2k22</osinfo>' $out

View File

@ -1,49 +0,0 @@
From c79bcda0c1a62a8b1000166126c37b0be08ff65c Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 2 Jan 2025 11:11:46 +0000
Subject: [PATCH] convert: Mention "operating system" in error message
A member of Red Hat's support team mentioned that the error "source
guest" is confusing. Since this refers to the operating system inside
the source guest, say that.
(cherry picked from commit f58b02a64f4238d7e2ddec45082a6f9b2c98a0c8)
---
convert/inspect_source.ml | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/convert/inspect_source.ml b/convert/inspect_source.ml
index 78447193..218e517a 100644
--- a/convert/inspect_source.ml
+++ b/convert/inspect_source.ml
@@ -141,11 +141,11 @@ let rec inspect_source root_choice g =
and choose_root root_choice g = function
| [] ->
error (f_"inspection could not detect the source guest \
- (or physical machine).\n\nAssuming that you are \
- running virt-v2v/virt-p2v on a source which is \
- supported (and not, for example, a blank disk), \
- then this should not happen.\n\nNo root device \
- found in this operating system image.");
+ (or physical machine) operating system.\n\n\
+ Assuming that you are running virt-v2v/virt-p2v \
+ on a source which is supported (and not, for example, \
+ a blank disk), then this should not happen.\n\n\
+ No root device found in this operating system image.");
| [root] -> root (* only one root, so return it *)
| roots ->
(* If there are multiple roots, use the [--root] option supplied
@@ -254,8 +254,9 @@ and sanity_check_inspection inspect =
and error_if_unknown fieldname value =
if value = "unknown" then
error (f_"inspection could not detect the source guest (or \
- physical machine).\n\nAssuming that you are running \
- virt-v2v/virt-p2v on a source which is supported (and \
- not, for example, a blank disk), then this should not \
- happen.\n\nInspection field %s was unknown.")
+ physical machine) operating system.\n\n\
+ Assuming that you are running virt-v2v/virt-p2v \
+ on a source which is supported (and not, for example, \
+ a blank disk), then this should not happen.\n\n\
+ Inspection field %s was unknown.")
fieldname

View File

@ -1,189 +0,0 @@
From 1fb4afcd0573875e04913fdd85f6da76d574439a Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Sun, 9 Feb 2025 17:35:14 +0000
Subject: [PATCH] Update common submodule
Pulls in the following fix:
commit 38315604596ac747e44e38db79496610efee49f8
Author: Richard W.M. Jones <rjones@redhat.com>
Date: Thu Feb 6 08:04:38 2025 +0000
mldrivers/linux_bootloaders.ml: Don't overwrite EFI grub2 wrapper
Fedora 34+ and RHEL 9.0+ unified BIOS and UEFI grub configuration into
a single file. This leaves /boot/efi/EFI/<OS>/grub.cfg as a so-called
"wrapper" which just loads the real grub2 configuration at
/boot/grub2/grub.cfg.
Running '/sbin/grub2-mkconfig -o /boot/efi/EFI/<OS>/grub.cfg'
overwrites the wrapper instead of the real configuration file.
RHEL 9.5 added a hard error if you try to do this, which broke
virt-v2v. The error message was:
commandrvf: /sbin/grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
Running `grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg' will
overwrite the GRUB wrapper. Please run `grub2-mkconfig -o
/boot/grub2/grub.cfg' instead to update grub.cfg.
Try to detect this situation and substitute the real grub
configuration file instead.
Reported-by: Robert Knipp, Fabian Deutsch
Thanks: Nijin Ashok, Marta Lewandowska
Fixes: https://issues.redhat.com/browse/RHEL-77989
Related: https://issues.redhat.com/browse/RHEL-32099
Related: https://fedoraproject.org/wiki/Changes/UnifyGrubConfig
Fixes: https://issues.redhat.com/browse/RHEL-77989
Related: https://issues.redhat.com/browse/RHEL-32099
(cherry picked from commit 17610d1c9b37424fec55c39fbf83c971a843f45f)
---
common | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Submodule common faee2645..2bb8c83c:
diff --git a/common/mldrivers/linux_bootloaders.ml b/common/mldrivers/linux_bootloaders.ml
index 91c5ab9e..a821a3f3 100644
--- a/common/mldrivers/linux_bootloaders.ml
+++ b/common/mldrivers/linux_bootloaders.ml
@@ -375,8 +375,7 @@ let detect_bootloader (g : G.guestfs) root i_firmware =
with G.Error msg ->
error (f_"could not find bootloader mount point (%s): %s") mp msg in
- (*
- * Workaround for older UEFI-based Debian which may not have
+ (* Workaround for older UEFI-based Debian which may not have
* /boot/efi/EFI/debian/grub.cfg.
*)
let paths =
@@ -410,6 +409,28 @@ let detect_bootloader (g : G.guestfs) root i_firmware =
in
loop paths in
+ (* If we found a grub2 boot config called /boot/efi/EFI/<OS>/grub.cfg
+ * check if it's a "wrapper" that redirects to /boot/grub2/grub.cfg.
+ * This is needed for Fedora 34+ and RHEL 9.0+. See:
+ * https://issues.redhat.com/browse/RHEL-32099
+ * https://issues.redhat.com/browse/RHEL-77989
+ * https://github.com/libguestfs/libguestfs-common/pull/6
+ *)
+ let grub_config =
+ match typ with
+ | Grub1 -> grub_config
+ | Grub2 ->
+ let grub2_efi_rex = PCRE.compile "^/boot/efi/EFI/.*/grub.cfg$" in
+ let grub2_real = "/boot/grub2/grub.cfg" in
+
+ if PCRE.matches grub2_efi_rex grub_config &&
+ (* does it look like the "wrapper"? *)
+ g#grep "configfile \\$prefix/grub\\.cfg" grub_config <> [||] &&
+ g#exists grub2_real then
+ grub2_real
+ else
+ grub_config in
+
let bl =
match typ with
| Grub1 -> new bootloader_grub1 g root grub_config
diff --git a/common/mlpcre/pcre-c.c b/common/mlpcre/pcre-c.c
index ad9c6d11..3959fd56 100644
--- a/common/mlpcre/pcre-c.c
+++ b/common/mlpcre/pcre-c.c
@@ -39,19 +39,6 @@
#pragma GCC diagnostic ignored "-Wmissing-prototypes"
-/* Replacement if caml_alloc_initialized_string is missing, added
- * to OCaml runtime in 2017.
- */
-#ifndef HAVE_CAML_ALLOC_INITIALIZED_STRING
-static inline value
-caml_alloc_initialized_string (mlsize_t len, const char *p)
-{
- value sv = caml_alloc_string (len);
- memcpy ((char *) String_val (sv), p, len);
- return sv;
-}
-#endif
-
/* Data on the most recent match is stored in this thread-local
* variable. It is freed either by the next call to PCRE.matches or
* by (clean) thread exit.
diff --git a/common/mlstdutils/std_utils.ml b/common/mlstdutils/std_utils.ml
index 86b21a7c..5be358de 100644
--- a/common/mlstdutils/std_utils.ml
+++ b/common/mlstdutils/std_utils.ml
@@ -392,21 +392,6 @@ module List = struct
let push_front_list xs xsp = xsp := xs @ !xsp
end
-module Option = struct
- let iter f = function
- | None -> ()
- | Some x -> f x
-
- let map f = function
- | None -> None
- | Some x -> Some (f x)
-
- let value x ~default =
- match x with
- | None -> default
- | Some x -> x
-end
-
let (//) = Filename.concat
let quote = Filename.quote
diff --git a/common/mlstdutils/std_utils.mli b/common/mlstdutils/std_utils.mli
index a39ac5f3..c320b877 100644
--- a/common/mlstdutils/std_utils.mli
+++ b/common/mlstdutils/std_utils.mli
@@ -290,21 +290,6 @@ module List : sig
end
(** Override the List module from stdlib. *)
-module Option : sig
- val iter : ('a -> unit) -> 'a option -> unit
- (** [iter f o] is [f v] if [o] is [Some v] and [()] otherwise *)
-
- val map : ('a -> 'b) -> 'a option -> 'b option
- (** [map f (Some x)] returns [Some (f x)]. [map f None] returns [None]. *)
-
- val value : 'a option -> default:'a -> 'a
- (** [value o ~default] is [v] if [o] is [Some v] and [default] otherwise. *)
-end
-(** Functions for dealing with option types.
-
- This module will be removed when we can use baseline OCaml 4.08
- since that version introduces a compatible [Option] module. *)
-
val ( // ) : string -> string -> string
(** Concatenate directory and filename. *)
diff --git a/common/mlxml/xml-c.c b/common/mlxml/xml-c.c
index e024bd8a..9259314f 100644
--- a/common/mlxml/xml-c.c
+++ b/common/mlxml/xml-c.c
@@ -41,19 +41,6 @@
#pragma GCC diagnostic ignored "-Wmissing-prototypes"
-/* Replacement if caml_alloc_initialized_string is missing, added
- * to OCaml runtime in 2017.
- */
-#ifndef HAVE_CAML_ALLOC_INITIALIZED_STRING
-static inline value
-caml_alloc_initialized_string (mlsize_t len, const char *p)
-{
- value sv = caml_alloc_string (len);
- memcpy ((char *) String_val (sv), p, len);
- return sv;
-}
-#endif
-
/* xmlDocPtr type */
#define docptr_val(v) (*((xmlDocPtr *)Data_custom_val(v)))

View File

@ -1,86 +0,0 @@
From bbce081a6d6ad76b95a768ef04c62db29fe482de Mon Sep 17 00:00:00 2001
From: Cole Robinson <crobinso@redhat.com>
Date: Mon, 10 Feb 2025 10:53:00 -0500
Subject: [PATCH] convert: Use yum/apt/... for package removals, not rpm/dpkg
Current package removal implementation uses `rpm -e`, which will
fail if anything depends on the package we are trying to remove.
Like when `spausedd` is dependent on `open-vm-tools`.
Reuse the package uninstall logic from virt-customize, which
will handle this no problem.
Just print a warning when package removal goes sideways.
Fixes: https://issues.redhat.com/browse/RHEL-71522
Signed-off-by: Cole Robinson <crobinso@redhat.com>
(cherry picked from commit b3268a13beca4da218e7ffe4648a18420296103a)
---
convert/convert_linux.ml | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml
index 3d0e2b88..cbae5e3d 100644
--- a/convert/convert_linux.ml
+++ b/convert/convert_linux.ml
@@ -131,6 +131,23 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ =
(*----------------------------------------------------------------------*)
(* Conversion step. *)
+ let uninstall_packages pkgs =
+ if pkgs <> [] then (
+ let cmd =
+ try Guest_packages.uninstall_command pkgs inspect.i_package_management
+ with
+ | Guest_packages.Unknown_package_manager msg
+ | Guest_packages.Unimplemented_package_manager msg ->
+ error "%s" msg
+ in
+ (try ignore (g#sh cmd)
+ with G.Error msg ->
+ warning (f_"could not uninstall packages %s: %s (ignored)")
+ (String.concat " " pkgs) msg
+ )
+ )
+ in
+
let rec do_convert () =
augeas_grub_configuration ();
@@ -237,7 +254,7 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ =
else
None
) inspect.i_apps in
- Linux.remove g inspect.i_root xenmods;
+ uninstall_packages xenmods;
(* Undo related nastiness if kmod-xenpv was installed. *)
if xenmods <> [] then (
@@ -310,7 +327,7 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ =
fun { G.app2_name = name } -> name = package_name
) inspect.i_apps in
if has_guest_additions then
- Linux.remove g inspect.i_root [package_name];
+ uninstall_packages [package_name];
(* Guest Additions might have been installed from a tarball. The
* above code won't detect this case. Look for the uninstall tool
@@ -455,8 +472,7 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ =
)
);
- let remove = !remove in
- Linux.remove g inspect.i_root remove;
+ uninstall_packages !remove;
(* VMware Tools may have been installed from a tarball, so the
* above code won't remove it. Look for the uninstall tool and run
@@ -503,7 +519,7 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ =
let pkgs = List.map (fun { G.app2_name = name } -> name) pkgs in
if pkgs <> [] then (
- Linux.remove g inspect.i_root pkgs;
+ uninstall_packages pkgs;
(* Installing these guest utilities automatically unconfigures
* ttys in /etc/inittab if the system uses it. We need to put

View File

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

View File

@ -1,2 +1,2 @@
SHA512 (virt-v2v-2.7.1.tar.gz) = 11f5528a48208050fda9c64c8aa6dcfd28352e26c96f15059ef66230577e87cae79286dbe035ee5fdf3c43398cba1f94569e11ff3871b26f21e7a6265a4bfa6d
SHA512 (virt-v2v-2.7.1.tar.gz.sig) = a73bce78f116f68565e1288c130c0ea4adc4e1d87174f72fc9aeff747c541afd16404d59d12d0431d50b83a9d0dbe5ff12dddbfed97d2e1d431212a895078cad
SHA512 (virt-v2v-2.7.10.tar.gz) = dc45a1af2ee19f8952d84e3d4da95993c6cfe45e488df4160e87bae702ef970a0d752a85cdd90a9c6a0a350708f3f16f2658eacb9820810a14da989d4b773926
SHA512 (virt-v2v-2.7.10.tar.gz.sig) = 4b3defa5619d8a212a5c0f62a41f2a88256acb115721b36b576ff24d9503c522a7f3bcaa34c16505bda7e1a42959cd40dcc0fb05ee43364647487f629d636e13

View File

@ -6,8 +6,8 @@
Name: virt-v2v
Epoch: 1
Version: 2.7.1
Release: 4%{?dist}
Version: 2.7.10
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,40 +24,24 @@ Source2: libguestfs.keyring
Source3: copy-patches.sh
# Patches are maintained in the following repository:
# https://github.com/libguestfs/virt-v2v/commits/rhel-10.0
# https://github.com/libguestfs/virt-v2v/commits/rhel-10.1
# Patches.
Patch0001: 0001-lib-OVF-Add-preliminary-support-for-Windows-Server-2.patch
Patch0002: 0002-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch
Patch0003: 0003-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch
Patch0004: 0004-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch
Patch0005: 0005-RHEL-Fixes-for-libguestfs-winsupport.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-Remove-input-from-Xen.patch
Patch0009: 0009-RHEL-Remove-o-glance.patch
Patch0010: 0010-RHEL-Remove-the-in-place-option.patch
Patch0011: 0011-RHEL-tests-Remove-btrfs-test.patch
Patch0012: 0012-RHEL-Remove-block-driver-option.patch
Patch0013: 0013-RHEL-Remove-o-rhv-o-rhv-upload-and-o-vdsm-modes.patch
Patch0014: 0014-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch
Patch0015: 0015-in-place-Add-a-warning-about-checking-the-exit-code.patch
Patch0016: 0016-i-libvirt-Trim-whitespace-around-name.patch
Patch0017: 0017-o-qemu-Replace-hard-coded-UEFI-paths.patch
Patch0018: 0018-o-qemu-Add-set-e-x-at-the-top-of-the-output-script.patch
Patch0019: 0019-v2v-Implement-parallel-N-for-parallel-disk-copies.patch
Patch0020: 0020-tests-Rename-all-test-v2v-to-test.patch
Patch0021: 0021-tests-Sort-the-tests-into-alphabetical-order.patch
Patch0022: 0022-docs-Embolden-whole-O.patch
Patch0023: 0023-in-place-Fix-name-of-program-in-the-help-output.patch
Patch0024: 0024-inspector-Reorder-O-option-in-alphabetical-order.patch
Patch0025: 0025-v2v-Ensure-parallel-1.patch
Patch0026: 0026-inspector-Move-the-code-that-creates-XML-output-to-a.patch
Patch0027: 0027-build-Define-MLOBJECT-OCaml-object-file-as-either-cm.patch
Patch0028: 0028-in-place-Add-new-O-option-to-write-inspector-XML.patch
Patch0029: 0029-convert-Mention-operating-system-in-error-message.patch
Patch0030: 0030-Update-common-submodule.patch
Patch0031: 0031-convert-Use-yum-apt-.-for-package-removals-not-rpm-d.patch
Patch0001: 0001-v2v-v2v_unit_tests.ml-Remove-use-of-oUnit.patch
Patch0002: 0002-build-Remove-use-of-oUnit.patch
Patch0003: 0003-v2v-Use-nbdcopy-blkhash-in-verbose-mode.patch
Patch0004: 0004-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch
Patch0005: 0005-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch
Patch0006: 0006-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch
Patch0007: 0007-RHEL-Fixes-for-libguestfs-winsupport.patch
Patch0008: 0008-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
Patch0009: 0009-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch
Patch0010: 0010-RHEL-Remove-input-from-Xen.patch
Patch0011: 0011-RHEL-Remove-o-glance.patch
Patch0012: 0012-RHEL-tests-Remove-btrfs-test.patch
Patch0013: 0013-RHEL-Remove-block-driver-option.patch
Patch0014: 0014-RHEL-Remove-o-rhv-o-rhv-upload-and-o-vdsm-modes.patch
Patch0015: 0015-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch
%if !0%{?rhel}
# libguestfs hasn't been built on i686 for a while since there is no
@ -80,7 +64,7 @@ BuildRequires: autoconf, automake, libtool
BuildRequires: make
BuildRequires: /usr/bin/pod2man
BuildRequires: gcc
BuildRequires: ocaml >= 4.04
BuildRequires: ocaml >= 4.08
BuildRequires: libguestfs-devel >= 1:1.49.8-1
BuildRequires: augeas-devel
@ -92,6 +76,7 @@ BuildRequires: libnbd-devel
BuildRequires: libosinfo-devel
BuildRequires: libvirt-daemon-kvm
BuildRequires: libvirt-devel
BuildRequires: libxcrypt-devel
BuildRequires: libxml2-devel
BuildRequires: pcre2-devel
BuildRequires: perl(Sys::Guestfs)
@ -105,9 +90,6 @@ BuildRequires: ocaml-libvirt-devel
BuildRequires: ocaml-libnbd-devel
BuildRequires: ocaml-fileutils-devel
BuildRequires: ocaml-gettext-devel
%if !0%{?rhel}
BuildRequires: ocaml-ounit-devel
%endif
# These are for running our limited test.
BuildRequires: glibc-utils
@ -157,11 +139,13 @@ Requires: edk2-aarch64
%endif
%if !0%{?rhel}
Requires: python3
%elif %{?rhel} == 9
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: %{_bindir}/qemu-nbd
Requires: %{_bindir}/nbdcopy
@ -343,6 +327,14 @@ done
%changelog
* Mon Mar 31 2025 Richard W.M. Jones <rjones@redhat.com> - 1:2.7.10-1
- Rebase to virt-v2v 2.7.10
related: RHEL-81735
- Fix virt-v2v -v --install dnf5 error
resolves: RHEL-83288
- Print blkhash of converted image in virt-v2v debugging output
resolves: RHEL-85514
* Tue Feb 11 2025 Richard W.M. Jones <rjones@redhat.com> - 1:2.7.1-4
- Rebase to virt-v2v 2.7.1
resolves: RHEL-56814