Rebase to upstream 1.45.96.
resolves: rhbz#2011713 Add virtio-transitional for older guests when converting to q35 resolves: rhbz#1942325
This commit is contained in:
parent
7ea0c8cf97
commit
c553c74d10
@ -1,72 +0,0 @@
|
|||||||
From 24fdb088b1856abec0974a428c424fe598597079 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
|
||||||
Date: Sat, 18 Dec 2021 12:01:19 +0000
|
|
||||||
Subject: [PATCH] input, output: Use Option.may for some Nbdkit calls
|
|
||||||
|
|
||||||
Option.may (Nbdkit.add_arg cmd "port") port;
|
|
||||||
|
|
||||||
is completely equivalent to:
|
|
||||||
|
|
||||||
(match port with
|
|
||||||
| Some s -> Nbdkit.add_arg cmd "port" s
|
|
||||||
| None -> ());
|
|
||||||
|
|
||||||
Updates: commit d50966c2a480bda033f6e63bb797f86c13d576bd
|
|
||||||
---
|
|
||||||
input/nbdkit_curl.ml | 4 +---
|
|
||||||
input/nbdkit_ssh.ml | 8 ++------
|
|
||||||
output/output_rhv_upload.ml | 4 +---
|
|
||||||
3 files changed, 4 insertions(+), 12 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/input/nbdkit_curl.ml b/input/nbdkit_curl.ml
|
|
||||||
index d6793b22..081c598e 100644
|
|
||||||
--- a/input/nbdkit_curl.ml
|
|
||||||
+++ b/input/nbdkit_curl.ml
|
|
||||||
@@ -57,9 +57,7 @@ let create_curl ?bandwidth ?cookie_script ?cookie_script_renew ?cor
|
|
||||||
|
|
||||||
(* https://bugzilla.redhat.com/show_bug.cgi?id=1146007#c10 *)
|
|
||||||
Nbdkit.add_arg cmd "timeout" "2000";
|
|
||||||
- (match cookie_script with
|
|
||||||
- | Some s -> Nbdkit.add_arg cmd "cookie-script" s
|
|
||||||
- | None -> ());
|
|
||||||
+ Option.may (Nbdkit.add_arg cmd "cookie-script") cookie_script;
|
|
||||||
(match cookie_script_renew with
|
|
||||||
| Some i -> Nbdkit.add_arg cmd "cookie-script-renew" (string_of_int i)
|
|
||||||
| None -> ());
|
|
||||||
diff --git a/input/nbdkit_ssh.ml b/input/nbdkit_ssh.ml
|
|
||||||
index ce972d7d..0a6d8425 100644
|
|
||||||
--- a/input/nbdkit_ssh.ml
|
|
||||||
+++ b/input/nbdkit_ssh.ml
|
|
||||||
@@ -61,12 +61,8 @@ let create_ssh ?bandwidth ?cor ~password ?port ~server ?user path =
|
|
||||||
let cmd = Nbdkit.create "ssh" in
|
|
||||||
Nbdkit.add_arg cmd "host" server;
|
|
||||||
Nbdkit.add_arg cmd "path" path;
|
|
||||||
- (match port with
|
|
||||||
- | Some s -> Nbdkit.add_arg cmd "port" s
|
|
||||||
- | None -> ());
|
|
||||||
- (match user with
|
|
||||||
- | Some s -> Nbdkit.add_arg cmd "user" s
|
|
||||||
- | None -> ());
|
|
||||||
+ Option.may (Nbdkit.add_arg cmd "port") port;
|
|
||||||
+ Option.may (Nbdkit.add_arg cmd "user") user;
|
|
||||||
|
|
||||||
(* Retry filter (if it exists) can be used to get around brief
|
|
||||||
* interruptions in service. It must be closest to the plugin.
|
|
||||||
diff --git a/output/output_rhv_upload.ml b/output/output_rhv_upload.ml
|
|
||||||
index 7cedfff9..91e7be45 100644
|
|
||||||
--- a/output/output_rhv_upload.ml
|
|
||||||
+++ b/output/output_rhv_upload.ml
|
|
||||||
@@ -345,9 +345,7 @@ e command line has to match the number of guest disk images (for this guest: %d)
|
|
||||||
(* Create the nbdkit instance. *)
|
|
||||||
Nbdkit.add_arg cmd "size" (Int64.to_string size);
|
|
||||||
Nbdkit.add_arg cmd "url" destination_url;
|
|
||||||
- (match rhv_cafile with
|
|
||||||
- | None -> ()
|
|
||||||
- | Some cafile -> Nbdkit.add_arg cmd "cafile" cafile);
|
|
||||||
+ Option.may (Nbdkit.add_arg cmd "cafile") rhv_cafile;
|
|
||||||
if not rhv_verifypeer then
|
|
||||||
Nbdkit.add_arg cmd "insecure" "true";
|
|
||||||
if is_ovirt_host then
|
|
||||||
--
|
|
||||||
2.19.1.3.g30247aa5d201
|
|
||||||
|
|
44
0001-lib-types-reformat-string_of_guestcaps.patch
Normal file
44
0001-lib-types-reformat-string_of_guestcaps.patch
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
From dc69bb6033bd41b79e6203080059d4f3b0eb8027 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Date: Thu, 6 Jan 2022 15:09:02 +0100
|
||||||
|
Subject: [PATCH] lib/types: reformat "string_of_guestcaps"
|
||||||
|
|
||||||
|
The printf format string in "string_of_guestcaps" is hard to read, because
|
||||||
|
it is not indented properly wrt. the rest of the source code. Indent it
|
||||||
|
properly without changing its behavior.
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
|
||||||
|
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Message-Id: <20220106140910.13695-2-lersek@redhat.com>
|
||||||
|
Acked-by: Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
---
|
||||||
|
lib/types.ml | 13 +++++++------
|
||||||
|
1 file changed, 7 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/types.ml b/lib/types.ml
|
||||||
|
index 894391ba..dc3308dc 100644
|
||||||
|
--- a/lib/types.ml
|
||||||
|
+++ b/lib/types.ml
|
||||||
|
@@ -423,12 +423,13 @@ let string_of_machine = function
|
||||||
|
|
||||||
|
let string_of_guestcaps gcaps =
|
||||||
|
sprintf "\
|
||||||
|
-gcaps_block_bus = %s
|
||||||
|
-gcaps_net_bus = %s
|
||||||
|
-gcaps_machine = %s
|
||||||
|
-gcaps_arch = %s
|
||||||
|
-gcaps_acpi = %b
|
||||||
|
-" (string_of_block_type gcaps.gcaps_block_bus)
|
||||||
|
+ gcaps_block_bus = %s\n\
|
||||||
|
+ gcaps_net_bus = %s\n\
|
||||||
|
+ gcaps_machine = %s\n\
|
||||||
|
+ gcaps_arch = %s\n\
|
||||||
|
+ gcaps_acpi = %b\n\
|
||||||
|
+ "
|
||||||
|
+ (string_of_block_type gcaps.gcaps_block_bus)
|
||||||
|
(string_of_net_type gcaps.gcaps_net_bus)
|
||||||
|
(string_of_machine gcaps.gcaps_machine)
|
||||||
|
gcaps.gcaps_arch
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -1,26 +0,0 @@
|
|||||||
From 702a511b7f3379102ec5d267a7a43bdd47f3e594 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
|
||||||
Date: Sat, 18 Dec 2021 13:22:48 +0000
|
|
||||||
Subject: [PATCH] input/nbdkit_curl.ml: Fix typo in commented code
|
|
||||||
|
|
||||||
Fixes: commit 255722cbf39afc0b012e2ac00d16fa6ba2f8c21f
|
|
||||||
---
|
|
||||||
input/nbdkit_curl.ml | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/input/nbdkit_curl.ml b/input/nbdkit_curl.ml
|
|
||||||
index 081c598e..aacedb78 100644
|
|
||||||
--- a/input/nbdkit_curl.ml
|
|
||||||
+++ b/input/nbdkit_curl.ml
|
|
||||||
@@ -65,7 +65,7 @@ let create_curl ?bandwidth ?cookie_script ?cookie_script_renew ?cor
|
|
||||||
|
|
||||||
(* For lots of extra debugging, uncomment one or both lines. *)
|
|
||||||
(* Nbdkit.add_arg cmd "--debug" "curl.verbose=1"; *)
|
|
||||||
- (* Nbdkit.add_arg cnd "--debug" "curl.scripts=1"; *)
|
|
||||||
+ (* Nbdkit.add_arg cmd "--debug" "curl.scripts=1"; *)
|
|
||||||
|
|
||||||
(* Retry filter (if it exists) can be used to get around brief
|
|
||||||
* interruptions in service. It must be closest to the plugin.
|
|
||||||
--
|
|
||||||
2.19.1.3.g30247aa5d201
|
|
||||||
|
|
55
0002-lib-types-update-string_of_guestcaps.patch
Normal file
55
0002-lib-types-update-string_of_guestcaps.patch
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
From 08786886302cceb7ee73cfa6c01325f690a3c094 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Date: Thu, 6 Jan 2022 15:09:03 +0100
|
||||||
|
Subject: [PATCH] lib/types: update "string_of_guestcaps"
|
||||||
|
|
||||||
|
The "string_of_guestcaps" function is out of date; the following commits
|
||||||
|
did not update it, when they introduced new fields to the "guestcaps"
|
||||||
|
record type:
|
||||||
|
|
||||||
|
- d295d6e510a4 ("v2v: Extend guestcaps to record drivers for virtio-rng,
|
||||||
|
balloon and pvpanic.", 2017-04-06)
|
||||||
|
|
||||||
|
- 05f780c16f01 ("v2v: support configuration of viosock driver",
|
||||||
|
2021-02-26)
|
||||||
|
|
||||||
|
Print those fields now.
|
||||||
|
|
||||||
|
Fixes: d295d6e510a4fb251d545c52c0a9d6dccabe6f78
|
||||||
|
Fixes: 05f780c16f0135c657615520c2245b42de1efc3e
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
|
||||||
|
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Message-Id: <20220106140910.13695-3-lersek@redhat.com>
|
||||||
|
Acked-by: Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
---
|
||||||
|
lib/types.ml | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/lib/types.ml b/lib/types.ml
|
||||||
|
index dc3308dc..52db1f9e 100644
|
||||||
|
--- a/lib/types.ml
|
||||||
|
+++ b/lib/types.ml
|
||||||
|
@@ -425,12 +425,20 @@ let string_of_guestcaps gcaps =
|
||||||
|
sprintf "\
|
||||||
|
gcaps_block_bus = %s\n\
|
||||||
|
gcaps_net_bus = %s\n\
|
||||||
|
+ gcaps_virtio_rng = %b\n\
|
||||||
|
+ gcaps_virtio_balloon = %b\n\
|
||||||
|
+ gcaps_isa_pvpanic = %b\n\
|
||||||
|
+ gcaps_virtio_socket = %b\n\
|
||||||
|
gcaps_machine = %s\n\
|
||||||
|
gcaps_arch = %s\n\
|
||||||
|
gcaps_acpi = %b\n\
|
||||||
|
"
|
||||||
|
(string_of_block_type gcaps.gcaps_block_bus)
|
||||||
|
(string_of_net_type gcaps.gcaps_net_bus)
|
||||||
|
+ gcaps.gcaps_virtio_rng
|
||||||
|
+ gcaps.gcaps_virtio_balloon
|
||||||
|
+ gcaps.gcaps_isa_pvpanic
|
||||||
|
+ gcaps.gcaps_virtio_socket
|
||||||
|
(string_of_machine gcaps.gcaps_machine)
|
||||||
|
gcaps.gcaps_arch
|
||||||
|
gcaps.gcaps_acpi
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,95 @@
|
|||||||
|
From 789017805ad0ddfacfb16d39313ef8b2f8f478ac Mon Sep 17 00:00:00 2001
|
||||||
|
From: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Date: Thu, 6 Jan 2022 15:09:04 +0100
|
||||||
|
Subject: [PATCH] lib/types: introduce the "gcaps_virtio_1_0" guest capability
|
||||||
|
|
||||||
|
Add a new field to the "guestcaps" record to track whether the guest
|
||||||
|
supports the virtio devices that it does at the virtio-1.0 protocol level.
|
||||||
|
|
||||||
|
Virt-v2v's current assumption is that virtio-1.0 is supported by any
|
||||||
|
guest, namely for those virtio devices specifically that the guest
|
||||||
|
supports -- which in fact may be the empty set. Make this assumption
|
||||||
|
explicit by setting the new field to "true" in "convert/convert_linux.ml"
|
||||||
|
and "convert/convert_windows.ml".
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
|
||||||
|
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Message-Id: <20220106140910.13695-4-lersek@redhat.com>
|
||||||
|
Acked-by: Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
---
|
||||||
|
convert/convert_linux.ml | 1 +
|
||||||
|
convert/convert_windows.ml | 1 +
|
||||||
|
lib/types.ml | 3 +++
|
||||||
|
lib/types.mli | 4 ++++
|
||||||
|
4 files changed, 9 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml
|
||||||
|
index d49ecec0..3f1114ad 100644
|
||||||
|
--- a/convert/convert_linux.ml
|
||||||
|
+++ b/convert/convert_linux.ml
|
||||||
|
@@ -155,6 +155,7 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ =
|
||||||
|
gcaps_machine = machine;
|
||||||
|
gcaps_arch = Utils.kvm_arch inspect.i_arch;
|
||||||
|
gcaps_acpi = acpi;
|
||||||
|
+ gcaps_virtio_1_0 = true;
|
||||||
|
} in
|
||||||
|
|
||||||
|
guestcaps
|
||||||
|
diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml
|
||||||
|
index 0ebffb15..30e494ea 100644
|
||||||
|
--- a/convert/convert_windows.ml
|
||||||
|
+++ b/convert/convert_windows.ml
|
||||||
|
@@ -259,6 +259,7 @@ let convert (g : G.guestfs) _ inspect _ static_ips =
|
||||||
|
gcaps_machine = machine;
|
||||||
|
gcaps_arch = Utils.kvm_arch inspect.i_arch;
|
||||||
|
gcaps_acpi = true;
|
||||||
|
+ gcaps_virtio_1_0 = true;
|
||||||
|
} in
|
||||||
|
|
||||||
|
guestcaps
|
||||||
|
diff --git a/lib/types.ml b/lib/types.ml
|
||||||
|
index 52db1f9e..50c41918 100644
|
||||||
|
--- a/lib/types.ml
|
||||||
|
+++ b/lib/types.ml
|
||||||
|
@@ -404,6 +404,7 @@ type guestcaps = {
|
||||||
|
gcaps_machine : guestcaps_machine;
|
||||||
|
gcaps_arch : string;
|
||||||
|
gcaps_acpi : bool;
|
||||||
|
+ gcaps_virtio_1_0 : bool;
|
||||||
|
}
|
||||||
|
and guestcaps_block_type = Virtio_blk | IDE
|
||||||
|
and guestcaps_net_type = Virtio_net | E1000 | RTL8139
|
||||||
|
@@ -432,6 +433,7 @@ let string_of_guestcaps gcaps =
|
||||||
|
gcaps_machine = %s\n\
|
||||||
|
gcaps_arch = %s\n\
|
||||||
|
gcaps_acpi = %b\n\
|
||||||
|
+ gcaps_virtio_1_0 = %b\n\
|
||||||
|
"
|
||||||
|
(string_of_block_type gcaps.gcaps_block_bus)
|
||||||
|
(string_of_net_type gcaps.gcaps_net_bus)
|
||||||
|
@@ -442,6 +444,7 @@ let string_of_guestcaps gcaps =
|
||||||
|
(string_of_machine gcaps.gcaps_machine)
|
||||||
|
gcaps.gcaps_arch
|
||||||
|
gcaps.gcaps_acpi
|
||||||
|
+ gcaps.gcaps_virtio_1_0
|
||||||
|
|
||||||
|
type target_buses = {
|
||||||
|
target_virtio_blk_bus : target_bus_slot array;
|
||||||
|
diff --git a/lib/types.mli b/lib/types.mli
|
||||||
|
index 02913c0c..0b9b6e25 100644
|
||||||
|
--- a/lib/types.mli
|
||||||
|
+++ b/lib/types.mli
|
||||||
|
@@ -270,6 +270,10 @@ type guestcaps = {
|
||||||
|
gcaps_machine : guestcaps_machine; (** Machine model. *)
|
||||||
|
gcaps_arch : string; (** Architecture that KVM must emulate. *)
|
||||||
|
gcaps_acpi : bool; (** True if guest supports acpi. *)
|
||||||
|
+
|
||||||
|
+ gcaps_virtio_1_0 : bool;
|
||||||
|
+ (** The guest supports the virtio devices that it does at the virtio-1.0
|
||||||
|
+ protocol level. *)
|
||||||
|
}
|
||||||
|
(** Guest capabilities after conversion. eg. Was virtio found or installed? *)
|
||||||
|
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -1,166 +0,0 @@
|
|||||||
From 07b12fe99fb9cf0b75fe45d3eaa07b4bbc1bbe89 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Laszlo Ersek <lersek@redhat.com>
|
|
||||||
Date: Mon, 20 Dec 2021 14:56:40 +0100
|
|
||||||
Subject: [PATCH] output_rhv: restrict block status collection to the old RHV
|
|
||||||
output
|
|
||||||
|
|
||||||
Nir reports that, despite the comment we removed in commit a2a4f7a09996,
|
|
||||||
we generally cannot access the output NBD servers in the finalization
|
|
||||||
stage. In particular, in the "rhv_upload_finalize" function
|
|
||||||
[output/output_rhv_upload.ml], the output disks are disconnected before
|
|
||||||
"create_ovf" is called.
|
|
||||||
|
|
||||||
Consequently, the "get_disk_allocated" call in the "create_ovf" ->
|
|
||||||
"add_disks" -> "get_disk_allocated" chain fails.
|
|
||||||
|
|
||||||
Rich suggests that we explicitly restrict the "get_disk_allocated" call
|
|
||||||
with a new optional boolean parameter to the one output plugin that really
|
|
||||||
needs it, namely the old RHV one.
|
|
||||||
|
|
||||||
Accordingly, revert the VDSM test case to its state at (a2a4f7a09996^).
|
|
||||||
|
|
||||||
Cc: Nir Soffer <nsoffer@redhat.com>
|
|
||||||
Fixes: a2a4f7a09996a5e66d027d0d9692e083eb0a8128
|
|
||||||
Reported-by: Nir Soffer <nsoffer@redhat.com>
|
|
||||||
Suggested-by: Richard W.M. Jones <rjones@redhat.com>
|
|
||||||
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2034240
|
|
||||||
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
|
||||||
Message-Id: <20211220135640.12436-1-lersek@redhat.com>
|
|
||||||
Tested-by: Nir Soffer <nsoffer@redhat.com>
|
|
||||||
[lersek@redhat.com: drop parens around condition in "if"; thanks: Rich]
|
|
||||||
Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
|
|
||||||
---
|
|
||||||
lib/create_ovf.ml | 35 +++++++++++++---------
|
|
||||||
lib/create_ovf.mli | 3 +-
|
|
||||||
output/output_rhv.ml | 4 +--
|
|
||||||
tests/test-v2v-o-vdsm-options.ovf.expected | 4 +--
|
|
||||||
4 files changed, 27 insertions(+), 19 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/create_ovf.ml b/lib/create_ovf.ml
|
|
||||||
index dbac3405..9d06bd23 100644
|
|
||||||
--- a/lib/create_ovf.ml
|
|
||||||
+++ b/lib/create_ovf.ml
|
|
||||||
@@ -531,7 +531,8 @@ let rec create_ovf source inspect
|
|
||||||
{ output_name; guestcaps; target_firmware; target_nics }
|
|
||||||
sizes
|
|
||||||
output_alloc output_format
|
|
||||||
- sd_uuid image_uuids vol_uuids dir vm_uuid ovf_flavour =
|
|
||||||
+ sd_uuid image_uuids vol_uuids ?(need_actual_sizes = false) dir
|
|
||||||
+ vm_uuid ovf_flavour =
|
|
||||||
assert (List.length sizes = List.length vol_uuids);
|
|
||||||
|
|
||||||
let memsize_mb = source.s_memory /^ 1024L /^ 1024L in
|
|
||||||
@@ -745,7 +746,7 @@ let rec create_ovf source inspect
|
|
||||||
|
|
||||||
(* Add disks to the OVF XML. *)
|
|
||||||
add_disks sizes guestcaps output_alloc output_format
|
|
||||||
- sd_uuid image_uuids vol_uuids dir ovf_flavour ovf;
|
|
||||||
+ sd_uuid image_uuids vol_uuids need_actual_sizes dir ovf_flavour ovf;
|
|
||||||
|
|
||||||
(* Old virt-v2v ignored removable media. XXX *)
|
|
||||||
|
|
||||||
@@ -791,7 +792,7 @@ and get_flavoured_section ovf ovirt_path rhv_path rhv_path_attr = function
|
|
||||||
|
|
||||||
(* This modifies the OVF DOM, adding a section for each disk. *)
|
|
||||||
and add_disks sizes guestcaps output_alloc output_format
|
|
||||||
- sd_uuid image_uuids vol_uuids dir ovf_flavour ovf =
|
|
||||||
+ sd_uuid image_uuids vol_uuids need_actual_sizes dir ovf_flavour ovf =
|
|
||||||
let references =
|
|
||||||
let nodes = path_to_nodes ovf ["ovf:Envelope"; "References"] in
|
|
||||||
match nodes with
|
|
||||||
@@ -839,7 +840,12 @@ and add_disks sizes guestcaps output_alloc output_format
|
|
||||||
b /^ 1073741824L
|
|
||||||
in
|
|
||||||
let size_gb = bytes_to_gb size in
|
|
||||||
- let actual_size = get_disk_allocated ~dir ~disknr:i in
|
|
||||||
+ let actual_size =
|
|
||||||
+ if need_actual_sizes then
|
|
||||||
+ get_disk_allocated ~dir ~disknr:i
|
|
||||||
+ else
|
|
||||||
+ None
|
|
||||||
+ in
|
|
||||||
|
|
||||||
let format_for_rhv =
|
|
||||||
match output_format with
|
|
||||||
@@ -891,16 +897,17 @@ and add_disks sizes guestcaps output_alloc output_format
|
|
||||||
"ovf:disk-type", "System"; (* RHBZ#744538 *)
|
|
||||||
"ovf:boot", if is_bootable_drive then "True" else "False";
|
|
||||||
] in
|
|
||||||
- (* Ovirt-engine considers the "ovf:actual_size" attribute mandatory. If
|
|
||||||
- * we don't know the actual size, we must create the attribute with
|
|
||||||
- * empty contents.
|
|
||||||
- *)
|
|
||||||
- List.push_back attrs
|
|
||||||
- ("ovf:actual_size",
|
|
||||||
- match actual_size with
|
|
||||||
- | None -> ""
|
|
||||||
- | Some actual_size -> Int64.to_string (bytes_to_gb actual_size)
|
|
||||||
- );
|
|
||||||
+ if need_actual_sizes then
|
|
||||||
+ (* Ovirt-engine considers the "ovf:actual_size" attribute mandatory.
|
|
||||||
+ * If we don't know the actual size, we must create the attribute
|
|
||||||
+ * with empty contents.
|
|
||||||
+ *)
|
|
||||||
+ List.push_back attrs
|
|
||||||
+ ("ovf:actual_size",
|
|
||||||
+ match actual_size with
|
|
||||||
+ | None -> ""
|
|
||||||
+ | Some actual_size -> Int64.to_string (bytes_to_gb actual_size)
|
|
||||||
+ );
|
|
||||||
e "Disk" !attrs [] in
|
|
||||||
append_child disk disk_section;
|
|
||||||
|
|
||||||
diff --git a/lib/create_ovf.mli b/lib/create_ovf.mli
|
|
||||||
index 0d1cc5a9..d6d4e62e 100644
|
|
||||||
--- a/lib/create_ovf.mli
|
|
||||||
+++ b/lib/create_ovf.mli
|
|
||||||
@@ -46,7 +46,8 @@ val ovf_flavour_to_string : ovf_flavour -> string
|
|
||||||
val create_ovf : Types.source -> Types.inspect ->
|
|
||||||
Types.target_meta -> int64 list ->
|
|
||||||
Types.output_allocation -> string -> string -> string list ->
|
|
||||||
- string list -> string -> string -> ovf_flavour -> DOM.doc
|
|
||||||
+ string list -> ?need_actual_sizes:bool -> string -> string ->
|
|
||||||
+ ovf_flavour -> DOM.doc
|
|
||||||
(** Create the OVF file.
|
|
||||||
|
|
||||||
Actually a {!DOM} document is created, not a file. It can be written
|
|
||||||
diff --git a/output/output_rhv.ml b/output/output_rhv.ml
|
|
||||||
index b902a7ee..6a67b7aa 100644
|
|
||||||
--- a/output/output_rhv.ml
|
|
||||||
+++ b/output/output_rhv.ml
|
|
||||||
@@ -183,8 +183,8 @@ and rhv_finalize dir source inspect target_meta
|
|
||||||
(* Create the metadata. *)
|
|
||||||
let ovf =
|
|
||||||
Create_ovf.create_ovf source inspect target_meta sizes
|
|
||||||
- output_alloc output_format esd_uuid image_uuids vol_uuids dir vm_uuid
|
|
||||||
- Create_ovf.RHVExportStorageDomain in
|
|
||||||
+ output_alloc output_format esd_uuid image_uuids vol_uuids
|
|
||||||
+ ~need_actual_sizes:true dir vm_uuid Create_ovf.RHVExportStorageDomain in
|
|
||||||
|
|
||||||
(* Write it to the metadata file. *)
|
|
||||||
let dir = esd_mp // esd_uuid // "master" // "vms" // vm_uuid in
|
|
||||||
diff --git a/tests/test-v2v-o-vdsm-options.ovf.expected b/tests/test-v2v-o-vdsm-options.ovf.expected
|
|
||||||
index bd5b5e7d..23ca180f 100644
|
|
||||||
--- a/tests/test-v2v-o-vdsm-options.ovf.expected
|
|
||||||
+++ b/tests/test-v2v-o-vdsm-options.ovf.expected
|
|
||||||
@@ -2,7 +2,7 @@
|
|
||||||
<ovf:Envelope xmlns:rasd='http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData' xmlns:vssd='http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:ovf='http://schemas.dmtf.org/ovf/envelope/1/' xmlns:ovirt='http://www.ovirt.org/ovf' ovf:version='0.9'>
|
|
||||||
<!-- generated by virt-v2v -->
|
|
||||||
<References>
|
|
||||||
- <File ovf:href='VOL' ovf:id='VOL' ovf:description='generated by virt-v2v' ovf:size='#SIZE#'/>
|
|
||||||
+ <File ovf:href='VOL' ovf:id='VOL' ovf:description='generated by virt-v2v'/>
|
|
||||||
</References>
|
|
||||||
<NetworkSection>
|
|
||||||
<Info>List of networks</Info>
|
|
||||||
@@ -10,7 +10,7 @@
|
|
||||||
</NetworkSection>
|
|
||||||
<DiskSection>
|
|
||||||
<Info>List of Virtual Disks</Info>
|
|
||||||
- <Disk ovf:diskId='IMAGE' ovf:size='1' ovf:capacity='536870912' ovf:fileRef='VOL' ovf:parentRef='' ovf:vm_snapshot_id='#UUID#' ovf:volume-format='COW' ovf:volume-type='Sparse' ovf:format='http://en.wikipedia.org/wiki/Byte' ovf:disk-interface='VirtIO' ovf:disk-type='System' ovf:boot='True' ovf:actual_size='1'/>
|
|
||||||
+ <Disk ovf:diskId='IMAGE' ovf:size='1' ovf:capacity='536870912' ovf:fileRef='VOL' ovf:parentRef='' ovf:vm_snapshot_id='#UUID#' ovf:volume-format='COW' ovf:volume-type='Sparse' ovf:format='http://en.wikipedia.org/wiki/Byte' ovf:disk-interface='VirtIO' ovf:disk-type='System' ovf:boot='True'/>
|
|
||||||
</DiskSection>
|
|
||||||
<VirtualSystem ovf:id='VM'>
|
|
||||||
<Name>windows</Name>
|
|
||||||
--
|
|
||||||
2.19.1.3.g30247aa5d201
|
|
||||||
|
|
118
0004-output-create_libvirt_xml-pick-virtio-transitional-m.patch
Normal file
118
0004-output-create_libvirt_xml-pick-virtio-transitional-m.patch
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
From e4cf85bd3ad44aed28cf3e8d3bfd67fec38ebdab Mon Sep 17 00:00:00 2001
|
||||||
|
From: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Date: Thu, 6 Jan 2022 15:09:05 +0100
|
||||||
|
Subject: [PATCH] output/create_libvirt_xml: pick "virtio-transitional" models
|
||||||
|
when needed
|
||||||
|
|
||||||
|
In the domain XML we generate, we do not assign PCI B/D/F addresses to
|
||||||
|
devices; that job is left to libvirtd. When using the Q35 machine type,
|
||||||
|
libvirtd places the virtio devices into PCI Express Root Ports. As a
|
||||||
|
consequence, QEMU disables virtio-0.9.5 support on these devices, and so
|
||||||
|
guest OSes without virtio-1.0 drivers cannot drive them.
|
||||||
|
|
||||||
|
Prevent QEMU from turning off the virtio-0.9.5 ("legacy") protocol by
|
||||||
|
specifying the "virtio-transitional" (not "virtio") model for our virtio
|
||||||
|
devices:
|
||||||
|
|
||||||
|
- For non-disk devices, simply change the value of the existent "model"
|
||||||
|
attribute.
|
||||||
|
|
||||||
|
- For disk devices, add the "model" attribute as a new one.
|
||||||
|
|
||||||
|
(In fact, libvirtd doesn't (only) add the "disable_legacy=off" QEMU device
|
||||||
|
property for the "virtio-transitional" devices -- libvirtd even moves
|
||||||
|
these devices from PCI Express Root Ports to a dedicated
|
||||||
|
"pcie-to-pci-bridge". This has the same effect on QEMU.)
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
|
||||||
|
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Message-Id: <20220106140910.13695-5-lersek@redhat.com>
|
||||||
|
Acked-by: Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
---
|
||||||
|
output/create_libvirt_xml.ml | 28 ++++++++++++++++++----------
|
||||||
|
1 file changed, 18 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/output/create_libvirt_xml.ml b/output/create_libvirt_xml.ml
|
||||||
|
index 9413cc0b..87bfab17 100644
|
||||||
|
--- a/output/create_libvirt_xml.ml
|
||||||
|
+++ b/output/create_libvirt_xml.ml
|
||||||
|
@@ -312,18 +312,26 @@ let create_libvirt_xml ?pool source inspect
|
||||||
|
(* The devices. *)
|
||||||
|
let devices = ref [] in
|
||||||
|
|
||||||
|
+ (* This will affect all of the virtio devices (if any). *)
|
||||||
|
+ let virtio_transitional =
|
||||||
|
+ guestcaps.gcaps_machine = Q35 && not guestcaps.gcaps_virtio_1_0 in
|
||||||
|
+ let virtio_model =
|
||||||
|
+ if virtio_transitional then "virtio-transitional" else "virtio" in
|
||||||
|
+
|
||||||
|
(* Fixed and removable disks. *)
|
||||||
|
let () =
|
||||||
|
- let make_disk bus_name drive_prefix i = function
|
||||||
|
+ let make_disk bus_name ?(viotrans = false) drive_prefix i = function
|
||||||
|
| BusSlotEmpty -> Comment (sprintf "%s slot %d is empty" bus_name i)
|
||||||
|
|
||||||
|
| BusSlotDisk d ->
|
||||||
|
let outdisk = outdisk_name d.s_disk_id in
|
||||||
|
|
||||||
|
- e "disk" [
|
||||||
|
- "type", if pool = None then "file" else "volume";
|
||||||
|
- "device", "disk"
|
||||||
|
- ] [
|
||||||
|
+ e "disk" (
|
||||||
|
+ [
|
||||||
|
+ "type", if pool = None then "file" else "volume";
|
||||||
|
+ "device", "disk"
|
||||||
|
+ ] @ if (viotrans) then [ "model", "virtio-transitional" ] else []
|
||||||
|
+ ) [
|
||||||
|
e "driver" [
|
||||||
|
"name", "qemu";
|
||||||
|
"type", output_format;
|
||||||
|
@@ -364,7 +372,7 @@ let create_libvirt_xml ?pool source inspect
|
||||||
|
in
|
||||||
|
|
||||||
|
List.push_back_list devices
|
||||||
|
- (List.mapi (make_disk "virtio" "vd")
|
||||||
|
+ (List.mapi (make_disk "virtio" ~viotrans:virtio_transitional "vd")
|
||||||
|
(Array.to_list target_buses.target_virtio_blk_bus));
|
||||||
|
let ide_disks =
|
||||||
|
match guestcaps.gcaps_machine with
|
||||||
|
@@ -392,7 +400,7 @@ let create_libvirt_xml ?pool source inspect
|
||||||
|
let nics =
|
||||||
|
let net_model =
|
||||||
|
match guestcaps.gcaps_net_bus with
|
||||||
|
- | Virtio_net -> "virtio" | E1000 -> "e1000" | RTL8139 -> "rtl8139" in
|
||||||
|
+ | Virtio_net -> virtio_model | E1000 -> "e1000" | RTL8139 -> "rtl8139" in
|
||||||
|
List.map (
|
||||||
|
fun { s_mac = mac; s_vnet_type = vnet_type; s_vnet = vnet } ->
|
||||||
|
let vnet_type_str =
|
||||||
|
@@ -483,7 +491,7 @@ let create_libvirt_xml ?pool source inspect
|
||||||
|
(* Miscellaneous KVM devices. *)
|
||||||
|
if guestcaps.gcaps_virtio_rng then
|
||||||
|
List.push_back devices (
|
||||||
|
- e "rng" ["model", "virtio"] [
|
||||||
|
+ e "rng" ["model", virtio_model] [
|
||||||
|
(* XXX Using /dev/urandom requires libvirt >= 1.3.4. Libvirt
|
||||||
|
* was broken before that.
|
||||||
|
*)
|
||||||
|
@@ -496,7 +504,7 @@ let create_libvirt_xml ?pool source inspect
|
||||||
|
List.push_back devices (
|
||||||
|
e "memballoon"
|
||||||
|
["model",
|
||||||
|
- if guestcaps.gcaps_virtio_balloon then "virtio" else "none"]
|
||||||
|
+ if guestcaps.gcaps_virtio_balloon then virtio_model else "none"]
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
if guestcaps.gcaps_isa_pvpanic then
|
||||||
|
@@ -508,7 +516,7 @@ let create_libvirt_xml ?pool source inspect
|
||||||
|
List.push_back devices (
|
||||||
|
e "viosock"
|
||||||
|
["model",
|
||||||
|
- if guestcaps.gcaps_virtio_socket then "virtio" else "none"]
|
||||||
|
+ if guestcaps.gcaps_virtio_socket then virtio_model else "none"]
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -1,66 +0,0 @@
|
|||||||
From 9b77e7e51f462cbac978adfcdbed18df112438c8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
|
||||||
Date: Sat, 18 Dec 2021 13:42:56 +0000
|
|
||||||
Subject: [PATCH] v2v: Swap over the output and conversion stages
|
|
||||||
|
|
||||||
In old virt-v2v, we did (approximately, since the steps were not as
|
|
||||||
clear):
|
|
||||||
|
|
||||||
Input -> Convert -> Output -> Copy -> Finalize
|
|
||||||
|
|
||||||
After modularizing virt-v2v we changed this to:
|
|
||||||
|
|
||||||
Input -> Output -> Convert -> Copy -> Finalize
|
|
||||||
|
|
||||||
However this has a (sort of) problem. For -o rhv-upload when we start
|
|
||||||
the nbdkit rhv-upload-plugin machinery, it obtains a time-limited
|
|
||||||
ticket from imageio. This ticket could expire if the conversion step
|
|
||||||
takes longer than a certain time (60 seconds by default, may be
|
|
||||||
increased in a future version of oVirt).
|
|
||||||
|
|
||||||
I believe this is really a problem in imageio or that the
|
|
||||||
rhv-upload-plugin should really renew this ticket automatically, but
|
|
||||||
it does not, instead failing. (The ticket *is* renewed automatically
|
|
||||||
whenever a request is sent to imageio, but in this case no requests
|
|
||||||
are being sent).
|
|
||||||
|
|
||||||
Anyway the easiest thing is to switch the ordering back to how it was
|
|
||||||
in old virt-v2v (at top). It doesn't make a difference for any other
|
|
||||||
output modes.
|
|
||||||
|
|
||||||
Reported-by: Nir Soffer
|
|
||||||
---
|
|
||||||
v2v/v2v.ml | 10 +++++-----
|
|
||||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
|
|
||||||
index a2414598..1db0c233 100644
|
|
||||||
--- a/v2v/v2v.ml
|
|
||||||
+++ b/v2v/v2v.ml
|
|
||||||
@@ -542,6 +542,11 @@ read the man page virt-v2v(1).
|
|
||||||
exit 0
|
|
||||||
);
|
|
||||||
|
|
||||||
+ (* Do the conversion. *)
|
|
||||||
+ with_open_out (tmpdir // "convert") (fun _ -> ());
|
|
||||||
+ let inspect, target_meta = Convert.convert tmpdir conv_options source in
|
|
||||||
+ unlink (tmpdir // "convert");
|
|
||||||
+
|
|
||||||
(* Start the output module (runs an NBD server in the background). *)
|
|
||||||
let output_t = Output_module.setup tmpdir output_options source in
|
|
||||||
|
|
||||||
@@ -551,11 +556,6 @@ read the man page virt-v2v(1).
|
|
||||||
ignore (Sys.command cmd)
|
|
||||||
);
|
|
||||||
|
|
||||||
- (* Do the conversion. *)
|
|
||||||
- with_open_out (tmpdir // "convert") (fun _ -> ());
|
|
||||||
- let inspect, target_meta = Convert.convert tmpdir conv_options source in
|
|
||||||
- unlink (tmpdir // "convert");
|
|
||||||
-
|
|
||||||
(* Do the copy. *)
|
|
||||||
with_open_out (tmpdir // "copy") (fun _ -> ());
|
|
||||||
|
|
||||||
--
|
|
||||||
2.19.1.3.g30247aa5d201
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
|||||||
From a96669133e5aa5eb1269cf284f8bd7530a4e836a Mon Sep 17 00:00:00 2001
|
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
|
||||||
Date: Sat, 18 Dec 2021 13:40:08 +0000
|
|
||||||
Subject: [PATCH] XXX v2v: Remove nbdcopy --request-size=4M flag
|
|
||||||
|
|
||||||
XXX NEEDS BENCHMARKING XXX
|
|
||||||
|
|
||||||
This was added when we were setting the cow-block-size to 1M. However
|
|
||||||
since commit 351d61f768 ("input: -it vddk: Reduce cow-block-size to 4K")
|
|
||||||
we stopped doing that so this is no longer needed.
|
|
||||||
|
|
||||||
Reverts: commit 08e764959ec9dadd71a95d22d3d88d647a18d165
|
|
||||||
---
|
|
||||||
v2v/v2v.ml | 18 ++----------------
|
|
||||||
1 file changed, 2 insertions(+), 16 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
|
|
||||||
index 1db0c233..47e6e937 100644
|
|
||||||
--- a/v2v/v2v.ml
|
|
||||||
+++ b/v2v/v2v.ml
|
|
||||||
@@ -587,17 +587,7 @@ read the man page virt-v2v(1).
|
|
||||||
nbdinfo ~content:false output_uri
|
|
||||||
);
|
|
||||||
|
|
||||||
- (* At the moment, unconditionally set nbdcopy --request-size
|
|
||||||
- * to 4M (up from the default of 256K). With nbdkit + vddk +
|
|
||||||
- * cow + cow-block-size=1M this is necessary because requests
|
|
||||||
- * must be larger than the cow filter block size to avoid
|
|
||||||
- * breaking up reads. It probably doesn't affect other
|
|
||||||
- * modes, but in future consider setting this only for
|
|
||||||
- * specific input modes that adjust cow-block-size.
|
|
||||||
- *)
|
|
||||||
- let request_size = Some (4*1024*1024) in
|
|
||||||
-
|
|
||||||
- nbdcopy ?request_size output_alloc input_uri output_uri
|
|
||||||
+ nbdcopy output_alloc input_uri output_uri
|
|
||||||
) disks;
|
|
||||||
|
|
||||||
(* End of copying phase. *)
|
|
||||||
@@ -616,17 +606,13 @@ read the man page virt-v2v(1).
|
|
||||||
*)
|
|
||||||
with_open_out (tmpdir // "done") (fun _ -> ())
|
|
||||||
|
|
||||||
-and nbdcopy ?request_size output_alloc input_uri output_uri =
|
|
||||||
+and nbdcopy output_alloc input_uri output_uri =
|
|
||||||
(* XXX It's possible that some output modes know whether
|
|
||||||
* --target-is-zero which would be a useful optimization.
|
|
||||||
*)
|
|
||||||
let cmd = ref [] in
|
|
||||||
List.push_back_list cmd [ "nbdcopy"; input_uri; output_uri ];
|
|
||||||
List.push_back cmd "--flush";
|
|
||||||
- (match request_size with
|
|
||||||
- | None -> ()
|
|
||||||
- | Some size -> List.push_back cmd (sprintf "--request-size=%d" size)
|
|
||||||
- );
|
|
||||||
(*List.push_back cmd "--verbose";*)
|
|
||||||
if not (quiet ()) then List.push_back cmd "--progress";
|
|
||||||
if output_alloc = Types.Preallocated then List.push_back cmd "--allocated";
|
|
||||||
--
|
|
||||||
2.19.1.3.g30247aa5d201
|
|
||||||
|
|
33
0005-output-create_json-expose-gcaps_virtio_1_0.patch
Normal file
33
0005-output-create_json-expose-gcaps_virtio_1_0.patch
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
From 511910e1f7e956fb8a032c1c04fd0a983b2108df Mon Sep 17 00:00:00 2001
|
||||||
|
From: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Date: Thu, 6 Jan 2022 15:09:06 +0100
|
||||||
|
Subject: [PATCH] output/create_json: expose "gcaps_virtio_1_0"
|
||||||
|
|
||||||
|
Let CNV / KubeVirt know about the "gcaps_virtio_1_0" field as well, so
|
||||||
|
that it can make the same determination from "machine" and
|
||||||
|
"gcaps_virtio_1_0" as virt-v2v does in the libvirt output (from an earlier
|
||||||
|
patch in this series).
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
|
||||||
|
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Message-Id: <20220106140910.13695-6-lersek@redhat.com>
|
||||||
|
Acked-by: Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
---
|
||||||
|
output/create_json.ml | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/output/create_json.ml b/output/create_json.ml
|
||||||
|
index b48902b7..985e10a9 100644
|
||||||
|
--- a/output/create_json.ml
|
||||||
|
+++ b/output/create_json.ml
|
||||||
|
@@ -219,6 +219,7 @@ let create_json_metadata source inspect
|
||||||
|
"isa-pvpanic", JSON.Bool guestcaps.gcaps_isa_pvpanic;
|
||||||
|
"virtio-socket", JSON.Bool guestcaps.gcaps_virtio_socket;
|
||||||
|
"acpi", JSON.Bool guestcaps.gcaps_acpi;
|
||||||
|
+ "virtio-1-0", JSON.Bool guestcaps.gcaps_virtio_1_0;
|
||||||
|
] in
|
||||||
|
List.push_back doc ("guestcaps", JSON.Dict guestcaps_dict);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
165
0006-convert-libosinfo-wrap-osinfo_os_get_all_devices.patch
Normal file
165
0006-convert-libosinfo-wrap-osinfo_os_get_all_devices.patch
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
From 46f5885dba1b669588d98eb840af454564d07cae Mon Sep 17 00:00:00 2001
|
||||||
|
From: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Date: Thu, 6 Jan 2022 15:09:07 +0100
|
||||||
|
Subject: [PATCH] convert/libosinfo: wrap osinfo_os_get_all_devices()
|
||||||
|
|
||||||
|
Introduce the "osinfo_os.get_devices" OCaml method, for wrapping the
|
||||||
|
libosinfo API osinfo_os_get_all_devices().
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
|
||||||
|
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Message-Id: <20220106140910.13695-7-lersek@redhat.com>
|
||||||
|
[lersek@redhat.com: call OCaml values "<something>v" (Rich)]
|
||||||
|
Acked-by: Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
---
|
||||||
|
convert/libosinfo-c.c | 66 +++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
convert/libosinfo.ml | 14 +++++++++
|
||||||
|
convert/libosinfo.mli | 14 +++++++++
|
||||||
|
3 files changed, 94 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/convert/libosinfo-c.c b/convert/libosinfo-c.c
|
||||||
|
index 09cf588d..b8e78bec 100644
|
||||||
|
--- a/convert/libosinfo-c.c
|
||||||
|
+++ b/convert/libosinfo-c.c
|
||||||
|
@@ -50,6 +50,7 @@
|
||||||
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoFilter, g_object_unref)
|
||||||
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoLoader, g_object_unref)
|
||||||
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoOsList, g_object_unref)
|
||||||
|
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoDeviceList, g_object_unref)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef OsinfoDb *OsinfoDb_t;
|
||||||
|
@@ -255,3 +256,68 @@ v2v_osinfo_os_get_device_drivers (value osv)
|
||||||
|
|
||||||
|
CAMLreturn (rv);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+/* Collect OsinfoDevice properties from two levels:
|
||||||
|
+ *
|
||||||
|
+ * - The OSINFO_ENTITY_PROP_ID property, originating from the OsinfoEntity base
|
||||||
|
+ * class. This is a unique URI, identifying the device.
|
||||||
|
+ *
|
||||||
|
+ * - All currently known OSINFO_DEVICE_PROP_* properties, originating from the
|
||||||
|
+ * OsinfoDevice class.
|
||||||
|
+ *
|
||||||
|
+ * All of the above properties have string values. Thus, for uniformity, access
|
||||||
|
+ * all these properties by their names at the OsinfoEntity level (i.e., forego
|
||||||
|
+ * the class- and property-specific, dedicated property getter functions).
|
||||||
|
+ */
|
||||||
|
+static const char * const device_prop[] = {
|
||||||
|
+ OSINFO_ENTITY_PROP_ID,
|
||||||
|
+ OSINFO_DEVICE_PROP_VENDOR,
|
||||||
|
+ OSINFO_DEVICE_PROP_VENDOR_ID,
|
||||||
|
+ OSINFO_DEVICE_PROP_PRODUCT,
|
||||||
|
+ OSINFO_DEVICE_PROP_PRODUCT_ID,
|
||||||
|
+ OSINFO_DEVICE_PROP_NAME,
|
||||||
|
+ OSINFO_DEVICE_PROP_CLASS,
|
||||||
|
+ OSINFO_DEVICE_PROP_BUS_TYPE,
|
||||||
|
+ OSINFO_DEVICE_PROP_SUBSYSTEM,
|
||||||
|
+};
|
||||||
|
+#define NUM_DEVICE_PROPS (sizeof device_prop / sizeof device_prop[0])
|
||||||
|
+
|
||||||
|
+value
|
||||||
|
+v2v_osinfo_os_get_all_devices (value osv)
|
||||||
|
+{
|
||||||
|
+ CAMLparam1 (osv);
|
||||||
|
+ CAMLlocal3 (retvalv, linkv, propsv);
|
||||||
|
+ g_autoptr (OsinfoDeviceList) dev_list = NULL;
|
||||||
|
+ OsinfoList *ent_list;
|
||||||
|
+ gint ent_nr;
|
||||||
|
+
|
||||||
|
+ retvalv = Val_emptylist;
|
||||||
|
+ dev_list = osinfo_os_get_all_devices (OsinfoOs_t_val (osv), NULL);
|
||||||
|
+ ent_list = OSINFO_LIST (dev_list);
|
||||||
|
+ ent_nr = osinfo_list_get_length (ent_list);
|
||||||
|
+
|
||||||
|
+ while (ent_nr > 0) {
|
||||||
|
+ OsinfoEntity *ent;
|
||||||
|
+ size_t prop_nr;
|
||||||
|
+
|
||||||
|
+ --ent_nr;
|
||||||
|
+ ent = osinfo_list_get_nth (ent_list, ent_nr);
|
||||||
|
+
|
||||||
|
+ propsv = caml_alloc (NUM_DEVICE_PROPS, 0);
|
||||||
|
+ for (prop_nr = 0; prop_nr < NUM_DEVICE_PROPS; ++prop_nr) {
|
||||||
|
+ const gchar *prop_val;
|
||||||
|
+
|
||||||
|
+ prop_val = osinfo_entity_get_param_value (ent, device_prop[prop_nr]);
|
||||||
|
+ if (prop_val == NULL)
|
||||||
|
+ prop_val = "";
|
||||||
|
+ Store_field (propsv, prop_nr, caml_copy_string (prop_val));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ linkv = caml_alloc (2, 0);
|
||||||
|
+ Store_field (linkv, 0, propsv);
|
||||||
|
+ Store_field (linkv, 1, retvalv);
|
||||||
|
+ retvalv = linkv;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ CAMLreturn (retvalv);
|
||||||
|
+}
|
||||||
|
diff --git a/convert/libosinfo.ml b/convert/libosinfo.ml
|
||||||
|
index bd9ca126..78271be2 100644
|
||||||
|
--- a/convert/libosinfo.ml
|
||||||
|
+++ b/convert/libosinfo.ml
|
||||||
|
@@ -32,13 +32,27 @@ type osinfo_device_driver = {
|
||||||
|
files : string list;
|
||||||
|
}
|
||||||
|
|
||||||
|
+type osinfo_device = {
|
||||||
|
+ id : string;
|
||||||
|
+ vendor : string;
|
||||||
|
+ vendor_id : string;
|
||||||
|
+ product : string;
|
||||||
|
+ product_id : string;
|
||||||
|
+ name : string;
|
||||||
|
+ class_ : string;
|
||||||
|
+ bus_type : string;
|
||||||
|
+ subsystem : string;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
external osinfo_os_get_id : osinfo_os_t -> string = "v2v_osinfo_os_get_id"
|
||||||
|
external osinfo_os_get_device_drivers : osinfo_os_t -> osinfo_device_driver list = "v2v_osinfo_os_get_device_drivers"
|
||||||
|
+external osinfo_os_get_devices : osinfo_os_t -> osinfo_device list = "v2v_osinfo_os_get_all_devices"
|
||||||
|
|
||||||
|
class osinfo_os h =
|
||||||
|
object (self)
|
||||||
|
method get_id () = osinfo_os_get_id h
|
||||||
|
method get_device_drivers () = osinfo_os_get_device_drivers h
|
||||||
|
+ method get_devices () = osinfo_os_get_devices h
|
||||||
|
end
|
||||||
|
|
||||||
|
external osinfo_db_load : unit -> osinfo_db_t = "v2v_osinfo_db_load"
|
||||||
|
diff --git a/convert/libosinfo.mli b/convert/libosinfo.mli
|
||||||
|
index 0428ef91..1ece7b41 100644
|
||||||
|
--- a/convert/libosinfo.mli
|
||||||
|
+++ b/convert/libosinfo.mli
|
||||||
|
@@ -29,11 +29,25 @@ type osinfo_device_driver = {
|
||||||
|
files : string list;
|
||||||
|
}
|
||||||
|
|
||||||
|
+type osinfo_device = {
|
||||||
|
+ id : string;
|
||||||
|
+ vendor : string;
|
||||||
|
+ vendor_id : string;
|
||||||
|
+ product : string;
|
||||||
|
+ product_id : string;
|
||||||
|
+ name : string;
|
||||||
|
+ class_ : string;
|
||||||
|
+ bus_type : string;
|
||||||
|
+ subsystem : string;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
class osinfo_os : osinfo_os_t -> object
|
||||||
|
method get_id : unit -> string
|
||||||
|
(** Return the ID. *)
|
||||||
|
method get_device_drivers : unit -> osinfo_device_driver list
|
||||||
|
(** Return the list of device drivers. *)
|
||||||
|
+ method get_devices : unit -> osinfo_device list
|
||||||
|
+ (** Return the list of devices. *)
|
||||||
|
end
|
||||||
|
(** Minimal OsinfoOs wrapper. *)
|
||||||
|
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,77 @@
|
|||||||
|
From 00473c6ac09d85a6b6e1ce0cbe132e31407a2d00 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Date: Thu, 6 Jan 2022 15:09:08 +0100
|
||||||
|
Subject: [PATCH] convert/libosinfo_utils: introduce
|
||||||
|
"string_of_osinfo_device_list"
|
||||||
|
|
||||||
|
For debugging purposes, we'll want to print the list of devices returned
|
||||||
|
by the previously introduced "osinfo_os#get_devices" method.
|
||||||
|
|
||||||
|
Format the device list as a nice table.
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
|
||||||
|
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Message-Id: <20220106140910.13695-8-lersek@redhat.com>
|
||||||
|
Acked-by: Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
---
|
||||||
|
convert/libosinfo_utils.ml | 35 +++++++++++++++++++++++++++++++++++
|
||||||
|
convert/libosinfo_utils.mli | 3 +++
|
||||||
|
2 files changed, 38 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/convert/libosinfo_utils.ml b/convert/libosinfo_utils.ml
|
||||||
|
index 1fc138cc..d5eb082b 100644
|
||||||
|
--- a/convert/libosinfo_utils.ml
|
||||||
|
+++ b/convert/libosinfo_utils.ml
|
||||||
|
@@ -42,3 +42,38 @@ let string_of_osinfo_device_driver { Libosinfo.architecture; location;
|
||||||
|
(if signed then "signed" else "unsigned")
|
||||||
|
priority
|
||||||
|
(String.concat " " files)
|
||||||
|
+
|
||||||
|
+let string_of_osinfo_device_list dev_list =
|
||||||
|
+
|
||||||
|
+ (* Turn the fields of an "osinfo_device" record into a list. *)
|
||||||
|
+ let listify { Libosinfo.id; vendor; vendor_id; product; product_id; name;
|
||||||
|
+ class_; bus_type; subsystem } =
|
||||||
|
+ [ id; vendor; vendor_id; product; product_id; name;
|
||||||
|
+ class_; bus_type; subsystem ]
|
||||||
|
+
|
||||||
|
+ (* Given a list of strings, and a list of previously known maximum widths,
|
||||||
|
+ * "increase" each width, if necessary, to the length of the corresponding
|
||||||
|
+ * string.
|
||||||
|
+ *)
|
||||||
|
+ and grow_widths = List.map2 (fun s -> max (String.length s))
|
||||||
|
+ in
|
||||||
|
+
|
||||||
|
+ (* Compute the maximum width for each field in "dev_list". *)
|
||||||
|
+ let max_widths =
|
||||||
|
+ List.fold_right grow_widths (List.map listify dev_list)
|
||||||
|
+ [ 0; 0; 0; 0; 0; 0; 0; 0; 0 ]
|
||||||
|
+
|
||||||
|
+ (* Given a list of strings and a list of field widths, format "string1 |
|
||||||
|
+ * string2 | ... | stringN" such that each field is right-padded to the
|
||||||
|
+ * corresponding width.
|
||||||
|
+ *)
|
||||||
|
+ and columnate strings widths =
|
||||||
|
+ String.concat " | " (List.map2 (Printf.sprintf "%-*s") widths strings)
|
||||||
|
+ in
|
||||||
|
+
|
||||||
|
+ (* Format "dev_list" as a table by (a) printing one "osinfo_device" record
|
||||||
|
+ * per line, and (b) right-padding each field of each "osinfo_device" record
|
||||||
|
+ * to the maximum width of that field.
|
||||||
|
+ *)
|
||||||
|
+ String.concat "\n"
|
||||||
|
+ (List.map (fun dev -> columnate (listify dev) max_widths) dev_list)
|
||||||
|
diff --git a/convert/libosinfo_utils.mli b/convert/libosinfo_utils.mli
|
||||||
|
index b3714d22..5a703334 100644
|
||||||
|
--- a/convert/libosinfo_utils.mli
|
||||||
|
+++ b/convert/libosinfo_utils.mli
|
||||||
|
@@ -27,3 +27,6 @@ val get_os_by_short_id : string -> Libosinfo.osinfo_os
|
||||||
|
|
||||||
|
val string_of_osinfo_device_driver : Libosinfo.osinfo_device_driver -> string
|
||||||
|
(** Convert a [osinfo_device_driver] to a printable string for debugging. *)
|
||||||
|
+
|
||||||
|
+val string_of_osinfo_device_list : Libosinfo.osinfo_device list -> string
|
||||||
|
+(** Convert an [osinfo_device] list to a printable string for debugging. *)
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,77 @@
|
|||||||
|
From 2a2d7e9e1376084670dbf8587549948713341153 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Date: Thu, 6 Jan 2022 15:09:09 +0100
|
||||||
|
Subject: [PATCH] convert/libosinfo_utils: introduce
|
||||||
|
"os_support_of_osinfo_device_list"
|
||||||
|
|
||||||
|
Add a helper function for calculating q35 support and virtio-1.0 support
|
||||||
|
from the list of devices returned by the previously introduced
|
||||||
|
"osinfo_os#get_devices" method.
|
||||||
|
|
||||||
|
(Rather than folding the list into a record of bools, implement the
|
||||||
|
function explicitly, recursively. Folding wouldn't stop (without abusing
|
||||||
|
exceptions) once all fields in the record turned "true", but a recursive
|
||||||
|
function can just return the accumulator at that point.)
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
|
||||||
|
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Message-Id: <20220106140910.13695-9-lersek@redhat.com>
|
||||||
|
[lersek@redhat.com: don't break "in" to a new line after a "let" that
|
||||||
|
defines a non-function (Rich)]
|
||||||
|
Acked-by: Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
---
|
||||||
|
convert/libosinfo_utils.ml | 18 ++++++++++++++++++
|
||||||
|
convert/libosinfo_utils.mli | 14 ++++++++++++++
|
||||||
|
2 files changed, 32 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/convert/libosinfo_utils.ml b/convert/libosinfo_utils.ml
|
||||||
|
index d5eb082b..77f22272 100644
|
||||||
|
--- a/convert/libosinfo_utils.ml
|
||||||
|
+++ b/convert/libosinfo_utils.ml
|
||||||
|
@@ -77,3 +77,21 @@ let string_of_osinfo_device_list dev_list =
|
||||||
|
*)
|
||||||
|
String.concat "\n"
|
||||||
|
(List.map (fun dev -> columnate (listify dev) max_widths) dev_list)
|
||||||
|
+
|
||||||
|
+type os_support = {
|
||||||
|
+ q35 : bool;
|
||||||
|
+ vio10 : bool;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+let os_support_of_osinfo_device_list =
|
||||||
|
+ let rec next accu left =
|
||||||
|
+ match accu, left with
|
||||||
|
+ | { q35 = true; vio10 = true }, _
|
||||||
|
+ | _ , [] ->
|
||||||
|
+ accu
|
||||||
|
+ | { q35; vio10 }, { Libosinfo.id } :: tail ->
|
||||||
|
+ let q35 = q35 || id = "http://qemu.org/chipset/x86/q35"
|
||||||
|
+ and vio10 = vio10 || id = "http://pcisig.com/pci/1af4/1041" in
|
||||||
|
+ next { q35; vio10 } tail
|
||||||
|
+ in
|
||||||
|
+ next { q35 = false; vio10 = false }
|
||||||
|
diff --git a/convert/libosinfo_utils.mli b/convert/libosinfo_utils.mli
|
||||||
|
index 5a703334..ab77ec97 100644
|
||||||
|
--- a/convert/libosinfo_utils.mli
|
||||||
|
+++ b/convert/libosinfo_utils.mli
|
||||||
|
@@ -30,3 +30,17 @@ val string_of_osinfo_device_driver : Libosinfo.osinfo_device_driver -> string
|
||||||
|
|
||||||
|
val string_of_osinfo_device_list : Libosinfo.osinfo_device list -> string
|
||||||
|
(** Convert an [osinfo_device] list to a printable string for debugging. *)
|
||||||
|
+
|
||||||
|
+type os_support = {
|
||||||
|
+ q35 : bool;
|
||||||
|
+ vio10 : bool;
|
||||||
|
+}
|
||||||
|
+(** Tell whether the operating system supports the Q35 board type and/or
|
||||||
|
+ non-transitional (virtio-1.0-only) virtio devices. (Internally, the
|
||||||
|
+ virtio-1.0-net device is used as a proxy for the general statement about
|
||||||
|
+ virtio-1.0.)
|
||||||
|
+ *)
|
||||||
|
+
|
||||||
|
+val os_support_of_osinfo_device_list : Libosinfo.osinfo_device list ->
|
||||||
|
+ os_support
|
||||||
|
+(** Get [os_support] from an [osinfo_device] list. *)
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
207
0009-convert-determine-machine-type-and-virtio-1.0-from-o.patch
Normal file
207
0009-convert-determine-machine-type-and-virtio-1.0-from-o.patch
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
From f0cea012d0183edf6f7b769c28d5038593f3fe6a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Date: Thu, 6 Jan 2022 15:09:10 +0100
|
||||||
|
Subject: [PATCH] convert: determine machine type and virtio-1.0 from osinfo
|
||||||
|
for x86 guests
|
||||||
|
|
||||||
|
Determine the machine type and virtio-1.0 support from osinfo, for x86
|
||||||
|
guests. This connects the previous two parts of this series.
|
||||||
|
|
||||||
|
Keep the original logic from commit ac39fa292c31 ("v2v: Set machine type
|
||||||
|
explicitly for outputs which support it (RHBZ#1581428).", 2020-12-04) for
|
||||||
|
non-x86 guests, and for the case when libosinfo does not recognize the
|
||||||
|
guest OS.
|
||||||
|
|
||||||
|
Update the "cdrom", "floppy", and "i-ova" test cases, which all use a
|
||||||
|
(phony) Windows 7 image -- Windows 7 does not support virtio-1.0-only
|
||||||
|
devices, according to libosinfo.
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1942325
|
||||||
|
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Message-Id: <20220106140910.13695-10-lersek@redhat.com>
|
||||||
|
Acked-by: Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
---
|
||||||
|
convert/convert_linux.ml | 51 +++++++++++++++++++++-------------
|
||||||
|
convert/convert_windows.ml | 32 ++++++++++++++-------
|
||||||
|
tests/test-v2v-cdrom.expected | 2 +-
|
||||||
|
tests/test-v2v-floppy.expected | 2 +-
|
||||||
|
tests/test-v2v-i-ova.xml | 8 +++---
|
||||||
|
5 files changed, 60 insertions(+), 35 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml
|
||||||
|
index 3f1114ad..45ce069a 100644
|
||||||
|
--- a/convert/convert_linux.ml
|
||||||
|
+++ b/convert/convert_linux.ml
|
||||||
|
@@ -123,26 +123,39 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ =
|
||||||
|
|
||||||
|
SELinux_relabel.relabel g;
|
||||||
|
|
||||||
|
- (* Pivot on the year 2007. Any Linux distro from earlier than
|
||||||
|
- * 2007 should use i440fx, anything 2007 or newer should use q35.
|
||||||
|
- * XXX Look up this information in libosinfo in future.
|
||||||
|
- *)
|
||||||
|
- let machine =
|
||||||
|
- match inspect.i_arch, inspect.i_distro, inspect.i_major_version with
|
||||||
|
- | ("i386"|"x86_64"), "fedora", _ -> Q35
|
||||||
|
- | ("i386"|"x86_64"), ("rhel"|"centos"|"scientificlinux"|
|
||||||
|
- "redhat-based"|"oraclelinux"), major ->
|
||||||
|
- if major <= 4 then I440FX else Q35
|
||||||
|
- | ("i386"|"x86_64"), ("sles"|"suse-based"|"opensuse"), major ->
|
||||||
|
- if major < 10 then I440FX else Q35
|
||||||
|
- | ("i386"|"x86_64"), ("debian"|"ubuntu"|"linuxmint"|
|
||||||
|
- "kalilinux"), major ->
|
||||||
|
- if major < 4 then I440FX else Q35
|
||||||
|
+ let machine, virtio_1_0 =
|
||||||
|
+ match inspect.i_arch with
|
||||||
|
+ | ("i386"|"x86_64") ->
|
||||||
|
+ (try
|
||||||
|
+ let os = Libosinfo_utils.get_os_by_short_id inspect.i_osinfo in
|
||||||
|
+ let devices = os#get_devices () in
|
||||||
|
+ debug "libosinfo devices for OS \"%s\":\n%s" inspect.i_osinfo
|
||||||
|
+ (Libosinfo_utils.string_of_osinfo_device_list devices);
|
||||||
|
+ let { Libosinfo_utils.q35; vio10 } =
|
||||||
|
+ Libosinfo_utils.os_support_of_osinfo_device_list devices in
|
||||||
|
+ (if q35 then Q35 else I440FX), vio10
|
||||||
|
+ with
|
||||||
|
+ | Not_found ->
|
||||||
|
+ (* Pivot on the year 2007. Any Linux distro from earlier than 2007
|
||||||
|
+ * should use i440fx, anything 2007 or newer should use q35.
|
||||||
|
+ *)
|
||||||
|
+ (match inspect.i_distro, inspect.i_major_version with
|
||||||
|
+ | "fedora", _ -> Q35
|
||||||
|
+ | ("rhel"|"centos"|"scientificlinux"|"redhat-based"|"oraclelinux"),
|
||||||
|
+ major ->
|
||||||
|
+ if major <= 4 then I440FX else Q35
|
||||||
|
+ | ("sles"|"suse-based"|"opensuse"), major ->
|
||||||
|
+ if major < 10 then I440FX else Q35
|
||||||
|
+ | ("debian"|"ubuntu"|"linuxmint"|"kalilinux"), major ->
|
||||||
|
+ if major < 4 then I440FX else Q35
|
||||||
|
|
||||||
|
- (* reasonable default for all modern Linux kernels *)
|
||||||
|
- | ("i386"|"x86_64"), _, _ -> Q35
|
||||||
|
+ (* reasonable default for all modern Linux kernels *)
|
||||||
|
+ | _, _ -> Q35
|
||||||
|
+ ), true
|
||||||
|
+ )
|
||||||
|
|
||||||
|
- | _ -> Virt in
|
||||||
|
+ | _ -> Virt, true
|
||||||
|
+ in
|
||||||
|
|
||||||
|
(* Return guest capabilities from the convert () function. *)
|
||||||
|
let guestcaps = {
|
||||||
|
@@ -155,7 +168,7 @@ let convert (g : G.guestfs) source inspect keep_serial_console _ =
|
||||||
|
gcaps_machine = machine;
|
||||||
|
gcaps_arch = Utils.kvm_arch inspect.i_arch;
|
||||||
|
gcaps_acpi = acpi;
|
||||||
|
- gcaps_virtio_1_0 = true;
|
||||||
|
+ gcaps_virtio_1_0 = virtio_1_0;
|
||||||
|
} in
|
||||||
|
|
||||||
|
guestcaps
|
||||||
|
diff --git a/convert/convert_windows.ml b/convert/convert_windows.ml
|
||||||
|
index 30e494ea..1c2d17f2 100644
|
||||||
|
--- a/convert/convert_windows.ml
|
||||||
|
+++ b/convert/convert_windows.ml
|
||||||
|
@@ -238,15 +238,27 @@ let convert (g : G.guestfs) _ inspect _ static_ips =
|
||||||
|
warning (f_"this guest has Anti-Virus (AV) software and a new virtio block device driver was installed. In some circumstances, AV may prevent new drivers from working (resulting in a 7B boot error). If this happens, try disabling AV before doing the conversion.");
|
||||||
|
);
|
||||||
|
|
||||||
|
- (* Pivot on the year 2007. Any Windows version from earlier than
|
||||||
|
- * 2007 should use i440fx, anything 2007 or newer should use q35.
|
||||||
|
- * Luckily this coincides almost exactly with the release of NT 6.
|
||||||
|
- * XXX Look up this information in libosinfo in future.
|
||||||
|
- *)
|
||||||
|
- let machine =
|
||||||
|
- match inspect.i_arch, inspect.i_major_version with
|
||||||
|
- | ("i386"|"x86_64"), major -> if major < 6 then I440FX else Q35
|
||||||
|
- | _ -> Virt in
|
||||||
|
+ let machine, virtio_1_0 =
|
||||||
|
+ match inspect.i_arch with
|
||||||
|
+ | ("i386"|"x86_64") ->
|
||||||
|
+ (try
|
||||||
|
+ let os = Libosinfo_utils.get_os_by_short_id inspect.i_osinfo in
|
||||||
|
+ let devices = os#get_devices () in
|
||||||
|
+ debug "libosinfo devices for OS \"%s\":\n%s" inspect.i_osinfo
|
||||||
|
+ (Libosinfo_utils.string_of_osinfo_device_list devices);
|
||||||
|
+ let { Libosinfo_utils.q35; vio10 } =
|
||||||
|
+ Libosinfo_utils.os_support_of_osinfo_device_list devices in
|
||||||
|
+ (if q35 then Q35 else I440FX), vio10
|
||||||
|
+ with
|
||||||
|
+ | Not_found ->
|
||||||
|
+ (* Pivot on the year 2007. Any Windows version from earlier than
|
||||||
|
+ * 2007 should use i440fx, anything 2007 or newer should use q35.
|
||||||
|
+ * Luckily this coincides almost exactly with the release of NT 6.
|
||||||
|
+ *)
|
||||||
|
+ (if inspect.i_major_version < 6 then I440FX else Q35), true
|
||||||
|
+ )
|
||||||
|
+ | _ -> Virt, true
|
||||||
|
+ in
|
||||||
|
|
||||||
|
(* Return guest capabilities from the convert () function. *)
|
||||||
|
let guestcaps = {
|
||||||
|
@@ -259,7 +271,7 @@ let convert (g : G.guestfs) _ inspect _ static_ips =
|
||||||
|
gcaps_machine = machine;
|
||||||
|
gcaps_arch = Utils.kvm_arch inspect.i_arch;
|
||||||
|
gcaps_acpi = true;
|
||||||
|
- gcaps_virtio_1_0 = true;
|
||||||
|
+ gcaps_virtio_1_0 = virtio_1_0;
|
||||||
|
} in
|
||||||
|
|
||||||
|
guestcaps
|
||||||
|
diff --git a/tests/test-v2v-cdrom.expected b/tests/test-v2v-cdrom.expected
|
||||||
|
index 17bd152d..b9504929 100644
|
||||||
|
--- a/tests/test-v2v-cdrom.expected
|
||||||
|
+++ b/tests/test-v2v-cdrom.expected
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
- <disk type='file' device='disk'>
|
||||||
|
+ <disk type='file' device='disk' model='virtio-transitional'>
|
||||||
|
<driver name='qemu' type='raw'/>
|
||||||
|
<target dev='vda' bus='virtio'/>
|
||||||
|
</disk>
|
||||||
|
diff --git a/tests/test-v2v-floppy.expected b/tests/test-v2v-floppy.expected
|
||||||
|
index a718c21f..f4b67954 100644
|
||||||
|
--- a/tests/test-v2v-floppy.expected
|
||||||
|
+++ b/tests/test-v2v-floppy.expected
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
- <disk type='file' device='disk'>
|
||||||
|
+ <disk type='file' device='disk' model='virtio-transitional'>
|
||||||
|
<driver name='qemu' type='raw'/>
|
||||||
|
<target dev='vda' bus='virtio'/>
|
||||||
|
</disk>
|
||||||
|
diff --git a/tests/test-v2v-i-ova.xml b/tests/test-v2v-i-ova.xml
|
||||||
|
index 9f3c1974..2b6a8de0 100644
|
||||||
|
--- a/tests/test-v2v-i-ova.xml
|
||||||
|
+++ b/tests/test-v2v-i-ova.xml
|
||||||
|
@@ -21,7 +21,7 @@
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>restart</on_crash>
|
||||||
|
<devices>
|
||||||
|
- <disk type='file' device='disk'>
|
||||||
|
+ <disk type='file' device='disk' model='virtio-transitional'>
|
||||||
|
<driver name='qemu' type='raw'/>
|
||||||
|
<source file='TestOva-sda'/>
|
||||||
|
<target dev='vda' bus='virtio'/>
|
||||||
|
@@ -36,16 +36,16 @@
|
||||||
|
</disk>
|
||||||
|
<interface type='bridge'>
|
||||||
|
<source bridge='VM Network'/>
|
||||||
|
- <model type='virtio'/>
|
||||||
|
+ <model type='virtio-transitional'/>
|
||||||
|
</interface>
|
||||||
|
<video>
|
||||||
|
<model type='vga' vram='16384' heads='1'/>
|
||||||
|
</video>
|
||||||
|
<graphics type='vnc' autoport='yes' port='-1'/>
|
||||||
|
- <rng model='virtio'>
|
||||||
|
+ <rng model='virtio-transitional'>
|
||||||
|
<backend model='random'>/dev/urandom</backend>
|
||||||
|
</rng>
|
||||||
|
- <memballoon model='virtio'/>
|
||||||
|
+ <memballoon model='virtio-transitional'/>
|
||||||
|
<viosock model='none'/>
|
||||||
|
<input type='tablet' bus='usb'/>
|
||||||
|
<input type='mouse' bus='ps2'/>
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From 5c115d2e7214f1b8bc0c0f19f099bb6e381c6265 Mon Sep 17 00:00:00 2001
|
From 44314b8d8d201e6043b7148240446c98c726bc95 Mon Sep 17 00:00:00 2001
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
Date: Sun, 28 Sep 2014 19:14:43 +0100
|
Date: Sun, 28 Sep 2014 19:14:43 +0100
|
||||||
Subject: [PATCH] RHEL: v2v: Select correct qemu binary for -o qemu mode
|
Subject: [PATCH] RHEL: v2v: Select correct qemu binary for -o qemu mode
|
||||||
@ -29,5 +29,5 @@ index 0aac1eba..c4265703 100644
|
|||||||
let flag = Qemuopts.flag cmd
|
let flag = Qemuopts.flag cmd
|
||||||
and arg = Qemuopts.arg cmd
|
and arg = Qemuopts.arg cmd
|
||||||
--
|
--
|
||||||
2.19.1.3.g30247aa5d201
|
2.31.1
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From 79d50860b2b16c8668c7bbd3a26972841ec0517d Mon Sep 17 00:00:00 2001
|
From 1c1eb51b4f7e9d5f1e2aef7d695181a14fbd0a7d Mon Sep 17 00:00:00 2001
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
Date: Tue, 30 Sep 2014 10:50:27 +0100
|
Date: Tue, 30 Sep 2014 10:50:27 +0100
|
||||||
Subject: [PATCH] RHEL: v2v: Disable the --qemu-boot / -oo qemu-boot option
|
Subject: [PATCH] RHEL: v2v: Disable the --qemu-boot / -oo qemu-boot option
|
||||||
@ -108,5 +108,5 @@ index 47e6e937..503dfb55 100644
|
|||||||
s_"How to choose root filesystem";
|
s_"How to choose root filesystem";
|
||||||
[ L"vddk-config" ], Getopt.String ("filename", set_input_option_compat "vddk-config"),
|
[ L"vddk-config" ], Getopt.String ("filename", set_input_option_compat "vddk-config"),
|
||||||
--
|
--
|
||||||
2.19.1.3.g30247aa5d201
|
2.31.1
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From 3d3810f4e8fbde3fa21728c718a0d0ec14efe275 Mon Sep 17 00:00:00 2001
|
From 281273484f675b3ddba584ddc9751fc74653e67f Mon Sep 17 00:00:00 2001
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
Date: Fri, 24 Apr 2015 09:45:41 -0400
|
Date: Fri, 24 Apr 2015 09:45:41 -0400
|
||||||
Subject: [PATCH] RHEL: Fix list of supported sound cards to match RHEL qemu
|
Subject: [PATCH] RHEL: Fix list of supported sound cards to match RHEL qemu
|
||||||
@ -30,5 +30,5 @@ index d6861d08..a2fccf29 100644
|
|||||||
(* Find the UEFI firmware. *)
|
(* Find the UEFI firmware. *)
|
||||||
let find_uefi_firmware guest_arch =
|
let find_uefi_firmware guest_arch =
|
||||||
--
|
--
|
||||||
2.19.1.3.g30247aa5d201
|
2.31.1
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From 68d728c2642f15005811d2878f76f4c31266ff7a Mon Sep 17 00:00:00 2001
|
From aa4e5271d3fe02f252ace148b89e9894436a79fb Mon Sep 17 00:00:00 2001
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
Date: Sun, 30 Aug 2015 03:21:57 -0400
|
Date: Sun, 30 Aug 2015 03:21:57 -0400
|
||||||
Subject: [PATCH] RHEL: Fixes for libguestfs-winsupport.
|
Subject: [PATCH] RHEL: Fixes for libguestfs-winsupport.
|
||||||
@ -100,5 +100,5 @@ index a4cf191d..1ff41f6a 100755
|
|||||||
|
|
||||||
# We also update the Registry several times, for firstboot, and (ONLY
|
# We also update the Registry several times, for firstboot, and (ONLY
|
||||||
--
|
--
|
||||||
2.19.1.3.g30247aa5d201
|
2.31.1
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From 9439bad9c940556c33a241c59e38ff35f0ac0284 Mon Sep 17 00:00:00 2001
|
From a6b21f626a74c436563c14751f19f60a6433e153 Mon Sep 17 00:00:00 2001
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
Date: Thu, 2 Mar 2017 14:21:37 +0100
|
Date: Thu, 2 Mar 2017 14:21:37 +0100
|
||||||
Subject: [PATCH] RHEL: v2v: -i disk: force VNC as display (RHBZ#1372671)
|
Subject: [PATCH] RHEL: v2v: -i disk: force VNC as display (RHBZ#1372671)
|
||||||
@ -22,5 +22,5 @@ index 0d92f256..753938f6 100644
|
|||||||
s_sound = None;
|
s_sound = None;
|
||||||
s_disks = s_disks;
|
s_disks = s_disks;
|
||||||
--
|
--
|
||||||
2.19.1.3.g30247aa5d201
|
2.31.1
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From 151c1c3c78020c73156d7be66886ca4c92b295ff Mon Sep 17 00:00:00 2001
|
From 621a424738cb94f387171992af5352305121da6b Mon Sep 17 00:00:00 2001
|
||||||
From: Pino Toscano <ptoscano@redhat.com>
|
From: Pino Toscano <ptoscano@redhat.com>
|
||||||
Date: Wed, 8 Mar 2017 11:03:40 +0100
|
Date: Wed, 8 Mar 2017 11:03:40 +0100
|
||||||
Subject: [PATCH] RHEL: v2v: do not mention SUSE Xen hosts (RHBZ#1430203)
|
Subject: [PATCH] RHEL: v2v: do not mention SUSE Xen hosts (RHBZ#1430203)
|
||||||
@ -22,5 +22,5 @@ index cd3210bf..e9f336a9 100644
|
|||||||
=head1 INPUT FROM XEN
|
=head1 INPUT FROM XEN
|
||||||
|
|
||||||
--
|
--
|
||||||
2.19.1.3.g30247aa5d201
|
2.31.1
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From 77696ce54071f741a44061a7112fb724e3ab25f4 Mon Sep 17 00:00:00 2001
|
From af0265e36747be9e6e4d7f91af2529f20e91e7ab Mon Sep 17 00:00:00 2001
|
||||||
From: Pino Toscano <ptoscano@redhat.com>
|
From: Pino Toscano <ptoscano@redhat.com>
|
||||||
Date: Tue, 26 Mar 2019 09:42:25 +0100
|
Date: Tue, 26 Mar 2019 09:42:25 +0100
|
||||||
Subject: [PATCH] RHEL: point to KB for supported v2v hypervisors/guests
|
Subject: [PATCH] RHEL: point to KB for supported v2v hypervisors/guests
|
||||||
@ -123,5 +123,5 @@ index 9815f51f..1ffc0f9d 100644
|
|||||||
=head2 Guest firmware
|
=head2 Guest firmware
|
||||||
|
|
||||||
--
|
--
|
||||||
2.19.1.3.g30247aa5d201
|
2.31.1
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From 6b1c1c4a3001a5c8a1adaa020968a390dd593c95 Mon Sep 17 00:00:00 2001
|
From afec4c531c71de4f98115258d3eee17a25afae5e Mon Sep 17 00:00:00 2001
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
Date: Wed, 30 Jun 2021 11:15:52 +0100
|
Date: Wed, 30 Jun 2021 11:15:52 +0100
|
||||||
Subject: [PATCH] RHEL: Disable -o glance
|
Subject: [PATCH] RHEL: Disable -o glance
|
||||||
@ -215,5 +215,5 @@ index 503dfb55..39fef0fa 100644
|
|||||||
| `RHV_Upload -> (module Output_rhv_upload.RHVUpload)
|
| `RHV_Upload -> (module Output_rhv_upload.RHVUpload)
|
||||||
| `RHV -> (module Output_rhv.RHV)
|
| `RHV -> (module Output_rhv.RHV)
|
||||||
--
|
--
|
||||||
2.19.1.3.g30247aa5d201
|
2.31.1
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From 31a6a8283c5d7ccfe96f67fabb81a21a02631e93 Mon Sep 17 00:00:00 2001
|
From 39f31f9c86ed94699382b2c4d683fc1fd0d59195 Mon Sep 17 00:00:00 2001
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
Date: Thu, 2 Dec 2021 11:56:05 +0000
|
Date: Thu, 2 Dec 2021 11:56:05 +0000
|
||||||
Subject: [PATCH] RHEL: Remove the --in-place option
|
Subject: [PATCH] RHEL: Remove the --in-place option
|
||||||
@ -148,5 +148,5 @@ index 39fef0fa..a1143b68 100644
|
|||||||
pr "mac-option\n";
|
pr "mac-option\n";
|
||||||
pr "bandwidth-option\n";
|
pr "bandwidth-option\n";
|
||||||
--
|
--
|
||||||
2.19.1.3.g30247aa5d201
|
2.31.1
|
||||||
|
|
4
sources
4
sources
@ -1,2 +1,2 @@
|
|||||||
SHA512 (virt-v2v-1.45.95.tar.gz) = 2d408d98d8a67f0aed264cb15fb69d9e5ab4f9b31577ae58a0da7d180f705efb81997308fade3018d16b816a3e3e789927c1a1f03ddc9c02883c37ca0f70e3db
|
SHA512 (virt-v2v-1.45.96.tar.gz) = f4349ce19761db32905395a1ce4bb893eb68823808386edce656bcd452aac1c82d39a6af6e17f226c04e027199cb71b27c42a52bfc4b9153cb31e4c5c1988b49
|
||||||
SHA512 (virt-v2v-1.45.95.tar.gz.sig) = cfa919ae26f9497f113c85fa320797eca6977cabc91048cbeacc97e596439fdc93fa9feba2fb3ed1164c7e221dc993344faa4ce07214ee2a697dbd0dc06daf77
|
SHA512 (virt-v2v-1.45.96.tar.gz.sig) = b0bd15eef79267ca93c0af96e5af041fd006dc9e50e25a3afb6a08257bc5ac997690dd5daf993c9fa14428fff2a4e5cca5934adeafc537a47d17c833d004ab1b
|
||||||
|
@ -14,8 +14,8 @@
|
|||||||
|
|
||||||
Name: virt-v2v
|
Name: virt-v2v
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 1.45.95
|
Version: 1.45.96
|
||||||
Release: 3%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Convert a virtual machine to run on KVM
|
Summary: Convert a virtual machine to run on KVM
|
||||||
|
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -51,20 +51,24 @@ ExclusiveArch: x86_64
|
|||||||
# Downstream (RHEL-only) patches.
|
# Downstream (RHEL-only) patches.
|
||||||
%if 0%{?rhel}
|
%if 0%{?rhel}
|
||||||
# Patches.
|
# Patches.
|
||||||
Patch0001: 0001-input-output-Use-Option.may-for-some-Nbdkit-calls.patch
|
Patch0001: 0001-lib-types-reformat-string_of_guestcaps.patch
|
||||||
Patch0002: 0002-input-nbdkit_curl.ml-Fix-typo-in-commented-code.patch
|
Patch0002: 0002-lib-types-update-string_of_guestcaps.patch
|
||||||
Patch0003: 0003-output_rhv-restrict-block-status-collection-to-the-old-RHV-output.patch
|
Patch0003: 0003-lib-types-introduce-the-gcaps_virtio_1_0-guest-capab.patch
|
||||||
Patch0004: 0004-v2v-Swap-over-the-output-and-conversion-stages.patch
|
Patch0004: 0004-output-create_libvirt_xml-pick-virtio-transitional-m.patch
|
||||||
Patch0005: 0005-XXX-v2v-Remove-nbdcopy-request-size-4M-flag.patch
|
Patch0005: 0005-output-create_json-expose-gcaps_virtio_1_0.patch
|
||||||
Patch0006: 0006-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-RHBZ-1147313.patch
|
Patch0006: 0006-convert-libosinfo-wrap-osinfo_os_get_all_devices.patch
|
||||||
Patch0007: 0007-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-RHBZ-1147313.patch
|
Patch0007: 0007-convert-libosinfo_utils-introduce-string_of_osinfo_d.patch
|
||||||
Patch0008: 0008-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL-qemu-RHBZ-1176493.patch
|
Patch0008: 0008-convert-libosinfo_utils-introduce-os_support_of_osin.patch
|
||||||
Patch0009: 0009-RHEL-Fixes-for-libguestfs-winsupport.patch
|
Patch0009: 0009-convert-determine-machine-type-and-virtio-1.0-from-o.patch
|
||||||
Patch0010: 0010-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
|
Patch0010: 0010-RHEL-v2v-Select-correct-qemu-binary-for-o-qemu-mode-.patch
|
||||||
Patch0011: 0011-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch
|
Patch0011: 0011-RHEL-v2v-Disable-the-qemu-boot-oo-qemu-boot-option-R.patch
|
||||||
Patch0012: 0012-RHEL-point-to-KB-for-supported-v2v-hypervisors-guests.patch
|
Patch0012: 0012-RHEL-Fix-list-of-supported-sound-cards-to-match-RHEL.patch
|
||||||
Patch0013: 0013-RHEL-Disable-o-glance.patch
|
Patch0013: 0013-RHEL-Fixes-for-libguestfs-winsupport.patch
|
||||||
Patch0014: 0014-RHEL-Remove-the-in-place-option.patch
|
Patch0014: 0014-RHEL-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
|
||||||
|
Patch0015: 0015-RHEL-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-1430203.patch
|
||||||
|
Patch0016: 0016-RHEL-point-to-KB-for-supported-v2v-hypervisors-guest.patch
|
||||||
|
Patch0017: 0017-RHEL-Disable-o-glance.patch
|
||||||
|
Patch0018: 0018-RHEL-Remove-the-in-place-option.patch
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if 0%{patches_touch_autotools}
|
%if 0%{patches_touch_autotools}
|
||||||
@ -305,6 +309,12 @@ popd
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jan 06 2022 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.96-1
|
||||||
|
- Rebase to upstream 1.45.96.
|
||||||
|
resolves: rhbz#2011713
|
||||||
|
- Add virtio-transitional for older guests when converting to q35
|
||||||
|
resolves: rhbz#1942325
|
||||||
|
|
||||||
* Thu Dec 23 2021 Laszlo Ersek <lersek@redhat.com> - 1:1.45.95-3
|
* Thu Dec 23 2021 Laszlo Ersek <lersek@redhat.com> - 1:1.45.95-3
|
||||||
- output_rhv: restrict block status collection to the old RHV output
|
- output_rhv: restrict block status collection to the old RHV output
|
||||||
- Rebase from upstream commit 702a511b7f33 to direct child commit 07b12fe99fb9
|
- Rebase from upstream commit 702a511b7f33 to direct child commit 07b12fe99fb9
|
||||||
|
Loading…
Reference in New Issue
Block a user