diff --git a/SOURCES/0024-Update-common-submodule.patch b/SOURCES/0023-Update-common-submodule.patch similarity index 93% rename from SOURCES/0024-Update-common-submodule.patch rename to SOURCES/0023-Update-common-submodule.patch index cb83728..746717a 100644 --- a/SOURCES/0024-Update-common-submodule.patch +++ b/SOURCES/0023-Update-common-submodule.patch @@ -1,4 +1,4 @@ -From 60785259a8bea65663da270b25ea6f46be42aa0f Mon Sep 17 00:00:00 2001 +From 55abb960d633c6d9f959eef5b766daa4402bb314 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Sun, 9 Feb 2025 17:35:14 +0000 Subject: [PATCH] Update common submodule @@ -39,13 +39,14 @@ Pulls in the following fix: Fixes: https://issues.redhat.com/browse/RHEL-77989 Related: https://issues.redhat.com/browse/RHEL-32099 (cherry picked from commit 17610d1c9b37424fec55c39fbf83c971a843f45f) +(cherry picked from commit 60785259a8bea65663da270b25ea6f46be42aa0f) --- common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -Submodule common faee2645..2bb8c83c: +Submodule common 94619ded..084ea740: diff --git a/common/mldrivers/linux_bootloaders.ml b/common/mldrivers/linux_bootloaders.ml -index 91c5ab9e..a821a3f3 100644 +index 91c5ab9e..25afcc59 100644 --- a/common/mldrivers/linux_bootloaders.ml +++ b/common/mldrivers/linux_bootloaders.ml @@ -410,6 +410,28 @@ let detect_bootloader (g : G.guestfs) root i_firmware = diff --git a/SOURCES/0023-convert-Use-yum-apt-.-for-package-removals-not-rpm-d.patch b/SOURCES/0024-convert-Use-yum-apt-.-for-package-removals-not-rpm-d.patch similarity index 87% rename from SOURCES/0023-convert-Use-yum-apt-.-for-package-removals-not-rpm-d.patch rename to SOURCES/0024-convert-Use-yum-apt-.-for-package-removals-not-rpm-d.patch index fad1ea5..6e92b2e 100644 --- a/SOURCES/0023-convert-Use-yum-apt-.-for-package-removals-not-rpm-d.patch +++ b/SOURCES/0024-convert-Use-yum-apt-.-for-package-removals-not-rpm-d.patch @@ -1,4 +1,4 @@ -From 1d3017a30a2f831ee1461c1828c63c9a196805dd Mon Sep 17 00:00:00 2001 +From c7d1809f4b57cb3161800d6fa1499029176f4fd1 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Mon, 10 Feb 2025 10:53:00 -0500 Subject: [PATCH] convert: Use yum/apt/... for package removals, not rpm/dpkg @@ -15,12 +15,13 @@ Just print a warning when package removal goes sideways. Fixes: https://issues.redhat.com/browse/RHEL-71522 Signed-off-by: Cole Robinson (cherry picked from commit b3268a13beca4da218e7ffe4648a18420296103a) +(cherry picked from commit 1d3017a30a2f831ee1461c1828c63c9a196805dd) --- convert/convert_linux.ml | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/convert/convert_linux.ml b/convert/convert_linux.ml -index 3d0e2b88..cbae5e3d 100644 +index 94dd7428..e4042d1f 100644 --- a/convert/convert_linux.ml +++ b/convert/convert_linux.ml @@ -131,6 +131,23 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ = @@ -47,7 +48,7 @@ index 3d0e2b88..cbae5e3d 100644 let rec do_convert () = augeas_grub_configuration (); -@@ -237,7 +254,7 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ = +@@ -239,7 +256,7 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ = else None ) inspect.i_apps in @@ -56,7 +57,7 @@ index 3d0e2b88..cbae5e3d 100644 (* Undo related nastiness if kmod-xenpv was installed. *) if xenmods <> [] then ( -@@ -310,7 +327,7 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ = +@@ -312,7 +329,7 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ = fun { G.app2_name = name } -> name = package_name ) inspect.i_apps in if has_guest_additions then @@ -65,7 +66,7 @@ index 3d0e2b88..cbae5e3d 100644 (* Guest Additions might have been installed from a tarball. The * above code won't detect this case. Look for the uninstall tool -@@ -455,8 +472,7 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ = +@@ -457,8 +474,7 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ = ) ); @@ -75,7 +76,7 @@ index 3d0e2b88..cbae5e3d 100644 (* VMware Tools may have been installed from a tarball, so the * above code won't remove it. Look for the uninstall tool and run -@@ -503,7 +519,7 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ = +@@ -505,7 +521,7 @@ let convert (g : G.guestfs) source inspect i_firmware _ keep_serial_console _ = let pkgs = List.map (fun { G.app2_name = name } -> name) pkgs in if pkgs <> [] then ( @@ -84,4 +85,3 @@ index 3d0e2b88..cbae5e3d 100644 (* Installing these guest utilities automatically unconfigures * ttys in /etc/inittab if the system uses it. We need to put - diff --git a/SOURCES/0025-test-data-phony-fedora-Add-simple-static-bin-sh.patch b/SOURCES/0025-test-data-phony-fedora-Add-simple-static-bin-sh.patch new file mode 100644 index 0000000..fcc4a76 --- /dev/null +++ b/SOURCES/0025-test-data-phony-fedora-Add-simple-static-bin-sh.patch @@ -0,0 +1,142 @@ +From 00550a9ff230ab28d7306d881f923778cccf9e90 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Wed, 19 Feb 2025 15:15:30 +0000 +Subject: [PATCH] test-data: phony fedora: Add simple static /bin/sh + +This is able to do enough to run commands via g#sh and related calls +inside the phony Fedora image. + +(cherry picked from +guestfs-tools commit 4c5854f54e1da0d96807acb1b047bbf34694a0bb) + +(cherry picked from commit de073524ec9fbfa179f2721c36013b2bb312e73f) +(cherry picked from commit 453e38ce02118fc81fe9ec9ca8f81ae341c93fe7) +--- + test-data/phony-guests/fedora.c | 76 +++++++++++++++++++++-- + test-data/phony-guests/make-fedora-img.pl | 6 +- + 2 files changed, 75 insertions(+), 7 deletions(-) + +diff --git a/test-data/phony-guests/fedora.c b/test-data/phony-guests/fedora.c +index c74976d6..0e324d21 100644 +--- a/test-data/phony-guests/fedora.c ++++ b/test-data/phony-guests/fedora.c +@@ -16,13 +16,14 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +-/* This is "just enough" of a binary to look like RPM and dracut, as +- * far as virt-v2v is concerned. ++/* This is "just enough" of a binary to look like /bin/sh, RPM and ++ * dracut, as far as virt-v2v is concerned. + */ + + #include + #include + #include ++#include + + /* NB: This is also defined in make-fedora-img.pl */ + #define KVER "5.19.0-0.rc1.14.fc37.x86_64" +@@ -34,6 +35,27 @@ get_basename (const char *str) + return ret == NULL ? str : ret + 1; + } + ++static void ++add_str (char ***argv, size_t *argc, char *str) ++{ ++ (*argc)++; ++ (*argv) = realloc (*argv, *argc * sizeof (char *)); ++ (*argv)[*argc-1] = str; ++} ++ ++static void ++add_null (char ***argv, size_t *argc) ++{ ++ add_str (argv, argc, NULL); ++} ++ ++static void ++add (char ***argv, size_t *argc, const char *s, size_t len) ++{ ++ char *copy = strndup (s, len); ++ add_str (argv, argc, copy); ++} ++ + int + main (int argc, char *argv[]) + { +@@ -57,10 +79,54 @@ main (int argc, char *argv[]) + strcmp (get_basename (argv[0]), "dracut") == 0) { + // do nothing, pretend to rebuild the initramfs + } ++ else if (argc == 3 && ++ strcmp (get_basename (argv[0]), "sh") == 0 && ++ strcmp (argv[1], "-c") == 0) { ++ /* Split the command and execute it. Only handles trivial cases. */ ++ char *cmd = argv[2]; ++ char **cmdv = NULL; ++ size_t i, cmdvlen = 0, n; ++ const size_t len = strlen (cmd); ++ ++ for (i = 0; i < len;) { ++ switch (cmd[i]) { ++ case ' ': case '\t': ++ i++; ++ continue; ++ ++ case '"': ++ n = strcspn (&cmd[i+1], "\""); ++ add (&cmdv, &cmdvlen, &cmd[i+1], n); ++ i += n+2; ++ break; ++ ++ case '\'': ++ n = strcspn (&cmd[i+1], "'"); ++ add (&cmdv, &cmdvlen, &cmd[i+1], n); ++ i += n+2; ++ break; ++ ++ default: ++ n = strcspn (&cmd[i], " \t"); ++ add (&cmdv, &cmdvlen, &cmd[i], n); ++ i += n; ++ } ++ } ++ add_null (&cmdv, &cmdvlen); ++ ++ execvp (cmdv[0], cmdv); ++ perror (cmdv[0]); ++ exit (EXIT_FAILURE); ++ } + else { +- fprintf (stderr, "phony Fedora: unknown command\n"); +- exit (1); ++ int i; ++ ++ fprintf (stderr, "ERROR: test-data/phony-guests/fedora.c: " ++ "unexpected command:\n"); ++ for (i = 0; i < argc; ++i) ++ fprintf (stderr, "argv[%d] = %s\n", i, argv[i]); ++ exit (EXIT_FAILURE); + } + +- exit (0); ++ exit (EXIT_SUCCESS); + } +diff --git a/test-data/phony-guests/make-fedora-img.pl b/test-data/phony-guests/make-fedora-img.pl +index 188cdd75..f661e8ec 100755 +--- a/test-data/phony-guests/make-fedora-img.pl ++++ b/test-data/phony-guests/make-fedora-img.pl +@@ -369,8 +369,10 @@ $g->ln_s ('/bin/test1', '/bin/test5'); + $g->mkfifo (0777, '/bin/test6'); + $g->mknod (0777, 10, 10, '/bin/test7'); + +-# Virt-v2v needs an RPM command, or at least something which acts +-# similarly, and also a dracut command. ++# Virt-v2v needs a /bin/sh, an RPM command and a dracut command, or at ++# least something which acts similarly to those. ++$g->upload ('fedora-static-bin', '/bin/sh'); ++$g->chmod (0777, '/bin/sh'); + $g->upload ('fedora-static-bin', '/bin/rpm'); + $g->chmod (0777, '/bin/rpm'); + $g->upload ('fedora-static-bin', '/sbin/dracut'); diff --git a/SOURCES/0026-convert-Handle-large-output-from-rpm-ql-command.patch b/SOURCES/0026-convert-Handle-large-output-from-rpm-ql-command.patch new file mode 100644 index 0000000..8d645df --- /dev/null +++ b/SOURCES/0026-convert-Handle-large-output-from-rpm-ql-command.patch @@ -0,0 +1,343 @@ +From b75bde1767c3ec64e44992742a837b26dffe3566 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Wed, 19 Feb 2025 14:16:13 +0000 +Subject: [PATCH] convert: Handle large output from 'rpm -ql' command + +This requires the new guestfs_sh_out API from libguestfs 1.55.6. + +Update common submodule to include: + + Richard W.M. Jones (3): + mlstdutils: Reimplement String.find, add String.find_from + mlstdutils: Reimplement String.nsplit tail recursively + mldrivers: Handle large output from 'rpm -ql' command + +Fixes: https://issues.redhat.com/browse/RHEL-80080 +Reported-by: Nijin Ashok +(cherry picked from commit 5dfe62885bc7d81c7d3c9260ba6def5cb477b5fd) +(cherry picked from commit 0a5fb62a2816d16cbdd7452c8bd95a8fcd2d4a02) +--- + common | 2 +- + m4/guestfs-libraries.m4 | 4 +++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +Submodule common 084ea740..521f27c9: +diff --git a/common/mldrivers/linux.ml b/common/mldrivers/linux.ml +index 4e30a8e1..0dec1549 100644 +--- a/common/mldrivers/linux.ml ++++ b/common/mldrivers/linux.ml +@@ -58,76 +58,84 @@ and do_remove g root packages = + + let file_list_of_package (g : Guestfs.guestfs) root app = + let package_format = g#inspect_get_package_format root in +- match package_format with +- | "deb" -> +- let cmd = [| "dpkg"; "-L"; app.G.app2_name |] in +- debug "%s" (String.concat " " (Array.to_list cmd)); +- let files = g#command_lines cmd in +- let files = Array.to_list files in ++ ++ let cmd = ++ match package_format with ++ | "deb" -> sprintf "dpkg -L %s" (quote app.G.app2_name) ++ ++ | "rpm" -> ++ (* Since RPM allows multiple packages installed with the same ++ * name, always check the full NEVR here (RHBZ#1161250). ++ * ++ * In RPM < 4.11 query commands that use the epoch number in the ++ * package name did not work. ++ * ++ * For example: ++ * RHEL 6 (rpm 4.8.0): ++ * $ rpm -q tar-2:1.23-11.el6.x86_64 ++ * package tar-2:1.23-11.el6.x86_64 is not installed ++ * Fedora 20 (rpm 4.11.2): ++ * $ rpm -q tar-2:1.26-30.fc20.x86_64 ++ * tar-1.26-30.fc20.x86_64 ++ *) ++ let is_rpm_lt_4_11 () = ++ let ver = ++ try ++ (* Since we're going to run 'rpm' below anyway, seems safe ++ * to run it here and assume the binary works. ++ *) ++ let cmd = [| "rpm"; "--version" |] in ++ debug "%s" (String.concat " " (Array.to_list cmd)); ++ let ver = g#command_lines cmd in ++ let ver = ++ if Array.length ver > 0 then ver.(0) else raise Not_found in ++ debug "%s" ver; ++ let ver = String.nsplit " " ver in ++ let ver = ++ match ver with ++ | [ "RPM"; "version"; ver ] -> ver ++ | _ -> raise Not_found in ++ if not (PCRE.matches re_version ver) then raise Not_found; ++ (int_of_string (PCRE.sub 1), int_of_string (PCRE.sub 2)) ++ with Not_found -> ++ (* 'rpm' not installed? Hmm... *) ++ (0, 0) in ++ ver < (4, 11) ++ in ++ let pkg_name = ++ if app.G.app2_epoch = Int32.zero || is_rpm_lt_4_11 () then ++ sprintf "%s-%s-%s" app.G.app2_name app.G.app2_version ++ app.G.app2_release ++ else ++ sprintf "%s-%ld:%s-%s" app.G.app2_name app.G.app2_epoch ++ app.G.app2_version app.G.app2_release in ++ sprintf "rpm -ql %s" (quote pkg_name) ++ ++ | format -> ++ error (f_"don’t know how to get list of files from package using %s") ++ format in ++ ++ debug "file_list_of_package: running: %s" cmd; ++ ++ (* Some packages have a lot of files, too many to list without ++ * breaking the maximum message size assumption in libguestfs. ++ * To cope with this, use guestfs_sh_out, added in 1.55.6. ++ * https://issues.redhat.com/browse/RHEL-80080 ++ *) ++ let tmpfile = Filename.temp_file "v2vcmd" ".out" in ++ On_exit.unlink tmpfile; ++ g#sh_out cmd tmpfile; ++ let files = read_whole_file tmpfile in ++ ++ (* RPM prints "(contains no files)" on stdout when a package ++ * has no files in it: ++ * https://github.com/rpm-software-management/rpm/issues/962 ++ *) ++ if String.is_prefix files "(contains no files)" then [] ++ else ( ++ let files = String.nsplit "\n" files in + List.sort compare files +- +- | "rpm" -> +- (* Since RPM allows multiple packages installed with the same +- * name, always check the full NEVR here (RHBZ#1161250). +- * +- * In RPM < 4.11 query commands that use the epoch number in the +- * package name did not work. +- * +- * For example: +- * RHEL 6 (rpm 4.8.0): +- * $ rpm -q tar-2:1.23-11.el6.x86_64 +- * package tar-2:1.23-11.el6.x86_64 is not installed +- * Fedora 20 (rpm 4.11.2): +- * $ rpm -q tar-2:1.26-30.fc20.x86_64 +- * tar-1.26-30.fc20.x86_64 +- *) +- let is_rpm_lt_4_11 () = +- let ver = +- try +- (* Since we're going to run 'rpm' below anyway, seems safe +- * to run it here and assume the binary works. +- *) +- let cmd = [| "rpm"; "--version" |] in +- debug "%s" (String.concat " " (Array.to_list cmd)); +- let ver = g#command_lines cmd in +- let ver = if Array.length ver > 0 then ver.(0) else raise Not_found in +- debug "%s" ver; +- let ver = String.nsplit " " ver in +- let ver = +- match ver with +- | [ "RPM"; "version"; ver ] -> ver +- | _ -> raise Not_found in +- if not (PCRE.matches re_version ver) then raise Not_found; +- (int_of_string (PCRE.sub 1), int_of_string (PCRE.sub 2)) +- with Not_found -> +- (* 'rpm' not installed? Hmm... *) +- (0, 0) in +- ver < (4, 11) +- in +- let pkg_name = +- if app.G.app2_epoch = Int32.zero || is_rpm_lt_4_11 () then +- sprintf "%s-%s-%s" app.G.app2_name app.G.app2_version +- app.G.app2_release +- else +- sprintf "%s-%ld:%s-%s" app.G.app2_name app.G.app2_epoch +- app.G.app2_version app.G.app2_release in +- let cmd = [| "rpm"; "-ql"; pkg_name |] in +- debug "%s" (String.concat " " (Array.to_list cmd)); +- let files = g#command_lines cmd in +- (* RPM prints "(contains no files)" on stdout when a package +- * has no files in it: +- * https://github.com/rpm-software-management/rpm/issues/962 +- *) +- if files = [| "(contains no files)" |] then +- [] +- else ( +- let files = Array.to_list files in +- List.sort compare files +- ) +- +- | format -> +- error (f_"don’t know how to get list of files from package using %s") +- format ++ ) + + let is_file_owned (g : G.guestfs) root path = + let package_format = g#inspect_get_package_format root in +diff --git a/common/mlstdutils/std_utils.ml b/common/mlstdutils/std_utils.ml +index 86b21a7c..1a36ab77 100644 +--- a/common/mlstdutils/std_utils.ml ++++ b/common/mlstdutils/std_utils.ml +@@ -98,24 +98,27 @@ module String = struct + and len = length str in + len >= sufflen && sub str (len - sufflen) sufflen = suffix + +- let rec find s sub = +- let len = length s in ++ let find_from str pos sub = + let sublen = length sub in +- let rec loop i = +- if i <= len-sublen then ( +- let rec loop2 j = +- if j < sublen then ( +- if s.[i+j] = sub.[j] then loop2 (j+1) +- else -1 +- ) else +- i (* found *) +- in +- let r = loop2 0 in +- if r = -1 then loop (i+1) else r +- ) else +- -1 (* not found *) +- in +- loop 0 ++ if sublen = 0 then ++ 0 ++ else ( ++ let found = ref 0 in ++ let len = length str in ++ try ++ for i = pos to len - sublen do ++ let j = ref 0 in ++ while unsafe_get str (i + !j) = unsafe_get sub !j do ++ incr j; ++ if !j = sublen then begin found := i; raise Exit; end; ++ done; ++ done; ++ -1 ++ with ++ Exit -> !found ++ ) ++ ++ let find str sub = find_from str 0 sub + + let rec replace s s1 s2 = + let len = length s in +@@ -145,7 +148,7 @@ module String = struct + else if n >= len then str, "" + else sub str 0 n, sub str n (len-n) + +- let rec split sep str = ++ let split sep str = + let seplen = length sep in + let strlen = length str in + let i = find str sep in +@@ -154,20 +157,36 @@ module String = struct + sub str 0 i, sub str (i + seplen) (strlen - i - seplen) + ) + +- and nsplit ?(max = 0) sep str = ++ let nsplit ?(max = 0) sep str = + if max < 0 then + invalid_arg "String.nsplit: max parameter should not be negative"; + +- (* If we reached the limit, OR if the pattern does not match the string +- * at all, return the rest of the string as a single element list. +- *) +- if max = 1 || find str sep = -1 then +- [str] +- else ( +- let s1, s2 = split sep str in +- let max = if max = 0 then 0 else max - 1 in +- s1 :: nsplit ~max sep s2 +- ) ++ let len = String.length str in ++ let seplen = String.length sep in ++ ++ let rec loop iters posn acc = ++ (* If we reached the limit, OR if the pattern does not match ++ * the string at all, return the rest of the string. ++ *) ++ if max > 0 && iters = max then ( ++ let rest = ++ if posn = 0 then str else String.sub str posn (len-posn) in ++ List.rev (rest :: acc) ++ ) ++ else ( ++ let end_ = find_from str posn sep in ++ if end_ = -1 then ( ++ let rest = ++ if posn = 0 then str else String.sub str posn (len-posn) in ++ List.rev (rest :: acc) ++ ) ++ else ( ++ let acc = String.sub str posn (end_-posn) :: acc in ++ loop (iters+1) (end_+seplen) acc ++ ) ++ ) ++ in ++ loop 1 0 [] + + let rec lines_split str = + let buf = Buffer.create 16 in +diff --git a/common/mlstdutils/std_utils.mli b/common/mlstdutils/std_utils.mli +index a39ac5f3..7bd55fba 100644 +--- a/common/mlstdutils/std_utils.mli ++++ b/common/mlstdutils/std_utils.mli +@@ -82,6 +82,10 @@ module String : sig + val find : string -> string -> int + (** [find str sub] searches for [sub] as a substring of [str]. If + found it returns the index. If not found, it returns [-1]. *) ++ val find_from : string -> int -> string -> int ++ (** [find_from str start sub] searches for [sub] as a substring of [str], ++ starting at index [start]. If found it returns the index. ++ If not found, it returns [-1]. *) + val replace : string -> string -> string -> string + (** [replace str s1 s2] replaces all instances of [s1] appearing in + [str] with [s2]. *) +diff --git a/common/mlstdutils/std_utils_tests.ml b/common/mlstdutils/std_utils_tests.ml +index 3f5bb1a8..4e368152 100644 +--- a/common/mlstdutils/std_utils_tests.ml ++++ b/common/mlstdutils/std_utils_tests.ml +@@ -113,13 +113,19 @@ let test_string_nsplit ctx = + assert_equal_stringlist [""] (String.nsplit " " ""); + assert_equal_stringlist ["abc"] (String.nsplit " " "abc"); + assert_equal_stringlist ["a"; "b"; "c"] (String.nsplit " " "a b c"); ++ assert_equal_stringlist ["abc"; "d"; "e"] (String.nsplit " " "abc d e"); + assert_equal_stringlist ["a"; "b"; "c"; ""] (String.nsplit " " "a b c "); + assert_equal_stringlist [""; "a"; "b"; "c"] (String.nsplit " " " a b c"); + assert_equal_stringlist [""; "a"; "b"; "c"; ""] (String.nsplit " " " a b c "); + assert_equal_stringlist ["a b c d"] (String.nsplit ~max:1 " " "a b c d"); + assert_equal_stringlist ["a"; "b c d"] (String.nsplit ~max:2 " " "a b c d"); + assert_equal_stringlist ["a"; "b"; "c d"] (String.nsplit ~max:3 " " "a b c d"); +- assert_equal_stringlist ["a"; "b"; "c"; "d"] (String.nsplit ~max:10 " " "a b c d") ++ assert_equal_stringlist ["a"; "b"; "c"; "d"] (String.nsplit ~max:10 " " "a b c d"); ++ ++ (* Test that nsplit can handle large strings. *) ++ let xs = Array.to_list (Array.make 10_000_000 "xyz") in ++ let xs_concat = String.concat " " xs in ++ assert_equal_stringlist xs (String.nsplit " " xs_concat) + + (* Test Std_utils.String.lines_split. *) + let test_string_lines_split ctx = +diff --git a/m4/guestfs-libraries.m4 b/m4/guestfs-libraries.m4 +index 6789a2cb..1cc10d5b 100644 +--- a/m4/guestfs-libraries.m4 ++++ b/m4/guestfs-libraries.m4 +@@ -18,7 +18,9 @@ + dnl Any C libraries required by virt-v2v. + + dnl Of course we need libguestfs. +-PKG_CHECK_MODULES([LIBGUESTFS], [libguestfs >= 1.44]) ++dnl ++dnl We need libguestfs >= 1:1.50.2-1.el9_5 for guestfs_sh_out. ++PKG_CHECK_MODULES([LIBGUESTFS], [libguestfs >= 1.50.2]) + + dnl And libnbd. + PKG_CHECK_MODULES([LIBNBD], [libnbd >= 1.10]) diff --git a/SOURCES/1001-replaced-upstream-references.patch b/SOURCES/1001-replaced-upstream-references.patch new file mode 100644 index 0000000..f0013e9 --- /dev/null +++ b/SOURCES/1001-replaced-upstream-references.patch @@ -0,0 +1,304 @@ +From a0b0015b884015b20a86cbc896ba55448f05e855 Mon Sep 17 00:00:00 2001 +From: Craig Guiller +Date: Fri, 5 Apr 2024 12:34:09 +0100 +Subject: [PATCH] replaced upstream references +Signed-off-by: Craig Guiller +--- + po/Makefile.am | 2 +- + po/cs.po | 3 +-- + po/de.po | 3 +-- + po/es.po | 3 +-- + po/fr.po | 3 +-- + po/gu.po | 3 +-- + po/hi.po | 3 +-- + po/ja.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/uk.po | 3 +-- + po/virt-v2v.pot | 3 +-- + podwrapper.pl.in | 4 ++-- + website/index.html.in | 6 +++--- + 19 files changed, 22 insertions(+), 38 deletions(-) + +diff --git a/po/Makefile.am b/po/Makefile.am +index f1509d6..db4a502 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 415a9b9..bf996ff 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: 2024-01-04 17:06+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 19a5513..7b64f55 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: 2024-01-04 17:06+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 065cd2b..051af40 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: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2015-03-16 07:04+0000\n" + "Last-Translator: Alex Puchades \n" +diff --git a/po/fr.po b/po/fr.po +index 7b0864b..41b9db7 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: 2024-01-04 17:06+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 02643ec..d53329c 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: 2024-01-04 17:06+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 11f334c..303063d 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: 2024-01-04 17:06+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 7c806c1..227b17e 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: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2017-02-24 07:33+0000\n" + "Last-Translator: Copied by Zanata \n" +diff --git a/po/kn.po b/po/kn.po +index 430af05..66b794b 100644 +--- a/po/kn.po ++++ b/po/kn.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: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2015-02-21 10:50+0000\n" + "Last-Translator: Copied by Zanata \n" +diff --git a/po/ml.po b/po/ml.po +index 172994f..0195197 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: 2024-01-04 17:06+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 cfa072d..49e5e6d 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: 2024-01-04 17:06+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 7757ba3..c91e1b0 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: 2024-01-04 17:06+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 cb0b6f9..11ee73f 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: 2024-01-04 17:06+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 9b4e9bc..c34e00d 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: 2024-01-04 17:06+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 d46571c..01f5206 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: 2024-01-04 17:06+0000\n" + "PO-Revision-Date: 2024-01-15 13:36+0000\n" + "Last-Translator: Weblate Translation Memory \n" +diff --git a/podwrapper.pl.in b/podwrapper.pl.in +index c99563c..14198cf 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 +

+ + +diff --git a/po/virt-v2v.pot b/po/virt-v2v.pot +index 9642515..a82187a 100644 +--- a/po/virt-v2v.pot ++++ b/po/virt-v2v.pot +@@ -7,8 +7,7 @@ + msgid "" + msgstr "" + "Project-Id-Version: virt-v2v 2.5.6\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: 2024-07-30 16:57+0100\n" + "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" + "Last-Translator: FULL NAME \n" +-- +2.31.1 + diff --git a/SPECS/virt-v2v.spec b/SPECS/virt-v2v.spec index 0b42070..7e7159d 100644 --- a/SPECS/virt-v2v.spec +++ b/SPECS/virt-v2v.spec @@ -8,7 +8,7 @@ Name: virt-v2v Epoch: 1 Version: 2.5.6 -Release: 8%{?dist} +Release: 9.0.1%{?dist} Summary: Convert a virtual machine to run on KVM License: GPL-2.0-or-later AND LGPL-2.0-or-later @@ -50,9 +50,13 @@ Patch0019: 0019-RHEL-9-Remove-block-driver-option.patch Patch0020: 0020-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch Patch0021: 0021-convert-windows-Online-all-virtio-disks-at-first-boo.patch Patch0022: 0022-convert-windows-Ignore-sriov-drivers-on-virtio-win-d.patch -Patch0023: 0023-convert-Use-yum-apt-.-for-package-removals-not-rpm-d.patch -# https://gitlab.com/redhat/centos-stream/rpms/virt-v2v/-/commit/7e0bcda907e5f2b69566387f5b283186cb7ed62e -Patch0024: 0024-Update-common-submodule.patch +Patch0023: 0023-Update-common-submodule.patch +Patch0024: 0024-convert-Use-yum-apt-.-for-package-removals-not-rpm-d.patch +Patch0025: 0025-test-data-phony-fedora-Add-simple-static-bin-sh.patch +Patch0026: 0026-convert-Handle-large-output-from-rpm-ql-command.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 @@ -77,7 +81,7 @@ BuildRequires: /usr/bin/pod2man BuildRequires: gcc BuildRequires: ocaml >= 4.04 -BuildRequires: libguestfs-devel >= 1:1.49.8-1 +BuildRequires: libguestfs-devel >= 1:1.50.2-2.el9_5 BuildRequires: augeas-devel BuildRequires: bash-completion BuildRequires: file-devel @@ -121,7 +125,7 @@ BuildRequires: sqlite BuildRequires: gnupg2 %endif -Requires: libguestfs%{?_isa} >= 1:1.49.8-1 +Requires: libguestfs%{?_isa} >= 1:1.50.2-2.el9_5 Requires: guestfs-tools >= 1.49.7-1 # XFS is the default filesystem in Fedora and RHEL. @@ -356,14 +360,19 @@ make -C tests TESTS=test-v2v-fedora-luks-on-lvm-conversion.sh check %changelog -* Wed Feb 19 2025 Eduard Abdullin - 1:2.5.6-8 -- Update common submodule +* Mon Mar 17 2025 EL Errata - 2.5.6-9.0.1 +- Replaced bugzilla.oracle.com references [Orabug: 34202300] +- replaced upstream references [Orabug:34089586] -* Mon Feb 17 2025 Darren Archibald - 1:2.5.6-8 -- Migration Plan / vddk pod cannot remove open-vm-tools in case of dependencies - Resolves: RHEL-78842 -- CentOS 9 Migration from VMWare to Openshift Virt fails - Resolves: RHEL-78844 +* Thu Feb 27 2025 Richard W.M. Jones - 1:2.5.6-9 +- Fix failure if the kernel-source package is installed in the source VM + resolves: RHEL-81083 + +* Tue Feb 11 2025 Richard W.M. Jones - 1:2.5.6-8 +- mldrivers/linux_bootloaders.ml: Don't overwrite EFI grub2 wrapper + resolves: RHEL-78844 +- convert: Use yum/apt/... for package removals + resolves: RHEL-78842 * Thu Sep 12 2024 Richard W.M. Jones - 1:2.5.6-7 - Bump and rebuild to resolve rhel-9.5.0 branch issue