import virt-v2v-1.42.0-18.module+el8.6.0+13447+4b5d0856
This commit is contained in:
commit
0982042d86
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
SOURCES/RHEV-Application-Provisioning-Tool.exe_4.43-5
|
||||
SOURCES/libguestfs.keyring
|
||||
SOURCES/rhsrvany-fd659e77cdd9da484fdc9dcbe0605c62ec26fa30.tar.gz
|
||||
SOURCES/rhsrvany.exe
|
||||
SOURCES/virt-v2v-1.42.0.tar.gz
|
5
.virt-v2v.metadata
Normal file
5
.virt-v2v.metadata
Normal file
@ -0,0 +1,5 @@
|
||||
130adbc011dc0af736465b813c2b22a600c128c1 SOURCES/RHEV-Application-Provisioning-Tool.exe_4.43-5
|
||||
1bbc40f501a7fef9eef2a39b701a71aee2fea7c4 SOURCES/libguestfs.keyring
|
||||
136ff75deb496e48eb448bc4ae156f3911464a90 SOURCES/rhsrvany-fd659e77cdd9da484fdc9dcbe0605c62ec26fa30.tar.gz
|
||||
2bd96e478fc004cd323b5bd754c856641877dac6 SOURCES/rhsrvany.exe
|
||||
bdbdc7cca87735af64f7e99c050ead24fa92aa7d SOURCES/virt-v2v-1.42.0.tar.gz
|
@ -0,0 +1,41 @@
|
||||
From 2ab37349cf37d0ffdb9929ca24c2a024600a4848 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Thu, 21 May 2020 13:32:21 +0200
|
||||
Subject: [PATCH] libvirt: make use of libvirt's default auth handler
|
||||
(RHBZ#1838425)
|
||||
|
||||
Use the default libvirt authentication handler as base for ours,
|
||||
overriding it with our callback only in case we have a password to
|
||||
supply.
|
||||
|
||||
(cherry picked from commit ce66cac50179baf2fb8b404f7eba49048c7819b0)
|
||||
---
|
||||
v2v/libvirt_utils.ml | 12 ++++++++----
|
||||
1 file changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/v2v/libvirt_utils.ml b/v2v/libvirt_utils.ml
|
||||
index 7df17b29..4d0b8639 100644
|
||||
--- a/v2v/libvirt_utils.ml
|
||||
+++ b/v2v/libvirt_utils.ml
|
||||
@@ -33,10 +33,14 @@ let auth_for_password_file ?password_file () =
|
||||
) creds
|
||||
in
|
||||
|
||||
- {
|
||||
- Libvirt.Connect.credtype = [ Libvirt.Connect.CredentialPassphrase ];
|
||||
- cb = auth_fn;
|
||||
- }
|
||||
+ let base_auth = Libvirt.Connect.get_auth_default () in
|
||||
+
|
||||
+ if password_file = None then
|
||||
+ base_auth
|
||||
+ else
|
||||
+ { base_auth with
|
||||
+ cb = auth_fn;
|
||||
+ }
|
||||
|
||||
let get_domain conn name =
|
||||
let dom =
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,34 @@
|
||||
From 96ea18db4a4f2e336145553c0fbbba59ede2221e Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 30 Mar 2020 14:34:43 +0100
|
||||
Subject: [PATCH 1/4] options: Use new cryptsetup-open API if available.
|
||||
|
||||
Fall back to luks-open if we're using libguestfs <= 1.43.1.
|
||||
---
|
||||
options/decrypt.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/options/decrypt.c b/options/decrypt.c
|
||||
index 683cf5e..d868f70 100644
|
||||
--- a/common/options/decrypt.c
|
||||
+++ b/common/options/decrypt.c
|
||||
@@ -97,11 +97,15 @@ inspect_do_decrypt (guestfs_h *g, struct key_store *ks)
|
||||
|
||||
/* Try each key in turn. */
|
||||
for (j = 0; keys[j] != NULL; ++j) {
|
||||
- /* XXX Should we call guestfs_luks_open_ro if readonly flag
|
||||
+ /* XXX Should we set GUESTFS_CRYPTSETUP_OPEN_READONLY if readonly
|
||||
* is set? This might break 'mount_ro'.
|
||||
*/
|
||||
guestfs_push_error_handler (g, NULL, NULL);
|
||||
+#ifdef GUESTFS_HAVE_CRYPTSETUP_OPEN
|
||||
+ r = guestfs_cryptsetup_open (g, partitions[i], keys[j], mapname, -1);
|
||||
+#else
|
||||
r = guestfs_luks_open (g, partitions[i], keys[j], mapname);
|
||||
+#endif
|
||||
guestfs_pop_error_handler (g);
|
||||
if (r == 0)
|
||||
goto opened;
|
||||
--
|
||||
2.18.4
|
||||
|
@ -0,0 +1,214 @@
|
||||
From e04f4d6aa0e94a61b40fa6b10a5274ea89cd96a1 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Mon, 25 May 2020 16:52:07 +0200
|
||||
Subject: [PATCH] -i libvirt: print URI without connecting (RHBZ#1839917)
|
||||
|
||||
Pass (again) around the libvirt URI string in the various input_libvirt
|
||||
subclasses so that input_libvirt#as_options does not need to connect to
|
||||
print the connection URI.
|
||||
|
||||
As related change: pass input_conn as non-optional string parameter in
|
||||
classes that require one (all but input_libvirt_other, basically). This
|
||||
avoids the need for extra checks.
|
||||
|
||||
(cherry picked from commit 86d87563ee03e86ca9abdcad4f674af66a883006)
|
||||
---
|
||||
v2v/input_libvirt.ml | 10 +++++-----
|
||||
v2v/input_libvirt_other.ml | 12 ++++++++----
|
||||
v2v/input_libvirt_other.mli | 4 ++--
|
||||
v2v/input_libvirt_vcenter_https.ml | 4 ++--
|
||||
v2v/input_libvirt_vcenter_https.mli | 2 +-
|
||||
v2v/input_libvirt_vddk.ml | 9 ++-------
|
||||
v2v/input_libvirt_vddk.mli | 4 ++--
|
||||
v2v/input_libvirt_xen_ssh.ml | 4 ++--
|
||||
v2v/input_libvirt_xen_ssh.mli | 2 +-
|
||||
9 files changed, 25 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git a/v2v/input_libvirt.ml b/v2v/input_libvirt.ml
|
||||
index cd5f351c..352fae94 100644
|
||||
--- a/v2v/input_libvirt.ml
|
||||
+++ b/v2v/input_libvirt.ml
|
||||
@@ -53,22 +53,22 @@ let input_libvirt input_conn input_password input_transport guest =
|
||||
|
||||
| Some _, None, _ (* No scheme? *)
|
||||
| Some _, Some "", _ ->
|
||||
- Input_libvirt_other.input_libvirt_other libvirt_conn guest
|
||||
+ Input_libvirt_other.input_libvirt_other libvirt_conn ?input_conn guest
|
||||
|
||||
(* vCenter over https. *)
|
||||
| Some server, Some ("esx"|"gsx"|"vpx"), None ->
|
||||
Input_libvirt_vcenter_https.input_libvirt_vcenter_https
|
||||
- libvirt_conn input_password parsed_uri server guest
|
||||
+ libvirt_conn orig_uri input_password parsed_uri server guest
|
||||
|
||||
(* vCenter or ESXi using nbdkit vddk plugin *)
|
||||
| Some server, Some ("esx"|"gsx"|"vpx"), Some (`VDDK vddk_options) ->
|
||||
Input_libvirt_vddk.input_libvirt_vddk
|
||||
- libvirt_conn input_conn input_password vddk_options parsed_uri guest
|
||||
+ libvirt_conn orig_uri input_password vddk_options parsed_uri guest
|
||||
|
||||
(* Xen over SSH *)
|
||||
| Some server, Some "xen+ssh", _ ->
|
||||
Input_libvirt_xen_ssh.input_libvirt_xen_ssh
|
||||
- libvirt_conn input_password parsed_uri server guest
|
||||
+ libvirt_conn orig_uri input_password parsed_uri server guest
|
||||
|
||||
(* Old virt-v2v also supported qemu+ssh://. However I am
|
||||
* deliberately not supporting this in new virt-v2v. Don't
|
||||
@@ -79,6 +79,6 @@ let input_libvirt input_conn input_password input_transport guest =
|
||||
| Some _, Some _, _ ->
|
||||
warning (f_"no support for remote libvirt connections to '-ic %s'. The conversion may fail when it tries to read the source disks.")
|
||||
orig_uri;
|
||||
- Input_libvirt_other.input_libvirt_other libvirt_conn guest
|
||||
+ Input_libvirt_other.input_libvirt_other libvirt_conn ?input_conn guest
|
||||
|
||||
let () = Modules_list.register_input_module "libvirt"
|
||||
diff --git a/v2v/input_libvirt_other.ml b/v2v/input_libvirt_other.ml
|
||||
index e00944db..6a19ae52 100644
|
||||
--- a/v2v/input_libvirt_other.ml
|
||||
+++ b/v2v/input_libvirt_other.ml
|
||||
@@ -40,12 +40,16 @@ let error_if_libvirt_does_not_support_json_backingfile () =
|
||||
error (f_"because of libvirt bug https://bugzilla.redhat.com/1134878 you must EITHER upgrade to libvirt >= 2.1.0 OR set this environment variable:\n\nexport LIBGUESTFS_BACKEND=direct\n\nand then rerun the virt-v2v command.")
|
||||
|
||||
(* Superclass. *)
|
||||
-class virtual input_libvirt libvirt_conn guest =
|
||||
+class virtual input_libvirt libvirt_conn ?input_conn guest =
|
||||
object (self)
|
||||
inherit input
|
||||
|
||||
method as_options =
|
||||
- sprintf "-i libvirt -ic %s %s" (Libvirt.Connect.get_uri self#conn) guest
|
||||
+ sprintf "-i libvirt%s %s"
|
||||
+ (match input_conn with
|
||||
+ | None -> ""
|
||||
+ | Some uri -> " -ic " ^ uri)
|
||||
+ guest
|
||||
|
||||
method private conn : Libvirt.rw Libvirt.Connect.t =
|
||||
Lazy.force libvirt_conn
|
||||
@@ -54,9 +58,9 @@ end
|
||||
(* Subclass specialized for handling anything that's *not* VMware vCenter
|
||||
* or Xen.
|
||||
*)
|
||||
-class input_libvirt_other libvirt_conn guest =
|
||||
+class input_libvirt_other libvirt_conn ?input_conn guest =
|
||||
object (self)
|
||||
- inherit input_libvirt libvirt_conn guest
|
||||
+ inherit input_libvirt libvirt_conn ?input_conn guest
|
||||
|
||||
method source ?bandwidth () =
|
||||
debug "input_libvirt_other: source ()";
|
||||
diff --git a/v2v/input_libvirt_other.mli b/v2v/input_libvirt_other.mli
|
||||
index c528c3ee..ae2c0c6d 100644
|
||||
--- a/v2v/input_libvirt_other.mli
|
||||
+++ b/v2v/input_libvirt_other.mli
|
||||
@@ -20,11 +20,11 @@
|
||||
|
||||
val error_if_libvirt_does_not_support_json_backingfile : unit -> unit
|
||||
|
||||
-class virtual input_libvirt : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> object
|
||||
+class virtual input_libvirt : Libvirt.rw Libvirt.Connect.t Lazy.t -> ?input_conn:string -> string -> object
|
||||
method precheck : unit -> unit
|
||||
method as_options : string
|
||||
method virtual source : ?bandwidth:Types.bandwidth -> unit -> Types.source * Types.source_disk list
|
||||
method private conn : Libvirt.rw Libvirt.Connect.t
|
||||
end
|
||||
|
||||
-val input_libvirt_other : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> Types.input
|
||||
+val input_libvirt_other : Libvirt.rw Libvirt.Connect.t Lazy.t -> ?input_conn:string -> string -> Types.input
|
||||
diff --git a/v2v/input_libvirt_vcenter_https.ml b/v2v/input_libvirt_vcenter_https.ml
|
||||
index 77bc315d..ed2e5eed 100644
|
||||
--- a/v2v/input_libvirt_vcenter_https.ml
|
||||
+++ b/v2v/input_libvirt_vcenter_https.ml
|
||||
@@ -32,9 +32,9 @@ open Printf
|
||||
|
||||
(* Subclass specialized for handling VMware vCenter over https. *)
|
||||
class input_libvirt_vcenter_https
|
||||
- libvirt_conn input_password parsed_uri server guest =
|
||||
+ libvirt_conn input_conn input_password parsed_uri server guest =
|
||||
object (self)
|
||||
- inherit input_libvirt libvirt_conn guest
|
||||
+ inherit input_libvirt libvirt_conn ~input_conn guest
|
||||
|
||||
val mutable dcPath = ""
|
||||
|
||||
diff --git a/v2v/input_libvirt_vcenter_https.mli b/v2v/input_libvirt_vcenter_https.mli
|
||||
index c2e0f3fe..a12a9815 100644
|
||||
--- a/v2v/input_libvirt_vcenter_https.mli
|
||||
+++ b/v2v/input_libvirt_vcenter_https.mli
|
||||
@@ -18,4 +18,4 @@
|
||||
|
||||
(** [-i libvirt] when the source is VMware vCenter *)
|
||||
|
||||
-val input_libvirt_vcenter_https : Libvirt.rw Libvirt.Connect.t Lazy.t -> string option -> Xml.uri -> string -> string -> Types.input
|
||||
+val input_libvirt_vcenter_https : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> string option -> Xml.uri -> string -> string -> Types.input
|
||||
diff --git a/v2v/input_libvirt_vddk.ml b/v2v/input_libvirt_vddk.ml
|
||||
index fbd1e0c6..75fd146e 100644
|
||||
--- a/v2v/input_libvirt_vddk.ml
|
||||
+++ b/v2v/input_libvirt_vddk.ml
|
||||
@@ -99,7 +99,7 @@ class input_libvirt_vddk libvirt_conn input_conn input_password vddk_options
|
||||
in
|
||||
|
||||
object (self)
|
||||
- inherit input_libvirt libvirt_conn guest as super
|
||||
+ inherit input_libvirt libvirt_conn ~input_conn guest as super
|
||||
|
||||
method precheck () =
|
||||
error_unless_thumbprint ()
|
||||
@@ -138,12 +138,7 @@ object (self)
|
||||
match parsed_uri.Xml.uri_server with
|
||||
| Some server -> server
|
||||
| None ->
|
||||
- match input_conn with
|
||||
- | Some input_conn ->
|
||||
- error (f_"‘-ic %s’ URL does not contain a host name field")
|
||||
- input_conn
|
||||
- | None ->
|
||||
- error (f_"you must use the ‘-ic’ parameter. See the virt-v2v-input-vmware(1) manual.") in
|
||||
+ error (f_"‘-ic %s’ URL does not contain a host name field") input_conn in
|
||||
|
||||
let user = parsed_uri.Xml.uri_user in
|
||||
|
||||
diff --git a/v2v/input_libvirt_vddk.mli b/v2v/input_libvirt_vddk.mli
|
||||
index 2fc6e9cf..f37d88e7 100644
|
||||
--- a/v2v/input_libvirt_vddk.mli
|
||||
+++ b/v2v/input_libvirt_vddk.mli
|
||||
@@ -25,7 +25,7 @@ val print_input_options : unit -> unit
|
||||
val parse_input_options : (string * string) list -> vddk_options
|
||||
(** Print and parse vddk -io options. *)
|
||||
|
||||
-val input_libvirt_vddk : Libvirt.rw Libvirt.Connect.t Lazy.t -> string option -> string option -> vddk_options -> Xml.uri -> string -> Types.input
|
||||
-(** [input_libvirt_vddk libvirt_conn vddk_options parsed_uri guest]
|
||||
+val input_libvirt_vddk : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> string option -> vddk_options -> Xml.uri -> string -> Types.input
|
||||
+(** [input_libvirt_vddk libvirt_conn input_conn vddk_options parsed_uri guest]
|
||||
creates and returns a {!Types.input} object specialized for reading
|
||||
the guest disks using the nbdkit vddk plugin. *)
|
||||
diff --git a/v2v/input_libvirt_xen_ssh.ml b/v2v/input_libvirt_xen_ssh.ml
|
||||
index bd1235a6..ec366b4a 100644
|
||||
--- a/v2v/input_libvirt_xen_ssh.ml
|
||||
+++ b/v2v/input_libvirt_xen_ssh.ml
|
||||
@@ -30,9 +30,9 @@ open Input_libvirt_other
|
||||
open Printf
|
||||
|
||||
(* Subclass specialized for handling Xen over SSH. *)
|
||||
-class input_libvirt_xen_ssh libvirt_conn input_password parsed_uri server guest =
|
||||
+class input_libvirt_xen_ssh libvirt_conn input_conn input_password parsed_uri server guest =
|
||||
object (self)
|
||||
- inherit input_libvirt libvirt_conn guest
|
||||
+ inherit input_libvirt libvirt_conn ~input_conn guest
|
||||
|
||||
method precheck () =
|
||||
if backend_is_libvirt () then
|
||||
diff --git a/v2v/input_libvirt_xen_ssh.mli b/v2v/input_libvirt_xen_ssh.mli
|
||||
index 120a52f7..3cbca9d7 100644
|
||||
--- a/v2v/input_libvirt_xen_ssh.mli
|
||||
+++ b/v2v/input_libvirt_xen_ssh.mli
|
||||
@@ -18,4 +18,4 @@
|
||||
|
||||
(** [-i libvirt] when the source is Xen *)
|
||||
|
||||
-val input_libvirt_xen_ssh : Libvirt.rw Libvirt.Connect.t Lazy.t -> string option -> Xml.uri -> string -> string -> Types.input
|
||||
+val input_libvirt_xen_ssh : Libvirt.rw Libvirt.Connect.t Lazy.t -> string -> string option -> Xml.uri -> string -> string -> Types.input
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,41 @@
|
||||
From f9770058fa3bd8871b8b4ded0b10d4be418224ae Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 7 Sep 2020 10:15:40 +0100
|
||||
Subject: [PATCH 2/4] options: Use cryptX instead of luksX as the temporary
|
||||
name.
|
||||
|
||||
---
|
||||
options/decrypt.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/options/decrypt.c b/options/decrypt.c
|
||||
index d868f70..45de5b2 100644
|
||||
--- a/common/options/decrypt.c
|
||||
+++ b/common/options/decrypt.c
|
||||
@@ -38,18 +38,18 @@
|
||||
|
||||
/**
|
||||
* Make a LUKS map name from the partition name,
|
||||
- * eg. C<"/dev/vda2" =E<gt> "luksvda2">
|
||||
+ * eg. C<"/dev/vda2" =E<gt> "cryptvda2">
|
||||
*/
|
||||
static void
|
||||
make_mapname (const char *device, char *mapname, size_t len)
|
||||
{
|
||||
size_t i = 0;
|
||||
|
||||
- if (len < 5)
|
||||
+ if (len < 6)
|
||||
abort ();
|
||||
- strcpy (mapname, "luks");
|
||||
- mapname += 4;
|
||||
- len -= 4;
|
||||
+ strcpy (mapname, "crypt");
|
||||
+ mapname += 5;
|
||||
+ len -= 5;
|
||||
|
||||
if (STRPREFIX (device, "/dev/"))
|
||||
i = 5;
|
||||
--
|
||||
2.18.4
|
||||
|
@ -0,0 +1,56 @@
|
||||
From 778c08fe7b7eb00b7f48189dd1a3edf3f3be2625 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 30 Mar 2020 14:40:45 +0100
|
||||
Subject: [PATCH 3/4] options: Support Windows BitLocker (RHBZ#1808977).
|
||||
|
||||
---
|
||||
mltools/tools_utils.mli | 5 ++---
|
||||
options/decrypt.c | 9 ++++-----
|
||||
2 files changed, 6 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/mltools/tools_utils.mli b/mltools/tools_utils.mli
|
||||
index 102abff..1d1ac8a 100644
|
||||
--- a/common/mltools/tools_utils.mli
|
||||
+++ b/common/mltools/tools_utils.mli
|
||||
@@ -195,9 +195,8 @@ val is_btrfs_subvolume : Guestfs.guestfs -> string -> bool
|
||||
(** Checks if a filesystem is a btrfs subvolume. *)
|
||||
|
||||
val inspect_decrypt : Guestfs.guestfs -> key_store -> unit
|
||||
-(** Simple implementation of decryption: look for any [crypto_LUKS]
|
||||
- partitions and decrypt them, then rescan for VGs. This only works
|
||||
- for Fedora whole-disk encryption. *)
|
||||
+(** Simple implementation of decryption: look for any encrypted
|
||||
+ partitions and decrypt them, then rescan for VGs. *)
|
||||
|
||||
val with_timeout : string -> int -> ?sleep:int -> (unit -> 'a option) -> 'a
|
||||
(** [with_timeout op timeout ?sleep fn] implements a timeout loop.
|
||||
diff --git a/options/decrypt.c b/options/decrypt.c
|
||||
index 45de5b2..8eb24bc 100644
|
||||
--- a/common/options/decrypt.c
|
||||
+++ b/common/options/decrypt.c
|
||||
@@ -65,10 +65,8 @@ make_mapname (const char *device, char *mapname, size_t len)
|
||||
}
|
||||
|
||||
/**
|
||||
- * Simple implementation of decryption: look for any C<crypto_LUKS>
|
||||
- * partitions and decrypt them, then rescan for VGs. This only works
|
||||
- * for Fedora whole-disk encryption. WIP to make this work for other
|
||||
- * encryption schemes.
|
||||
+ * Simple implementation of decryption: look for any encrypted
|
||||
+ * partitions and decrypt them, then rescan for VGs.
|
||||
*/
|
||||
void
|
||||
inspect_do_decrypt (guestfs_h *g, struct key_store *ks)
|
||||
@@ -82,7 +80,8 @@ inspect_do_decrypt (guestfs_h *g, struct key_store *ks)
|
||||
|
||||
for (i = 0; partitions[i] != NULL; ++i) {
|
||||
CLEANUP_FREE char *type = guestfs_vfs_type (g, partitions[i]);
|
||||
- if (type && STREQ (type, "crypto_LUKS")) {
|
||||
+ if (type &&
|
||||
+ (STREQ (type, "crypto_LUKS") || STREQ (type, "BitLocker"))) {
|
||||
char mapname[32];
|
||||
make_mapname (partitions[i], mapname, sizeof mapname);
|
||||
|
||||
--
|
||||
2.18.4
|
||||
|
@ -0,0 +1,34 @@
|
||||
From bb94c68c521aa546d3f2e59aa25e388bfd9c5fc5 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Tue, 19 May 2020 12:14:18 +0200
|
||||
Subject: [PATCH] vCenter: fix parsing of HTTP status string (RHBZ#1837328)
|
||||
|
||||
vCenter 7 answers with an HTTP/2 status string, so we cannot extract
|
||||
the status code from it by using fixed positions in that string.
|
||||
Hence, pick the status code by reading what's after the whitespace.
|
||||
|
||||
Tested with vCenter 6.5 and 7.
|
||||
|
||||
(cherry picked from commit d2aa82317964d62fcc8dc7b6737773003d04b998)
|
||||
---
|
||||
v2v/vCenter.ml | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/v2v/vCenter.ml b/v2v/vCenter.ml
|
||||
index c28a4ced..4c128b0c 100644
|
||||
--- a/v2v/vCenter.ml
|
||||
+++ b/v2v/vCenter.ml
|
||||
@@ -190,7 +190,9 @@ and fetch_headers_from_url password_file uri sslverify https_url =
|
||||
| [] ->
|
||||
dump_response stderr;
|
||||
error (f_"vcenter: no status code in output of ‘curl’ command. Is ‘curl’ installed?")
|
||||
- | ss -> String.sub (List.hd (List.rev ss)) 9 3 in
|
||||
+ | ss ->
|
||||
+ let s = List.hd (List.rev ss) in
|
||||
+ String.sub s (String.index s ' ' + 1) 3 in
|
||||
|
||||
let headers =
|
||||
List.map (
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,50 @@
|
||||
From 132c355d3ba10b6ec303cbc059d6732056474695 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 6 Oct 2020 15:04:27 +0100
|
||||
Subject: [PATCH 4/4] options: Ignore errors from guestfs_luks_uuid.
|
||||
|
||||
For BitLocker disks cryptsetup does not (yet? ever?) support reading
|
||||
UUIDs and this function will fail. Skip reading the UUID in this
|
||||
case.
|
||||
|
||||
Updates commit bb4a2dc17a78b53437896d4215ae82df8e11b788.
|
||||
---
|
||||
options/decrypt.c | 11 ++++++++++-
|
||||
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/options/decrypt.c b/options/decrypt.c
|
||||
index 8eb24bc..434b7d5 100644
|
||||
--- a/common/options/decrypt.c
|
||||
+++ b/common/options/decrypt.c
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
+#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <libintl.h>
|
||||
#include <error.h>
|
||||
@@ -82,11 +83,19 @@ inspect_do_decrypt (guestfs_h *g, struct key_store *ks)
|
||||
CLEANUP_FREE char *type = guestfs_vfs_type (g, partitions[i]);
|
||||
if (type &&
|
||||
(STREQ (type, "crypto_LUKS") || STREQ (type, "BitLocker"))) {
|
||||
+ bool is_bitlocker = STREQ (type, "BitLocker");
|
||||
char mapname[32];
|
||||
make_mapname (partitions[i], mapname, sizeof mapname);
|
||||
|
||||
#ifdef GUESTFS_HAVE_LUKS_UUID
|
||||
- CLEANUP_FREE char *uuid = guestfs_luks_uuid (g, partitions[i]);
|
||||
+ CLEANUP_FREE char *uuid = NULL;
|
||||
+
|
||||
+ /* This fails for Windows BitLocker disks because cryptsetup
|
||||
+ * luksUUID cannot read a UUID (unclear if this is a limitation
|
||||
+ * of the format or cryptsetup).
|
||||
+ */
|
||||
+ if (!is_bitlocker)
|
||||
+ uuid = guestfs_luks_uuid (g, partitions[i]);
|
||||
#else
|
||||
const char *uuid = NULL;
|
||||
#endif
|
||||
--
|
||||
2.18.4
|
||||
|
@ -0,0 +1,97 @@
|
||||
From 939d57ef4d5bcfa31e9b98104822962b89572481 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 19 May 2020 14:40:01 +0100
|
||||
Subject: [PATCH] v2v: -o libvirt: Remove cache=none (RHBZ#1837453).
|
||||
|
||||
Traditionally if you did live migration (KVM to KVM), you had to
|
||||
ensure that cache=none was set on all disks of the guest up front.
|
||||
This was because of quirks in how NFS works (I think the close-to-open
|
||||
consistency and the fact that during live migration both qemus have
|
||||
the file open), and we had to assume the worst case that a guest might
|
||||
be backed by NFS.
|
||||
|
||||
Because of this when virt-v2v converts a guest to run on KVM using
|
||||
libvirt it sets cache=none.
|
||||
|
||||
This is not necessary with modern qemu. If qemu supports the
|
||||
drop-cache property of the file block driver, which libvirt will
|
||||
automatically detect for us, then libvirt live migration is able to
|
||||
tell qemu to drop cached data at the right time even if the backing is
|
||||
NFS.
|
||||
|
||||
It also had a significant performance impact. In some synthetic
|
||||
benchmarks it could show 2 or 3 times slower performance.
|
||||
|
||||
Thanks: Ming Xie, Peter Krempa.
|
||||
(cherry picked from commit 9720f45e0cd9283739fd2a67c19e66912489dfc7)
|
||||
---
|
||||
docs/virt-v2v-output-local.pod | 2 +-
|
||||
tests/test-v2v-cdrom.expected | 2 +-
|
||||
tests/test-v2v-floppy.expected | 2 +-
|
||||
tests/test-v2v-i-ova.xml | 2 +-
|
||||
v2v/create_libvirt_xml.ml | 1 -
|
||||
5 files changed, 4 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/docs/virt-v2v-output-local.pod b/docs/virt-v2v-output-local.pod
|
||||
index 38df007d..a5f155cb 100644
|
||||
--- a/docs/virt-v2v-output-local.pod
|
||||
+++ b/docs/virt-v2v-output-local.pod
|
||||
@@ -127,7 +127,7 @@ Edit F</var/tmp/NAME.xml> to change F</var/tmp/NAME-sda> to the pool
|
||||
name. In other words, locate the following bit of XML:
|
||||
|
||||
<disk type='file' device='disk'>
|
||||
- <driver name='qemu' type='raw' cache='none' />
|
||||
+ <driver name='qemu' type='raw' />
|
||||
<source file='/var/tmp/NAME-sda' />
|
||||
<target dev='hda' bus='ide' />
|
||||
</disk>
|
||||
diff --git a/tests/test-v2v-cdrom.expected b/tests/test-v2v-cdrom.expected
|
||||
index e18ea6f2..34d2bf59 100644
|
||||
--- a/tests/test-v2v-cdrom.expected
|
||||
+++ b/tests/test-v2v-cdrom.expected
|
||||
@@ -1,5 +1,5 @@
|
||||
<disk type='file' device='disk'>
|
||||
- <driver name='qemu' type='raw' cache='none'/>
|
||||
+ <driver name='qemu' type='raw'/>
|
||||
<target dev='vda' bus='virtio'/>
|
||||
</disk>
|
||||
<disk device='cdrom' type='file'>
|
||||
diff --git a/tests/test-v2v-floppy.expected b/tests/test-v2v-floppy.expected
|
||||
index dd74ed94..a718c21f 100644
|
||||
--- a/tests/test-v2v-floppy.expected
|
||||
+++ b/tests/test-v2v-floppy.expected
|
||||
@@ -1,5 +1,5 @@
|
||||
<disk type='file' device='disk'>
|
||||
- <driver name='qemu' type='raw' cache='none'/>
|
||||
+ <driver name='qemu' type='raw'/>
|
||||
<target dev='vda' bus='virtio'/>
|
||||
</disk>
|
||||
<disk device='floppy' type='file'>
|
||||
diff --git a/tests/test-v2v-i-ova.xml b/tests/test-v2v-i-ova.xml
|
||||
index 7c198283..e26f4f83 100644
|
||||
--- a/tests/test-v2v-i-ova.xml
|
||||
+++ b/tests/test-v2v-i-ova.xml
|
||||
@@ -22,7 +22,7 @@
|
||||
<on_crash>restart</on_crash>
|
||||
<devices>
|
||||
<disk type='file' device='disk'>
|
||||
- <driver name='qemu' type='raw' cache='none'/>
|
||||
+ <driver name='qemu' type='raw'/>
|
||||
<source file='TestOva-sda'/>
|
||||
<target dev='vda' bus='virtio'/>
|
||||
</disk>
|
||||
diff --git a/v2v/create_libvirt_xml.ml b/v2v/create_libvirt_xml.ml
|
||||
index 05553c4f..5a1fba0f 100644
|
||||
--- a/v2v/create_libvirt_xml.ml
|
||||
+++ b/v2v/create_libvirt_xml.ml
|
||||
@@ -336,7 +336,6 @@ let create_libvirt_xml ?pool source targets target_buses guestcaps
|
||||
e "driver" [
|
||||
"name", "qemu";
|
||||
"type", t.target_format;
|
||||
- "cache", "none"
|
||||
] [];
|
||||
(match pool with
|
||||
| None ->
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,51 @@
|
||||
From f3ea9ceb1c3c9741d4f62d0c1d23b7c94634353a Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 28 May 2020 11:40:45 +0100
|
||||
Subject: [PATCH] v2v: Remove extraneous '=' when setting bandwidth
|
||||
(RHBZ#1841096).
|
||||
|
||||
Commit c3a54d6aed6dfc65f9ffa59976bb8d20044c03a8 ("v2v: Add standalone
|
||||
nbdkit module.") was supposed to be a simple refactoring but it broke
|
||||
the --bandwidth and --bandwidth-file options (amongst other things).
|
||||
|
||||
Because of an extra '=' character which was accidentally left over, it
|
||||
would add an extra character in the nbdkit-rate-filter command line.
|
||||
For example:
|
||||
|
||||
virt-v2v .. --bandwidth 200M
|
||||
|
||||
would invoke:
|
||||
|
||||
nbdkit .. --filter rate rate==200M
|
||||
|
||||
which causes a parse error. The --bandwidth-file option does not
|
||||
invoke a parse error but does not work, for similar reasons.
|
||||
|
||||
Thanks: Ming Xie
|
||||
(cherry picked from commit a89a084b2d0f6d40716c1d34969f6c49ea28e9b3)
|
||||
---
|
||||
v2v/nbdkit_sources.ml | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/v2v/nbdkit_sources.ml b/v2v/nbdkit_sources.ml
|
||||
index 979c3773..402dfd0e 100644
|
||||
--- a/v2v/nbdkit_sources.ml
|
||||
+++ b/v2v/nbdkit_sources.ml
|
||||
@@ -118,11 +118,11 @@ let common_create ?bandwidth ?extra_debug ?extra_env plugin_name plugin_args =
|
||||
let args =
|
||||
match bandwidth with
|
||||
| StaticBandwidth rate ->
|
||||
- [ "rate=", rate ]
|
||||
+ [ "rate", rate ]
|
||||
| DynamicBandwidth (None, filename) ->
|
||||
- [ "rate-file=", filename ]
|
||||
+ [ "rate-file", filename ]
|
||||
| DynamicBandwidth (Some rate, filename) ->
|
||||
- [ "rate=", rate; "rate-file=", filename ] in
|
||||
+ [ "rate", rate; "rate-file", filename ] in
|
||||
cmd, args
|
||||
)
|
||||
else cmd, [] in
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,49 @@
|
||||
From 4e0b3de57486613c8f28ef7726df728cccd7624b Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 28 May 2020 10:59:57 +0100
|
||||
Subject: [PATCH] v2v: -it vddk: Don't use nbdkit readahead filter with VDDK
|
||||
(RHBZ#1832805).
|
||||
|
||||
This filter deliberately tries to coalesce reads into larger requests.
|
||||
Unfortunately VMware has low limits on the size of requests it can
|
||||
serve to a VDDK client and the larger requests would break with errors
|
||||
like this:
|
||||
|
||||
nbdkit: vddk[3]: error: [NFC ERROR] NfcFssrvrProcessErrorMsg: received NFC error 5 from server: Failed to allocate the requested 33554456 bytes
|
||||
|
||||
We already increase the maximum request size by changing the
|
||||
configuration on the VMware server, but it's not sufficient for VDDK
|
||||
with the readahead filter.
|
||||
|
||||
As readahead is only an optimization, the simplest solution is to
|
||||
disable this filter when we're using nbdkit-vddk-plugin.
|
||||
|
||||
Thanks: Ming Xie
|
||||
(cherry picked from commit 1438174488f111fa24420758ba3bf0218dc9ee2a)
|
||||
---
|
||||
v2v/nbdkit_sources.ml | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/v2v/nbdkit_sources.ml b/v2v/nbdkit_sources.ml
|
||||
index 402dfd0e..bfda91a7 100644
|
||||
--- a/v2v/nbdkit_sources.ml
|
||||
+++ b/v2v/nbdkit_sources.ml
|
||||
@@ -97,9 +97,13 @@ let common_create ?bandwidth ?extra_debug ?extra_env plugin_name plugin_args =
|
||||
let cmd = Nbdkit.add_filter_if_available cmd "retry" in
|
||||
|
||||
(* Adding the readahead filter is always a win for our access
|
||||
- * patterns. However if it doesn't exist don't worry.
|
||||
+ * patterns. If it doesn't exist don't worry. However it
|
||||
+ * breaks VMware servers (RHBZ#1832805).
|
||||
*)
|
||||
- let cmd = Nbdkit.add_filter_if_available cmd "readahead" in
|
||||
+ let cmd =
|
||||
+ if plugin_name <> "vddk" then
|
||||
+ Nbdkit.add_filter_if_available cmd "readahead"
|
||||
+ else cmd in
|
||||
|
||||
(* Caching extents speeds up qemu-img, especially its consecutive
|
||||
* block_status requests with req_one=1.
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,116 @@
|
||||
From bcb9f50eee4050e72a532a0b805531dc72105a4f Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 1 Jun 2020 17:18:59 +0100
|
||||
Subject: [PATCH] v2v: nbdkit: Handle password= parameter in common_create.
|
||||
|
||||
Just refactoring.
|
||||
|
||||
(cherry picked from commit 36c008009a601634ec1c1fbc4f619b21988f075c)
|
||||
---
|
||||
v2v/nbdkit_sources.ml | 42 +++++++++++++++++++-----------------------
|
||||
1 file changed, 19 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/v2v/nbdkit_sources.ml b/v2v/nbdkit_sources.ml
|
||||
index bfda91a7..47832011 100644
|
||||
--- a/v2v/nbdkit_sources.ml
|
||||
+++ b/v2v/nbdkit_sources.ml
|
||||
@@ -58,7 +58,8 @@ let error_unless_nbdkit_compiled_with_selinux config =
|
||||
error (f_"nbdkit was compiled without SELinux support. You will have to recompile nbdkit with libselinux-devel installed, or else set SELinux to Permissive mode while doing the conversion.")
|
||||
)
|
||||
|
||||
-let common_create ?bandwidth ?extra_debug ?extra_env plugin_name plugin_args =
|
||||
+let common_create ?bandwidth ?extra_debug ?extra_env password
|
||||
+ plugin_name plugin_args =
|
||||
error_unless_nbdkit_working ();
|
||||
let config = Nbdkit.config () in
|
||||
error_unless_nbdkit_min_version config;
|
||||
@@ -136,6 +137,15 @@ let common_create ?bandwidth ?extra_debug ?extra_env plugin_name plugin_args =
|
||||
List.fold_left (fun cmd (k, v) -> Nbdkit.add_arg cmd k v)
|
||||
cmd (plugin_args @ rate_args) in
|
||||
|
||||
+ (* Handle the password parameter specially. *)
|
||||
+ let cmd =
|
||||
+ match password with
|
||||
+ | NoPassword -> cmd
|
||||
+ | AskForPassword ->
|
||||
+ Nbdkit.add_arg cmd "password" "-"
|
||||
+ | PasswordFile password_file ->
|
||||
+ Nbdkit.add_arg cmd "password" ("+" ^ password_file) in
|
||||
+
|
||||
cmd
|
||||
|
||||
(* VDDK libraries are located under lib32/ or lib64/ relative to the
|
||||
@@ -223,20 +233,16 @@ See also the virt-v2v-input-vmware(1) manual.") libNN
|
||||
let get_args () = List.rev !args in
|
||||
add_arg, get_args in
|
||||
|
||||
- let password_param =
|
||||
- match password_file with
|
||||
- | None ->
|
||||
- (* nbdkit asks for the password interactively *)
|
||||
- "password", "-"
|
||||
- | Some password_file ->
|
||||
- (* nbdkit reads the password from the file *)
|
||||
- "password", "+" ^ password_file in
|
||||
add_arg ("server", server);
|
||||
add_arg ("user", user);
|
||||
- add_arg password_param;
|
||||
add_arg ("vm", sprintf "moref=%s" moref);
|
||||
add_arg ("file", path);
|
||||
|
||||
+ let password =
|
||||
+ match password_file with
|
||||
+ | None -> AskForPassword
|
||||
+ | Some password_file -> PasswordFile password_file in
|
||||
+
|
||||
(* The passthrough parameters. *)
|
||||
Option.may (fun s -> add_arg ("config", s)) config;
|
||||
Option.may (fun s -> add_arg ("cookie", s)) cookie;
|
||||
@@ -251,7 +257,7 @@ See also the virt-v2v-input-vmware(1) manual.") libNN
|
||||
let debug_flag =
|
||||
if version >= (1, 17, 10) then Some ("vddk.datapath", "0") else None in
|
||||
|
||||
- common_create ?bandwidth ?extra_debug:debug_flag ?extra_env:env
|
||||
+ common_create ?bandwidth ?extra_debug:debug_flag ?extra_env:env password
|
||||
"vddk" (get_args ())
|
||||
|
||||
(* Create an nbdkit module specialized for reading from SSH sources. *)
|
||||
@@ -267,14 +273,9 @@ let create_ssh ?bandwidth ~password ?port ~server ?user path =
|
||||
add_arg ("host", server);
|
||||
Option.may (fun s -> add_arg ("port", s)) port;
|
||||
Option.may (fun s -> add_arg ("user", s)) user;
|
||||
- (match password with
|
||||
- | NoPassword -> ()
|
||||
- | AskForPassword -> add_arg ("password", "-")
|
||||
- | PasswordFile password_file -> add_arg ("password", "+" ^ password_file)
|
||||
- );
|
||||
add_arg ("path", path);
|
||||
|
||||
- common_create ?bandwidth "ssh" (get_args ())
|
||||
+ common_create ?bandwidth password "ssh" (get_args ())
|
||||
|
||||
(* Create an nbdkit module specialized for reading from Curl sources. *)
|
||||
let create_curl ?bandwidth ?cookie ~password ?(sslverify=true) ?user url =
|
||||
@@ -287,18 +288,13 @@ let create_curl ?bandwidth ?cookie ~password ?(sslverify=true) ?user url =
|
||||
add_arg, get_args in
|
||||
|
||||
Option.may (fun s -> add_arg ("user", s)) user;
|
||||
- (match password with
|
||||
- | NoPassword -> ()
|
||||
- | AskForPassword -> add_arg ("password", "-")
|
||||
- | PasswordFile password_file -> add_arg ("password", "+" ^ password_file)
|
||||
- );
|
||||
(* https://bugzilla.redhat.com/show_bug.cgi?id=1146007#c10 *)
|
||||
add_arg ("timeout", "2000");
|
||||
Option.may (fun s -> add_arg ("cookie", s)) cookie;
|
||||
if not sslverify then add_arg ("sslverify", "false");
|
||||
add_arg ("url", url);
|
||||
|
||||
- common_create ?bandwidth "curl" (get_args ())
|
||||
+ common_create ?bandwidth password "curl" (get_args ())
|
||||
|
||||
let run cmd =
|
||||
let sock, _ = Nbdkit.run_unix cmd in
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,57 @@
|
||||
From 89ab50eb404664ac3522294f2f46a1c904a28abd Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 1 Jun 2020 17:35:58 +0100
|
||||
Subject: [PATCH] v2v: nbdkit: Don't use password=- parameter (RHBZ#1842440).
|
||||
|
||||
This was broken with all nbdkit plugins, some in more ways than others.
|
||||
|
||||
Because we start nbdkit in the background and wait 30 seconds for it
|
||||
to start running, the user had only 30 seconds to type in a password
|
||||
before we timed out the process. In addition with the VDDK plugin
|
||||
password=- had been broken ever since we changed the plugin to use a
|
||||
reexec
|
||||
(https://www.redhat.com/archives/libguestfs/2020-June/msg00012.html).
|
||||
|
||||
The solution is to read the password ourselves and pass it to nbdkit
|
||||
as a private file.
|
||||
|
||||
(cherry picked from commit 16b551c77c88219a2f68e2fc37daf2dc4d88e4ed)
|
||||
---
|
||||
v2v/nbdkit_sources.ml | 21 ++++++++++++++++++++-
|
||||
1 file changed, 20 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/v2v/nbdkit_sources.ml b/v2v/nbdkit_sources.ml
|
||||
index 47832011..f5e91911 100644
|
||||
--- a/v2v/nbdkit_sources.ml
|
||||
+++ b/v2v/nbdkit_sources.ml
|
||||
@@ -142,7 +142,26 @@ let common_create ?bandwidth ?extra_debug ?extra_env password
|
||||
match password with
|
||||
| NoPassword -> cmd
|
||||
| AskForPassword ->
|
||||
- Nbdkit.add_arg cmd "password" "-"
|
||||
+ (* Because we will start nbdkit in the background and then wait
|
||||
+ * for 30 seconds for it to start up, we cannot use the
|
||||
+ * password=- feature of nbdkit to read the password
|
||||
+ * interactively (since in the words of the movie the user has
|
||||
+ * only "30 seconds to comply"). In any case this feature broke
|
||||
+ * in the VDDK plugin in nbdkit 1.18 and 1.20. So in the
|
||||
+ * AskForPassword case we read the password here.
|
||||
+ *)
|
||||
+ printf "password: ";
|
||||
+ let open Unix in
|
||||
+ let orig = tcgetattr stdin in
|
||||
+ let tios = { orig with c_echo = false } in
|
||||
+ tcsetattr stdin TCSAFLUSH tios; (* Disable echo. *)
|
||||
+ let password = read_line () in
|
||||
+ tcsetattr stdin TCSAFLUSH orig; (* Restore echo. *)
|
||||
+ printf "\n";
|
||||
+ let password_file = Filename.temp_file "v2vnbdkit" ".txt" in
|
||||
+ unlink_on_exit password_file;
|
||||
+ with_open_out password_file (fun chan -> output_string chan password);
|
||||
+ Nbdkit.add_arg cmd "password" ("+" ^ password_file)
|
||||
| PasswordFile password_file ->
|
||||
Nbdkit.add_arg cmd "password" ("+" ^ password_file) in
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,44 @@
|
||||
From a8f3d2b2e87aead9f6a1db66dccebb6239ddf004 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Fri, 19 Jun 2020 17:57:36 +0200
|
||||
Subject: [PATCH] libosinfo: declare autocleanup funcs with libosinfo < 1.8.0
|
||||
|
||||
libosinfo 1.8.0 declares them automatically for all of its classes, so
|
||||
there is no need to declare ours. This requires fixing the definition of
|
||||
the IS_LIBOSINFO_VERSION macro to wrap its body in brackets.
|
||||
|
||||
While in the process, simplify the workaround for a related bug by
|
||||
removing a now-useless check.
|
||||
|
||||
(cherry picked from commit c1caf7132000a4560c3e20c2753978e8dd10036a)
|
||||
---
|
||||
v2v/libosinfo-c.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/v2v/libosinfo-c.c b/v2v/libosinfo-c.c
|
||||
index 1ab6bb4d..497840c2 100644
|
||||
--- a/v2v/libosinfo-c.c
|
||||
+++ b/v2v/libosinfo-c.c
|
||||
@@ -40,12 +40,18 @@
|
||||
#define V2V_LIBOSINFO_VERSION_HEX \
|
||||
MAKE_VERSION_HEX(OSINFO_MAJOR_VERSION, OSINFO_MINOR_VERSION, OSINFO_MICRO_VERSION)
|
||||
#define IS_LIBOSINFO_VERSION(maj, min, mic) \
|
||||
- V2V_LIBOSINFO_VERSION_HEX >= MAKE_VERSION_HEX(maj, min, mic)
|
||||
+ (V2V_LIBOSINFO_VERSION_HEX >= MAKE_VERSION_HEX(maj, min, mic))
|
||||
|
||||
+/*
|
||||
+ * libosinfo 1.8.0 provides auto-cleanup functions for all its classes,
|
||||
+ * so avoid declaring our own.
|
||||
+ */
|
||||
+#if !IS_LIBOSINFO_VERSION(1, 8, 0)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoFilter, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoLoader, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoList, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoOsList, g_object_unref)
|
||||
+#endif
|
||||
|
||||
typedef OsinfoDb *OsinfoDb_t;
|
||||
typedef OsinfoOs *OsinfoOs_t;
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,60 @@
|
||||
From 6aec975c07d60a2518d3f16ee91db1d03a704882 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 30 Jul 2020 14:01:48 +0100
|
||||
Subject: [PATCH] v2v: Use common documentation for --keys-from-stdin.
|
||||
|
||||
(cherry picked from commit 3f9b5f26398694a8a496eae85525e3be5c4b9cca)
|
||||
---
|
||||
common | 2 +-
|
||||
docs/virt-v2v.pod | 11 ++++-------
|
||||
2 files changed, 5 insertions(+), 8 deletions(-)
|
||||
|
||||
Submodule common be42b0b8..5ea1baec:
|
||||
diff --git a/common/options/Makefile.am b/common/options/Makefile.am
|
||||
index b38fedc..f7ea749 100644
|
||||
--- a/common/options/Makefile.am
|
||||
+++ b/common/options/Makefile.am
|
||||
@@ -19,6 +19,7 @@ include $(top_srcdir)/subdir-rules.mk
|
||||
|
||||
EXTRA_DIST = \
|
||||
key-option.pod \
|
||||
+ keys-from-stdin-option.pod \
|
||||
blocksize-option.pod
|
||||
|
||||
# liboptions.la contains guestfish code which is used in other
|
||||
diff --git a/common/options/keys-from-stdin-option.pod b/common/options/keys-from-stdin-option.pod
|
||||
new file mode 100644
|
||||
index 0000000..03c5339
|
||||
--- /dev/null
|
||||
+++ b/common/options/keys-from-stdin-option.pod
|
||||
@@ -0,0 +1,4 @@
|
||||
+=item B<--keys-from-stdin>
|
||||
+
|
||||
+Read key or passphrase parameters from stdin. The default is
|
||||
+to try to read passphrases from the user by opening F</dev/tty>.
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index a00fa8af..74934eb4 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -382,14 +382,11 @@ through VDDK.
|
||||
|
||||
__INCLUDE:key-option.pod__
|
||||
|
||||
-=item B<--keys-from-stdin>
|
||||
+__INCLUDE:keys-from-stdin-option.pod__
|
||||
|
||||
-Read key or passphrase parameters from stdin. The default is
|
||||
-to try to read passphrases from the user by opening F</dev/tty>.
|
||||
-
|
||||
-Note this options only applies to keys and passphrases for encrypted
|
||||
-devices and partitions, not for passwords used to connect to remote
|
||||
-servers.
|
||||
+Note I<--keys-from-stdin> only applies to keys and passphrases for
|
||||
+encrypted devices and partitions, not for passwords used to connect to
|
||||
+remote servers.
|
||||
|
||||
=item B<--mac> aa:bb:cc:dd:ee:ffB<:network:>out
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,26 @@
|
||||
From 37ae5e04bd5f95c0c8a462dc6ef3fbdcfff4af75 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 30 Jul 2020 14:10:18 +0100
|
||||
Subject: [PATCH] docs: Multiple keys must be supplied one per line
|
||||
(RHBZ#1858765).
|
||||
|
||||
(cherry picked from commit 7ba65d14c0139dcf7fec45d33cee67c0f6737dd2)
|
||||
---
|
||||
common | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Submodule common 5ea1baec..9338df5e:
|
||||
diff --git a/common/options/keys-from-stdin-option.pod b/common/options/keys-from-stdin-option.pod
|
||||
index 03c5339..8379039 100644
|
||||
--- a/common/options/keys-from-stdin-option.pod
|
||||
+++ b/common/options/keys-from-stdin-option.pod
|
||||
@@ -2,3 +2,6 @@
|
||||
|
||||
Read key or passphrase parameters from stdin. The default is
|
||||
to try to read passphrases from the user by opening F</dev/tty>.
|
||||
+
|
||||
+If there are multiple encrypted devices then you may need to supply
|
||||
+multiple keys on stdin, one per line.
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,126 @@
|
||||
From fd1cbaa0907b30f639497c38953fe605bfc68ad0 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 28 Jul 2020 13:20:10 +0100
|
||||
Subject: [PATCH] v2v: Check that --mac :ip: parameters are sensible
|
||||
(RHBZ#1858775).
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This is not a complete check since IP addresses come in many forms,
|
||||
but this at least stops nonsense being written through to the Windows
|
||||
firstboot script.
|
||||
|
||||
$ virt-v2v --mac 11:22:33:44:55:66:ip:hello,world,999,invalid -i disk test1.img -o null
|
||||
virt-v2v: error: cannot parse --mac ip ipaddr: doesn’t look like
|
||||
“hello” is an IP address
|
||||
|
||||
$ virt-v2v --mac 11:22:33:44:55:66:ip:192.168.0.10,192.168.0.1,999,192.168.2.1,192.168.2.2 -i disk test1.img -o null
|
||||
virt-v2v: error: --mac ip prefix length field is out of range
|
||||
|
||||
Thanks: Zi Liu
|
||||
(cherry picked from commit e8bcf9615490447e1b53a8b0d3e9d202ab178cf0)
|
||||
---
|
||||
v2v/cmdline.ml | 55 ++++++++++++++++++++++++++++++++------------------
|
||||
1 file changed, 35 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml
|
||||
index 249137ab..3b74f307 100644
|
||||
--- a/v2v/cmdline.ml
|
||||
+++ b/v2v/cmdline.ml
|
||||
@@ -47,6 +47,7 @@ type cmdline = {
|
||||
|
||||
(* Matches --mac command line parameters. *)
|
||||
let mac_re = PCRE.compile ~anchored:true "([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)"
|
||||
+let mac_ip_re = PCRE.compile ~anchored:true "([[:xdigit:]]|:|\\.)+"
|
||||
|
||||
let parse_cmdline () =
|
||||
let bandwidth = ref None in
|
||||
@@ -102,7 +103,7 @@ let parse_cmdline () =
|
||||
|
||||
let network_map = Networks.create () in
|
||||
let static_ips = ref [] in
|
||||
- let add_network str =
|
||||
+ let rec add_network str =
|
||||
match String.split ":" str with
|
||||
| "", "" ->
|
||||
error (f_"invalid -n/--network parameter")
|
||||
@@ -110,8 +111,7 @@ let parse_cmdline () =
|
||||
Networks.add_default_network network_map out
|
||||
| in_, out ->
|
||||
Networks.add_network network_map in_ out
|
||||
- in
|
||||
- let add_bridge str =
|
||||
+ and add_bridge str =
|
||||
match String.split ":" str with
|
||||
| "", "" ->
|
||||
error (f_"invalid -b/--bridge parameter")
|
||||
@@ -119,8 +119,7 @@ let parse_cmdline () =
|
||||
Networks.add_default_bridge network_map out
|
||||
| in_, out ->
|
||||
Networks.add_bridge network_map in_ out
|
||||
- in
|
||||
- let add_mac str =
|
||||
+ and add_mac str =
|
||||
if not (PCRE.matches mac_re str) then
|
||||
error (f_"cannot parse --mac \"%s\" parameter") str;
|
||||
let mac = PCRE.sub 1 and out = PCRE.sub 3 in
|
||||
@@ -130,24 +129,40 @@ let parse_cmdline () =
|
||||
| "bridge" ->
|
||||
Networks.add_mac network_map mac Bridge out
|
||||
| "ip" ->
|
||||
- let add if_mac_addr if_ip_address if_default_gateway
|
||||
- if_prefix_length if_nameservers =
|
||||
- List.push_back static_ips
|
||||
- { if_mac_addr; if_ip_address; if_default_gateway;
|
||||
- if_prefix_length; if_nameservers }
|
||||
- in
|
||||
(match String.nsplit "," out with
|
||||
- | [] ->
|
||||
- error (f_"invalid --mac ip option")
|
||||
- | [ip] -> add mac ip None None []
|
||||
- | [ip; gw] -> add mac ip (Some gw) None []
|
||||
+ | [] -> error (f_"invalid --mac ip option")
|
||||
+ | [ip] -> add_static_ip mac ip None None []
|
||||
+ | [ip; gw] -> add_static_ip mac ip (Some gw) None []
|
||||
| ip :: gw :: len :: nameservers ->
|
||||
- let len =
|
||||
- try int_of_string len with
|
||||
- | Failure _ -> error (f_"cannot parse --mac ip prefix length field as an integer: %s") len in
|
||||
- add mac ip (Some gw) (Some len) nameservers
|
||||
- );
|
||||
+ add_static_ip mac ip (Some gw) (Some len) nameservers
|
||||
+ )
|
||||
| _ -> assert false
|
||||
+ and add_static_ip if_mac_addr if_ip_address if_default_gateway
|
||||
+ if_prefix_length_str if_nameservers =
|
||||
+ (* Check the IP addresses and prefix length are sensible. This
|
||||
+ * is only a very simple test that they are sane, since IP addresses
|
||||
+ * come in too many valid forms to check thoroughly.
|
||||
+ *)
|
||||
+ let rec error_unless_ip_addr what addr =
|
||||
+ if not (PCRE.matches mac_ip_re addr) then
|
||||
+ error (f_"cannot parse --mac ip %s: doesn’t look like “%s” is an IP address") what addr
|
||||
+ in
|
||||
+ error_unless_ip_addr "ipaddr" if_ip_address;
|
||||
+ Option.may (error_unless_ip_addr "gw") if_default_gateway;
|
||||
+ List.iter (error_unless_ip_addr "nameserver") if_nameservers;
|
||||
+ let if_prefix_length =
|
||||
+ match if_prefix_length_str with
|
||||
+ | None -> None
|
||||
+ | Some len ->
|
||||
+ let len =
|
||||
+ try int_of_string len with
|
||||
+ | Failure _ -> error (f_"cannot parse --mac ip prefix length field as an integer: %s") len in
|
||||
+ if len < 0 || len > 128 then
|
||||
+ error (f_"--mac ip prefix length field is out of range");
|
||||
+ Some len in
|
||||
+ List.push_back static_ips
|
||||
+ { if_mac_addr; if_ip_address; if_default_gateway;
|
||||
+ if_prefix_length; if_nameservers }
|
||||
in
|
||||
|
||||
let no_trim_warning _ =
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,33 @@
|
||||
From 207552533f0b4ed2e2d570a827a85a44d4248b78 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Mon, 17 Aug 2020 09:17:51 +0200
|
||||
Subject: [PATCH] libvirt: read password file outside libvirt auth callback
|
||||
|
||||
This way errors that occur while reading the password file are properly
|
||||
propagated, instead of being reported as errors of the libvirt
|
||||
authentication callback.
|
||||
|
||||
Reported by: Ming Xie.
|
||||
|
||||
(cherry picked from commit 76f9f3a0603f33c85d681fe13e24516331c6aea7)
|
||||
---
|
||||
v2v/libvirt_utils.ml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/v2v/libvirt_utils.ml b/v2v/libvirt_utils.ml
|
||||
index 4d0b8639..1a24b049 100644
|
||||
--- a/v2v/libvirt_utils.ml
|
||||
+++ b/v2v/libvirt_utils.ml
|
||||
@@ -24,8 +24,8 @@ open Common_gettext.Gettext
|
||||
module. *)
|
||||
|
||||
let auth_for_password_file ?password_file () =
|
||||
+ let password = Option.map read_first_line_from_file password_file in
|
||||
let auth_fn creds =
|
||||
- let password = Option.map read_first_line_from_file password_file in
|
||||
List.map (
|
||||
function
|
||||
| { Libvirt.Connect.typ = Libvirt.Connect.CredentialPassphrase } -> password
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,33 @@
|
||||
From 9331544f2456f1aef7299920d0c84dff4e47d132 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 8: v2v: Select correct qemu binary for -o qemu mode
|
||||
(RHBZ#1147313).
|
||||
|
||||
RHEL 8 does not have qemu-system-x86_64 (etc), and in addition the
|
||||
qemu binary is located in /usr/libexec. Encode the path to this
|
||||
binary directly in the script.
|
||||
|
||||
Note that we don't support people running qemu directly like this.
|
||||
It's just for quick testing of converted VMs, and to help us with
|
||||
support cases.
|
||||
---
|
||||
v2v/output_qemu.ml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/v2v/output_qemu.ml b/v2v/output_qemu.ml
|
||||
index be3a3c5e..85d08265 100644
|
||||
--- a/v2v/output_qemu.ml
|
||||
+++ b/v2v/output_qemu.ml
|
||||
@@ -81,7 +81,7 @@ object
|
||||
* module deals with shell and qemu comma quoting.
|
||||
*)
|
||||
let cmd = Qemuopts.create () in
|
||||
- Qemuopts.set_binary_by_arch cmd (Some guestcaps.gcaps_arch);
|
||||
+ Qemuopts.set_binary cmd "/usr/libexec/qemu-kvm";
|
||||
|
||||
let flag = Qemuopts.flag cmd
|
||||
and arg = Qemuopts.arg cmd
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,105 @@
|
||||
From 7df465dede750140bbc5a2579a5256061af63e03 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 8: v2v: Disable the --qemu-boot option (RHBZ#1147313).
|
||||
|
||||
This cannot work because there is no Gtk or SDL output mode
|
||||
in RHEL 8's qemu-kvm.
|
||||
|
||||
In addition you will have to edit the -display option in the
|
||||
qemu script.
|
||||
---
|
||||
docs/virt-v2v-output-local.pod | 6 ++----
|
||||
docs/virt-v2v.pod | 13 -------------
|
||||
v2v/cmdline.ml | 3 ++-
|
||||
3 files changed, 4 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/docs/virt-v2v-output-local.pod b/docs/virt-v2v-output-local.pod
|
||||
index a5f155cb..3a2e6238 100644
|
||||
--- a/docs/virt-v2v-output-local.pod
|
||||
+++ b/docs/virt-v2v-output-local.pod
|
||||
@@ -9,7 +9,7 @@ or libvirt
|
||||
|
||||
virt-v2v [-i* options] -o local -os DIRECTORY
|
||||
|
||||
- virt-v2v [-i* options] -o qemu -os DIRECTORY [--qemu-boot]
|
||||
+ virt-v2v [-i* options] -o qemu -os DIRECTORY
|
||||
|
||||
virt-v2v [-i* options] -o json -os DIRECTORY
|
||||
[-oo json-disks-pattern=PATTERN]
|
||||
@@ -50,12 +50,10 @@ where C<NAME> is the guest name.
|
||||
|
||||
=item B<-o qemu -os> C<DIRECTORY>
|
||||
|
||||
-=item B<-o qemu -os> C<DIRECTORY> B<--qemu-boot>
|
||||
-
|
||||
This converts the guest to files in C<DIRECTORY>. Unlike I<-o local>
|
||||
above, a shell script is created which contains the raw qemu command
|
||||
you would need to boot the guest. However the shell script is not
|
||||
-run, I<unless> you also add the I<--qemu-boot> option.
|
||||
+run.
|
||||
|
||||
=item B<-o json -os> C<DIRECTORY>
|
||||
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index 74934eb4..a19f0a73 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -144,11 +144,6 @@ Since F<guest-domain.xml> contains the path(s) to the guest disk
|
||||
image(s) you do not need to specify the name of the disk image on the
|
||||
command line.
|
||||
|
||||
-To convert a local disk image and immediately boot it in local
|
||||
-qemu, do:
|
||||
-
|
||||
- virt-v2v -i disk disk.img -o qemu -os /var/tmp --qemu-boot
|
||||
-
|
||||
=head1 OPTIONS
|
||||
|
||||
=over 4
|
||||
@@ -537,9 +532,6 @@ This is similar to I<-o local>, except that a shell script is written
|
||||
which you can use to boot the guest in qemu. The converted disks and
|
||||
shell script are written to the directory specified by I<-os>.
|
||||
|
||||
-When using this output mode, you can also specify the I<--qemu-boot>
|
||||
-option which boots the guest under qemu immediately.
|
||||
-
|
||||
=item B<-o> B<rhev>
|
||||
|
||||
This is the same as I<-o rhv>.
|
||||
@@ -815,11 +807,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>.
|
||||
|
||||
-=item B<--qemu-boot>
|
||||
-
|
||||
-When using I<-o qemu> only, this boots the guest immediately after
|
||||
-virt-v2v finishes.
|
||||
-
|
||||
=item B<-q>
|
||||
|
||||
=item B<--quiet>
|
||||
diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml
|
||||
index 3b74f307..df69e2e0 100644
|
||||
--- a/v2v/cmdline.ml
|
||||
+++ b/v2v/cmdline.ml
|
||||
@@ -284,7 +284,6 @@ let parse_cmdline () =
|
||||
s_"Estimate size of source and stop";
|
||||
[ L"print-source" ], Getopt.Set print_source,
|
||||
s_"Print source and stop";
|
||||
- [ L"qemu-boot" ], Getopt.Set qemu_boot, s_"Boot in qemu (-o qemu only)";
|
||||
[ L"root" ], Getopt.String ("ask|... ", set_root_choice),
|
||||
s_"How to choose root filesystem";
|
||||
[ L"vddk-config" ], Getopt.String ("filename", set_input_option_compat "vddk-config"),
|
||||
@@ -668,6 +667,8 @@ read the man page virt-v2v(1).
|
||||
| Some d when not (is_directory d) ->
|
||||
error (f_"-os %s: output directory does not exist or is not a directory") d
|
||||
| Some d -> d in
|
||||
+ if qemu_boot then
|
||||
+ error (f_"-o qemu: the --qemu-boot option cannot be used in RHEL");
|
||||
Output_qemu.output_qemu os qemu_boot,
|
||||
output_format, output_alloc
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,34 @@
|
||||
From ff5ae6613f5b344371cd8523a022af08fa6f191b 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 8: Fix list of supported sound cards to match RHEL qemu
|
||||
(RHBZ#1176493).
|
||||
|
||||
---
|
||||
v2v/utils.ml | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/v2v/utils.ml b/v2v/utils.ml
|
||||
index ccbb9d68..c2940582 100644
|
||||
--- a/v2v/utils.ml
|
||||
+++ b/v2v/utils.ml
|
||||
@@ -55,13 +55,14 @@ let kvm_arch = function
|
||||
(* Does qemu support the given sound card? *)
|
||||
let qemu_supports_sound_card = function
|
||||
| Types.AC97
|
||||
- | Types.ES1370
|
||||
| Types.ICH6
|
||||
| Types.ICH9
|
||||
| Types.PCSpeaker
|
||||
+ -> true
|
||||
+ | Types.ES1370
|
||||
| Types.SB16
|
||||
| Types.USBAudio
|
||||
- -> true
|
||||
+ -> false
|
||||
|
||||
(* Find the UEFI firmware. *)
|
||||
let find_uefi_firmware guest_arch =
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,79 @@
|
||||
From d6b625021e4bc1662b796e8c2f2a646d118f9fa1 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 8: Fix tests for libguestfs-winsupport.
|
||||
|
||||
It doesn't let us use guestfish for arbitrary Windows edits.
|
||||
---
|
||||
test-data/phony-guests/make-windows-img.sh | 1 +
|
||||
tests/test-v2v-virtio-win-iso.sh | 8 +++++++-
|
||||
tests/test-v2v-windows-conversion.sh | 8 +++++++-
|
||||
3 files changed, 15 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/test-data/phony-guests/make-windows-img.sh b/test-data/phony-guests/make-windows-img.sh
|
||||
index 30908a91..73cf5144 100755
|
||||
--- a/test-data/phony-guests/make-windows-img.sh
|
||||
+++ b/test-data/phony-guests/make-windows-img.sh
|
||||
@@ -37,6 +37,7 @@ fi
|
||||
|
||||
# Create a disk image.
|
||||
guestfish <<EOF
|
||||
+set-program virt-testing
|
||||
sparse windows.img-t 512M
|
||||
run
|
||||
|
||||
diff --git a/tests/test-v2v-virtio-win-iso.sh b/tests/test-v2v-virtio-win-iso.sh
|
||||
index 6e99f0f1..a8e572c5 100755
|
||||
--- a/tests/test-v2v-virtio-win-iso.sh
|
||||
+++ b/tests/test-v2v-virtio-win-iso.sh
|
||||
@@ -79,6 +79,12 @@ mktest ()
|
||||
:> "$script"
|
||||
:> "$expected"
|
||||
|
||||
+cat >> "$script" <<EOF
|
||||
+ set-program virt-testing
|
||||
+ run
|
||||
+ mount /dev/sda2 /
|
||||
+EOF
|
||||
+
|
||||
firstboot_dir="/Program Files/Guestfs/Firstboot"
|
||||
mktest "is-dir \"$firstboot_dir\"" true
|
||||
mktest "is-file \"$firstboot_dir/firstboot.bat\"" true
|
||||
@@ -91,7 +97,7 @@ for drv in netkvm vioscsi viostor; do
|
||||
done
|
||||
done
|
||||
|
||||
-guestfish --ro -a "$d/windows-sda" -i < "$script" > "$response"
|
||||
+guestfish --ro -a "$d/windows-sda" < "$script" > "$response"
|
||||
diff -u "$expected" "$response"
|
||||
|
||||
rm -r $d
|
||||
diff --git a/tests/test-v2v-windows-conversion.sh b/tests/test-v2v-windows-conversion.sh
|
||||
index f1da222a..ff94fe39 100755
|
||||
--- a/tests/test-v2v-windows-conversion.sh
|
||||
+++ b/tests/test-v2v-windows-conversion.sh
|
||||
@@ -73,6 +73,12 @@ mktest ()
|
||||
:> "$script"
|
||||
:> "$expected"
|
||||
|
||||
+cat >> "$script" <<EOF
|
||||
+ set-program virt-testing
|
||||
+ run
|
||||
+ mount /dev/sda2 /
|
||||
+EOF
|
||||
+
|
||||
firstboot_dir="/Program Files/Guestfs/Firstboot"
|
||||
mktest "is-dir \"$firstboot_dir\"" true
|
||||
mktest "is-file \"$firstboot_dir/firstboot.bat\"" true
|
||||
@@ -85,7 +91,7 @@ for drv in netkvm qxl vioscsi viostor; do
|
||||
done
|
||||
done
|
||||
|
||||
-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
|
||||
--
|
||||
2.27.0
|
||||
|
@ -0,0 +1,286 @@
|
||||
From d55dcb095a383ff924acbfbe1c81a3a1eb4f4495 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 14 Jan 2016 11:53:42 -0500
|
||||
Subject: [PATCH] RHEL 8: v2v: Disable the virt-v2v --in-place option.
|
||||
|
||||
This disables the virt-v2v --in-place option which we do not
|
||||
wish to support in RHEL.
|
||||
(See commit d0069559a939e47e5f29973ed9a69a13f0b58301).
|
||||
---
|
||||
docs/test-v2v-docs.sh | 1 +
|
||||
docs/virt-v2v.pod | 48 +----------------
|
||||
tests/Makefile.am | 2 -
|
||||
tests/test-v2v-in-place.sh | 108 -------------------------------------
|
||||
v2v/cmdline.ml | 8 +--
|
||||
5 files changed, 7 insertions(+), 160 deletions(-)
|
||||
delete mode 100755 tests/test-v2v-in-place.sh
|
||||
|
||||
diff --git a/docs/test-v2v-docs.sh b/docs/test-v2v-docs.sh
|
||||
index dd2b1233..8fef46cc 100755
|
||||
--- a/docs/test-v2v-docs.sh
|
||||
+++ b/docs/test-v2v-docs.sh
|
||||
@@ -27,6 +27,7 @@ $top_srcdir/podcheck.pl virt-v2v.pod virt-v2v \
|
||||
--debug-overlay,\
|
||||
--ic,\
|
||||
--if,\
|
||||
+--in-place,\
|
||||
--io,\
|
||||
--ip,\
|
||||
--it,\
|
||||
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
|
||||
index a19f0a73..6f9f323e 100644
|
||||
--- a/docs/virt-v2v.pod
|
||||
+++ b/docs/virt-v2v.pod
|
||||
@@ -8,10 +8,6 @@ virt-v2v - Convert a guest to use KVM
|
||||
[-o mode] [other -o* options]
|
||||
[guest|filename]
|
||||
|
||||
- virt-v2v --in-place
|
||||
- [-i mode] [other -i* options]
|
||||
- [guest|filename]
|
||||
-
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Virt-v2v converts a single guest from a foreign hypervisor to run on
|
||||
@@ -39,9 +35,6 @@ 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 conversion (I<--in-place>) only uses the I<-i*> options and
|
||||
-modifies the source guest in-place. (See L</In-place conversion>
|
||||
-below.)
|
||||
|
||||
=head2 Other virt-v2v topics
|
||||
|
||||
@@ -301,20 +294,6 @@ For I<-i disk> only, this specifies the format of the input disk
|
||||
image. For other input methods you should specify the input
|
||||
format in the metadata.
|
||||
|
||||
-=item B<--in-place>
|
||||
-
|
||||
-Do not create an output virtual machine in the target hypervisor.
|
||||
-Instead, adjust the guest OS in the source VM to run in the input
|
||||
-hypervisor.
|
||||
-
|
||||
-This mode is meant for integration with other toolsets, which take the
|
||||
-responsibility of converting the VM configuration, providing for
|
||||
-rollback in case of errors, transforming the storage, etc.
|
||||
-
|
||||
-See L</In-place conversion> below.
|
||||
-
|
||||
-Conflicts with all I<-o *> options.
|
||||
-
|
||||
=item B<-io> OPTION=VALUE
|
||||
|
||||
Set input option(s) related to the current input mode or transport.
|
||||
@@ -1332,7 +1311,7 @@ have at least 100 available inodes.
|
||||
=head3 Minimum free space check in the host
|
||||
|
||||
You must have sufficient free space in the host directory used to
|
||||
-store temporary overlays (except in I<--in-place> mode). To find out
|
||||
+store temporary overlays. To find out
|
||||
which directory this is, use:
|
||||
|
||||
$ df -h "`guestfish get-cachedir`"
|
||||
@@ -1435,31 +1414,6 @@ that instead.
|
||||
</devices>
|
||||
</domain>
|
||||
|
||||
-=head2 In-place conversion
|
||||
-
|
||||
-It is also possible to use virt-v2v in scenarios where a foreign VM
|
||||
-has already been imported into a KVM-based hypervisor, but still needs
|
||||
-adjustments in the guest to make it run in the new virtual hardware.
|
||||
-
|
||||
-In that case it is assumed that a third-party tool has created the
|
||||
-target VM in the supported KVM-based hypervisor based on the source VM
|
||||
-configuration and contents, but using virtual devices more appropriate
|
||||
-for KVM (e.g. virtio storage and network, etc.).
|
||||
-
|
||||
-Then, to make the guest OS boot and run in the changed environment,
|
||||
-one can use:
|
||||
-
|
||||
- virt-v2v -ic qemu:///system converted_vm --in-place
|
||||
-
|
||||
-Virt-v2v will analyze the configuration of C<converted_vm> in the
|
||||
-C<qemu:///system> libvirt instance, and apply various fixups to the
|
||||
-guest OS configuration to make it match the VM configuration. This
|
||||
-may include installing virtio drivers, configuring the bootloader, the
|
||||
-mountpoints, the network interfaces, and so on.
|
||||
-
|
||||
-Should an error occur during the operation, virt-v2v exits with an
|
||||
-error code leaving the VM in an undefined state.
|
||||
-
|
||||
=head2 Machine readable output
|
||||
|
||||
The I<--machine-readable> option can be used to make the output more
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||
index 871dc3c9..eee4e1af 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -76,7 +76,6 @@ TESTS = \
|
||||
test-v2v-floppy.sh \
|
||||
test-v2v-i-disk.sh \
|
||||
test-v2v-i-ova.sh \
|
||||
- test-v2v-in-place.sh \
|
||||
test-v2v-mac.sh \
|
||||
test-v2v-machine-readable.sh \
|
||||
test-v2v-networks-and-bridges.sh \
|
||||
@@ -225,7 +224,6 @@ EXTRA_DIST += \
|
||||
test-v2v-i-vmx-3.vmx \
|
||||
test-v2v-i-vmx-4.vmx \
|
||||
test-v2v-i-vmx-5.vmx \
|
||||
- test-v2v-in-place.sh \
|
||||
test-v2v-it-vddk-io-query.sh \
|
||||
test-v2v-machine-readable.sh \
|
||||
test-v2v-mac-expected.xml \
|
||||
diff --git a/tests/test-v2v-in-place.sh b/tests/test-v2v-in-place.sh
|
||||
deleted file mode 100755
|
||||
index 6f7d78f3..00000000
|
||||
--- a/tests/test-v2v-in-place.sh
|
||||
+++ /dev/null
|
||||
@@ -1,108 +0,0 @@
|
||||
-#!/bin/bash -
|
||||
-# libguestfs virt-v2v test script
|
||||
-# Copyright (C) 2014 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 --in-place.
|
||||
-
|
||||
-unset CDPATH
|
||||
-export LANG=C
|
||||
-set -e
|
||||
-
|
||||
-$TEST_FUNCTIONS
|
||||
-skip_if_skipped
|
||||
-skip_if_backend uml
|
||||
-skip_unless_phony_guest windows.img
|
||||
-
|
||||
-img_base="$abs_top_builddir/test-data/phony-guests/windows.img"
|
||||
-
|
||||
-export VIRT_TOOLS_DATA_DIR="$top_srcdir/test-data/fake-virt-tools"
|
||||
-export VIRTIO_WIN="$top_srcdir/test-data/fake-virtio-win"
|
||||
-
|
||||
-d=$PWD/test-v2v-in-place.d
|
||||
-rm -rf $d
|
||||
-mkdir $d
|
||||
-
|
||||
-img="$d/test.qcow2"
|
||||
-rm -f $img
|
||||
-qemu-img create -f qcow2 -b $img_base -o compat=1.1,backing_fmt=raw $img
|
||||
-md5="$(do_md5 $img_base)"
|
||||
-
|
||||
-libvirt_xml="$d/test.xml"
|
||||
-rm -f $libvirt_xml
|
||||
-n=windows-overlay
|
||||
-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 --debug-gc -i libvirt -ic "test://$libvirt_xml" $n --in-place
|
||||
-
|
||||
-# Test that the drivers have been copied over into the guest
|
||||
-script="$d/test.fish"
|
||||
-expected="$d/expected"
|
||||
-response="$d/response"
|
||||
-
|
||||
-mktest ()
|
||||
-{
|
||||
- local cmd="$1" exp="$2"
|
||||
-
|
||||
- echo "echo '$cmd'" >> "$script"
|
||||
- echo "$cmd" >> "$expected"
|
||||
-
|
||||
- echo "$cmd" >> "$script"
|
||||
- echo "$exp" >> "$expected"
|
||||
-}
|
||||
-
|
||||
-:> "$script"
|
||||
-:> "$expected"
|
||||
-
|
||||
-firstboot_dir="/Program Files/Guestfs/Firstboot"
|
||||
-mktest "is-dir \"$firstboot_dir\"" true
|
||||
-mktest "is-file \"$firstboot_dir/firstboot.bat\"" true
|
||||
-mktest "is-dir \"$firstboot_dir/scripts\"" true
|
||||
-virtio_dir="/Windows/Drivers/VirtIO"
|
||||
-mktest "is-dir \"$virtio_dir\"" true
|
||||
-for drv in netkvm qxl vioscsi viostor; do
|
||||
- for sfx in cat inf sys; do
|
||||
- mktest "is-file \"$virtio_dir/$drv.$sfx\"" true
|
||||
- done
|
||||
-done
|
||||
-
|
||||
-guestfish --ro -a "$img" -i < "$script" > "$response"
|
||||
-diff -u "$expected" "$response"
|
||||
-
|
||||
-# Test the base image remained untouched
|
||||
-test "$md5" = "$(do_md5 $img_base)"
|
||||
-
|
||||
-# Clean up.
|
||||
-rm -r $d
|
||||
diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml
|
||||
index df69e2e0..7b79d462 100644
|
||||
--- a/v2v/cmdline.ml
|
||||
+++ b/v2v/cmdline.ml
|
||||