Rebase to virt-v2v 2.11.5
Synchronize spec file with Fedora resolves: RHEL-153361 Fixes incorrect driver location for Windows 2008 SP2 resolves: RHEL-159888 Create sentinel file after all firstboot scripts have finished running resolves: RHEL-152939 Obey cgroups when computing SMP resolves: RHEL-152766 Fix encrypted Ubuntu guest fail to boot after conversion resolves: RHEL-137121
This commit is contained in:
parent
8380dd5902
commit
6097cf95c4
@ -0,0 +1,37 @@
|
||||
From ad61f699fe3e730d47069007a2e6e3a838cf3f31 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 26 Jan 2026 16:26:27 +0000
|
||||
Subject: [PATCH] RHEL: Update v2v: Enhance inspection with filesystems
|
||||
information
|
||||
|
||||
For RHEL 10:
|
||||
|
||||
This is an update for commit 6bd4ab3a5da9bf3bb3b22585d2226d6e338f23ba.
|
||||
|
||||
Adjust minimum version of libguestfs since we will backport the new
|
||||
API to libguestfs 1.58.1-2.el10.
|
||||
|
||||
Original commit message:
|
||||
|
||||
Add the list of filesystems found by inspection to the internal
|
||||
inspection struct. This is not actually used by virt-v2v itself (it
|
||||
is used by virt-v2v-inspector), so this change should have no effect.
|
||||
---
|
||||
m4/guestfs-libraries.m4 | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/m4/guestfs-libraries.m4 b/m4/guestfs-libraries.m4
|
||||
index a7a279e8..11c9974c 100644
|
||||
--- a/m4/guestfs-libraries.m4
|
||||
+++ b/m4/guestfs-libraries.m4
|
||||
@@ -19,8 +19,8 @@ dnl Any C libraries required by virt-v2v.
|
||||
|
||||
dnl Of course we need libguestfs.
|
||||
dnl
|
||||
-dnl We need libguestfs 1.59.2 for guestfs_xfs_info2.
|
||||
-PKG_CHECK_MODULES([LIBGUESTFS], [libguestfs >= 1.59.2])
|
||||
+dnl We need libguestfs >= 1.58.1-2.el10 for guestfs_xfs_info2.
|
||||
+PKG_CHECK_MODULES([LIBGUESTFS], [libguestfs >= 1.58.1])
|
||||
printf "libguestfs version is "; $PKG_CONFIG --modversion libguestfs
|
||||
|
||||
dnl And libnbd.
|
||||
@ -1,46 +0,0 @@
|
||||
From 859c43b1eb81cfdcb5f481b571e2c387860f8a27 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 13 Jan 2026 12:33:11 +0000
|
||||
Subject: [PATCH] docs/virt-v2v.pod: Document Windows vTPM and BitLocker
|
||||
Recovery
|
||||
|
||||
Reported-by: Ming Xie
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-103915
|
||||
---
|
||||
docs/virt-v2v.pod | 23 +++++++++++++++++++++++
|
||||
1 file changed, 23 insertions(+)
|
||||
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index a3cacb82..f751f4e7 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -1600,6 +1600,29 @@ L<https://issues.redhat.com/browse/RHEL-70840>
|
||||
and
|
||||
L<https://windowstechpro.com/how-to-enable-bitlocker-on-windows-11/>
|
||||
|
||||
+=head2 Windows: "Enter the recovery key for this drive"
|
||||
+
|
||||
+After conversion, you may be presented with a Windows boot screen showing:
|
||||
+
|
||||
+ BitLocker recovery
|
||||
+ Enter the recovery key for this drive
|
||||
+ [|___________________]
|
||||
+
|
||||
+(See screenshot on L<https://issues.redhat.com/browse/RHEL-103915>)
|
||||
+
|
||||
+This happens when the Windows BitLocker disk encryption key is
|
||||
+contained in the VMware Virtual Trusted Platform Module (vTPM). The
|
||||
+vTPM is working I<exactly as designed>. It is preventing the
|
||||
+encrypted disk from being moved from one machine to another by storing
|
||||
+the encryption key in trusted storage on the source. By design, we
|
||||
+cannot access or move this key to the target.
|
||||
+
|
||||
+To start the VM you will need to enter the BitLocker recovery key.
|
||||
+This will also register the disk against the new vTPM on the target,
|
||||
+so it should only be necessary to do this once.
|
||||
+
|
||||
+For help finding the recovery key: L<https://aka.ms/recoverykeyfaq>
|
||||
+
|
||||
=head2 Networks and bridges
|
||||
|
||||
Guests are usually connected to one or more networks, and when
|
||||
@ -1,4 +1,4 @@
|
||||
From 5bb9b83c288b0c4bdac081e123f2fa54c840a6ca Mon Sep 17 00:00:00 2001
|
||||
From efba4ab8bad8980598834d43e13e3af44afc5dce Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Sun, 30 Aug 2015 03:21:57 -0400
|
||||
Subject: [PATCH] RHEL: Fixes for libguestfs-winsupport.
|
||||
@ -19,10 +19,10 @@ https://bugzilla.redhat.com/show_bug.cgi?id=2187961#c1
|
||||
7 files changed, 40 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/convert/convert.ml b/convert/convert.ml
|
||||
index e3fd41b8..eb51e9b9 100644
|
||||
index f077e1f6..2150abb7 100644
|
||||
--- a/convert/convert.ml
|
||||
+++ b/convert/convert.ml
|
||||
@@ -55,6 +55,7 @@ let rec convert input_disks options source =
|
||||
@@ -56,6 +56,7 @@ let rec convert input_disks options source =
|
||||
|
||||
message (f_"Opening the source");
|
||||
let g = open_guestfs ~identifier:"v2v" () in
|
||||
@ -1,24 +0,0 @@
|
||||
From b6d5f9dc47fa57836215a698a1ed9df20f90dabc Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 13 Jan 2026 14:11:49 +0000
|
||||
Subject: [PATCH] input/ssh.ml: Add debugging around remote_file_exists
|
||||
function
|
||||
|
||||
It's hard to tell when this function was called and if it returned
|
||||
success or failure, so add some debugging.
|
||||
---
|
||||
input/ssh.ml | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/input/ssh.ml b/input/ssh.ml
|
||||
index 9b93df7b..51276156 100644
|
||||
--- a/input/ssh.ml
|
||||
+++ b/input/ssh.ml
|
||||
@@ -60,4 +60,6 @@ let remote_file_exists ~server ?port ?user ?password path =
|
||||
* prove the remote file exists.
|
||||
*)
|
||||
let cmd = [ Config.nbdinfo; "--can"; "connect"; uri ] in
|
||||
- run_command cmd = 0
|
||||
+ let r = run_command cmd = 0 in
|
||||
+ debug "ssh: remote_file_exists: testing %s -> %b" path r;
|
||||
+ r
|
||||
@ -1,4 +1,4 @@
|
||||
From 38516e4b16f2148db9d16c352e4bec6c9235e52a Mon Sep 17 00:00:00 2001
|
||||
From 84f190814e0277647adc42946bfeb0ed3881c16e 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
|
||||
@ -1,47 +0,0 @@
|
||||
From 986edd3e609cc33e0004e41447b74b93572bd61e Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 13 Jan 2026 14:20:18 +0000
|
||||
Subject: [PATCH] input/ssh.ml: Fix Ssh.remote_file_exists
|
||||
|
||||
This function was inadvertently broken in commit 970d7123c2
|
||||
("input/ssh: Use nbdinfo --can connect (instead of --size)"), since
|
||||
'nbdinfo --can connect' just says that nbdinfo managed to connect at
|
||||
all, even if the connection failed to fully negotiate the NBD
|
||||
handshake. (This is possibly a bug in nbdinfo.)
|
||||
|
||||
Using --size means we must have negotiated the NBD handshake.
|
||||
|
||||
However this leaves the problem that commit 970d7123c2 was originally
|
||||
intended to fix, that 'nbdinfo --size' prints the size on stdout. To
|
||||
fix this, replace use of run_command with shell_command so we can
|
||||
redirect stdout.
|
||||
|
||||
Reported-by: Ming Xie
|
||||
Thanks: Ming Xie
|
||||
Updates: commit fb72e059863a60503b6011b8590c25c3a010a58f
|
||||
Reverts: commit 970d7123c2025bc148870f4bc6fa75fa9e95905f
|
||||
---
|
||||
input/ssh.ml | 9 ++++++---
|
||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/input/ssh.ml b/input/ssh.ml
|
||||
index 51276156..2393965c 100644
|
||||
--- a/input/ssh.ml
|
||||
+++ b/input/ssh.ml
|
||||
@@ -56,10 +56,13 @@ let download_file ~server ?port ?user ?password path output =
|
||||
let remote_file_exists ~server ?port ?user ?password path =
|
||||
let uri = start_nbdkit ~server ?port ?user ?password path in
|
||||
|
||||
- (* Testing that we can connect to the nbdkit server is enough to
|
||||
+ (* Testing that the nbdkit server can get the size is enough to
|
||||
* prove the remote file exists.
|
||||
*)
|
||||
- let cmd = [ Config.nbdinfo; "--can"; "connect"; uri ] in
|
||||
- let r = run_command cmd = 0 in
|
||||
+ let cmd = sprintf "%s --size %s >/dev/null %s"
|
||||
+ Config.nbdinfo (quote uri)
|
||||
+ (* If verbose then allow stderr to go to the log, else hide it *)
|
||||
+ (if verbose () then "" else "2>&1") in
|
||||
+ let r = shell_command cmd = 0 in
|
||||
debug "ssh: remote_file_exists: testing %s -> %b" path r;
|
||||
r
|
||||
@ -1,4 +1,4 @@
|
||||
From b00922090f704e97388dbc96f6f710fd5e22af92 Mon Sep 17 00:00:00 2001
|
||||
From cc667070c19d8ff55ebdeaa50263911d220d9c11 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 30 Sep 2014 10:50:27 +0100
|
||||
Subject: [PATCH] RHEL: v2v: Disable the --qemu-boot / -oo qemu-boot option
|
||||
@ -43,10 +43,10 @@ index 49f00754..bdf12c5d 100644
|
||||
=item B<-o null>
|
||||
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index 04764832..eb550da0 100644
|
||||
index 432611e5..fa0c674a 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -169,11 +169,6 @@ Since F<guest-domain.xml> contains the path(s) to the guest disk
|
||||
@@ -170,11 +170,6 @@ Since F<guest-domain.xml> contains the path(s) to the guest disk
|
||||
image(s) you do not need to specify the name of the disk image on the
|
||||
command line.
|
||||
|
||||
@ -58,7 +58,7 @@ index 04764832..eb550da0 100644
|
||||
=head1 OPTIONS
|
||||
|
||||
=over 4
|
||||
@@ -578,9 +573,6 @@ This is similar to I<-o local>, except that a shell script is written
|
||||
@@ -587,9 +582,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>.
|
||||
|
||||
@ -66,9 +66,9 @@ index 04764832..eb550da0 100644
|
||||
-option which boots the guest under qemu immediately.
|
||||
-
|
||||
ifelse(ENABLE_OVIRT, yes, `
|
||||
=item B<-o> B<vdsm>
|
||||
|
||||
@@ -653,11 +645,6 @@ For I<-o openstack> (L<virt-v2v-output-openstack(1)>) only, set a guest ID
|
||||
=item B<-o> B<vdsm>
|
||||
@@ -663,11 +655,6 @@ For I<-o openstack> (L<virt-v2v-output-openstack(1)>) only, set a guest ID
|
||||
which is saved on each Cinder volume in the C<virt_v2v_guest_id>
|
||||
volume property.
|
||||
|
||||
@ -1,120 +0,0 @@
|
||||
From aec2e0a6e6861a2b895d27001e009650f6227dfe Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 26 Jan 2026 16:20:50 +0000
|
||||
Subject: [PATCH] Update common submodule
|
||||
|
||||
This pulls in the following commits:
|
||||
|
||||
Richard W.M. Jones (4):
|
||||
mlcustomize/firstboot.ml: Print %USERNAME% and %USERDOMAIN%
|
||||
mlcustomize/firstboot.ml: Fix %-encoding in previous commit
|
||||
mlpcre: Add optional PCRE_ANCHORED flag when compiling expressions
|
||||
mlstdutils: Export List.assoc_opt
|
||||
|
||||
(cherry picked from commit e3e5cbcf45a0c9a523b8389b2fd8835d5ab684ee)
|
||||
---
|
||||
common | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Submodule common b54ba203..1005f4a6:
|
||||
diff --git a/common/mlcustomize/firstboot.ml b/common/mlcustomize/firstboot.ml
|
||||
index 360c33d6..f29884c8 100644
|
||||
--- a/common/mlcustomize/firstboot.ml
|
||||
+++ b/common/mlcustomize/firstboot.ml
|
||||
@@ -295,6 +295,7 @@ exit /b
|
||||
|
||||
:main
|
||||
echo starting firstboot service
|
||||
+echo effective user: %%USERNAME%% domain: %%USERDOMAIN%%
|
||||
|
||||
if not exist "%%scripts_done%%" (
|
||||
mkdir "%%scripts_done%%"
|
||||
diff --git a/common/mlpcre/PCRE.ml b/common/mlpcre/PCRE.ml
|
||||
index 077290ef..33074af1 100644
|
||||
--- a/common/mlpcre/PCRE.ml
|
||||
+++ b/common/mlpcre/PCRE.ml
|
||||
@@ -22,7 +22,7 @@ exception Error of string * int
|
||||
|
||||
type regexp
|
||||
|
||||
-external compile : ?caseless:bool -> ?dotall:bool -> ?extended:bool -> ?multiline:bool -> string -> regexp = "guestfs_int_pcre_compile"
|
||||
+external compile : ?anchored:bool -> ?caseless:bool -> ?dotall:bool -> ?extended:bool -> ?multiline:bool -> string -> regexp = "guestfs_int_pcre_compile_byte" "guestfs_int_pcre_compile"
|
||||
external matches : ?offset:int -> regexp -> string -> bool = "guestfs_int_pcre_matches"
|
||||
external sub : int -> string = "guestfs_int_pcre_sub"
|
||||
external subi : int -> int * int = "guestfs_int_pcre_subi"
|
||||
diff --git a/common/mlpcre/PCRE.mli b/common/mlpcre/PCRE.mli
|
||||
index b69a56ba..0fdc2bd5 100644
|
||||
--- a/common/mlpcre/PCRE.mli
|
||||
+++ b/common/mlpcre/PCRE.mli
|
||||
@@ -52,11 +52,12 @@ exception Error of string * int
|
||||
type regexp
|
||||
(** The type of a compiled regular expression. *)
|
||||
|
||||
-val compile : ?caseless:bool -> ?dotall:bool -> ?extended:bool -> ?multiline:bool -> string -> regexp
|
||||
+val compile : ?anchored:bool -> ?caseless:bool -> ?dotall:bool ->
|
||||
+ ?extended:bool -> ?multiline:bool -> string -> regexp
|
||||
(** Compile a regular expression. This can raise {!Error}.
|
||||
|
||||
- The flags [?caseless], [?dotall], [?extended], [?multiline]
|
||||
- correspond to the [pcre_compile] flags [PCRE_CASELESS] etc.
|
||||
+ The flags [?anchored], [?caseless], [?dotall], [?extended], [?multiline]
|
||||
+ correspond to the [pcre_compile] flags [PCRE_ANCHORED] etc.
|
||||
See pcre2api(3) for details of what they do.
|
||||
All flags default to false. *)
|
||||
|
||||
diff --git a/common/mlpcre/pcre-c.c b/common/mlpcre/pcre-c.c
|
||||
index 3959fd56..11be1577 100644
|
||||
--- a/common/mlpcre/pcre-c.c
|
||||
+++ b/common/mlpcre/pcre-c.c
|
||||
@@ -154,11 +154,12 @@ Optint_val (value intv, int defval)
|
||||
}
|
||||
|
||||
value
|
||||
-guestfs_int_pcre_compile (value caselessv, value dotallv,
|
||||
- value extendedv, value multilinev,
|
||||
+guestfs_int_pcre_compile (value anchoredv, value caselessv,
|
||||
+ value dotallv, value extendedv,
|
||||
+ value multilinev,
|
||||
value pattv)
|
||||
{
|
||||
- CAMLparam4 (caselessv, dotallv, extendedv, multilinev);
|
||||
+ CAMLparam5 (anchoredv, caselessv, dotallv, extendedv, multilinev);
|
||||
CAMLxparam1 (pattv);
|
||||
const char *patt;
|
||||
int options = 0;
|
||||
@@ -167,6 +168,8 @@ guestfs_int_pcre_compile (value caselessv, value dotallv,
|
||||
PCRE2_SIZE errnum;
|
||||
|
||||
/* Flag parameters are all ‘bool option’, defaulting to false. */
|
||||
+ if (is_Some_true (anchoredv))
|
||||
+ options |= PCRE2_ANCHORED;
|
||||
if (is_Some_true (caselessv))
|
||||
options |= PCRE2_CASELESS;
|
||||
if (is_Some_true (dotallv))
|
||||
@@ -186,6 +189,14 @@ guestfs_int_pcre_compile (value caselessv, value dotallv,
|
||||
CAMLreturn (Val_regexp (re));
|
||||
}
|
||||
|
||||
+value
|
||||
+guestfs_int_pcre_compile_byte (value *argv, int argn)
|
||||
+{
|
||||
+ assert (argn == 6);
|
||||
+ return guestfs_int_pcre_compile (argv[0], argv[1], argv[2],
|
||||
+ argv[3], argv[4], argv[5]);
|
||||
+}
|
||||
+
|
||||
value
|
||||
guestfs_int_pcre_matches (value offsetv, value rev, value strv)
|
||||
{
|
||||
diff --git a/common/mlstdutils/std_utils.mli b/common/mlstdutils/std_utils.mli
|
||||
index 6c1911da..77cf107e 100644
|
||||
--- a/common/mlstdutils/std_utils.mli
|
||||
+++ b/common/mlstdutils/std_utils.mli
|
||||
@@ -51,6 +51,7 @@ module List : sig
|
||||
val find_all : ('a -> bool) -> 'a list -> 'a list
|
||||
val partition : ('a -> bool) -> 'a list -> 'a list * 'a list
|
||||
val assoc : 'a -> ('a * 'b) list -> 'b
|
||||
+ val assoc_opt : 'a -> ('a * 'b) list -> 'b option
|
||||
val assq : 'a -> ('a * 'b) list -> 'b
|
||||
val mem_assoc : 'a -> ('a * 'b) list -> bool
|
||||
val mem_assq : 'a -> ('a * 'b) list -> bool
|
||||
@ -1,4 +1,4 @@
|
||||
From f19e71394757c9f44ed3367addbe694140f34fea Mon Sep 17 00:00:00 2001
|
||||
From 6b45fe15284f0660554c1d1f38b69453e08e2c4d Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Fri, 24 Apr 2015 09:45:41 -0400
|
||||
Subject: [PATCH] RHEL: Fix list of supported sound cards to match RHEL qemu
|
||||
@ -9,7 +9,7 @@ Subject: [PATCH] RHEL: Fix list of supported sound cards to match RHEL qemu
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/utils.ml b/lib/utils.ml
|
||||
index 15af5b1a..f5afa58f 100644
|
||||
index 7eb4ec38..8a06bbd4 100644
|
||||
--- a/lib/utils.ml
|
||||
+++ b/lib/utils.ml
|
||||
@@ -83,13 +83,14 @@ let kvm_arch = function
|
||||
@ -1,177 +0,0 @@
|
||||
From 3e60eef83ed072b605a3c34f3bf3acbc89a876bb Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 26 Jan 2026 16:26:27 +0000
|
||||
Subject: [PATCH] v2v: Enhance inspection with filesystems information
|
||||
|
||||
Add the list of filesystems found by inspection to the internal
|
||||
inspection struct. This is not actually used by virt-v2v itself (it
|
||||
is used by virt-v2v-inspector), so this change should have no effect.
|
||||
|
||||
(cherry picked from commit 6bd4ab3a5da9bf3bb3b22585d2226d6e338f23ba)
|
||||
|
||||
For RHEL 10: Adjust minimum version of libguestfs since we will
|
||||
backport the new API to libguestfs 1.58.1-2.el10.
|
||||
---
|
||||
convert/mount_filesystems.ml | 49 ++++++++++++++++++++++++++++++++++++
|
||||
lib/types.ml | 9 +++++++
|
||||
lib/types.mli | 9 +++++++
|
||||
m4/guestfs-libraries.m4 | 5 ++--
|
||||
v2v/v2v_unit_tests.ml | 1 +
|
||||
5 files changed, 70 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/convert/mount_filesystems.ml b/convert/mount_filesystems.ml
|
||||
index e7974359..aa117e51 100644
|
||||
--- a/convert/mount_filesystems.ml
|
||||
+++ b/convert/mount_filesystems.ml
|
||||
@@ -30,6 +30,42 @@ let rec mount_filesystems g root =
|
||||
reject_if_not_installed_image g root;
|
||||
reject_if_unknown_fields g root;
|
||||
|
||||
+ (* Get the list of filesystems. This is not actually used by
|
||||
+ * virt-v2v (only used by virt-v2v-inspector) so try hard not
|
||||
+ * to fail here.
|
||||
+ *)
|
||||
+ let fses = g#inspect_get_filesystems root in
|
||||
+ let fses = Array.to_list fses in
|
||||
+ let fses = List.sort compare fses in
|
||||
+ let fses =
|
||||
+ List.map (
|
||||
+ fun dev ->
|
||||
+ let dev = g#canonical_device_name dev
|
||||
+ and fs_type = ref None
|
||||
+ and fs_version = ref None
|
||||
+ and fs_label = ref None
|
||||
+ and fs_uuid = ref None in
|
||||
+
|
||||
+ (try
|
||||
+ let v = g#vfs_type dev in
|
||||
+ if v <> "" then (
|
||||
+ fs_type := Some v;
|
||||
+ fs_version := get_filesystem_version g dev v;
|
||||
+ )
|
||||
+ with G.Error msg -> debug "vfs_type: %s: %s (ignored)" dev msg);
|
||||
+ (try
|
||||
+ let v = g#vfs_label dev in
|
||||
+ if v <> "" then fs_label := Some v
|
||||
+ with G.Error msg -> debug "vfs_label: %s: %s (ignored)" dev msg);
|
||||
+ (try
|
||||
+ let v = g#vfs_uuid dev in
|
||||
+ if v <> "" then fs_uuid := Some v
|
||||
+ with G.Error msg -> debug "vfs_uuid: %s: %s (ignored)" dev msg);
|
||||
+
|
||||
+ { fs_dev = dev; fs_type = !fs_type; fs_version = !fs_version;
|
||||
+ fs_label = !fs_label; fs_uuid = !fs_uuid }
|
||||
+ ) fses in
|
||||
+
|
||||
(* Mount up the filesystems. *)
|
||||
let mps = g#inspect_get_mountpoints root in
|
||||
let cmp (a,_) (b,_) = compare (String.length a) (String.length b) in
|
||||
@@ -121,6 +157,7 @@ let rec mount_filesystems g root =
|
||||
i_product_name = g#inspect_get_product_name root;
|
||||
i_product_variant = g#inspect_get_product_variant root;
|
||||
i_mountpoints = mps;
|
||||
+ i_filesystems = fses;
|
||||
i_apps = apps;
|
||||
i_apps_map = apps_map;
|
||||
i_windows_systemroot = systemroot;
|
||||
@@ -164,6 +201,18 @@ and error_if_unknown fieldname value =
|
||||
Inspection field ‘%s’ was ‘unknown’.")
|
||||
fieldname
|
||||
|
||||
+(* See equivalent function in guestfs-tools.git:inspector/inspector.c *)
|
||||
+and get_filesystem_version g dev = function
|
||||
+ | "xfs" ->
|
||||
+ let hash = g#xfs_info2 dev in
|
||||
+ (match List.assoc_opt "meta-data.crc" hash with
|
||||
+ | None -> None
|
||||
+ | Some "0" -> (* XFS version *) Some "4"
|
||||
+ | Some "1" -> (* XFS version *) Some "5"
|
||||
+ | Some _ -> None
|
||||
+ )
|
||||
+ | _ -> None
|
||||
+
|
||||
(* Wrapper around g#inspect_list_applications2 which, for RPM
|
||||
* guests, on failure tries to rebuild the RPM database before
|
||||
* repeating the operation.
|
||||
diff --git a/lib/types.ml b/lib/types.ml
|
||||
index 9ba580e4..d727af89 100644
|
||||
--- a/lib/types.ml
|
||||
+++ b/lib/types.ml
|
||||
@@ -300,6 +300,7 @@ type inspect = {
|
||||
i_product_name : string;
|
||||
i_product_variant : string;
|
||||
i_mountpoints : (string * string) list;
|
||||
+ i_filesystems : filesystem list;
|
||||
i_apps : Guestfs.application2 list;
|
||||
i_apps_map : Guestfs.application2 list StringMap.t;
|
||||
i_windows_systemroot : string;
|
||||
@@ -310,6 +311,14 @@ type inspect = {
|
||||
i_drive_mappings : (string * string) list;
|
||||
}
|
||||
|
||||
+and filesystem = {
|
||||
+ fs_dev : string;
|
||||
+ fs_type : string option;
|
||||
+ fs_version : string option;
|
||||
+ fs_label : string option;
|
||||
+ fs_uuid : string option;
|
||||
+}
|
||||
+
|
||||
let string_of_inspect inspect =
|
||||
sprintf "\
|
||||
i_root = %s
|
||||
diff --git a/lib/types.mli b/lib/types.mli
|
||||
index 4c705a73..64b6336f 100644
|
||||
--- a/lib/types.mli
|
||||
+++ b/lib/types.mli
|
||||
@@ -207,6 +207,7 @@ type inspect = {
|
||||
i_product_name : string;
|
||||
i_product_variant : string;
|
||||
i_mountpoints : (string * string) list;
|
||||
+ i_filesystems : filesystem list;
|
||||
i_apps : Guestfs.application2 list; (** List of packages installed. *)
|
||||
i_apps_map : Guestfs.application2 list StringMap.t;
|
||||
(** This is a map from the app name to the application object.
|
||||
@@ -220,6 +221,14 @@ type inspect = {
|
||||
i_drive_mappings : (string * string) list;
|
||||
}
|
||||
|
||||
+and filesystem = {
|
||||
+ fs_dev : string;
|
||||
+ fs_type : string option;
|
||||
+ fs_version : string option;
|
||||
+ fs_label : string option;
|
||||
+ fs_uuid : string option;
|
||||
+}
|
||||
+
|
||||
val string_of_inspect : inspect -> string
|
||||
|
||||
(** {2 Disk stats} *)
|
||||
diff --git a/m4/guestfs-libraries.m4 b/m4/guestfs-libraries.m4
|
||||
index db11cff6..c4237438 100644
|
||||
--- a/m4/guestfs-libraries.m4
|
||||
+++ b/m4/guestfs-libraries.m4
|
||||
@@ -19,9 +19,8 @@ dnl Any C libraries required by virt-v2v.
|
||||
|
||||
dnl Of course we need libguestfs.
|
||||
dnl
|
||||
-dnl We need libguestfs 1.57.3 for guestfs_ntfs_chmod.
|
||||
-dnl We need libguestfs 1.57.6 for guestfs_inspect_get_windows_group_policy.
|
||||
-PKG_CHECK_MODULES([LIBGUESTFS], [libguestfs >= 1.57.6])
|
||||
+dnl We need libguestfs >= 1.58.1-2.el10 for guestfs_xfs_info2.
|
||||
+PKG_CHECK_MODULES([LIBGUESTFS], [libguestfs >= 1.58.1])
|
||||
printf "libguestfs version is "; $PKG_CONFIG --modversion libguestfs
|
||||
|
||||
dnl And libnbd.
|
||||
diff --git a/v2v/v2v_unit_tests.ml b/v2v/v2v_unit_tests.ml
|
||||
index 892bf190..efbadc80 100644
|
||||
--- a/v2v/v2v_unit_tests.ml
|
||||
+++ b/v2v/v2v_unit_tests.ml
|
||||
@@ -38,6 +38,7 @@ let inspect_defaults = {
|
||||
i_major_version = 0; i_minor_version = 0;
|
||||
i_root = ""; i_package_format = ""; i_package_management = "";
|
||||
i_product_name = ""; i_product_variant = ""; i_mountpoints = [];
|
||||
+ i_filesystems = [];
|
||||
i_apps = []; i_apps_map = StringMap.empty;
|
||||
i_windows_systemroot = "";
|
||||
i_windows_software_hive = ""; i_windows_system_hive = "";
|
||||
@ -1,4 +1,4 @@
|
||||
From 2e69a53b203968d77eb0a0447bdb347bd34481c6 Mon Sep 17 00:00:00 2001
|
||||
From 3f52a3f1d7874759f27f914e8ce2dae10ce44dff Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 2 Mar 2017 14:21:37 +0100
|
||||
Subject: [PATCH] RHEL: v2v: -i disk: force VNC as display (RHBZ#1372671)
|
||||
@ -1,131 +0,0 @@
|
||||
From 3eef674a08ca904baff2e4d6a0f871e303d08e6e Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 26 Jan 2026 16:27:42 +0000
|
||||
Subject: [PATCH] inspector: Enhance virt-v2v-inspector output with filesystems
|
||||
information
|
||||
|
||||
RHEL 7.0, 7.1 and (possibly*) 7.2 used XFS version 4. New versions of
|
||||
RHEL use XFS v5.
|
||||
|
||||
Support even for opening version 4 filesystems was removed in RHEL 10
|
||||
(and will be removed altogether from the Linux kernel in 2030). This
|
||||
prevents virt-v2v conversions.
|
||||
|
||||
Therefore it's a good idea to be able to tell the XFS filesystem
|
||||
version and print that in virt-inspector output, so that management
|
||||
tools can warn about it.
|
||||
|
||||
Since we didn't have the virt-inspector <filesystems/> section at all
|
||||
before, we have to add that whole section, sticking as close as
|
||||
possible to the virt-inspector output.
|
||||
|
||||
Example output for a RHEL 7.0 guest:
|
||||
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<v2v-inspection>
|
||||
<!-- generated by virt-v2v-inspector 2.10.0local,libvirt -->
|
||||
<program>virt-v2v-inspector</program>
|
||||
...
|
||||
<operatingsystem>
|
||||
<name>linux</name>
|
||||
...
|
||||
<mountpoints>
|
||||
<mountpoint dev='/dev/sda3'>/</mountpoint>
|
||||
<mountpoint dev='/dev/sda1'>/boot</mountpoint>
|
||||
</mountpoints>
|
||||
<filesystems>
|
||||
<filesystem dev='/dev/sda1'>
|
||||
<type>ext4</type>
|
||||
<uuid>15e8838c-136e-4a1f-ac01-97b4fa6b0fe4</uuid>
|
||||
</filesystem>
|
||||
<filesystem dev='/dev/sda2'>
|
||||
<type>swap</type>
|
||||
<uuid>8e966377-86f1-45a1-bdff-28724530818d</uuid>
|
||||
</filesystem>
|
||||
<filesystem dev='/dev/sda3'>
|
||||
<type version='4'>xfs</type>
|
||||
<uuid>67ae8aeb-a9f4-4639-a201-c02b7dbb5d98</uuid>
|
||||
</filesystem>
|
||||
</filesystems>
|
||||
</operatingsystem>
|
||||
</v2v-inspection>
|
||||
|
||||
Example output for a RHEL 7.3 guest:
|
||||
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<v2v-inspection>
|
||||
<!-- generated by virt-v2v-inspector 2.10.0local,libvirt -->
|
||||
<program>virt-v2v-inspector</program>
|
||||
...
|
||||
<operatingsystem>
|
||||
<name>linux</name>
|
||||
...
|
||||
<mountpoints>
|
||||
<mountpoint dev='/dev/sda3'>/</mountpoint>
|
||||
<mountpoint dev='/dev/sda1'>/boot</mountpoint>
|
||||
</mountpoints>
|
||||
<filesystems>
|
||||
<filesystem dev='/dev/sda1'>
|
||||
<type>ext4</type>
|
||||
<uuid>e0467228-8727-482d-bd7a-6741885fe7ed</uuid>
|
||||
</filesystem>
|
||||
<filesystem dev='/dev/sda2'>
|
||||
<type>swap</type>
|
||||
<uuid>9c2e6658-c600-4fbd-8731-864ff987553c</uuid>
|
||||
</filesystem>
|
||||
<filesystem dev='/dev/sda3'>
|
||||
<type version='5'>xfs</type>
|
||||
<uuid>9692610c-0025-4a8c-b806-8a78de2ec2eb</uuid>
|
||||
</filesystem>
|
||||
</filesystems>
|
||||
</operatingsystem>
|
||||
</v2v-inspection>
|
||||
|
||||
To work this requires libguestfs >= 1.59.2 (with guestfs_xfs_info2).
|
||||
|
||||
The version field may be missing, for non-XFS filesystems, but also if
|
||||
we cannot tell the XFS version for some reason.
|
||||
|
||||
* = The virt-builder rhel-7.2 image definitely uses XFS v4, but it may
|
||||
have been built from an early (pre-)release of 7.2. Later RHEL 7.2
|
||||
seems to use XFS v5.
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-144075
|
||||
(cherry picked from commit d6b2e643b174fff7d3442865da047bf3d3f9aac9)
|
||||
---
|
||||
inspector/create_inspector_xml.ml | 22 ++++++++++++++++++++++
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
diff --git a/inspector/create_inspector_xml.ml b/inspector/create_inspector_xml.ml
|
||||
index fb434227..a531cecc 100644
|
||||
--- a/inspector/create_inspector_xml.ml
|
||||
+++ b/inspector/create_inspector_xml.ml
|
||||
@@ -126,6 +126,28 @@ let rec create_inspector_xml input_disks inspect target_meta =
|
||||
) inspect.i_mountpoints;
|
||||
List.push_back os (e "mountpoints" [] !mps);
|
||||
|
||||
+ let fses = ref [] in
|
||||
+ List.iter (
|
||||
+ fun { fs_dev; fs_type; fs_version; fs_label; fs_uuid } ->
|
||||
+ let fs = ref [] in
|
||||
+ (match fs_type, fs_version with
|
||||
+ | None, _ -> ()
|
||||
+ | Some typ, None -> List.push_back fs (e "type" [] [PCData typ])
|
||||
+ | Some typ, Some ver ->
|
||||
+ List.push_back fs (e "type" [ "version", ver] [PCData typ])
|
||||
+ );
|
||||
+ (match fs_label with
|
||||
+ | None -> ()
|
||||
+ | Some label -> List.push_back fs (e "label" [] [PCData label])
|
||||
+ );
|
||||
+ (match fs_uuid with
|
||||
+ | None -> ()
|
||||
+ | Some uuid -> List.push_back fs (e "uuid" [] [PCData uuid])
|
||||
+ );
|
||||
+ List.push_back fses (e "filesystem" [ "dev", fs_dev] !fs)
|
||||
+ ) inspect.i_filesystems;
|
||||
+ List.push_back os (e "filesystems" [] !fses);
|
||||
+
|
||||
List.push_back body (e "operatingsystem" [] !os);
|
||||
|
||||
(* Construct the final document. *)
|
||||
@ -1,4 +1,4 @@
|
||||
From 19cd953d2b43f1d385845ed86c1802d4343093e7 Mon Sep 17 00:00:00 2001
|
||||
From 76e5a264a578f40917e4afb96069de97e8141c23 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Tue, 26 Mar 2019 09:42:25 +0100
|
||||
Subject: [PATCH] RHEL: point to KB for supported v2v hypervisors/guests
|
||||
@ -1,57 +0,0 @@
|
||||
From 3ef1078cd3cf5a56dc8023ed113838533d9cea09 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Necas <mnecas@redhat.com>
|
||||
Date: Tue, 27 Jan 2026 21:56:41 +0900
|
||||
Subject: [PATCH] convert/convert_linux.ml: Add debian 12 UEFI
|
||||
|
||||
When migrating Debian 12 VM with UEFI the VM fails to boot as we don't
|
||||
preserve the UEFI configuration. Debian has similar mechanism as ubuntu
|
||||
so we can reuse it.
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-144467
|
||||
|
||||
Signed-off-by: Martin Necas <mnecas@redhat.com>
|
||||
(cherry picked from commit 161679267f2100e3604dca3f5bfa0827e9a5de30)
|
||||
---
|
||||
convert/convert_linux.ml | 12 +++++++-----
|
||||
1 file changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml
|
||||
index 6c021efb..ce02b04a 100644
|
||||
--- a/convert/convert_linux.ml
|
||||
+++ b/convert/convert_linux.ml
|
||||
@@ -1324,13 +1324,15 @@ fi
|
||||
g inspect.i_root "fix uefi boot" fix_script)
|
||||
else
|
||||
cant_fix_uefi ()
|
||||
- | "ubuntu", 14 ->
|
||||
+ | ("ubuntu", 14) | ("debian", 12)->
|
||||
(* to make a bootable uefi ubuntu 14 we need to
|
||||
* copy shim<arch>.efi to UEFI fallback path
|
||||
* and rename it to BOOT<arch>.efi, also we copy
|
||||
* grub.efi and grub.cfg to UEFI fallback path without renaming *)
|
||||
let arch_suffix = String.lowercase_ascii suffix in
|
||||
|
||||
+ let distro = inspect.i_distro in
|
||||
+
|
||||
let shim =
|
||||
String.concat "" [grub_path; "/shim"; arch_suffix; ".efi"] in
|
||||
let uefi_grub_name =
|
||||
@@ -1346,14 +1348,14 @@ fi
|
||||
* if not, then just don't clean up and leave the temp loader
|
||||
* at UEFI fallback path for simplicity
|
||||
*)
|
||||
- if String.find shim "/boot/efi/EFI/ubuntu/shim" >= 0 then
|
||||
+ if String.find shim (sprintf "/boot/efi/EFI/%s/shim" distro) >= 0 then
|
||||
let fix_script =
|
||||
sprintf
|
||||
"#!/bin/bash\n\
|
||||
- sudo efibootmgr -c -L ubuntu \
|
||||
- -l \\\\EFI\\\\ubuntu\\\\shim%s.efi\n\
|
||||
+ sudo efibootmgr -c -L %s \
|
||||
+ -l \\\\EFI\\\\%s\\\\shim%s.efi\n\
|
||||
rm -rf %s"
|
||||
- arch_suffix uefi_fallback_path in
|
||||
+ distro distro arch_suffix uefi_fallback_path in
|
||||
Firstboot.add_firstboot_script
|
||||
g inspect.i_root "fix uefi boot" fix_script
|
||||
else
|
||||
@ -1,4 +1,4 @@
|
||||
From 57a29e5f33a5035917ef0bfffaa61326148c7afa Mon Sep 17 00:00:00 2001
|
||||
From 679424f25440deafed4be23c4bd6e4752e897cf0 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 5 Jul 2022 11:58:09 +0100
|
||||
Subject: [PATCH] RHEL: tests: Remove btrfs test
|
||||
@ -9,7 +9,7 @@ RHEL does not have btrfs so this test always fails.
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||
index 54cfd124..8e142b09 100644
|
||||
index 19bdbe51..be6e1cd5 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -64,7 +64,6 @@ TESTS = \
|
||||
@ -1,45 +0,0 @@
|
||||
From c532b2c1d14b22b540cced337ad26473aa5b6648 Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Tue, 27 Jan 2026 09:14:29 -0500
|
||||
Subject: [PATCH] input: vcenter: double uri_encode `dcPath` and `dsName`
|
||||
|
||||
Special characters like `+` in vmware datastore names aren't accessible
|
||||
by expected URLs:
|
||||
|
||||
https://knowledge.broadcom.com/external/article/386368/vcenter-inventory-object-name-with-speci.html
|
||||
|
||||
Turns out they need to passed through URI encoding twice.
|
||||
Libvirt fixed this here:
|
||||
|
||||
https://gitlab.com/libvirt/libvirt/-/commit/6c9d2591c668732eb05cf17d27c9102ef3d40b39
|
||||
|
||||
But we need a similar fix for non-vddk vCenter conversions
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-133729
|
||||
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
(cherry picked from commit f13e85f9ce3bb51f65c0afbaae009b5a3e6af9c7)
|
||||
---
|
||||
input/vCenter.ml | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/input/vCenter.ml b/input/vCenter.ml
|
||||
index f9b6ab07..fef113cd 100644
|
||||
--- a/input/vCenter.ml
|
||||
+++ b/input/vCenter.ml
|
||||
@@ -137,9 +137,14 @@ and get_https_url dcPath uri server path =
|
||||
(* XXX Need to handle templates. The file is called "-delta.vmdk" in
|
||||
* place of "-flat.vmdk".
|
||||
*)
|
||||
+ (* dcPath and dsName need to be double quoted:
|
||||
+ * https://gitlab.com/libvirt/libvirt/-/commit/6c9d2591c6
|
||||
+ *)
|
||||
sprintf "https://%s%s/folder/%s-flat.vmdk?dcPath=%s&dsName=%s"
|
||||
server port
|
||||
- (uri_quote path) (uri_quote dcPath) (uri_quote datastore)
|
||||
+ (uri_quote path)
|
||||
+ (uri_quote (uri_quote dcPath))
|
||||
+ (uri_quote (uri_quote datastore))
|
||||
)
|
||||
|
||||
(* Fetch the status from a URL. *)
|
||||
@ -1,4 +1,4 @@
|
||||
From 61eac56a5cb787d591b9338324513b94f0f51b74 Mon Sep 17 00:00:00 2001
|
||||
From 2683e8b2544180fec8ce0ebde667132031647704 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 9 Jul 2024 11:30:09 +0100
|
||||
Subject: [PATCH] RHEL: Add warning about virt-v2v-in-place not being supported
|
||||
@ -10,10 +10,10 @@ Fixes: https://issues.redhat.com/browse/RHEL-40903
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/in-place/in_place.ml b/in-place/in_place.ml
|
||||
index 7e490867..6c2790af 100644
|
||||
index e84266ab..a96d55d9 100644
|
||||
--- a/in-place/in_place.ml
|
||||
+++ b/in-place/in_place.ml
|
||||
@@ -229,6 +229,9 @@ read the man page virt-v2v-in-place(1).
|
||||
@@ -232,6 +232,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;
|
||||
|
||||
@ -24,7 +24,7 @@ index 7e490867..6c2790af 100644
|
||||
debug "info: %s: %s %s (%s)"
|
||||
prog Config.package_name Config.package_version_full
|
||||
diff --git a/in-place/virt-v2v-in-place.pod b/in-place/virt-v2v-in-place.pod
|
||||
index 69d2092e..7c0a4d90 100644
|
||||
index 540635d2..24e32afb 100644
|
||||
--- a/in-place/virt-v2v-in-place.pod
|
||||
+++ b/in-place/virt-v2v-in-place.pod
|
||||
@@ -16,6 +16,10 @@ virt-v2v-in-place - Convert a guest to use KVM in-place
|
||||
@ -1,112 +0,0 @@
|
||||
From 3b6f7752ab8c8879426518c7ab290db79e4f6571 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 27 Jan 2026 08:56:11 +0000
|
||||
Subject: [PATCH] lib: Replace nbdkit file cache=none with
|
||||
reduce-memory-pressure=on
|
||||
|
||||
nbdkit 1.46 replaced the cache=none option with the
|
||||
same option renamed as 'reduce-memory-pressure', taking a boolean
|
||||
value, see:
|
||||
|
||||
https://gitlab.com/nbdkit/nbdkit/-/commit/98a5ddc835ba520c949b31328aef7b7987462faa
|
||||
|
||||
The old option caused customer confusion. cache=none still works, but
|
||||
to reduce confusion we should also prefer reduce-memory-pressure=on
|
||||
when that option is available.
|
||||
|
||||
(cherry picked from commit 7aab8a85f2f1a6d01d5e62dabe1839483abd0401)
|
||||
---
|
||||
input/input_disk.ml | 2 +-
|
||||
input/input_libvirt.ml | 2 +-
|
||||
lib/nbdkit.ml | 9 +++++++++
|
||||
lib/nbdkit.mli | 8 ++++++++
|
||||
output/output.ml | 4 ++--
|
||||
5 files changed, 21 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/input/input_disk.ml b/input/input_disk.ml
|
||||
index 8a71a3d9..a5291031 100644
|
||||
--- a/input/input_disk.ml
|
||||
+++ b/input/input_disk.ml
|
||||
@@ -110,7 +110,7 @@ module Disk = struct
|
||||
if options.read_only then
|
||||
Nbdkit.add_filter cmd "cow";
|
||||
Nbdkit.add_arg cmd "file" disk;
|
||||
- Nbdkit.add_arg cmd "cache" "none";
|
||||
+ Nbdkit.reduce_memory_pressure cmd;
|
||||
let _, pid = Nbdkit.run_unix socket cmd in
|
||||
|
||||
(* --exit-with-parent should ensure nbdkit is cleaned
|
||||
diff --git a/input/input_libvirt.ml b/input/input_libvirt.ml
|
||||
index f566ff5c..4c1a6eef 100644
|
||||
--- a/input/input_libvirt.ml
|
||||
+++ b/input/input_libvirt.ml
|
||||
@@ -129,7 +129,7 @@ and setup_servers options dir disks =
|
||||
if options.read_only then
|
||||
Nbdkit.add_filter cmd "cow";
|
||||
Nbdkit.add_arg cmd "file" filename;
|
||||
- Nbdkit.add_arg cmd "cache" "none";
|
||||
+ Nbdkit.reduce_memory_pressure cmd;
|
||||
let _, pid = Nbdkit.run_unix socket cmd in
|
||||
|
||||
(* --exit-with-parent should ensure nbdkit is cleaned
|
||||
diff --git a/lib/nbdkit.ml b/lib/nbdkit.ml
|
||||
index 9e42b607..e975bddf 100644
|
||||
--- a/lib/nbdkit.ml
|
||||
+++ b/lib/nbdkit.ml
|
||||
@@ -134,6 +134,15 @@ let add_env cmd name value = cmd.env <- (name, value) :: cmd.env
|
||||
let add_filter_if_available cmd filter =
|
||||
if probe_filter filter then add_filter cmd filter
|
||||
|
||||
+let reduce_memory_pressure cmd =
|
||||
+ assert (cmd.plugin = "file");
|
||||
+ if probe_plugin_parameter cmd.plugin "reduce-memory-pressure=" then
|
||||
+ add_arg cmd "reduce-memory-pressure" "on"
|
||||
+ else if probe_plugin_parameter cmd.plugin "cache=" then
|
||||
+ add_arg cmd "cache" "none"
|
||||
+ else
|
||||
+ assert false
|
||||
+
|
||||
let run_unix socket cmd =
|
||||
(* Create a temporary directory where we place the PID file. *)
|
||||
let piddir = Mkdtemp.temp_dir "v2vnbdkit." in
|
||||
diff --git a/lib/nbdkit.mli b/lib/nbdkit.mli
|
||||
index ea40b612..eaf65f05 100644
|
||||
--- a/lib/nbdkit.mli
|
||||
+++ b/lib/nbdkit.mli
|
||||
@@ -109,6 +109,14 @@ val add_args : cmd -> (string * string) list -> unit
|
||||
|
||||
The arguments are added left to right. *)
|
||||
|
||||
+val reduce_memory_pressure : cmd -> unit
|
||||
+(** This is short-hand for detecting if the file plugin supports the
|
||||
+ [reduce-memory-pressure=on] option, and adding it to the nbdkit
|
||||
+ command line. Otherwise it adds the old, confusing [cache=none]
|
||||
+ option instead.
|
||||
+
|
||||
+ Only use this with the file plugin. *)
|
||||
+
|
||||
val add_env : cmd -> string -> string -> unit
|
||||
(** Add name=value environment variable. *)
|
||||
|
||||
diff --git a/output/output.ml b/output/output.ml
|
||||
index 3067b920..7e096278 100644
|
||||
--- a/output/output.ml
|
||||
+++ b/output/output.ml
|
||||
@@ -102,7 +102,7 @@ let output_to_local_file ?name
|
||||
| "raw" ->
|
||||
let cmd = Nbdkit.create ?name "file" in
|
||||
Nbdkit.add_arg cmd "file" filename;
|
||||
- Nbdkit.add_arg cmd "cache" "none";
|
||||
+ Nbdkit.reduce_memory_pressure cmd;
|
||||
if verbose () then Nbdkit.add_filter_if_available cmd "count";
|
||||
let _, pid = Nbdkit.run_unix socket cmd in
|
||||
pid
|
||||
@@ -205,7 +205,7 @@ let create_local_output_disks dir
|
||||
(* Create the single nbdkit-file-plugin instance. *)
|
||||
let cmd = Nbdkit.create ~name:"out" "file" in
|
||||
Nbdkit.add_arg cmd "dir" output_storage;
|
||||
- Nbdkit.add_arg cmd "cache" "none";
|
||||
+ Nbdkit.reduce_memory_pressure cmd;
|
||||
if verbose () then Nbdkit.add_filter_if_available cmd "count";
|
||||
let _, pid = Nbdkit.run_unix socket cmd in
|
||||
On_exit.kill pid;
|
||||
@ -1,4 +1,4 @@
|
||||
From 9e9546aa983337e197407ce25ef3d3cd0a3cf173 Mon Sep 17 00:00:00 2001
|
||||
From 5009d5dec647b1081645c543b513020fdb225f19 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Fri, 12 Dec 2025 16:18:15 +0000
|
||||
Subject: [PATCH] RHEL: output/output.ml: Remove reduce-memory-pressure=on
|
||||
@ -1,36 +0,0 @@
|
||||
From e7922450fa61f3280fbd9c429379e95bbde47787 Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Fri, 6 Feb 2026 15:17:05 -0500
|
||||
Subject: [PATCH] convert/convert_linux.ml: Condense device regex handling
|
||||
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
(cherry picked from commit cf8b872c3eb7009cb399bdd395f9894ac288b9db)
|
||||
---
|
||||
convert/convert_linux.ml | 14 +++-----------
|
||||
1 file changed, 3 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml
|
||||
index ce02b04a..d93036f9 100644
|
||||
--- a/convert/convert_linux.ml
|
||||
+++ b/convert/convert_linux.ml
|
||||
@@ -1194,17 +1194,9 @@ fi
|
||||
device
|
||||
in
|
||||
|
||||
- if PCRE.matches rex_device_cciss value then (
|
||||
- let device = PCRE.sub 1
|
||||
- and part = try PCRE.sub 2 with Not_found -> "" in
|
||||
- "/dev/" ^ replace device ^ part
|
||||
- )
|
||||
- else if PCRE.matches rex_device_nvme value then (
|
||||
- let device = PCRE.sub 1
|
||||
- and part = try PCRE.sub 2 with Not_found -> "" in
|
||||
- "/dev/" ^ replace device ^ part
|
||||
- )
|
||||
- else if PCRE.matches rex_device value then (
|
||||
+ if PCRE.matches rex_device_cciss value ||
|
||||
+ PCRE.matches rex_device_nvme value ||
|
||||
+ PCRE.matches rex_device value then (
|
||||
let device = PCRE.sub 1
|
||||
and part = try PCRE.sub 2 with Not_found -> "" in
|
||||
"/dev/" ^ replace device ^ part
|
||||
@ -1,75 +0,0 @@
|
||||
From 29dc8ba93237d7d70f5c39c28d74ec9bae0f9c00 Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Sun, 26 Oct 2025 12:53:58 -0400
|
||||
Subject: [PATCH] convert: linux: replace /etc/crypttab /dev/sdX with UUID=
|
||||
|
||||
sles12sp5 installer luks setup will put a /dev/sdX style path
|
||||
in /etc/crypttab. Example:
|
||||
|
||||
$ cat /etc/crypttab
|
||||
cr_sda2 /dev/sda2 none none
|
||||
|
||||
For v2v conversion, switching that path to eg. /dev/vda2 is not enough:
|
||||
initrd rebuild does not work correctly with systemd-cryptsetup,
|
||||
because that new path doesn't exist at v2v conversion time, and
|
||||
the converted guest doesn't boot correctly.
|
||||
|
||||
What we really want is to replace the unstable path with
|
||||
UUID=<luks UUID>, to make this unambiguous. Do that for /dev/sdX
|
||||
paths, where the appliance disk ordering should match, so a
|
||||
vfs_uuid call gives us the UUID we want.
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-93583
|
||||
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
(cherry picked from commit 25b36dd60ada5a924b0d40a13d92c5e693cbe1a8)
|
||||
---
|
||||
convert/convert_linux.ml | 28 +++++++++++++++++++++++++++-
|
||||
1 file changed, 27 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml
|
||||
index d93036f9..4462e6cf 100644
|
||||
--- a/convert/convert_linux.ml
|
||||
+++ b/convert/convert_linux.ml
|
||||
@@ -1165,6 +1165,7 @@ fi
|
||||
let paths = [
|
||||
(* /etc/fstab *)
|
||||
"/files/etc/fstab/*/spec";
|
||||
+ "/files/etc/crypttab/*/device";
|
||||
] in
|
||||
(* Bootloader config *)
|
||||
let paths = paths @ bootloader#augeas_device_patterns in
|
||||
@@ -1199,7 +1200,32 @@ fi
|
||||
PCRE.matches rex_device value then (
|
||||
let device = PCRE.sub 1
|
||||
and part = try PCRE.sub 2 with Not_found -> "" in
|
||||
- "/dev/" ^ replace device ^ part
|
||||
+ let adjusted_dev = "/dev/" ^ replace device ^ part in
|
||||
+
|
||||
+ (* On sles12sp5, the installer puts a non-stable path into
|
||||
+ /etc/crypttab, like /dev/sda2. If we replace it with eg. /dev/vda2,
|
||||
+ and then regenerate dracut initrd, systemd cryptab integration
|
||||
+ doesn't happen correctly, because it all expects /dev/vda2 to
|
||||
+ exist at initrd creation time..
|
||||
+
|
||||
+ We can avoid this by filling in a stable `UUID=<luks UUID>` value.
|
||||
+ This depends on /dev/sdXX in the guest having the same /dev/sdXX
|
||||
+ name in the appliance.
|
||||
+ *)
|
||||
+ if String.starts_with "/etc/crypttab" path &&
|
||||
+ String.starts_with "/dev/sd" value then (
|
||||
+ try
|
||||
+ let uuid = g#vfs_uuid value in
|
||||
+ "UUID=" ^ uuid
|
||||
+ with ex ->
|
||||
+ warning (f_"failed to translate encrypted device name %s to a UUID \
|
||||
+ in /etc/crypttab. This may prevent the guest from booting \
|
||||
+ after conversion. You may have to manually change the file and \
|
||||
+ reconvert. The original error was: %s")
|
||||
+ value (Printexc.to_string ex);
|
||||
+ adjusted_dev
|
||||
+ ) else
|
||||
+ adjusted_dev
|
||||
)
|
||||
else (* doesn't look like a known device name *)
|
||||
value
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,44 +0,0 @@
|
||||
From c80d9e84d1c5c12fd6fb675f99afcf0679a8a585 Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Tue, 10 Feb 2026 08:22:10 -0500
|
||||
Subject: [PATCH] docs: Drop references to virtio-win osinfo usage
|
||||
|
||||
Follow on from libguestfs-common commit that dropped this:
|
||||
|
||||
https://github.com/libguestfs/libguestfs-common/commit/22d586fe9
|
||||
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
(cherry picked from commit 2ddfe18ccd7df423a86790b0505623660fc1ffe3)
|
||||
---
|
||||
docs/virt-v2v.pod | 11 +++--------
|
||||
1 file changed, 3 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index f751f4e7..258fe937 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -1344,9 +1344,9 @@ below.
|
||||
Windows Drivers are installed from the ISO or directory pointed
|
||||
to by the "VIRTIO_WIN" environment variable if present.
|
||||
If the "VIRTIO_WIN" environment variable is absent
|
||||
- (which is the recommended setting), then libosinfo is
|
||||
- consulted first, for driver files that are locally
|
||||
- available on the conversion host.
|
||||
+ (which is the recommended setting), then drivers are
|
||||
+ searched for in /usr/share/virtio-win, as installed
|
||||
+ by the virtio-win RPM.
|
||||
|
||||
|
||||
=head2 RHEL 4: SELinux relabel appears to hang forever
|
||||
@@ -1877,11 +1877,6 @@ succeeds first:
|
||||
|
||||
=over 4
|
||||
|
||||
-=item C<osinfo-db>
|
||||
-
|
||||
-Load osinfo data from the default paths, and attempt to find drivers via
|
||||
-libosinfo lookup. This is the preferred method.
|
||||
-
|
||||
=item F</usr/share/virtio-win/virtio-win.iso>
|
||||
|
||||
The ISO containing virtio drivers for Windows.
|
||||
@ -1,30 +0,0 @@
|
||||
From 61a9ba9a9140573ec2964a6338e76c57c84bbf0a Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Tue, 10 Feb 2026 08:26:41 -0500
|
||||
Subject: [PATCH] docs: update virtio-win exploded tree docs
|
||||
|
||||
The directory in /usr/share/virtio-win is not out of date these
|
||||
days and hasn't been for years. See:
|
||||
|
||||
https://github.com/libguestfs/libguestfs-common/commit/4be37c277
|
||||
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
(cherry picked from commit f10924cdf2f438d0e939efdc6081b8b644a2131a)
|
||||
---
|
||||
docs/virt-v2v.pod | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index 258fe937..04764832 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -1883,8 +1883,7 @@ The ISO containing virtio drivers for Windows.
|
||||
|
||||
=item F</usr/share/virtio-win>
|
||||
|
||||
-The exploded tree of virtio drivers for Windows. This is
|
||||
-usually incomplete, hence the least preferred method.
|
||||
+The exploded tree of virtio drivers for Windows.
|
||||
|
||||
=back
|
||||
|
||||
@ -1,54 +0,0 @@
|
||||
From fbd10145df6d6b903f476895c4b205a0c261e454 Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Tue, 10 Feb 2026 11:42:34 -0500
|
||||
Subject: [PATCH] ocaml-link.sh.in: pass explicit guestfs search path
|
||||
|
||||
Without this, if we use `libguestfs/run` while `ocaml-libguestfs-*`
|
||||
host packages are installed, we get mismatched search path warnings
|
||||
like these, and then linking fails:
|
||||
|
||||
findlib: [WARNING] Package guestfs has multiple definitions in /tmp/libguestfs.git/ocaml/guestfs/META, /usr/lib64/ocaml/guestfs/META
|
||||
findlib: [WARNING] Interface guestfs.cmi occurs in several directories: /usr/lib64/ocaml/guestfs, /tmp/libguestfs.git/ocaml/guestfs
|
||||
|
||||
This change avoids the last warning. There's still lots of spew
|
||||
about `multiple definitions` but it seems harmless.
|
||||
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
(cherry picked from commit 123c3211dfb4fb8949fbdc3967ec51e9eda34a6c)
|
||||
---
|
||||
ocaml-link.sh.in | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/ocaml-link.sh.in b/ocaml-link.sh.in
|
||||
index 4148e8f9..d3c44d10 100755
|
||||
--- a/ocaml-link.sh.in
|
||||
+++ b/ocaml-link.sh.in
|
||||
@@ -41,18 +41,26 @@ while true ; do
|
||||
esac
|
||||
done
|
||||
|
||||
+# Without this, if we use `libguestfs/run` while `ocaml-libguestfs-*`
|
||||
+# host packages are installed, we get mismatched search path warnings
|
||||
+# like these, and then linking fails:
|
||||
+#
|
||||
+# findlib: [WARNING] Package guestfs has multiple definitions in /tmp/libguestfs.git/ocaml/guestfs/META, /usr/lib64/ocaml/guestfs/META
|
||||
+# findlib: [WARNING] Interface guestfs.cmi occurs in several directories: /usr/lib64/ocaml/guestfs, /tmp/libguestfs.git/ocaml/guestfs
|
||||
+guestfs_path=$(@OCAMLFIND@ query guestfs 2>/dev/null)
|
||||
+
|
||||
# Integration with silent rules of automake: print the full command
|
||||
# line option in verbose mode.
|
||||
if [ x"${V:-@AM_DEFAULT_VERBOSITY@}" = x1 ]; then
|
||||
echo "$@" \
|
||||
@OCAML_RUNTIME_VARIANT_PIC_OPTION@ \
|
||||
- -I +guestfs \
|
||||
+ -I "$guestfs_path" \
|
||||
-linkpkg \
|
||||
-cclib "'@LDFLAGS@ $cclib'"
|
||||
fi
|
||||
# NB -cclib must come last.
|
||||
exec "$@" \
|
||||
@OCAML_RUNTIME_VARIANT_PIC_OPTION@ \
|
||||
- -I +guestfs \
|
||||
+ -I "$guestfs_path" \
|
||||
-linkpkg \
|
||||
-cclib "@LDFLAGS@ $cclib"
|
||||
@ -1,85 +0,0 @@
|
||||
From 2723d30596546e92141f45bd302cf895d6233495 Mon Sep 17 00:00:00 2001
|
||||
From: Susant Sahani <ssahani@redhat.com>
|
||||
Date: Tue, 10 Feb 2026 15:15:21 +0530
|
||||
Subject: [PATCH] output: introduce disk_name helper
|
||||
|
||||
Refactor the places where we create "name-sdX" names to use a common
|
||||
helper function.
|
||||
|
||||
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
|
||||
Signed-off-by: Susant Sahani <ssahani@redhat.com>
|
||||
(cherry picked from commit a4b76ca9b5e01e807d39c0a2ba1fe515b854ef82)
|
||||
---
|
||||
output/output.ml | 7 +++++--
|
||||
output/output.mli | 4 ++++
|
||||
output/output_libvirt.ml | 2 +-
|
||||
output/output_openstack.ml | 2 +-
|
||||
4 files changed, 11 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/output/output.ml b/output/output.ml
|
||||
index 7e096278..919a48a4 100644
|
||||
--- a/output/output.ml
|
||||
+++ b/output/output.ml
|
||||
@@ -150,8 +150,11 @@ let output_to_local_file ?name
|
||||
ignore (waitpid [] pid)
|
||||
)
|
||||
|
||||
+let disk_name name i =
|
||||
+ sprintf "%s-sd%s" name (drive_name i)
|
||||
+
|
||||
let disk_path os name i =
|
||||
- let outdisk = sprintf "%s/%s-sd%s" os name (drive_name i) in
|
||||
+ let outdisk = sprintf "%s/%s" os (disk_name name i) in
|
||||
absolute_path outdisk
|
||||
|
||||
let create_local_output_disks dir
|
||||
@@ -214,7 +217,7 @@ let create_local_output_disks dir
|
||||
let uris =
|
||||
List.mapi (
|
||||
fun i _ ->
|
||||
- let export = sprintf "%s-sd%s" output_name (drive_name i) in
|
||||
+ let export = disk_name output_name i in
|
||||
NBD_URI.Unix (socket, Some export)
|
||||
) input_disks in
|
||||
|
||||
diff --git a/output/output.mli b/output/output.mli
|
||||
index fa79bfe1..d63a5d72 100644
|
||||
--- a/output/output.mli
|
||||
+++ b/output/output.mli
|
||||
@@ -121,6 +121,10 @@ val output_to_local_file : ?name:string ->
|
||||
(such as unmounting a host filesystem or removing a host device)
|
||||
depends on the NBD server releasing resources. *)
|
||||
|
||||
+val disk_name : string -> int -> string
|
||||
+(** Return the disk name for the i'th disk,
|
||||
+ eg. 0 => name-sda. *)
|
||||
+
|
||||
val disk_path : string -> string -> int -> string
|
||||
(** For [-o disk|qemu], return the output disk name of the i'th disk,
|
||||
eg. 0 => /path/to/name-sda. *)
|
||||
diff --git a/output/output_libvirt.ml b/output/output_libvirt.ml
|
||||
index 9560d2d3..708de3e0 100644
|
||||
--- a/output/output_libvirt.ml
|
||||
+++ b/output/output_libvirt.ml
|
||||
@@ -189,7 +189,7 @@ module Libvirt_ = struct
|
||||
let doc =
|
||||
create_libvirt_xml ~pool:pool_name source inspect target_meta
|
||||
target_features domcaps_features
|
||||
- (fun i -> output_name ^ "-sd" ^ (drive_name i))
|
||||
+ (disk_name output_name)
|
||||
output_format output_name in
|
||||
|
||||
let tmpfile, chan = Filename.open_temp_file "v2vlibvirt" ".xml" in
|
||||
diff --git a/output/output_openstack.ml b/output/output_openstack.ml
|
||||
index 88a39c68..dd04052e 100644
|
||||
--- a/output/output_openstack.ml
|
||||
+++ b/output/output_openstack.ml
|
||||
@@ -322,7 +322,7 @@ The os-* parameters and environment variables are optional.
|
||||
* something related to the guest name. Cinder volume
|
||||
* names do not need to be unique.
|
||||
*)
|
||||
- let name = sprintf "%s-sd%s" output_name (drive_name i) in
|
||||
+ let name = disk_name output_name i in
|
||||
|
||||
(* Create the cinder volume. *)
|
||||
let id = create_cinder_volume name description size in
|
||||
@ -1,71 +0,0 @@
|
||||
From 8edb5356b40b28f26e3c7f891cf47018e67d4903 Mon Sep 17 00:00:00 2001
|
||||
From: Susant Sahani <ssahani@redhat.com>
|
||||
Date: Tue, 10 Feb 2026 15:15:21 +0530
|
||||
Subject: [PATCH] output: Replace '/' in VM names with '_'
|
||||
|
||||
Add Utils.sanitize_slash function which replaces '/' with '_' in VM
|
||||
names, and use that in the new disk_name function.
|
||||
|
||||
For example, if the VM name is "foo/bar" then the new generated name
|
||||
will be "foo_bar-sda". You can use -on option to choose an output
|
||||
name instead of relying on this.
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-136479
|
||||
Signed-off-by: Susant Sahani <ssahani@redhat.com>
|
||||
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
|
||||
(cherry picked from commit 25161d37484f6f3431446cae7eabef4054752c65)
|
||||
---
|
||||
lib/utils.ml | 3 +++
|
||||
lib/utils.mli | 4 ++++
|
||||
output/output.ml | 1 +
|
||||
output/output.mli | 2 +-
|
||||
4 files changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/utils.ml b/lib/utils.ml
|
||||
index 9da6737c..15af5b1a 100644
|
||||
--- a/lib/utils.ml
|
||||
+++ b/lib/utils.ml
|
||||
@@ -289,3 +289,6 @@ let name_from_disk disk =
|
||||
if name = "" then
|
||||
error (f_"invalid input filename (%s)") disk;
|
||||
name
|
||||
+
|
||||
+let sanitize_slash =
|
||||
+ String.map (fun c -> if c = '/' then '_' else c)
|
||||
diff --git a/lib/utils.mli b/lib/utils.mli
|
||||
index c976a582..40bed0b9 100644
|
||||
--- a/lib/utils.mli
|
||||
+++ b/lib/utils.mli
|
||||
@@ -108,3 +108,7 @@ val name_from_disk : string -> string
|
||||
(** Take a disk name and derive from it a suitable source name.
|
||||
|
||||
Used in particular by [-i disk], [-i ova] and [-i vmx] modes. *)
|
||||
+
|
||||
+val sanitize_slash : string -> string
|
||||
+(** Replace '/' with '_' in guest names for filesystem paths and
|
||||
+ libvirt domain names. *)
|
||||
diff --git a/output/output.ml b/output/output.ml
|
||||
index 919a48a4..ff4b12b1 100644
|
||||
--- a/output/output.ml
|
||||
+++ b/output/output.ml
|
||||
@@ -151,6 +151,7 @@ let output_to_local_file ?name
|
||||
)
|
||||
|
||||
let disk_name name i =
|
||||
+ let name = Utils.sanitize_slash name in
|
||||
sprintf "%s-sd%s" name (drive_name i)
|
||||
|
||||
let disk_path os name i =
|
||||
diff --git a/output/output.mli b/output/output.mli
|
||||
index d63a5d72..3f953010 100644
|
||||
--- a/output/output.mli
|
||||
+++ b/output/output.mli
|
||||
@@ -122,7 +122,7 @@ val output_to_local_file : ?name:string ->
|
||||
depends on the NBD server releasing resources. *)
|
||||
|
||||
val disk_name : string -> int -> string
|
||||
-(** Return the disk name for the i'th disk,
|
||||
+(** Return the sanitized disk name for the i'th disk,
|
||||
eg. 0 => name-sda. *)
|
||||
|
||||
val disk_path : string -> string -> int -> string
|
||||
@ -1,55 +0,0 @@
|
||||
From b0e084027f528bbc42bd4c5a19c6ec441518044a Mon Sep 17 00:00:00 2001
|
||||
From: Susant Sahani <ssahani@redhat.com>
|
||||
Date: Tue, 10 Feb 2026 15:15:27 +0530
|
||||
Subject: [PATCH] output: sanitize guest names in metadata file paths
|
||||
|
||||
Use sanitize_slash for metadata filenames to avoid '/' in paths.
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-136479
|
||||
Signed-off-by: Susant Sahani <ssahani@redhat.com>
|
||||
(cherry picked from commit e02563cfcb0022cdd3a044c6a8e459eeb2c5abf6)
|
||||
---
|
||||
output/output_disk.ml | 2 +-
|
||||
output/output_kubevirt.ml | 2 +-
|
||||
output/output_qemu.ml | 2 +-
|
||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/output/output_disk.ml b/output/output_disk.ml
|
||||
index af0a3fac..dc43d637 100644
|
||||
--- a/output/output_disk.ml
|
||||
+++ b/output/output_disk.ml
|
||||
@@ -105,7 +105,7 @@ module Disk = struct
|
||||
(disk_path output_storage output_name)
|
||||
output_format output_name in
|
||||
|
||||
- let file = output_storage // output_name ^ ".xml" in
|
||||
+ let file = output_storage // (sanitize_slash output_name) ^ ".xml" in
|
||||
with_open_out file (fun chan -> DOM.doc_to_chan chan doc);
|
||||
|
||||
if verbose () then (
|
||||
diff --git a/output/output_kubevirt.ml b/output/output_kubevirt.ml
|
||||
index 8a5ab56d..8b011436 100644
|
||||
--- a/output/output_kubevirt.ml
|
||||
+++ b/output/output_kubevirt.ml
|
||||
@@ -146,7 +146,7 @@ module Kubevirt = struct
|
||||
let doc = create_kubevirt_yaml source inspect target_meta disk_path
|
||||
output_format output_name in
|
||||
|
||||
- let file = output_storage // output_name ^ ".yaml" in
|
||||
+ let file = output_storage // (sanitize_slash output_name) ^ ".yaml" in
|
||||
with_open_out file (fun chan -> YAML.doc_to_chan chan doc);
|
||||
|
||||
if verbose () then (
|
||||
diff --git a/output/output_qemu.ml b/output/output_qemu.ml
|
||||
index 63299423..b9090d86 100644
|
||||
--- a/output/output_qemu.ml
|
||||
+++ b/output/output_qemu.ml
|
||||
@@ -111,7 +111,7 @@ module QEMU = struct
|
||||
(* 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 file = output_storage // (sanitize_slash output_name) ^ ".sh" in
|
||||
let tmpfile = file ^ ".tmp" in
|
||||
On_exit.unlink tmpfile;
|
||||
|
||||
@ -1,27 +0,0 @@
|
||||
From 3f5a9ac841adc8996a74e32659aed4c3fc831c6c Mon Sep 17 00:00:00 2001
|
||||
From: Susant Sahani <ssahani@redhat.com>
|
||||
Date: Tue, 10 Feb 2026 15:15:31 +0530
|
||||
Subject: [PATCH] output: sanitize VM names in libvirt XML
|
||||
|
||||
Prevent domain creation failures when VM names contain '/' characters.
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-136479
|
||||
Signed-off-by: Susant Sahani <ssahani@redhat.com>
|
||||
(cherry picked from commit 1e68923593a7121943f09e67a6b78b902bfeeceb)
|
||||
---
|
||||
output/create_libvirt_xml.ml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/output/create_libvirt_xml.ml b/output/create_libvirt_xml.ml
|
||||
index e4199efe..7471ee5a 100644
|
||||
--- a/output/create_libvirt_xml.ml
|
||||
+++ b/output/create_libvirt_xml.ml
|
||||
@@ -51,7 +51,7 @@ let create_libvirt_xml ?pool source inspect
|
||||
|
||||
List.push_back_list body [
|
||||
Comment generated_by;
|
||||
- e "name" [] [PCData output_name];
|
||||
+ e "name" [] [PCData (Utils.sanitize_slash output_name)];
|
||||
];
|
||||
|
||||
(match source.s_genid with
|
||||
@ -1,62 +0,0 @@
|
||||
From 2666493010b1b82d5b8dbb517c9976727b05184f Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Wed, 11 Feb 2026 19:09:26 -0500
|
||||
Subject: [PATCH] Update common submodule
|
||||
|
||||
Update to fix:
|
||||
https://issues.redhat.com/browse/RHEL-148423
|
||||
|
||||
This pulls in the following commits:
|
||||
|
||||
Cole Robinson (1):
|
||||
virtio-win: Install blnsvr.exe to C:\Windows\Drivers\VirtIO
|
||||
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
(cherry picked from commit b227d493ace2250bbc53a25ce7db42fcf220ba51)
|
||||
---
|
||||
common | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Submodule common 1005f4a6..22b583b9:
|
||||
diff --git a/common/mlcustomize/inject_virtio_win.ml b/common/mlcustomize/inject_virtio_win.ml
|
||||
index 114df064..a2938080 100644
|
||||
--- a/common/mlcustomize/inject_virtio_win.ml
|
||||
+++ b/common/mlcustomize/inject_virtio_win.ml
|
||||
@@ -254,13 +254,10 @@ and inject_qemu_ga ({ g; root } as t) =
|
||||
|
||||
and inject_blnsvr ({ g; root } as t) =
|
||||
(* Copy the files to the guest. *)
|
||||
- let dir, dir_win = Firstboot.firstboot_dir g root in
|
||||
- let dir_win = Option.value dir_win ~default:dir in
|
||||
- let tempdir = sprintf "%s/Temp" dir in
|
||||
- let tempdir_win = sprintf "%s\\Temp" dir_win in
|
||||
- g#mkdir_p tempdir;
|
||||
+ let driverdir = sprintf "%s/Drivers/VirtIO" t.i_windows_systemroot in
|
||||
+ g#mkdir_p driverdir;
|
||||
|
||||
- let files = copy_blnsvr t tempdir in
|
||||
+ let files = copy_blnsvr t driverdir in
|
||||
match files with
|
||||
| [] -> false (* Didn't find or install anything. *)
|
||||
|
||||
@@ -268,7 +265,7 @@ and inject_blnsvr ({ g; root } as t) =
|
||||
* drivers/by-driver). Pick the first.
|
||||
*)
|
||||
| blnsvr :: _ ->
|
||||
- configure_blnsvr t tempdir_win blnsvr;
|
||||
+ configure_blnsvr t driverdir blnsvr;
|
||||
true
|
||||
|
||||
and add_guestor_to_registry t ((g, root) as reg) drv_name drv_pciid =
|
||||
@@ -570,9 +567,9 @@ and configure_qemu_ga t tempdir_win files =
|
||||
|
||||
Firstboot.add_firstboot_powershell t.g t.root "install-qemu-ga" !script
|
||||
|
||||
-and configure_blnsvr t tempdir_win blnsvr =
|
||||
+and configure_blnsvr t driverdir blnsvr =
|
||||
let cmd = sprintf "\
|
||||
@echo off\n\
|
||||
echo Installing %s\n\
|
||||
- \"%s\\%s\" -i\n" blnsvr tempdir_win blnsvr in
|
||||
+ \"%s\\%s\" -i\n" blnsvr driverdir blnsvr in
|
||||
Firstboot.add_firstboot_script t.g t.root "install-blnsvr" cmd
|
||||
@ -1,30 +0,0 @@
|
||||
From 4e06515083d7effdee91195dbf93082e544a6283 Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Mon, 16 Feb 2026 13:58:08 -0500
|
||||
Subject: [PATCH] convert: linux: properly match /etc/crypttab
|
||||
|
||||
I broke b227d493ace2250bbc53a25ce7db42fcf220ba51 during review
|
||||
and neglected to retest. We need to match an augeas style
|
||||
path when using starts_with
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-93583
|
||||
|
||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
||||
(cherry picked from commit 109bc1ab3bd2f6b9d73616c546aeceb0631159be)
|
||||
---
|
||||
convert/convert_linux.ml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml
|
||||
index 4462e6cf..484148ab 100644
|
||||
--- a/convert/convert_linux.ml
|
||||
+++ b/convert/convert_linux.ml
|
||||
@@ -1212,7 +1212,7 @@ fi
|
||||
This depends on /dev/sdXX in the guest having the same /dev/sdXX
|
||||
name in the appliance.
|
||||
*)
|
||||
- if String.starts_with "/etc/crypttab" path &&
|
||||
+ if String.starts_with "/files/etc/crypttab" path &&
|
||||
String.starts_with "/dev/sd" value then (
|
||||
try
|
||||
let uuid = g#vfs_uuid value in
|
||||
@ -1,302 +0,0 @@
|
||||
From f937f290a4c032c971ad78d1b07e8aefe15eab8a Mon Sep 17 00:00:00 2001
|
||||
From: sarika <sarika@platform9.com>
|
||||
Date: Tue, 9 Dec 2025 16:12:14 +0530
|
||||
Subject: [PATCH] Add --no-fstrim option to disable fstrim during conversion
|
||||
|
||||
In particular, fstrim on NTFS is a serialized operation which can be
|
||||
very slow on large partitions.
|
||||
|
||||
Closes: https://github.com/libguestfs/virt-v2v/pull/121
|
||||
Fixes: https://redhat.atlassian.net/browse/RHEL-164271
|
||||
|
||||
RWMJ: Added documentation, a test, and larger commit message.
|
||||
(cherry picked from commit 251639458907f06148ecdd5acbac5c43136e7662)
|
||||
---
|
||||
convert/convert.ml | 10 ++++++--
|
||||
convert/convert.mli | 1 +
|
||||
docs/virt-v2v.pod | 6 +++++
|
||||
in-place/in_place.ml | 5 ++++
|
||||
in-place/virt-v2v-in-place.pod | 4 +++
|
||||
inspector/inspector.ml | 6 +++++
|
||||
inspector/virt-v2v-inspector.pod | 2 ++
|
||||
tests/Makefile.am | 2 ++
|
||||
tests/test-no-fstrim.sh | 44 ++++++++++++++++++++++++++++++++
|
||||
v2v/v2v.ml | 6 +++++
|
||||
10 files changed, 84 insertions(+), 2 deletions(-)
|
||||
create mode 100755 tests/test-no-fstrim.sh
|
||||
|
||||
diff --git a/convert/convert.ml b/convert/convert.ml
|
||||
index eb51e9b9..1ff87e43 100644
|
||||
--- a/convert/convert.ml
|
||||
+++ b/convert/convert.ml
|
||||
@@ -40,6 +40,7 @@ type options = {
|
||||
smp : int option;
|
||||
static_ips : static_ip list;
|
||||
customize_ops : Customize_cmdline.ops;
|
||||
+ no_fstrim : bool;
|
||||
}
|
||||
|
||||
(* Mountpoint stats, used for free space estimation. *)
|
||||
@@ -157,8 +158,13 @@ let rec convert input_disks options source =
|
||||
* because unused blocks are marked in the overlay and thus do
|
||||
* not have to be copied.
|
||||
*)
|
||||
- message (f_"Mapping filesystem data to avoid copying unused and blank areas");
|
||||
- do_fstrim g inspect;
|
||||
+ if not options.no_fstrim then (
|
||||
+ message
|
||||
+ (f_"Mapping filesystem data to avoid copying unused and blank areas");
|
||||
+ do_fstrim g inspect
|
||||
+ ) else (
|
||||
+ message (f_"Skipping fstrim (--no-fstrim specified)")
|
||||
+ );
|
||||
|
||||
(* Check (fsck) the filesystems after conversion. *)
|
||||
g#umount_all ();
|
||||
diff --git a/convert/convert.mli b/convert/convert.mli
|
||||
index f2a8d662..faf671fc 100644
|
||||
--- a/convert/convert.mli
|
||||
+++ b/convert/convert.mli
|
||||
@@ -26,6 +26,7 @@ type options = {
|
||||
smp : int option; (** [--smp] option *)
|
||||
static_ips : Types.static_ip list; (** [--mac :ip:] option *)
|
||||
customize_ops : Customize_cmdline.ops; (** virt-customize options *)
|
||||
+ no_fstrim : bool; (** [--no-fstrim] option *)
|
||||
}
|
||||
(** Command line options that get passed through to the conversion code. *)
|
||||
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index eb550da0..5c191889 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -468,6 +468,10 @@ are mapped to C<out>.
|
||||
|
||||
See L</Networks and bridges> below.
|
||||
|
||||
+=item B<--no-fstrim>
|
||||
+
|
||||
+Do not trim the filesystem. See L</Trimming> below.
|
||||
+
|
||||
=item B<-o> B<disk>
|
||||
|
||||
This is the same as I<-o local>.
|
||||
@@ -1026,6 +1030,8 @@ fstrim support in the Linux kernel is improving gradually, so over
|
||||
time some of these restrictions will be lifted and virt-v2v will work
|
||||
faster.
|
||||
|
||||
+Use I<--no-fstrim> to disable trimming.
|
||||
+
|
||||
=head2 Free space for conversion
|
||||
|
||||
=head3 Free space in the guest
|
||||
diff --git a/in-place/in_place.ml b/in-place/in_place.ml
|
||||
index 6c2790af..a96d55d9 100644
|
||||
--- a/in-place/in_place.ml
|
||||
+++ b/in-place/in_place.ml
|
||||
@@ -151,6 +151,7 @@ let rec main () =
|
||||
let set_root_choice = Types.set_root_choice root_choice in
|
||||
|
||||
(* Other options that we handle here. *)
|
||||
+ let no_fstrim = ref false in
|
||||
let print_source = ref false in
|
||||
|
||||
let input_modes =
|
||||
@@ -185,6 +186,8 @@ let rec main () =
|
||||
s_"Map network ‘in’ to ‘out’";
|
||||
[ S 'O' ], Getopt.String ("output.xml", set_output_xml_option),
|
||||
s_"Set the output filename";
|
||||
+ [ L"no-fstrim" ], Getopt.Set no_fstrim,
|
||||
+ s_"Don't trim filesystems before conversion";
|
||||
[ L"print-source" ], Getopt.Set print_source,
|
||||
s_"Print source and stop";
|
||||
[ L"root" ], Getopt.String ("ask|... ", set_root_choice),
|
||||
@@ -257,6 +260,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 no_fstrim = !no_fstrim in
|
||||
let memsize = !memsize in
|
||||
let output_xml = !output_xml in
|
||||
let print_source = !print_source in
|
||||
@@ -329,6 +333,7 @@ read the man page virt-v2v-in-place(1).
|
||||
smp;
|
||||
static_ips;
|
||||
customize_ops;
|
||||
+ no_fstrim;
|
||||
} in
|
||||
|
||||
(* Before starting the input module, check there is sufficient
|
||||
diff --git a/in-place/virt-v2v-in-place.pod b/in-place/virt-v2v-in-place.pod
|
||||
index 7c0a4d90..ac4142ae 100644
|
||||
--- a/in-place/virt-v2v-in-place.pod
|
||||
+++ b/in-place/virt-v2v-in-place.pod
|
||||
@@ -239,6 +239,10 @@ are mapped to C<out>.
|
||||
|
||||
See L<virt-v2v(1)/Networks and bridges>.
|
||||
|
||||
+=item B<--no-fstrim>
|
||||
+
|
||||
+Do not trim the filesystem. See L<virt-v2v(1)/Trimming>.
|
||||
+
|
||||
=item B<-O> output.xml
|
||||
|
||||
=item B<-O ->
|
||||
diff --git a/inspector/inspector.ml b/inspector/inspector.ml
|
||||
index 752a5c1c..137d5f61 100644
|
||||
--- a/inspector/inspector.ml
|
||||
+++ b/inspector/inspector.ml
|
||||
@@ -70,6 +70,8 @@ let rec main () =
|
||||
let smp = ref None in
|
||||
let set_smp arg = smp := Some arg in
|
||||
|
||||
+ let no_fstrim = ref false in
|
||||
+
|
||||
let network_map = Networks.create () in
|
||||
let static_ips = ref [] in
|
||||
let rec add_network str =
|
||||
@@ -171,6 +173,8 @@ let rec main () =
|
||||
s_"Map NIC to network or bridge or assign static IP";
|
||||
[ S 'm'; L"memsize" ], Getopt.Int ("mb", set_memsize),
|
||||
s_"Set memory size";
|
||||
+ [ L"no-fstrim" ], Getopt.Set no_fstrim,
|
||||
+ s_"Don't trim filesystems before conversion";
|
||||
[ S 'n'; L"network" ], Getopt.String ("in:out", add_network),
|
||||
s_"Map network ‘in’ to ‘out’";
|
||||
[ S 'O' ], Getopt.String ("output.xml", set_output_file_option),
|
||||
@@ -233,6 +237,7 @@ read the man page virt-v2v-inspector(1).
|
||||
| Some transport ->
|
||||
error (f_"unknown input transport ‘-it %s’") transport in
|
||||
let memsize = !memsize in
|
||||
+ let no_fstrim = !no_fstrim in
|
||||
let root_choice = !root_choice in
|
||||
let smp = !smp in
|
||||
let static_ips = !static_ips in
|
||||
@@ -293,6 +298,7 @@ read the man page virt-v2v-inspector(1).
|
||||
smp;
|
||||
static_ips;
|
||||
customize_ops;
|
||||
+ no_fstrim;
|
||||
} in
|
||||
|
||||
(* Before starting the input module, check there is sufficient
|
||||
diff --git a/inspector/virt-v2v-inspector.pod b/inspector/virt-v2v-inspector.pod
|
||||
index 26770459..65ce71ce 100644
|
||||
--- a/inspector/virt-v2v-inspector.pod
|
||||
+++ b/inspector/virt-v2v-inspector.pod
|
||||
@@ -202,6 +202,8 @@ virt-v2v-inspector.
|
||||
|
||||
=item B<--network> ...
|
||||
|
||||
+=item B<--no-fstrim>
|
||||
+
|
||||
=item B<-q>
|
||||
|
||||
=item B<--quiet>
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||
index 8e142b09..7182f62b 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -92,6 +92,7 @@ TESTS = \
|
||||
test-mac.sh \
|
||||
test-machine-readable.sh \
|
||||
test-networks-and-bridges.sh \
|
||||
+ test-no-fstrim.sh \
|
||||
test-o-glance.sh \
|
||||
test-o-kubevirt-fedora.sh \
|
||||
test-o-kubevirt-oo-disk.sh \
|
||||
@@ -291,6 +292,7 @@ EXTRA_DIST += \
|
||||
test-machine-readable.sh \
|
||||
test-networks-and-bridges-expected.xml \
|
||||
test-networks-and-bridges.sh \
|
||||
+ test-no-fstrim.sh \
|
||||
test-o-glance.sh \
|
||||
test-o-kubevirt-fedora.sh \
|
||||
test-o-kubevirt-fedora.yaml.expected \
|
||||
diff --git a/tests/test-no-fstrim.sh b/tests/test-no-fstrim.sh
|
||||
new file mode 100755
|
||||
index 00000000..ba84ad96
|
||||
--- /dev/null
|
||||
+++ b/tests/test-no-fstrim.sh
|
||||
@@ -0,0 +1,44 @@
|
||||
+#!/bin/bash -
|
||||
+# libguestfs virt-v2v test script
|
||||
+# Copyright (C) 2014-2026 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 --no-fstrim option.
|
||||
+
|
||||
+source ./functions.sh
|
||||
+set -e
|
||||
+set -x
|
||||
+
|
||||
+skip_if_skipped
|
||||
+requires test -s ../test-data/phony-guests/windows.img
|
||||
+
|
||||
+export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools"
|
||||
+
|
||||
+d=test-no-fstrim.d
|
||||
+rm -rf $d
|
||||
+cleanup_fn rm -rf $d
|
||||
+mkdir $d
|
||||
+
|
||||
+$VG virt-v2v --debug-gc \
|
||||
+ -i disk ../test-data/phony-guests/windows.img \
|
||||
+ --no-fstrim \
|
||||
+ -o local -os $d
|
||||
+
|
||||
+# Test the libvirt XML metadata and a disk was created.
|
||||
+test -f $d/windows.xml
|
||||
+test -f $d/windows-sda
|
||||
+
|
||||
+cat $d/windows.xml
|
||||
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
|
||||
index dd224b40..480fa81a 100644
|
||||
--- a/v2v/v2v.ml
|
||||
+++ b/v2v/v2v.ml
|
||||
@@ -80,6 +80,8 @@ let rec main () =
|
||||
let smp = ref None in
|
||||
let set_smp arg = smp := Some arg in
|
||||
|
||||
+ let no_fstrim = ref false in
|
||||
+
|
||||
let network_map = Networks.create () in
|
||||
let static_ips = ref [] in
|
||||
let rec add_network str =
|
||||
@@ -242,6 +244,8 @@ let rec main () =
|
||||
s_"Use password from file to connect to output hypervisor";
|
||||
[ M"os" ], Getopt.String ("storage", set_string_option_once "-os" output_storage),
|
||||
s_"Set output storage location";
|
||||
+ [ L"no-fstrim" ], Getopt.Set no_fstrim,
|
||||
+ s_"Don't trim filesystems before conversion";
|
||||
[ L"parallel" ], Getopt.Set_int ("N", parallel),
|
||||
s_"Run up to N instances of nbdcopy in parallel";
|
||||
[ L"print-source" ], Getopt.Set print_source,
|
||||
@@ -324,6 +328,7 @@ read the man page virt-v2v(1).
|
||||
| Some transport ->
|
||||
error (f_"unknown input transport ‘-it %s’") transport in
|
||||
let memsize = !memsize in
|
||||
+ let no_fstrim = !no_fstrim in
|
||||
let output_alloc =
|
||||
match !output_alloc with
|
||||
| `Not_set | `Sparse -> Types.Sparse
|
||||
@@ -440,6 +445,7 @@ read the man page virt-v2v(1).
|
||||
smp;
|
||||
static_ips;
|
||||
customize_ops;
|
||||
+ no_fstrim;
|
||||
} in
|
||||
|
||||
(* Before starting the input module, check there is sufficient
|
||||
4
sources
4
sources
@ -1,2 +1,2 @@
|
||||
SHA512 (virt-v2v-2.10.0.tar.gz) = 035f2181c1cc5f482e96d3e21b513b95939ca224d71ac6ad938842d5af5d60ef07db1600d2ccb609dc2042b1c74088f6f39ffbe595cb51e80278ecb50c314515
|
||||
SHA512 (virt-v2v-2.10.0.tar.gz.sig) = cb6301224ef00577a9cd0fc8fa504e583eb447341bd3849e6854f2d78ae72ca39bca68b70f30efd3d1d64480acf161c5e4bc9ba943595ef4dd2a654c3268aa66
|
||||
SHA512 (virt-v2v-2.11.5.tar.gz) = f28cd95712e155536d0b3f04fd11cbbe10051bce354d76fd940f5e11b95467b26f11f0fb45d17c2ef1c0b74e82858a01d42621b6d954bfc5de3da328eb073b47
|
||||
SHA512 (virt-v2v-2.11.5.tar.gz.sig) = e8c9fef0db34c34cf2429792f5f8a0a8403d61d33d211878d8145e649e0216b0ed2fc0ccc6f353fc2def94435515743f570dad2d5dd9ad56e4c8ac4b491bd979
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
%global verify_tarball_signature 1
|
||||
|
||||
# The source directory.
|
||||
%global source_directory 2.10-stable
|
||||
%global source_directory 2.11-development
|
||||
|
||||
%if !0%{?rhel}
|
||||
# Optional features enabled in this build for Fedora.
|
||||
@ -44,8 +44,8 @@ ExclusiveArch: x86_64
|
||||
|
||||
Name: virt-v2v
|
||||
Epoch: 1
|
||||
Version: 2.10.0
|
||||
Release: 9%{?dist}
|
||||
Version: 2.11.5
|
||||
Release: 1%{?dist}
|
||||
Summary: Convert a virtual machine to run on KVM
|
||||
|
||||
License: GPL-2.0-or-later AND LGPL-2.0-or-later
|
||||
@ -62,40 +62,19 @@ Source2: libguestfs.keyring
|
||||
Source3: copy-patches.sh
|
||||
|
||||
# Patches are maintained in the following repository:
|
||||
# https://github.com/libguestfs/virt-v2v/commits/rhel-10.2
|
||||
# https://github.com/libguestfs/virt-v2v/commits/rhel-10.3
|
||||
|
||||
# Patches.
|
||||
Patch0001: 0001-docs-virt-v2v.pod-Document-Windows-vTPM-and-BitLocke.patch
|
||||
Patch0002: 0002-input-ssh.ml-Add-debugging-around-remote_file_exists.patch
|
||||
Patch0003: 0003-input-ssh.ml-Fix-Ssh.remote_file_exists.patch
|
||||
Patch0004: 0004-Update-common-submodule.patch
|
||||
Patch0005: 0005-v2v-Enhance-inspection-with-filesystems-information.patch
|
||||
Patch0006: 0006-inspector-Enhance-virt-v2v-inspector-output-with-fil.patch
|
||||
Patch0007: 0007-convert-convert_linux.ml-Add-debian-12-UEFI.patch
|
||||
Patch0008: 0008-input-vcenter-double-uri_encode-dcPath-and-dsName.patch
|
||||
Patch0009: 0009-lib-Replace-nbdkit-file-cache-none-with-reduce-memor.patch
|
||||
Patch0010: 0010-convert-convert_linux.ml-Condense-device-regex-handl.patch
|
||||
Patch0011: 0011-convert-linux-replace-etc-crypttab-dev-sdX-with-UUID.patch
|
||||
Patch0012: 0012-build-replace-AM_GNU_GETTEXT-with-simpler-LIBINTL-ch.patch
|
||||
Patch0013: 0013-docs-Drop-references-to-virtio-win-osinfo-usage.patch
|
||||
Patch0014: 0014-docs-update-virtio-win-exploded-tree-docs.patch
|
||||
Patch0015: 0015-ocaml-link.sh.in-pass-explicit-guestfs-search-path.patch
|
||||
Patch0016: 0016-output-introduce-disk_name-helper.patch
|
||||
Patch0017: 0017-output-Replace-in-VM-names-with-_.patch
|
||||
Patch0018: 0018-output-sanitize-guest-names-in-metadata-file-paths.patch
|
||||
Patch0019: 0019-output-sanitize-VM-names-in-libvirt-XML.patch
|
||||
Patch0020: 0020-RHEL-Fixes-for-libguestfs-winsupport.patch
|
||||
Patch0021: 0021-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch
|
||||
Patch0022: 0022-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch
|
||||
Patch0023: 0023-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch
|
||||
Patch0024: 0024-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
|
||||
Patch0025: 0025-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch
|
||||
Patch0026: 0026-RHEL-tests-Remove-btrfs-test.patch
|
||||
Patch0027: 0027-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch
|
||||
Patch0028: 0028-RHEL-output-output.ml-Remove-reduce-memory-pressure-.patch
|
||||
Patch0029: 0029-Update-common-submodule.patch
|
||||
Patch0030: 0030-convert-linux-properly-match-etc-crypttab.patch
|
||||
Patch0031: 0031-Add-no-fstrim-option-to-disable-fstrim-during-conver.patch
|
||||
Patch0001: 0001-RHEL-Update-v2v-Enhance-inspection-with-filesystems-.patch
|
||||
Patch0002: 0002-RHEL-Fixes-for-libguestfs-winsupport.patch
|
||||
Patch0003: 0003-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch
|
||||
Patch0004: 0004-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch
|
||||
Patch0005: 0005-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch
|
||||
Patch0006: 0006-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
|
||||
Patch0007: 0007-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch
|
||||
Patch0008: 0008-RHEL-tests-Remove-btrfs-test.patch
|
||||
Patch0009: 0009-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch
|
||||
Patch0010: 0010-RHEL-output-output.ml-Remove-reduce-memory-pressure-.patch
|
||||
|
||||
BuildRequires: autoconf, automake, libtool
|
||||
BuildRequires: make
|
||||
@ -106,6 +85,7 @@ BuildRequires: perl(IPC::Run3)
|
||||
BuildRequires: gcc
|
||||
BuildRequires: ocaml >= 4.08
|
||||
|
||||
# In Fedora this is: libguestfs-devel >= 1:1.59.2-1
|
||||
BuildRequires: libguestfs-devel >= 1:1.58.1-2
|
||||
BuildRequires: augeas-devel
|
||||
BuildRequires: bash-completion
|
||||
@ -152,6 +132,7 @@ BuildRequires: glibc-static
|
||||
BuildRequires: gnupg2
|
||||
%endif
|
||||
|
||||
# In Fedora this is: libguestfs%%{?_isa} >= 1:1.59.2-1
|
||||
Requires: libguestfs%{?_isa} >= 1:1.58.1-2
|
||||
Requires: guestfs-tools >= 1.54
|
||||
|
||||
@ -401,6 +382,19 @@ done
|
||||
|
||||
|
||||
%changelog
|
||||
* Mon Apr 13 2026 Richard W.M. Jones <rjones@redhat.com> - 1:2.11.5-1
|
||||
- Rebase to virt-v2v 2.11.5
|
||||
Synchronize spec file with Fedora
|
||||
resolves: RHEL-153361
|
||||
- Fixes incorrect driver location for Windows 2008 SP2
|
||||
resolves: RHEL-159888
|
||||
- Create sentinel file after all firstboot scripts have finished running
|
||||
resolves: RHEL-152939
|
||||
- Obey cgroups when computing SMP
|
||||
resolves: RHEL-152766
|
||||
- Fix encrypted Ubuntu guest fail to boot after conversion
|
||||
resolves: RHEL-137121
|
||||
|
||||
* Fri Apr 03 2026 Richard W.M. Jones <rjones@redhat.com> - 1:2.10.0-9
|
||||
- Add --no-fstrim option
|
||||
resolves: RHEL-164271
|
||||
|
||||
Loading…
Reference in New Issue
Block a user