From c24009c0157b38d89b4a337cf86124617cbbcecf Mon Sep 17 00:00:00 2001 From: eabdullin Date: Thu, 5 Feb 2026 11:37:45 +0000 Subject: [PATCH] import OL virt-v2v-2.8.1-16.0.1.el10_1 --- ...L-output-output.ml-Remove-cache-none.patch | 41 ++ ....ml-Handle-subdirectories-in-nbdkit-.patch | 118 ++++++ ....ml-Pass-only-longest-prefix-to-vddk.patch | 127 ++++++ 0038-v2v-Add-memsize-and-smp-options.patch | 364 ++++++++++++++++++ ...-more-description-for-memsize-option.patch | 60 +++ 1001-replaced-upstream-references.patch | 351 +++++++++++++++++ copy-patches.sh | 0 virt-v2v.spec | 33 +- 8 files changed, 1090 insertions(+), 4 deletions(-) create mode 100644 0035-RHEL-output-output.ml-Remove-cache-none.patch create mode 100644 0036-input-input_vddk.ml-Handle-subdirectories-in-nbdkit-.patch create mode 100644 0037-input-input_vddk.ml-Pass-only-longest-prefix-to-vddk.patch create mode 100644 0038-v2v-Add-memsize-and-smp-options.patch create mode 100644 0039-docs-Add-more-description-for-memsize-option.patch create mode 100644 1001-replaced-upstream-references.patch mode change 100755 => 100644 copy-patches.sh diff --git a/0035-RHEL-output-output.ml-Remove-cache-none.patch b/0035-RHEL-output-output.ml-Remove-cache-none.patch new file mode 100644 index 0000000..72db039 --- /dev/null +++ b/0035-RHEL-output-output.ml-Remove-cache-none.patch @@ -0,0 +1,41 @@ +From 24cd76732009fabd3070d1a1fcfee5cbfa5c229c Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 12 Dec 2025 16:18:15 +0000 +Subject: [PATCH] RHEL: output/output.ml: Remove cache=none + +Virt-v2v tries to reduce the amount of page cache used when writing +out the disk image to the target storage. It does this by enabling the +cache=none option in nbdkit-file-plugin. + +However, use of nbdkit-file-plugin cache=none option causes data +corruption with Dell PowerMax 8000 storage (only). + +As this is only an advisory setting, remove it. Use of the page cache +can be limited instead using cgroupsv2 memory settings. + +Fixes: https://issues.redhat.com/browse/RHEL-135617 +(cherry picked from commit 30c03c7e308b063843a7848d15890871566bbbc0) +--- + output/output.ml | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/output/output.ml b/output/output.ml +index 15cb50db..5d9c044f 100644 +--- a/output/output.ml ++++ b/output/output.ml +@@ -101,7 +101,6 @@ let output_to_local_file ?(changeuid = fun f -> f ()) + | "raw" -> + let cmd = Nbdkit.create "file" in + Nbdkit.add_arg cmd "file" filename; +- Nbdkit.add_arg cmd "cache" "none"; + if verbose () then Nbdkit.add_filter_if_available cmd "count"; + let _, pid = Nbdkit.run_unix socket cmd in + pid +@@ -204,7 +203,6 @@ let create_local_output_disks dir + (* Create the single nbdkit-file-plugin instance. *) + let cmd = Nbdkit.create "file" in + Nbdkit.add_arg cmd "dir" output_storage; +- Nbdkit.add_arg cmd "cache" "none"; + if verbose () then Nbdkit.add_filter_if_available cmd "count"; + let _, pid = Nbdkit.run_unix socket cmd in + On_exit.kill pid; diff --git a/0036-input-input_vddk.ml-Handle-subdirectories-in-nbdkit-.patch b/0036-input-input_vddk.ml-Handle-subdirectories-in-nbdkit-.patch new file mode 100644 index 0000000..268d888 --- /dev/null +++ b/0036-input-input_vddk.ml-Handle-subdirectories-in-nbdkit-.patch @@ -0,0 +1,118 @@ +From 1053eaf35267c20f451f581973e55474a1f2ee58 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 16 Oct 2025 12:32:40 +0100 +Subject: [PATCH] input/input_vddk.ml: Handle subdirectories in nbdkit vddk + export wildcard + +When calling nbdkit vddk plugin, we have to construct an export +parameter, which is a wildcard that matches all of the filenames we +will request. See: +https://libguestfs.org/nbdkit-vddk-plugin.1.html#PARAMETERS + +The wildcard is checked using fnmatch(FNM_PATHNAME), so '/' characters +in the filename do *not* match '*' characters in the wildcard. As a +result, we failed before when the VMware filename was a path with +subdirectories. + +Attempt some hairy functional programming to calculate a suitable +wildcard for these cases. This definitely won't handle the case where +we have filenames at different directory depths, because in fact +nbdkit itself cannot handle this case right now. + +Reported-by: Ming Xie +Signed-off-by: Richard W.M. Jones +Fixes: https://issues.redhat.com/browse/RHEL-121728 +Related: commit 5461976e229873a203062848c0de30e70067b3fb +Fixes: commit 076727e55f4d4fed246097d3f89ebfe83e3de88f +Related: https://issues.redhat.com/browse/RHEL-102734 +(cherry picked from commit ba86b22c75a65240fdb65ac2e91c472c0f68f78e) +--- + input/input_vddk.ml | 63 +++++++++++++++++++++++++++++++++++---------- + 1 file changed, 50 insertions(+), 13 deletions(-) + +diff --git a/input/input_vddk.ml b/input/input_vddk.ml +index e88befa2..7fd416b9 100644 +--- a/input/input_vddk.ml ++++ b/input/input_vddk.ml +@@ -35,6 +35,53 @@ open Input + *) + let libNN = sprintf "lib%d" Sys.word_size + ++(* Calculate the nbdkit vddk plugin 'export' parameter. This is a ++ * wildcard that must match all filenames given. nbdkit uses ++ * 'fnmatch (export, filename, FNM_PATHNAME)' when checking this, ++ * which means: ++ * - We have to escape any fnmatch-special chars such as '[' and '*' ++ * - '*' does not match '/' characters in the filename ++ *) ++let get_vddk_export_wildcard = function ++ | [] -> assert false (* can't happen, checked by the caller *) ++ | [f] -> fnmatch_escape f (* single file, just escape the whole thing *) ++ | files -> ++ (* We implicitly assume all files end in *.vmdk, check that. *) ++ List.iter (fun f -> assert (String.ends_with ".vmdk" f)) files; ++ ++ (* Calculate the longest common prefix of all the filenames. ++ * Remove the prefix from each filename, leaving the remainder strings. ++ * eg. ++ * "foobar", "foobazs" => prefix = "fooba", remainders = ["r", "zs"] ++ *) ++ let prefix = String.longest_common_prefix files in ++ let prefix_len = String.length prefix in ++ let remainders = List.map ( ++ fun f -> ++ let n = String.length f in ++ assert (prefix_len <= n); ++ String.sub f prefix_len (n - prefix_len) ++ ) files in ++ ++ (* The number of '/' (slash) characters in the remainders must be ++ * the same, otherwise there's something weird with subdirectories ++ * going on that we can't handle yet. (XXX If this happens, then ++ * we'd need to change nbdkit because it cannot possibly handle ++ * a wildcard that matches different directory depths). ++ *) ++ let count_slashes = List.map (String.count_chars '/') remainders in ++ let nr_slashes = List.hd count_slashes in ++ List.iter (fun nr -> assert (nr_slashes = nr)) count_slashes; ++ ++ (* Now we need to generate "*/*/*" for this number of slashes. *) ++ let stars = List.make (nr_slashes+1) "*" in ++ let stars_n_slashes = String.concat "/" stars in ++ ++ (* Construct the final wildcard. Note we only need to ++ * escape the prefix (the only part which is user content). ++ *) ++ fnmatch_escape prefix ^ stars_n_slashes ^ ".vmdk" ++ + module VDDK = struct + let to_string options args = + let xs = "-it vddk" :: args in +@@ -415,24 +462,14 @@ See also the virt-v2v-input-vmware(1) manual.") libNN + * instance of nbdkit. + *) + if Nbdkit.probe_plugin_parameter "vddk" "export=" then ( +- let wildcard = +- match files with +- | [] -> assert false (* can't happen, see assert above *) +- | [f] -> fnmatch_escape f +- | files -> +- (* Calculate the longest common prefix across all the files, +- * then set the wildcard to this. +- * XXX May not work if there are subdirectories? +- * XXX Is every file we want to read called *.vmdk? +- *) +- let prefix = String.longest_common_prefix files in +- fnmatch_escape prefix ^ "*.vmdk" in +- + let socket = sprintf "%s/in0" dir in + On_exit.unlink socket; + + let nbdkit = create_nbdkit_vddk () in ++ ++ let wildcard = get_vddk_export_wildcard files in + Nbdkit.add_arg nbdkit "export" wildcard; ++ + let _, pid = Nbdkit.run_unix socket nbdkit in + On_exit.kill pid; + diff --git a/0037-input-input_vddk.ml-Pass-only-longest-prefix-to-vddk.patch b/0037-input-input_vddk.ml-Pass-only-longest-prefix-to-vddk.patch new file mode 100644 index 0000000..94522de --- /dev/null +++ b/0037-input-input_vddk.ml-Pass-only-longest-prefix-to-vddk.patch @@ -0,0 +1,127 @@ +From c1119abb08bc27609f99f99a4d2f5c8e71f06cd5 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 20 Oct 2025 14:50:07 +0100 +Subject: [PATCH] input/input_vddk.ml: Pass only longest prefix to vddk export + parameter + +See discussion on https://gitlab.com/nbdkit/nbdkit/-/merge_requests/113 + +nbdkit commit 01b429c412 ("vddk: Don't use FNM_PATHNAME when matching +export parameter") removes the FNM_PATHNAME restriction, so we can +just use the longest common prefix again. + +This change requires nbdkit >= 1.45.11. I think it's time to raise +the minimum version of nbdkit anyway, so starting with virt-v2v 2.10, +nbdkit 1.46 will be required. If you use too old nbdkit you will see +the error: + + virt-v2v: error: nbdkit must be >= 1.45.11 for input from VDDK + +This partially reverts commit ba86b22c75 ("input/input_vddk.ml: Handle +subdirectories in nbdkit vddk export wildcard") but I didn't actually +revert that commit because I wanted to keep the explantory comments in +the code. + +Reverts: commit ba86b22c75 +Related: https://gitlab.com/nbdkit/nbdkit/-/merge_requests/113 +Related: https://gitlab.com/nbdkit/nbdkit/-/commit/01b429c412504a491a4b5cc009a9c2e906f993ef +Related: https://issues.redhat.com/browse/RHEL-121728 + +Cherry picked from commit dda93d7fd3ef5b2cdf25cfefa0b2d41207fa54f6, +but remove the hard test for nbdkit >= 1.45.11, and replace it with +an RPM dependency. +--- + README | 2 +- + input/input_vddk.ml | 46 ++++++++++++++++----------------------------- + 2 files changed, 17 insertions(+), 31 deletions(-) + +diff --git a/README b/README +index 407869b4..b21cb87d 100644 +--- a/README ++++ b/README +@@ -56,7 +56,7 @@ REQUIREMENTS + + * OCaml bindings for libnbd + +-* nbdkit >= 1.28 (https://gitlab.com/nbdkit/nbdkit) ++* nbdkit >= 1.45.11 (https://gitlab.com/nbdkit/nbdkit) + + * These nbdkit plugins and filters: + +diff --git a/input/input_vddk.ml b/input/input_vddk.ml +index 7fd416b9..f420192b 100644 +--- a/input/input_vddk.ml ++++ b/input/input_vddk.ml +@@ -36,11 +36,15 @@ open Input + let libNN = sprintf "lib%d" Sys.word_size + + (* Calculate the nbdkit vddk plugin 'export' parameter. This is a +- * wildcard that must match all filenames given. nbdkit uses +- * 'fnmatch (export, filename, FNM_PATHNAME)' when checking this, +- * which means: +- * - We have to escape any fnmatch-special chars such as '[' and '*' +- * - '*' does not match '/' characters in the filename ++ * wildcard that must match all filenames given. ++ * ++ * nbdkit 1.44 used 'fnmatch (export, filename, FNM_PATHNAME)' ++ * which means '*' does not match '/' characters in the filename. ++ * Unfortunately this made it impossible to match certain paths, ++ * in particular if the guest has some files in a subdirectory. ++ * ++ * nbdkit 1.46 relaxes this to 'fnmatch (export, filename, 0)', ++ * so a simple longest prefix works. + *) + let get_vddk_export_wildcard = function + | [] -> assert false (* can't happen, checked by the caller *) +@@ -50,37 +54,14 @@ let get_vddk_export_wildcard = function + List.iter (fun f -> assert (String.ends_with ".vmdk" f)) files; + + (* Calculate the longest common prefix of all the filenames. +- * Remove the prefix from each filename, leaving the remainder strings. +- * eg. +- * "foobar", "foobazs" => prefix = "fooba", remainders = ["r", "zs"] ++ * eg. "foobar", "foobazs" => prefix = "fooba" + *) + let prefix = String.longest_common_prefix files in +- let prefix_len = String.length prefix in +- let remainders = List.map ( +- fun f -> +- let n = String.length f in +- assert (prefix_len <= n); +- String.sub f prefix_len (n - prefix_len) +- ) files in +- +- (* The number of '/' (slash) characters in the remainders must be +- * the same, otherwise there's something weird with subdirectories +- * going on that we can't handle yet. (XXX If this happens, then +- * we'd need to change nbdkit because it cannot possibly handle +- * a wildcard that matches different directory depths). +- *) +- let count_slashes = List.map (String.count_chars '/') remainders in +- let nr_slashes = List.hd count_slashes in +- List.iter (fun nr -> assert (nr_slashes = nr)) count_slashes; +- +- (* Now we need to generate "*/*/*" for this number of slashes. *) +- let stars = List.make (nr_slashes+1) "*" in +- let stars_n_slashes = String.concat "/" stars in + + (* Construct the final wildcard. Note we only need to + * escape the prefix (the only part which is user content). + *) +- fnmatch_escape prefix ^ stars_n_slashes ^ ".vmdk" ++ fnmatch_escape prefix ^ "*.vmdk" + + module VDDK = struct + let to_string options args = +@@ -283,6 +264,11 @@ information on these settings. + (* Check we have nbdkit and the vddk plugin and the cow filter. *) + if not (Nbdkit.is_installed ()) then + error (f_"nbdkit is not installed or not working"); ++(* Remove this test for RHEL 10.1-z, we will enforce it through ++ RPM dependencies instead. ++ if not (Nbdkit.version () >= (1, 45, 11)) then ++ error (f_"nbdkit must be >= 1.45.11 for input from VDDK"); ++*) + if not (Nbdkit.probe_plugin "vddk") then + error (f_"nbdkit-vddk-plugin is not installed"); + if not (Nbdkit.probe_filter "cow") then diff --git a/0038-v2v-Add-memsize-and-smp-options.patch b/0038-v2v-Add-memsize-and-smp-options.patch new file mode 100644 index 0000000..9c0ac16 --- /dev/null +++ b/0038-v2v-Add-memsize-and-smp-options.patch @@ -0,0 +1,364 @@ +From 4b5e135960edde0091aa25fd070934fa643c5299 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 26 Aug 2025 12:33:18 +0100 +Subject: [PATCH] v2v: Add --memsize and --smp options + +For a long time in virt-builder and virt-customize, we have had +options --memsize and --smp which let you override the default amount +of memory and number of vCPUs assigned to the libguestfs appliance. +Usually virt-builder / virt-customize choose suitable numbers, but +occasionally (for example if you need to --install a large package or +--run a heavyweight program) we cannot anticipate what is needed so +it's useful to allow these to be overridden by the user. + +Virt-v2v by default choses 2560MB and min (8, NR_CPUS) for these. +However much the same as above applies, especially since we added +virt-customize features to virt-v2v. It's useful to have these +options as additional control or to "just get it working", although +generally we should still try to make virt-v2v choose good defaults. + +Also add the same options to virt-v2v-in-place and virt-v2v-inspector. + +(cherry picked from commit 03b656ed468ecbe309e7cca24721de9369d476aa) +--- + convert/convert.ml | 29 ++++++++++++++++++++++++----- + convert/convert.mli | 2 ++ + docs/virt-v2v-in-place.pod | 17 +++++++++++++++++ + docs/virt-v2v-inspector.pod | 6 ++++++ + docs/virt-v2v.pod | 17 +++++++++++++++++ + in-place/in_place.ml | 13 +++++++++++++ + inspector/inspector.ml | 13 +++++++++++++ + v2v/v2v.ml | 13 +++++++++++++ + 8 files changed, 105 insertions(+), 5 deletions(-) + +diff --git a/convert/convert.ml b/convert/convert.ml +index 6c78bd99..0b6c88f9 100644 +--- a/convert/convert.ml ++++ b/convert/convert.ml +@@ -34,8 +34,10 @@ type options = { + block_driver : guestcaps_block_type; + keep_serial_console : bool; + ks : key_store; ++ memsize : int option; + network_map : Networks.t; + root_choice : root_choice; ++ smp : int option; + static_ips : static_ip list; + customize_ops : Customize_cmdline.ops; + } +@@ -54,11 +56,28 @@ let rec convert input_disks options source = + message (f_"Opening the source"); + let g = open_guestfs ~identifier:"v2v" () in + g#set_program "virt-v2v"; +- g#set_memsize (g#get_memsize () * 2); +- (* Setting the number of vCPUs allows parallel mkinitrd, but make +- * sure this is not too large because each vCPU consumes guest RAM. +- *) +- g#set_smp (min 8 (Sysconf.nr_processors_online ())); ++ let memsize = ++ match options.memsize with ++ | None -> ++ (* Default (if [--memsize] option is not used) is to calculate ++ * some multiple of the libguestfs default memory size. ++ *) ++ g#get_memsize () * 2 ++ | Some memsize -> memsize in ++ g#set_memsize memsize; ++ let smp = ++ match options.smp with ++ | None -> ++ (* Default (if [--smp] option is not used) is to set the number ++ * according to the number of physical CPUs on the host, but ++ * limit it because each vCPU consumes guest RAM. This is ++ * necessary to allow parallel mkinitrd which greatly improves ++ * performance. ++ *) ++ min 8 (Sysconf.nr_processors_online ()) ++ | Some smp -> smp in ++ g#set_smp smp; ++ + (* The network is used by the unconfigure_vmware () function, and the "--key + * ID:clevis" command line options (if any). *) + g#set_network true; +diff --git a/convert/convert.mli b/convert/convert.mli +index b34f04e0..85ed05cb 100644 +--- a/convert/convert.mli ++++ b/convert/convert.mli +@@ -20,8 +20,10 @@ type options = { + block_driver : Types.guestcaps_block_type; (** [--block-driver] option *) + keep_serial_console : bool; + ks : Tools_utils.key_store; (** [--key] option *) ++ memsize : int option; (** [--memsize] option *) + network_map : Networks.t; (** [-b] and [-n] options *) + root_choice : Types.root_choice; (** [--root] option *) ++ smp : int option; (** [--smp] option *) + static_ips : Types.static_ip list; (** [--mac :ip:] option *) + customize_ops : Customize_cmdline.ops; (** virt-customize options *) + } +diff --git a/docs/virt-v2v-in-place.pod b/docs/virt-v2v-in-place.pod +index 9714bbac..2d1857b9 100644 +--- a/docs/virt-v2v-in-place.pod ++++ b/docs/virt-v2v-in-place.pod +@@ -197,6 +197,14 @@ This option is used to make the output more machine friendly + when being parsed by other programs. See + L. + ++=item B<-m> MB ++ ++=item B<--memsize> MB ++ ++Change the amount of memory allocated when doing the conversion. ++Virt-v2v-in-place will usually choose a suitable default. Increase ++this if you see that the conversion step is running out of memory. ++ + =item B<-n> in:out + + =item B<-n> out +@@ -244,6 +252,15 @@ This disables progress bars and other unnecessary output. + Choose the root filesystem to be converted. See the documentation of + this option in L. + ++=item B<--smp> N ++ ++Change the number of virtual CPUs used when doing the conversion. ++Virt-v2v-in-place will usually choose a suitable default. ++ ++Increasing this beyond 8 may improve conversion performance, if your ++host has sufficient physical CPUs. You may also need to increase the ++memory size (I<--memsize> option). ++ + =item B<-v> + + =item B<--verbose> +diff --git a/docs/virt-v2v-inspector.pod b/docs/virt-v2v-inspector.pod +index 29adcb56..26770459 100644 +--- a/docs/virt-v2v-inspector.pod ++++ b/docs/virt-v2v-inspector.pod +@@ -194,6 +194,10 @@ virt-v2v-inspector. + + =item B<--machine-readable>=format + ++=item B<-m> MB ++ ++=item B<--memsize> MB ++ + =item B<-n> ... + + =item B<--network> ... +@@ -204,6 +208,8 @@ virt-v2v-inspector. + + =item B<--root> ... + ++=item B<--smp> N ++ + =item B<--wrap> + + These options work in the same way as the equivalent virt-v2v options. +diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod +index b63da9f3..76a53e34 100644 +--- a/docs/virt-v2v.pod ++++ b/docs/virt-v2v.pod +@@ -386,6 +386,14 @@ This option is used to make the output more machine friendly + when being parsed by other programs. See + L below. + ++=item B<-m> MB ++ ++=item B<--memsize> MB ++ ++Change the amount of memory allocated when doing the conversion. ++Virt-v2v will usually choose a suitable default. Increase this if you ++see that the conversion step is running out of memory. ++ + =item B<-n> in:out + + =item B<-n> out +@@ -646,6 +654,15 @@ would mean to use the second partition on the first hard drive. If + the named root device does not exist or was not detected as a root + device, then virt-v2v will fail. + ++=item B<--smp> N ++ ++Change the number of virtual CPUs used when doing the conversion. ++Virt-v2v will usually choose a suitable default. ++ ++Increasing this beyond 8 may improve conversion performance, if your ++host has sufficient physical CPUs. You may also need to increase the ++memory size (I<--memsize> option). ++ + =item B<-v> + + =item B<--verbose> +diff --git a/in-place/in_place.ml b/in-place/in_place.ml +index dba0772c..2ee3abc4 100644 +--- a/in-place/in_place.ml ++++ b/in-place/in_place.ml +@@ -66,6 +66,11 @@ let rec main () = + ) + in + ++ let memsize = ref None in ++ let set_memsize arg = memsize := Some arg in ++ let smp = ref None in ++ let set_smp arg = smp := Some arg in ++ + let network_map = Networks.create () in + + let output_xml = ref No_output_xml in +@@ -173,6 +178,8 @@ let rec main () = + s_"Use password from file to connect to input hypervisor"; + [ L"mac" ], Getopt.String ("mac:network|bridge|ip:out", add_mac), + s_"Map NIC to network or bridge or assign static IP"; ++ [ S 'm'; L"memsize" ], Getopt.Int ("mb", set_memsize), ++ s_"Set memory size"; + [ S 'n'; L"network" ], Getopt.String ("in:out", add_network), + s_"Map network ‘in’ to ‘out’"; + [ S 'O' ], Getopt.String ("output.xml", set_output_xml_option), +@@ -181,6 +188,8 @@ let rec main () = + s_"Print source and stop"; + [ L"root" ], Getopt.String ("ask|... ", set_root_choice), + s_"How to choose root filesystem"; ++ [ L"smp" ], Getopt.Int ("vcpus", set_smp), ++ s_"Set number of vCPUs"; + ] in + + (* Append virt-customize options. *) +@@ -233,9 +242,11 @@ read the man page virt-v2v-in-place(1). + let customize_ops = get_customize_ops () in + let input_conn = !input_conn in + let input_mode = !input_mode in ++ let memsize = !memsize in + let output_xml = !output_xml in + let print_source = !print_source in + let root_choice = !root_choice in ++ let smp = !smp in + let static_ips = !static_ips in + + (* No arguments and machine-readable mode? Print out some facts +@@ -295,8 +306,10 @@ read the man page virt-v2v-in-place(1). + Convert.block_driver = Virtio_blk; + keep_serial_console = true; + ks = opthandle.ks; ++ memsize; + network_map; + root_choice; ++ smp; + static_ips; + customize_ops; + } in +diff --git a/inspector/inspector.ml b/inspector/inspector.ml +index 50b8f711..752a5c1c 100644 +--- a/inspector/inspector.ml ++++ b/inspector/inspector.ml +@@ -65,6 +65,11 @@ let rec main () = + ) + in + ++ let memsize = ref None in ++ let set_memsize arg = memsize := Some arg in ++ let smp = ref None in ++ let set_smp arg = smp := Some arg in ++ + let network_map = Networks.create () in + let static_ips = ref [] in + let rec add_network str = +@@ -164,12 +169,16 @@ let rec main () = + s_"Input transport"; + [ L"mac" ], Getopt.String ("mac:network|bridge|ip:out", add_mac), + s_"Map NIC to network or bridge or assign static IP"; ++ [ S 'm'; L"memsize" ], Getopt.Int ("mb", set_memsize), ++ s_"Set memory size"; + [ S 'n'; L"network" ], Getopt.String ("in:out", add_network), + s_"Map network ‘in’ to ‘out’"; + [ S 'O' ], Getopt.String ("output.xml", set_output_file_option), + s_"Set the output filename"; + [ L"root" ], Getopt.String ("ask|... ", set_root_choice), + s_"How to choose root filesystem"; ++ [ L"smp" ], Getopt.Int ("vcpus", set_smp), ++ s_"Set number of vCPUs"; + ] in + + (* Append virt-customize options. *) +@@ -223,7 +232,9 @@ read the man page virt-v2v-inspector(1). + | Some "vddk" -> Some Input.VDDK + | Some transport -> + error (f_"unknown input transport ‘-it %s’") transport in ++ let memsize = !memsize in + let root_choice = !root_choice in ++ let smp = !smp in + let static_ips = !static_ips in + + (* No arguments and machine-readable mode? Print out some facts +@@ -276,8 +287,10 @@ read the man page virt-v2v-inspector(1). + Convert.block_driver = Virtio_blk; + keep_serial_console = true; + ks = opthandle.ks; ++ memsize; + network_map; + root_choice; ++ smp; + static_ips; + customize_ops; + } in +diff --git a/v2v/v2v.ml b/v2v/v2v.ml +index c274baa0..20082544 100644 +--- a/v2v/v2v.ml ++++ b/v2v/v2v.ml +@@ -73,7 +73,12 @@ let rec main () = + ) + in + ++ let memsize = ref None in ++ let set_memsize arg = memsize := Some arg in + let parallel = ref 1 in ++ let smp = ref None in ++ let set_smp arg = smp := Some arg in ++ + let network_map = Networks.create () in + let static_ips = ref [] in + let rec add_network str = +@@ -216,6 +221,8 @@ let rec main () = + s_"Use virt-v2v-in-place instead"; + [ L"mac" ], Getopt.String ("mac:network|bridge|ip:out", add_mac), + s_"Map NIC to network or bridge or assign static IP"; ++ [ S 'm'; L"memsize" ], Getopt.Int ("mb", set_memsize), ++ s_"Set memory size"; + [ S 'n'; L"network" ], Getopt.String ("in:out", add_network), + s_"Map network ‘in’ to ‘out’"; + [ S 'o' ], Getopt.String (output_modes, set_output_mode), +@@ -240,6 +247,8 @@ let rec main () = + s_"Print source and stop"; + [ L"root" ], Getopt.String ("ask|... ", set_root_choice), + s_"How to choose root filesystem"; ++ [ L"smp" ], Getopt.Int ("vcpus", set_smp), ++ s_"Set number of vCPUs"; + ] in + + (* Append virt-customize options. *) +@@ -299,6 +308,7 @@ read the man page virt-v2v(1). + | Some "vddk" -> Some Input.VDDK + | Some transport -> + error (f_"unknown input transport ‘-it %s’") transport in ++ let memsize = !memsize in + let output_alloc = + match !output_alloc with + | `Not_set | `Sparse -> Types.Sparse +@@ -310,6 +320,7 @@ read the man page virt-v2v(1). + error (f_"--parallel parameter must be >= 1"); + let print_source = !print_source in + let root_choice = !root_choice in ++ let smp = !smp in + let static_ips = !static_ips in + + (* No arguments and machine-readable mode? Print out some facts +@@ -402,8 +413,10 @@ read the man page virt-v2v(1). + Convert.block_driver = Virtio_blk; + keep_serial_console = not remove_serial_console; + ks = opthandle.ks; ++ memsize; + network_map; + root_choice; ++ smp; + static_ips; + customize_ops; + } in diff --git a/0039-docs-Add-more-description-for-memsize-option.patch b/0039-docs-Add-more-description-for-memsize-option.patch new file mode 100644 index 0000000..941b7f8 --- /dev/null +++ b/0039-docs-Add-more-description-for-memsize-option.patch @@ -0,0 +1,60 @@ +From edfb40af35c5922b6f7a5595f95f063b3a31fcba Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 30 Oct 2025 17:48:39 +0000 +Subject: [PATCH] docs: Add more description for --memsize option + +The adjustable --memsize option, which increases the amount of memory +available in the appliance, is necessary to work around at least one +unfixable setfiles / glibc bug. Document in more detail what this +option does in a new section, and mention this issue. (As the issue +can't be fixed properly, this is a documentation-only fix). + +Fixes: https://issues.redhat.com/browse/RHEL-125116 +(cherry picked from commit 9bb2e7d4705811f0e227103c14757895e5f591d9) +--- + docs/virt-v2v.pod | 22 ++++++++++++++++++++-- + 1 file changed, 20 insertions(+), 2 deletions(-) + +diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod +index 76a53e34..ff31bb00 100644 +--- a/docs/virt-v2v.pod ++++ b/docs/virt-v2v.pod +@@ -394,6 +394,8 @@ Change the amount of memory allocated when doing the conversion. + Virt-v2v will usually choose a suitable default. Increase this if you + see that the conversion step is running out of memory. + ++See also L. ++ + =item B<-n> in:out + + =item B<-n> out +@@ -742,11 +744,27 @@ alleviate this. + + =head2 Compute power and RAM + ++Virt-v2v can be run in a virtual machine, but may run faster on bare ++metal. ++ + Virt-v2v is not especially compute or RAM intensive. If you are + running many parallel conversions, then you may consider allocating +-one CPU core and 2 GB of RAM per running instance. ++one CPU core and 2 GB of RAM per running instance. (You may adjust ++the amount of memory used by conversion, see the next heading.) + +-Virt-v2v can be run in a virtual machine. ++=head2 Adjusting memory available for conversion ++ ++Virt-v2v I<--memsize=N> can be used to increase the amount of memory ++available to do conversion. This rarely needs to be adjusted, but can ++help to workaround some conversion problems. ++ ++=head3 Linux: setfiles runs out of memory when relabelling ++ ++For Linux guests that use SELinux, setfiles can run out of memory if a ++single directory contains millions of files. As there is no simple ++way for virt-v2v to detect this problem in advance, you may have to ++use I<--memsize=4000> (or larger) to convert such guests. For details ++see L + + =head2 Trimming + diff --git a/1001-replaced-upstream-references.patch b/1001-replaced-upstream-references.patch new file mode 100644 index 0000000..b5bc13e --- /dev/null +++ b/1001-replaced-upstream-references.patch @@ -0,0 +1,351 @@ +From 9bd7e17d0b34f939eab0c18cef7fd4bb74269c20 Mon Sep 17 00:00:00 2001 +From: Darren Archibald +Date: Tue, 9 Sep 2025 04:07:35 -0700 +Subject: [PATCH] replaced upstream references + +Signed-off-by: Darren Archibald +Signed-off-by: Akshata Konala +--- + po/Makefile.am | 2 +- + po/cs.po | 3 +-- + po/de.po | 3 +-- + po/es.po | 3 +-- + po/fi.po | 3 +-- + po/fr.po | 3 +-- + po/gu.po | 3 +-- + po/hi.po | 3 +-- + po/ja.po | 3 +-- + po/ka.po | 3 +-- + po/kn.po | 3 +-- + po/ml.po | 3 +-- + po/mr.po | 3 +-- + po/nl.po | 3 +-- + po/or.po | 3 +-- + po/pa.po | 3 +-- + po/pl.po | 3 +-- + po/si.po | 3 +-- + po/uk.po | 3 +-- + po/virt-v2v.pot | 3 +-- + podwrapper.pl.in | 4 ++-- + website/index.html.in | 6 +++--- + 22 files changed, 25 insertions(+), 44 deletions(-) + +diff --git a/po/Makefile.am b/po/Makefile.am +index 08d9dbe..61f472b 100644 +--- a/po/Makefile.am ++++ b/po/Makefile.am +@@ -19,7 +19,7 @@ include $(top_srcdir)/subdir-rules.mk + + DOMAIN = $(PACKAGE_NAME) + COPYRIGHT_HOLDER = Red Hat Inc. +-MSGID_BUGS_ADDRESS = https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools ++MSGID_BUGS_ADDRESS = https://github.com/oracle/oracle-linux + + # Languages. + # Don't use LINGUAS (uppercase) as Gentoo defines it (RHBZ#804464). +diff --git a/po/cs.po b/po/cs.po +index 55c4fdc..5003e14 100644 +--- a/po/cs.po ++++ b/po/cs.po +@@ -2,8 +2,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2023-04-08 18:20+0000\n" + "Last-Translator: Pavel Borecki \n" +diff --git a/po/de.po b/po/de.po +index e8d9053..835535e 100644 +--- a/po/de.po ++++ b/po/de.po +@@ -9,8 +9,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2015-02-21 10:48+0000\n" + "Last-Translator: Copied by Zanata \n" +diff --git a/po/es.po b/po/es.po +index 1a63337..8800235 100644 +--- a/po/es.po ++++ b/po/es.po +@@ -10,8 +10,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2015-03-16 07:04+0000\n" + "Last-Translator: Alex Puchades \n" +diff --git a/po/fi.po b/po/fi.po +index 56f9917..b077010 100644 +--- a/po/fi.po ++++ b/po/fi.po +@@ -6,8 +6,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: virt-v2v 1.43.4\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2025-01-09 11:33+0000\n" + "Last-Translator: Ricky Tigg \n" +diff --git a/po/fr.po b/po/fr.po +index 2db1ae1..2ba25d0 100644 +--- a/po/fr.po ++++ b/po/fr.po +@@ -10,8 +10,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2023-03-21 09:20+0000\n" + "Last-Translator: grimst \n" +diff --git a/po/gu.po b/po/gu.po +index 5b4e798..9c540cd 100644 +--- a/po/gu.po ++++ b/po/gu.po +@@ -8,8 +8,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2015-02-21 10:49+0000\n" + "Last-Translator: Copied by Zanata \n" +diff --git a/po/hi.po b/po/hi.po +index a3983ed..0364d75 100644 +--- a/po/hi.po ++++ b/po/hi.po +@@ -8,8 +8,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2015-02-21 10:49+0000\n" + "Last-Translator: Copied by Zanata \n" +diff --git a/po/ja.po b/po/ja.po +index 23d34f2..c14299e 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -9,8 +9,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2017-02-24 07:33+0000\n" + "Last-Translator: Copied by Zanata \n" +diff --git a/po/ka.po b/po/ka.po +index 78ebee4..b116e86 100644 +--- a/po/ka.po ++++ b/po/ka.po +@@ -6,8 +6,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: virt-v2v 2.1.1\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2025-01-09 09:27+0000\n" + "Last-Translator: Weblate Translation Memory \n" +diff --git a/po/ml.po b/po/ml.po +index 7a3f071..7de8c16 100644 +--- a/po/ml.po ++++ b/po/ml.po +@@ -7,8 +7,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2015-02-21 10:50+0000\n" + "Last-Translator: Copied by Zanata \n" +diff --git a/po/mr.po b/po/mr.po +index 8222d63..7f55091 100644 +--- a/po/mr.po ++++ b/po/mr.po +@@ -8,8 +8,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2015-02-21 10:51+0000\n" + "Last-Translator: Copied by Zanata \n" +diff --git a/po/nl.po b/po/nl.po +index 06df912..b25b908 100644 +--- a/po/nl.po ++++ b/po/nl.po +@@ -9,8 +9,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2015-02-21 10:51+0000\n" + "Last-Translator: Copied by Zanata \n" +diff --git a/po/or.po b/po/or.po +index 2422cc3..92a2500 100644 +--- a/po/or.po ++++ b/po/or.po +@@ -7,8 +7,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2015-02-21 10:51+0000\n" + "Last-Translator: Copied by Zanata \n" +diff --git a/po/pa.po b/po/pa.po +index e2465b6..73a8db6 100644 +--- a/po/pa.po ++++ b/po/pa.po +@@ -8,8 +8,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2015-02-21 10:52+0000\n" + "Last-Translator: Copied by Zanata \n" +diff --git a/po/pl.po b/po/pl.po +index 77f4651..16c7459 100644 +--- a/po/pl.po ++++ b/po/pl.po +@@ -11,8 +11,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: libguestfs 1.39.12\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-02-27 18:15+0000\n" + "PO-Revision-Date: 2024-01-15 13:36+0000\n" + "Last-Translator: Weblate Translation Memory \n" +diff --git a/po/virt-v2v.pot b/po/virt-v2v.pot +index 60bbf0c..ea2fb85 100644 +--- a/po/virt-v2v.pot ++++ b/po/virt-v2v.pot +@@ -7,8 +7,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: virt-v2v 2.8.1\n" +-"Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?" +-"component=libguestfs&product=Virtualization+Tools\n" ++"Report-Msgid-Bugs-To: https://github.com/oracle/oracle-linux\n" + "POT-Creation-Date: 2025-06-26 16:05+0100\n" + "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" + "Last-Translator: FULL NAME \n" +diff --git a/podwrapper.pl.in b/podwrapper.pl.in +index d7973fc..0a196f3 100755 +--- a/podwrapper.pl.in ++++ b/podwrapper.pl.in +@@ -432,10 +432,10 @@ my $reporting_bugs = + "=head1 BUGS + + To get a list of bugs against libguestfs, use this link: +-L ++L + + To report a new bug against libguestfs, use this link: +-L ++L + + When reporting a bug, please supply: + +diff --git a/website/index.html.in b/website/index.html.in +index f578523..e1e1592 100644 +--- a/website/index.html.in ++++ b/website/index.html.in +@@ -160,12 +160,12 @@ For testers: +

Bug reports

+ +

+-List of bugs in libguestfs and +-in Fedora packaging of libguestfs ++List of bugs in libguestfs and ++in Community packaging of libguestfs +

+ +

+-Enter a new bug report ++Enter a new bug report +

+ + +-- +2.31.1 + diff --git a/copy-patches.sh b/copy-patches.sh old mode 100755 new mode 100644 diff --git a/virt-v2v.spec b/virt-v2v.spec index da6717d..e1caa66 100644 --- a/virt-v2v.spec +++ b/virt-v2v.spec @@ -7,7 +7,7 @@ Name: virt-v2v Epoch: 1 Version: 2.8.1 -Release: 13%{?dist} +Release: 16.0.1%{?dist} Summary: Convert a virtual machine to run on KVM License: GPL-2.0-or-later AND LGPL-2.0-or-later @@ -61,6 +61,14 @@ Patch0031: 0031-convert-Look-for-GRUB-signature-first-to-identify-bo.patch Patch0032: 0032-lib-types.ml-Fix-formatting-of-debug-message.patch Patch0033: 0033-convert-windows-Fix-ESP-conversion-if-C-Windows-Temp.patch Patch0034: 0034-Update-common-submodule.patch +Patch0035: 0035-RHEL-output-output.ml-Remove-cache-none.patch +Patch0036: 0036-input-input_vddk.ml-Handle-subdirectories-in-nbdkit-.patch +Patch0037: 0037-input-input_vddk.ml-Pass-only-longest-prefix-to-vddk.patch +Patch0038: 0038-v2v-Add-memsize-and-smp-options.patch +Patch0039: 0039-docs-Add-more-description-for-memsize-option.patch + +# Oracle patch +Patch1001: 1001-replaced-upstream-references.patch %if !0%{?rhel} # libguestfs hasn't been built on i686 for a while since there is no @@ -120,7 +128,7 @@ BuildRequires: nbdkit-null-plugin %if !0%{?rhel} BuildRequires: nbdkit-python-plugin %endif -BuildRequires: nbdkit-cow-filter >= 1.28.3-1.el9 +BuildRequires: nbdkit-cow-filter BuildRequires: mingw-srvany-redistributable >= 1.1-6 %ifarch x86_64 BuildRequires: glibc-static @@ -169,7 +177,7 @@ Requires: libnbd >= 1.10 Requires: %{_bindir}/qemu-nbd Requires: %{_bindir}/nbdcopy Requires: %{_bindir}/nbdinfo -Requires: nbdkit-server >= 1.28.3-1.el9 +Requires: nbdkit-server >= 1.44.1-3.el10_1 Requires: nbdkit-curl-plugin Requires: nbdkit-file-plugin Requires: nbdkit-nbd-plugin @@ -182,7 +190,7 @@ Requires: nbdkit-ssh-plugin Requires: nbdkit-vddk-plugin %endif Requires: nbdkit-blocksize-filter -Requires: nbdkit-cow-filter >= 1.28.3-1.el9 +Requires: nbdkit-cow-filter Requires: nbdkit-multi-conn-filter Requires: nbdkit-noextents-filter Requires: nbdkit-rate-filter @@ -351,6 +359,23 @@ done %changelog +* Wed Feb 04 2026 EL Errata - 2.8.1-16.0.1 +- Replaced bugzilla.oracle.com references [Orabug: 34202300] +- replaced upstream references [Orabug:34089586] + +* Wed Jan 07 2026 Richard W.M. Jones - 1:2.8.1-16 +- Add --memsize and --smp options + resolves: RHEL-139153 + +* Tue Jan 06 2026 Richard W.M. Jones - 1:2.8.1-15 +- v2v can't convert guest with multiple windows OS on rhel10 +- Add runtime requires for nbdkit-1.44.1-3.el10_1 + resolves: RHEL-137304 + +* Mon Dec 15 2025 Richard W.M. Jones - 1:2.8.1-14 +- Remove cache=none + resolves: RHEL-135750 + * Mon Nov 17 2025 Richard W.M. Jones - 1:2.8.1-13 - Fix pnputil driver store after conversion resolves: RHEL-128908