diff --git a/0001-prepare-Use-stable-owner-group-and-mtime-in-base.tar.patch b/0001-prepare-Use-stable-owner-group-and-mtime-in-base.tar.patch deleted file mode 100644 index 6e70551..0000000 --- a/0001-prepare-Use-stable-owner-group-and-mtime-in-base.tar.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 7a80a6eec799841b828ba7f617709562d8061435 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Mon, 21 Oct 2024 11:55:53 +0100 -Subject: [PATCH] prepare: Use stable owner, group and mtime in base.tar.gz - -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2320025 -Signed-off-by: Richard W.M. Jones ---- - src/mode_prepare.ml | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/src/mode_prepare.ml b/src/mode_prepare.ml -index 70f9dd4..6af47b1 100644 ---- a/src/mode_prepare.ml -+++ b/src/mode_prepare.ml -@@ -166,9 +166,12 @@ let prepare debug (copy_kernel, format, host_cpu, - let base = outputdir // "base.tar.gz" in - if debug >= 1 then printf "supermin: writing %s\n%!" base; - let cmd = -- sprintf "tar%s -C %s -zcf %s -T %s" -+ let mtime = -+ try sprintf "--mtime=@%s" (quote (Sys.getenv "SOURCE_DATE_EPOCH")) -+ with Not_found -> "" in -+ sprintf "tar%s -C %s -z --owner=0 --group=0 %s -cf %s -T %s" - (if debug >=1 then " -v" else "") -- (quote dir) (quote base) (quote files_from) in -+ (quote dir) mtime (quote base) (quote files_from) in - run_command cmd; - ) - else ( --- -2.46.0 - diff --git a/0001-rpm-extend-the-Multiple_matches-exception.patch b/0001-rpm-extend-the-Multiple_matches-exception.patch new file mode 100644 index 0000000..35516ef --- /dev/null +++ b/0001-rpm-extend-the-Multiple_matches-exception.patch @@ -0,0 +1,89 @@ +From 42955541dc3aa8ae3361f3bd6eb0ae338f307545 Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Wed, 23 Jan 2019 12:22:19 +0100 +Subject: [PATCH 01/12] rpm: extend the Multiple_matches exception + +Add the package that raised the issue, so it can be used to provide +better diagnostic. +--- + src/librpm-c.c | 15 ++++++++++----- + src/librpm.ml | 4 ++-- + src/librpm.mli | 2 +- + 3 files changed, 13 insertions(+), 8 deletions(-) + +diff --git a/src/librpm-c.c b/src/librpm-c.c +index 3bd25a2..75ca4d7 100644 +--- a/src/librpm-c.c ++++ b/src/librpm-c.c +@@ -66,10 +66,15 @@ librpm_handle_closed (void) + } + + static void +-librpm_raise_multiple_matches (int occurrences) ++librpm_raise_multiple_matches (value pkgv, int occurrences) + { +- caml_raise_with_arg (*caml_named_value ("librpm_multiple_matches"), +- Val_int (occurrences)); ++ CAMLparam1 (pkgv); ++ ++ value args[] = { pkgv, Val_int (occurrences) }; ++ caml_raise_with_args (*caml_named_value ("librpm_multiple_matches"), ++ 2, args); ++ ++ CAMLnoreturn; + } + + #define Librpm_val(v) (*((struct librpm_data *)Data_custom_val(v))) +@@ -296,7 +301,7 @@ supermin_rpm_pkg_requires (value rpmv, value pkgv) + fflush (stdout); + } + if (count != 1) +- librpm_raise_multiple_matches (count); ++ librpm_raise_multiple_matches (pkgv, count); + + h = rpmdbNextIterator (iter); + assert (h != NULL); +@@ -413,7 +418,7 @@ supermin_rpm_pkg_filelist (value rpmv, value pkgv) + fflush (stdout); + } + if (count != 1) +- librpm_raise_multiple_matches (count); ++ librpm_raise_multiple_matches (pkgv, count); + + h = rpmdbNextIterator (iter); + assert (h != NULL); +diff --git a/src/librpm.ml b/src/librpm.ml +index 4eeba77..b6f9ff8 100644 +--- a/src/librpm.ml ++++ b/src/librpm.ml +@@ -23,7 +23,7 @@ external rpm_vercmp : string -> string -> int = "supermin_rpm_vercmp" "noalloc" + + type t + +-exception Multiple_matches of int ++exception Multiple_matches of string * int + + external rpm_open : ?debug:int -> t = "supermin_rpm_open" + external rpm_close : t -> unit = "supermin_rpm_close" +@@ -49,4 +49,4 @@ external rpm_pkg_whatprovides : t -> string -> string array = "supermin_rpm_pkg_ + external rpm_pkg_filelist : t -> string -> rpmfile_t array = "supermin_rpm_pkg_filelist" + + let () = +- Callback.register_exception "librpm_multiple_matches" (Multiple_matches 0) ++ Callback.register_exception "librpm_multiple_matches" (Multiple_matches ("", 0)) +diff --git a/src/librpm.mli b/src/librpm.mli +index 5229be6..53b4b2c 100644 +--- a/src/librpm.mli ++++ b/src/librpm.mli +@@ -31,7 +31,7 @@ val rpm_vercmp : string -> string -> int + type t + (** The librpm handle. *) + +-exception Multiple_matches of int ++exception Multiple_matches of string * int + + val rpm_open : ?debug:int -> t + (** Open the librpm (transaction set) handle. *) +-- +2.23.0 + diff --git a/0002-Print-Librpm.Multiple_matches-exceptions.patch b/0002-Print-Librpm.Multiple_matches-exceptions.patch new file mode 100644 index 0000000..47ff7f3 --- /dev/null +++ b/0002-Print-Librpm.Multiple_matches-exceptions.patch @@ -0,0 +1,27 @@ +From 36878992ebdd08f0f9b37017f347f5eab18ce9ed Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Wed, 23 Jan 2019 12:23:02 +0100 +Subject: [PATCH 02/12] Print Librpm.Multiple_matches exceptions + +Print a better diagnostic for them, so it is more clear which package +is detected as present multiple times. +--- + src/supermin.ml | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/supermin.ml b/src/supermin.ml +index f9798f9..71d8b64 100644 +--- a/src/supermin.ml ++++ b/src/supermin.ml +@@ -298,6 +298,8 @@ let () = + error "error: %s: %s: %s" fname (Unix.error_message code) param + | Failure msg -> (* from failwith/failwithf *) + error "failure: %s" msg ++ | Librpm.Multiple_matches (package, count) -> (* from librpm *) ++ error "RPM error: %d occurrences for %s" count package + | Invalid_argument msg -> (* probably should never happen *) + error "internal error: invalid argument: %s" msg + | Assert_failure (file, line, char) -> (* should never happen *) +-- +2.23.0 + diff --git a/0003-Use-external-command-mv-to-rename-old-output-directo.patch b/0003-Use-external-command-mv-to-rename-old-output-directo.patch new file mode 100644 index 0000000..1806bf5 --- /dev/null +++ b/0003-Use-external-command-mv-to-rename-old-output-directo.patch @@ -0,0 +1,38 @@ +From 6579cf5f72d5de345ae1cc97d0344dfa1771460a Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 28 Jan 2019 22:20:33 +0000 +Subject: [PATCH 03/12] Use external command mv to rename old output directory + (RHBZ#1670191). + +See https://bugzilla.redhat.com/show_bug.cgi?id=1670191#c0 +for explanation. + +Thanks: Sam Eiderman +--- + src/supermin.ml | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +diff --git a/src/supermin.ml b/src/supermin.ml +index 71d8b64..7c7135b3 100644 +--- a/src/supermin.ml ++++ b/src/supermin.ml +@@ -264,12 +264,10 @@ appliance automatically. + + (* Delete the old output directory if it exists. *) + let old_outputdir = +- try +- let old_outputdir = outputdir ^ "." ^ string_random8 () in +- rename outputdir old_outputdir; +- Some old_outputdir +- with +- Unix_error _ -> None in ++ let old_outputdir = outputdir ^ "." ^ string_random8 () in ++ let cmd = sprintf "mv %s %s 2>/dev/null" ++ (quote outputdir) (quote old_outputdir) in ++ if Sys.command cmd == 0 then Some old_outputdir else None in + + if debug >= 1 then + printf "supermin: renaming %s to %s\n%!" new_outputdir outputdir; +-- +2.23.0 + diff --git a/0004-Add-OpenMandriva-support-RHBZ-1694267.patch b/0004-Add-OpenMandriva-support-RHBZ-1694267.patch new file mode 100644 index 0000000..4fa888d --- /dev/null +++ b/0004-Add-OpenMandriva-support-RHBZ-1694267.patch @@ -0,0 +1,128 @@ +From bca633bfd14aeeb8ae1331d468db75d1ef31f9ff Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?= +Date: Tue, 2 Apr 2019 08:28:06 +0100 +Subject: [PATCH 04/12] Add OpenMandriva support (RHBZ#1694267). + +--- + src/ph_rpm.ml | 28 +++++++++++++++++++++++++--- + tests/test-harder.sh | 31 +++++++++++++++++++++++++++++++ + 2 files changed, 56 insertions(+), 3 deletions(-) + +diff --git a/src/ph_rpm.ml b/src/ph_rpm.ml +index 46b7f1f..3ff5c94 100644 +--- a/src/ph_rpm.ml ++++ b/src/ph_rpm.ml +@@ -50,6 +50,12 @@ let mageia_detect () = + (Os_release.get_id () = "mageia" || + try (stat "/etc/mageia-release").st_kind = S_REG with Unix_error _ -> false) + ++let openmandriva_detect () = ++ Config.rpm <> "no" && Config.rpm2cpio <> "no" && rpm_is_available () && ++ ((Config.urpmi <> "no" && Config.fakeroot <> "no") || Config.dnf <> "no") && ++ (Os_release.get_id () = "openmandriva" || ++ try (stat "/etc/openmandriva-release").st_kind = S_REG with Unix_error _ -> false) ++ + let ibm_powerkvm_detect () = + Config.rpm <> "no" && Config.rpm2cpio <> "no" && rpm_is_available () && + Config.yumdownloader <> "no" && +@@ -386,17 +392,27 @@ and opensuse_download_all_packages pkgs dir = + + rpm_unpack tdir dir + ++and openmandriva_download_all_packages pkgs dir = ++ let tdir = !settings.tmpdir // string_random8 () in ++ ++ if Config.dnf <> "no" then ++ download_all_packages_with_dnf pkgs dir tdir ++ else (* Config.urpmi <> "no" && Config.fakeroot <> "no" *) ++ download_all_packages_with_urpmi pkgs dir tdir; ++ ++ rpm_unpack tdir dir ++ + and mageia_download_all_packages pkgs dir = + let tdir = !settings.tmpdir // string_random8 () in + + if Config.dnf <> "no" then + download_all_packages_with_dnf pkgs dir tdir + else (* Config.urpmi <> "no" && Config.fakeroot <> "no" *) +- mageia_download_all_packages_with_urpmi pkgs dir tdir; ++ download_all_packages_with_urpmi pkgs dir tdir; + + rpm_unpack tdir dir + +-and mageia_download_all_packages_with_urpmi pkgs dir tdir = ++and download_all_packages_with_urpmi pkgs dir tdir = + let rpms = List.map rpm_package_name (PackageSet.elements pkgs) in + + let cmd = +@@ -484,4 +500,10 @@ let () = + ph_detect = mageia_detect; + ph_download_package = PHDownloadAllPackages mageia_download_all_packages; + } in +- register_package_handler "mageia" "rpm" mageia ++ register_package_handler "mageia" "rpm" mageia; ++ let openmandriva = { ++ fedora with ++ ph_detect = openmandriva_detect; ++ ph_download_package = PHDownloadAllPackages openmandriva_download_all_packages; ++ } in ++ register_package_handler "openmandriva" "rpm" openmandriva +diff --git a/tests/test-harder.sh b/tests/test-harder.sh +index c827f13..aceef21 100755 +--- a/tests/test-harder.sh ++++ b/tests/test-harder.sh +@@ -31,6 +31,7 @@ if [ -f /etc/os-release ]; then + fedora|rhel|centos) distro=redhat ;; + opensuse*|sled|sles) distro=suse ;; + ubuntu) distro=debian ;; ++ openmandriva) distro=openmandriva ;; + esac + elif [ -f /etc/arch-release ]; then + distro=arch +@@ -77,6 +78,9 @@ case $distro in + ibm-powerkvm) + pkgs="augeas hivex tar" + ;; ++ openmandriva) ++ pkgs="augeas hivex rpm" ++ ;; + *) + echo "Unhandled distro '$distro'" + exit 77 +@@ -153,6 +157,33 @@ case $distro in + exit 1 + fi + ;; ++ openmandriva) ++ if [ ! -x $d2/usr/bin/augtool ]; then ++ echo "$0: $distro: augtool binary not installed in chroot" ++ ls -lR $d2 ++ exit 1 ++ fi ++ if [ "$(find $d2/lib* $d2/usr/lib* -name libaugeas.so.0 | wc -l)" -lt 1 ]; then ++ echo "$0: $distro: augeas library not installed in chroot" ++ ls -lR $d2 ++ exit 1 ++ fi ++ if [ ! -x $d2/usr/bin/hivexget ]; then ++ echo "$0: $distro: hivexget binary not installed in chroot" ++ ls -lR $d2 ++ exit 1 ++ fi ++ if [ "$(find $d2/usr/lib* -name libhivex.so.0 | wc -l)" -lt 1 ]; then ++ echo "$0: $distro: hivex library not installed in chroot" ++ ls -lR $d2 ++ exit 1 ++ fi ++ if [ ! -x $d2/bin/rpm ]; then ++ echo "$0: $distro: rpm binary not installed in chroot" ++ ls -lR $d2 ++ exit 1 ++ fi ++ ;; + redhat) + if [ ! -x $d2/usr/bin/augtool ]; then + echo "$0: $distro: augtool binary not installed in chroot" +-- +2.23.0 + diff --git a/0005-rpm-do-not-unpack-parameters.patch b/0005-rpm-do-not-unpack-parameters.patch new file mode 100644 index 0000000..4242c0c --- /dev/null +++ b/0005-rpm-do-not-unpack-parameters.patch @@ -0,0 +1,33 @@ +From 941f72d05302d265af763c7f8ed6b999e4f85eeb Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Fri, 12 Apr 2019 11:58:49 +0200 +Subject: [PATCH 05/12] rpm: do not unpack parameters + +They will be used as parameters again soon. + +This has no behaviour changes. +--- + src/ph_rpm.ml | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/ph_rpm.ml b/src/ph_rpm.ml +index 3ff5c94..6769e7b 100644 +--- a/src/ph_rpm.ml ++++ b/src/ph_rpm.ml +@@ -144,10 +144,10 @@ let rpm_package_of_string str = + * interested in the highest version with the best + * architecture. + *) +- let cmp { version = v1; arch = a1 } { version = v2; arch = a2 } = +- let i = rpm_vercmp v2 v1 in ++ let cmp pkg1 pkg2 = ++ let i = rpm_vercmp pkg2.version pkg1.version in + if i <> 0 then i +- else compare_architecture a2 a1 ++ else compare_architecture pkg2.arch pkg1.arch + in + let rpms = List.sort cmp rpms in + List.hd rpms +-- +2.23.0 + diff --git a/0006-rpm-fix-version-comparison.patch b/0006-rpm-fix-version-comparison.patch new file mode 100644 index 0000000..d2f646c --- /dev/null +++ b/0006-rpm-fix-version-comparison.patch @@ -0,0 +1,70 @@ +From de075776722741a67b0956f36a6357fcedd66ae0 Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Fri, 12 Apr 2019 12:13:07 +0200 +Subject: [PATCH 06/12] rpm: fix version comparison + +When comparing two RPMs, also the epoch, and the release must be taken +into account. Hence, add a new helper to get the EVR string of a +package, and use it when sorting each list of installed packages. + +The mapping is done to avoid recreating the EVR strings at every +comparison. +--- + src/ph_rpm.ml | 29 ++++++++++++++++++++++++++--- + 1 file changed, 26 insertions(+), 3 deletions(-) + +diff --git a/src/ph_rpm.ml b/src/ph_rpm.ml +index 6769e7b..a8bcf7c 100644 +--- a/src/ph_rpm.ml ++++ b/src/ph_rpm.ml +@@ -136,21 +136,44 @@ let rpm_of_pkg, pkg_of_rpm = get_memo_functions () + (* Memo of rpm_package_of_string. *) + let rpmh = Hashtbl.create 13 + ++let rpm_to_evr_string rpm = ++ (* 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 = ++ !rpm_major < 4 || (!rpm_major = 4 && !rpm_minor < 11) in ++ ++ if is_rpm_lt_4_11 || rpm.epoch = 0 then ++ sprintf "%s-%s" rpm.version rpm.release ++ else ++ sprintf "%d:%s-%s" ++ rpm.epoch rpm.version rpm.release ++ + let rpm_package_of_string str = + let query rpm = + let rpms = Array.to_list (rpm_installed (get_rpm ()) rpm) in ++ let rpms = List.map (fun rpm -> (rpm, rpm_to_evr_string rpm)) rpms in + (* RPM will return multiple hits when either multiple versions or + * multiple arches are installed at the same time. We are only + * interested in the highest version with the best + * architecture. + *) +- let cmp pkg1 pkg2 = +- let i = rpm_vercmp pkg2.version pkg1.version in ++ let cmp (pkg1, evr1) (pkg2, evr2) = ++ let i = rpm_vercmp evr2 evr2 in + if i <> 0 then i + else compare_architecture pkg2.arch pkg1.arch + in + let rpms = List.sort cmp rpms in +- List.hd rpms ++ fst (List.hd rpms) + in + + try +-- +2.23.0 + diff --git a/0007-rpm-query-the-RPM-architecture.patch b/0007-rpm-query-the-RPM-architecture.patch new file mode 100644 index 0000000..d0b4f0e --- /dev/null +++ b/0007-rpm-query-the-RPM-architecture.patch @@ -0,0 +1,90 @@ +From e57e988c39aca015100fb92377dbd8d114c0bece Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Fri, 12 Apr 2019 12:26:11 +0200 +Subject: [PATCH 07/12] rpm: query the RPM architecture + +Query the RPM library for the current architecture of RPM, storing it +for later use, and printing it to the debug output. +--- + src/librpm-c.c | 10 ++++++++++ + src/librpm.ml | 1 + + src/librpm.mli | 3 +++ + src/ph_rpm.ml | 8 ++++++-- + 4 files changed, 20 insertions(+), 2 deletions(-) + +diff --git a/src/librpm-c.c b/src/librpm-c.c +index 75ca4d7..2e2f048 100644 +--- a/src/librpm-c.c ++++ b/src/librpm-c.c +@@ -132,6 +132,16 @@ supermin_rpm_vercmp (value av, value bv) + return Val_int (rpmvercmp (String_val (av), String_val (bv))); + } + ++value ++supermin_rpm_get_arch (value unit) ++{ ++ const char *str; ++ ++ rpmGetArchInfo (&str, NULL); ++ ++ return caml_copy_string (str); ++} ++ + value + supermin_rpm_open (value debugv) + { +diff --git a/src/librpm.ml b/src/librpm.ml +index b6f9ff8..c987e21 100644 +--- a/src/librpm.ml ++++ b/src/librpm.ml +@@ -20,6 +20,7 @@ external rpm_is_available : unit -> bool = "supermin_rpm_is_available" "noalloc" + + external rpm_version : unit -> string = "supermin_rpm_version" + external rpm_vercmp : string -> string -> int = "supermin_rpm_vercmp" "noalloc" ++external rpm_get_arch : unit -> string = "supermin_rpm_get_arch" + + type t + +diff --git a/src/librpm.mli b/src/librpm.mli +index 53b4b2c..c0d7bdf 100644 +--- a/src/librpm.mli ++++ b/src/librpm.mli +@@ -28,6 +28,9 @@ val rpm_version : unit -> string + val rpm_vercmp : string -> string -> int + (** Compare two RPM version strings using RPM version compare rules. *) + ++val rpm_get_arch : unit -> string ++(** The current main RPM architecture. *) ++ + type t + (** The librpm handle. *) + +diff --git a/src/ph_rpm.ml b/src/ph_rpm.ml +index a8bcf7c..e27d226 100644 +--- a/src/ph_rpm.ml ++++ b/src/ph_rpm.ml +@@ -64,7 +64,7 @@ let ibm_powerkvm_detect () = + with Unix_error _ -> false + + let settings = ref no_settings +-let rpm_major, rpm_minor = ref 0, ref 0 ++let rpm_major, rpm_minor, rpm_arch = ref 0, ref 0, ref "" + let zypper_major, zypper_minor, zypper_patch = ref 0, ref 0, ref 0 + let t = ref None + +@@ -93,7 +93,11 @@ let rec rpm_init s = + if !settings.debug >= 1 then + printf "supermin: rpm: detected RPM version %d.%d\n" major minor; + +- t := Some (rpm_open ~debug:!settings.debug) ++ t := Some (rpm_open ~debug:!settings.debug); ++ ++ rpm_arch := rpm_get_arch (); ++ if !settings.debug >= 1 then ++ printf "supermin: rpm: detected RPM architecture %s\n" !rpm_arch + + and opensuse_init s = + rpm_init s; +-- +2.23.0 + diff --git a/0008-rpm-fix-package-sorting-RHBZ-1696822.patch b/0008-rpm-fix-package-sorting-RHBZ-1696822.patch new file mode 100644 index 0000000..d787252 --- /dev/null +++ b/0008-rpm-fix-package-sorting-RHBZ-1696822.patch @@ -0,0 +1,49 @@ +From 72735dd11c83eb59d90e04b3c1e580af43b1ba0a Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Fri, 12 Apr 2019 12:38:46 +0200 +Subject: [PATCH 08/12] rpm: fix package sorting (RHBZ#1696822) + +The sorting algorithm for RPMs sorted this way: +- before the packages with the higher versions +- among the packages with the version version, first noarch packages, + then 64bit packages, and then 32bit packages +This was broken in at least two ways: +- the higher installed version may not be of the same host architecture +- if the host architecture is 32bit, and there is a 64bit package of a + 32bit installed one, the 64bit version was preferred + +Instead: +- first sort by architecture, preferring noarch packages, and + packages of the host architecture +- then sort by version + +This way, the higher version of the host architecture is preferred, +otherwise the higher version of any foreign architecture is chosen. +--- + src/ph_rpm.ml | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/src/ph_rpm.ml b/src/ph_rpm.ml +index e27d226..dbe3bda 100644 +--- a/src/ph_rpm.ml ++++ b/src/ph_rpm.ml +@@ -172,9 +172,14 @@ let rpm_package_of_string str = + * architecture. + *) + let cmp (pkg1, evr1) (pkg2, evr2) = +- let i = rpm_vercmp evr2 evr2 in ++ let weight_of_arch = function ++ | "noarch" -> 100 ++ | a when a = !rpm_arch -> 50 ++ | _ -> 0 ++ in ++ let i = compare (weight_of_arch pkg2.arch) (weight_of_arch pkg1.arch) in + if i <> 0 then i +- else compare_architecture pkg2.arch pkg1.arch ++ else rpm_vercmp evr2 evr2 + in + let rpms = List.sort cmp rpms in + fst (List.hd rpms) +-- +2.23.0 + diff --git a/0009-utils-remove-unused-compare_architecture-function.patch b/0009-utils-remove-unused-compare_architecture-function.patch new file mode 100644 index 0000000..299ea19 --- /dev/null +++ b/0009-utils-remove-unused-compare_architecture-function.patch @@ -0,0 +1,66 @@ +From b2401285cd3e3d42006fc164ef1f046cc35a50c4 Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Fri, 12 Apr 2019 12:47:52 +0200 +Subject: [PATCH 09/12] utils: remove unused 'compare_architecture' function + +This was used only in the RPM package handler. +--- + src/utils.ml | 27 --------------------------- + src/utils.mli | 3 --- + 2 files changed, 30 deletions(-) + +diff --git a/src/utils.ml b/src/utils.ml +index f85418f..b25df88 100644 +--- a/src/utils.ml ++++ b/src/utils.ml +@@ -172,33 +172,6 @@ and split_version = function + ) in + first :: split_version rest + +-let compare_architecture a1 a2 = +- let index_of_architecture = function +- | "noarch" | "all" -> 100 +- | "i386" | "i486" | "i586" | "i686" | "x86_32" | "x86-32" -> 32 +- | "x86_64" | "x86-64" | "amd64" -> 64 +- | "armel" | "armhf" -> 32 +- | "aarch64" -> 64 +- | a when string_prefix "armv5" a -> 32 +- | a when string_prefix "armv6" a -> 32 +- | a when string_prefix "armv7" a -> 32 +- | a when string_prefix "armv8" a -> 64 +- | "hppa" | "parisc" -> 32 +- | "hppa64" | "parisc64" -> 64 +- | "ppc" | "ppc32" -> 32 +- | a when string_prefix "ppc64" a -> 64 +- | "sparc" | "sparc32" -> 32 +- | "sparc64" -> 64 +- | "ia64" -> 64 +- | "s390" -> 32 +- | "s390x" -> 64 +- | "alpha" -> 64 +- | a -> +- error "missing support for architecture '%s'\nIt may need to be added to supermin." +- a +- in +- compare (index_of_architecture a1) (index_of_architecture a2) +- + (* Parse a size field, eg. "10G". *) + let parse_size = + let const_re = Str.regexp "^\\([.0-9]+\\)\\([bKMG]\\)$" in +diff --git a/src/utils.mli b/src/utils.mli +index 7837dbb..b86586a 100644 +--- a/src/utils.mli ++++ b/src/utils.mli +@@ -86,9 +86,6 @@ val filter_map : ('a -> 'b option) -> 'a list -> 'b list + val compare_version : string -> string -> int + (** Compare two version-like strings. *) + +-val compare_architecture : string -> string -> int +- (** Compare two architecture strings. *) +- + val parse_size : string -> int64 + (** Parse a size field, eg. [10G] *) + +-- +2.23.0 + diff --git a/0010-rpm-provide-a-dummy-supermin_rpm_get_arch-implementa.patch b/0010-rpm-provide-a-dummy-supermin_rpm_get_arch-implementa.patch new file mode 100644 index 0000000..22ffd97 --- /dev/null +++ b/0010-rpm-provide-a-dummy-supermin_rpm_get_arch-implementa.patch @@ -0,0 +1,33 @@ +From c97b3917068597a0e68e88d9a905da766ade40da Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Fri, 24 May 2019 13:31:07 +0200 +Subject: [PATCH 10/12] rpm: provide a dummy supermin_rpm_get_arch + implementation + +Make sure supermin builds fine also without the RPM development files. + +Fixes commit e57e988c39aca015100fb92377dbd8d114c0bece. +--- + src/librpm-c.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/librpm-c.c b/src/librpm-c.c +index 2e2f048..523fe0b 100644 +--- a/src/librpm-c.c ++++ b/src/librpm-c.c +@@ -483,6 +483,12 @@ supermin_rpm_vercmp (value av, value bv) + abort (); + } + ++value ++supermin_rpm_get_arch (value unit) ++{ ++ abort (); ++} ++ + value + supermin_rpm_open (value debugv) + { +-- +2.23.0 + diff --git a/0011-ext2-Build-symbolic-links-correctly-RHBZ-1770304.patch b/0011-ext2-Build-symbolic-links-correctly-RHBZ-1770304.patch new file mode 100644 index 0000000..bddf338 --- /dev/null +++ b/0011-ext2-Build-symbolic-links-correctly-RHBZ-1770304.patch @@ -0,0 +1,58 @@ +From 487e8c964078f823646d3b0584745ab7d0ef99ca Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 26 Nov 2019 09:01:21 +0000 +Subject: [PATCH 11/12] ext2: Build symbolic links correctly (RHBZ#1770304). + +We created symlinks in two steps, by creating the empty inode and then +calling ext2fs_symlink to populate it. This created broken symlinks +where the directory name contained a / character, eg: + +lrwxrwxrwx 1 root root 7 Nov 26 08:43 /bin -> usr/bin +lrwxrwxrwx 1 root root 7 Nov 26 08:43 /lib -> usr/lib +lrwxrwxrwx 1 root root 9 Nov 26 08:43 /lib64 -> usr/lib64 +lrwxrwxrwx 1 root root 8 Nov 26 08:43 /sbin -> usr/sbin +lrwxrwxrwx 1 root root 7 Nov 26 08:38 bin -> usr/bin + +This breaks with Linux >= 5.3.8, most likely because of extra +validation now being done at the VFS layer: + +https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/fs/readdir.c?id=8a23eb804ca4f2be909e372cf5a9e7b30ae476cd + +It's unnecessary to create the empty inode since ext2fs_symlink can +create the inode for us perfectly fine if we simply pass ino == 0, and +it creates them correctly too. + +Thanks: Toolybird for identifying the problem and kernel patch. +--- + src/ext2fs-c.c | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +diff --git a/src/ext2fs-c.c b/src/ext2fs-c.c +index e8ab972..8903f74 100644 +--- a/src/ext2fs-c.c ++++ b/src/ext2fs-c.c +@@ -782,12 +782,6 @@ ext2_copy_file (struct ext2_data *data, const char *src, const char *dest) + } + /* Create a symlink. */ + else if (S_ISLNK (statbuf.st_mode)) { +- ext2_ino_t ino; +- ext2_empty_inode (data->fs, dir_ino, dirname, basename, +- statbuf.st_mode, statbuf.st_uid, statbuf.st_gid, +- statbuf.st_ctime, statbuf.st_atime, statbuf.st_mtime, +- 0, 0, EXT2_FT_SYMLINK, &ino); +- + char *buf = malloc (statbuf.st_size+1); + if (buf == NULL) + caml_raise_out_of_memory (); +@@ -797,7 +791,7 @@ ext2_copy_file (struct ext2_data *data, const char *src, const char *dest) + if (r > statbuf.st_size) + r = statbuf.st_size; + buf[r] = '\0'; +- ext2fs_symlink (data->fs, dir_ino, ino, dest, buf); ++ ext2fs_symlink (data->fs, dir_ino, 0, basename, buf); + free (buf); + } + /* Create directory. */ +-- +2.23.0 + diff --git a/0012-ext2-Expand-directory-when-adding-symlinks-RHBZ-1770.patch b/0012-ext2-Expand-directory-when-adding-symlinks-RHBZ-1770.patch new file mode 100644 index 0000000..5802837 --- /dev/null +++ b/0012-ext2-Expand-directory-when-adding-symlinks-RHBZ-1770.patch @@ -0,0 +1,42 @@ +From 62d5c774d6c8fcac11e28fcba99754b5478e5088 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 10 Dec 2019 18:43:00 +0000 +Subject: [PATCH 12/12] ext2: Expand directory when adding symlinks + (RHBZ#1770304). + +This produced very weird bugs with missing symlinks under +certain conditions, see: +https://bugzilla.redhat.com/show_bug.cgi?id=1781803 + +Fixes commit 487e8c964078f823646d3b0584745ab7d0ef99ca. +--- + src/ext2fs-c.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/src/ext2fs-c.c b/src/ext2fs-c.c +index 8903f74..0000865 100644 +--- a/src/ext2fs-c.c ++++ b/src/ext2fs-c.c +@@ -791,7 +791,18 @@ ext2_copy_file (struct ext2_data *data, const char *src, const char *dest) + if (r > statbuf.st_size) + r = statbuf.st_size; + buf[r] = '\0'; +- ext2fs_symlink (data->fs, dir_ino, 0, basename, buf); ++ symlink_again: ++ err = ext2fs_symlink (data->fs, dir_ino, 0, basename, buf); ++ if (err) { ++ if (err == EXT2_ET_DIR_NO_SPACE) { ++ err = ext2fs_expand_dir (data->fs, dir_ino); ++ if (err) ++ ext2_error_to_exception ("ext2fs_expand_dir", err, dirname); ++ goto symlink_again; ++ } ++ else ++ ext2_error_to_exception ("ext2fs_symlink", err, basename); ++ } + free (buf); + } + /* Create directory. */ +-- +2.23.0 + diff --git a/gating.yaml b/gating.yaml deleted file mode 100755 index 9234236..0000000 --- a/gating.yaml +++ /dev/null @@ -1,6 +0,0 @@ ---- !Policy -product_versions: - - rhel-9 -decision_context: osci_compose_gate -rules: - - !PassingTestCaseRule {test_case_name: xen-ci.brew-build.tier1.functional} diff --git a/sources b/sources index cc31e54..d77c08a 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (supermin-5.3.5.tar.gz) = e410bafe06805880f0f701e78d743a6e22e9d25e57bd70a020d583dba6d710ba9917d7afc37be714d9bde410c7ff35f4198300b3af0858d761b0b3e07af58dc0 -SHA512 (supermin-5.3.5.tar.gz.sig) = 88f446c3855367dd8917a6eb44d926f8a09dac9913d9098757951ccb3300f9e3544689a45d661382ae24221f8558bbfc188976f4db288829c28379b87949ed7e +SHA512 (supermin-5.1.20.tar.gz) = ccc9ada98593f91399b323f0beb027185874f82547a1df4274c1206a9b6d4465e98b7aef5618274d41fb902747f6843fd2cc6192a4ea8526811261ac5a16848e +SHA512 (supermin-5.1.20.tar.gz.sig) = e7c46fdf4105ffa3f6e02d6ed0b895a9af71470f5c650d129304187b977516343d17a861a9c53934eee559de374623f100f4736426de37ee78d5f5bc82d56096 diff --git a/supermin.spec b/supermin.spec index ee09a0f..d338815 100644 --- a/supermin.spec +++ b/supermin.spec @@ -1,76 +1,71 @@ -# OCaml packages not built on i686 since OCaml 5 / Fedora 39. -ExcludeArch: %{ix86} +%ifnarch %{ocaml_native_compiler} +%global __strip /bin/true +%global debug_package %{nil} +%endif -# On platforms and architectures that support it, the default is -# ‘--with dietlibc’. +# On architectures that support it, the default is ``--with dietlibc''. # -# To use glibc-static instead, do ‘--without dietlibc’. This results -# in a much larger (about 40 times larger) init binary. +# To use glibc-static instead, do ``--without dietlibc''. This +# results in a much larger (about 40 times larger) init binary. # # On other platforms, there is no dietlibc, so the default for those -# is ‘--without dietlibc’. +# is ``--without dietlibc''. # # See also: # https://github.com/libguestfs/supermin/commit/9bb57e1a8d0f3b57eb09f65dd574f702b67e1c2f -%if 0%{?rhel} -%bcond_with dietlibc -%else %ifarch aarch64 %{arm} %{ix86} %{power} s390x x86_64 %bcond_without dietlibc %else %bcond_with dietlibc %endif -%endif - -%if 0%{?fedora} > 40 || 0%{?rhel} > 10 -%bcond_without dnf5 -%else -%bcond_with dnf5 -%endif # Whether we should verify tarball signature with GPGv2. %global verify_tarball_signature 1 -# The source directory. -%global source_directory 5.3-development - Summary: Tool for creating supermin appliances Name: supermin -Version: 5.3.5 -Release: 7%{?dist} -License: GPL-2.0-or-later +Version: 5.1.20 +Release: 11%{?dist} +License: GPLv2+ -ExclusiveArch: %{kernel_arches} -%if 0%{?rhel} -# No qemu-kvm on POWER (RHBZ#1946532). -ExcludeArch: %{power64} +%if 0%{?rhel} >= 7 +ExclusiveArch: x86_64 %endif +ExcludeArch: %{ix86} + URL: http://people.redhat.com/~rjones/supermin/ -Source0: http://download.libguestfs.org/supermin/%{source_directory}/%{name}-%{version}.tar.gz -Source1: http://download.libguestfs.org/supermin/%{source_directory}/%{name}-%{version}.tar.gz.sig +Source0: http://libguestfs.org/download/supermin/%{name}-%{version}.tar.gz +%if 0%{verify_tarball_signature} +Source1: http://libguestfs.org/download/supermin/%{name}-%{version}.tar.gz.sig +%endif + # Keyring used to verify tarball signature. +%if 0%{verify_tarball_signature} Source2: libguestfs.keyring +%endif -# Use stable owner, group and mtime in base.tar.gz -# Upstream in > 5.3.5 -# https://bugzilla.redhat.com/show_bug.cgi?id=2320025 -Patch1: 0001-prepare-Use-stable-owner-group-and-mtime-in-base.tar.patch +# Upstream patches since 5.1.20 was released. +Patch0001: 0001-rpm-extend-the-Multiple_matches-exception.patch +Patch0002: 0002-Print-Librpm.Multiple_matches-exceptions.patch +Patch0003: 0003-Use-external-command-mv-to-rename-old-output-directo.patch +Patch0004: 0004-Add-OpenMandriva-support-RHBZ-1694267.patch +Patch0005: 0005-rpm-do-not-unpack-parameters.patch +Patch0006: 0006-rpm-fix-version-comparison.patch +Patch0007: 0007-rpm-query-the-RPM-architecture.patch +Patch0008: 0008-rpm-fix-package-sorting-RHBZ-1696822.patch +Patch0009: 0009-utils-remove-unused-compare_architecture-function.patch +Patch0010: 0010-rpm-provide-a-dummy-supermin_rpm_get_arch-implementa.patch +Patch0011: 0011-ext2-Build-symbolic-links-correctly-RHBZ-1770304.patch +Patch0012: 0012-ext2-Expand-directory-when-adding-symlinks-RHBZ-1770.patch -BuildRequires: gcc -BuildRequires: make -BuildRequires: autoconf, automake BuildRequires: /usr/bin/pod2man BuildRequires: /usr/bin/pod2html BuildRequires: rpm BuildRequires: rpm-devel -%if %{with dnf5} -BuildRequires: dnf5 -%else BuildRequires: dnf BuildRequires: dnf-plugins-core -%endif BuildRequires: /usr/sbin/mke2fs BuildRequires: e2fsprogs-devel BuildRequires: findutils @@ -88,14 +83,6 @@ BuildRequires: gnupg2 # tests to not require these packages. BuildRequires: augeas hivex kernel tar -%if 0%{?rhel} -%ifarch s390x -# On RHEL 9 s390x, kernel incorrectly pulls in kernel-zfcpdump-core -# https://bugzilla.redhat.com/show_bug.cgi?id=2027654 -BuildRequires: kernel-core -%endif -%endif - # For complicated reasons, this is required so that # /bin/kernel-install puts the kernel directly into /boot, instead of # into a /boot/ subdirectory (in Fedora >= 23). Read the @@ -104,19 +91,19 @@ BuildRequires: grubby # https://bugzilla.redhat.com/show_bug.cgi?id=1331012 BuildRequires: systemd-udev -# This only includes the dependencies needed at runtime, ie. supermin -# --build. For supermin --prepare, dependencies like dnf are placed -# in the -devel subpackage. Requires: rpm +Requires: dnf +Requires: dnf-plugins-core Requires: util-linux-ng Requires: cpio Requires: tar Requires: /usr/sbin/mke2fs # RHBZ#771310 Requires: e2fsprogs-libs >= 1.42 +Requires: findutils # For automatic RPM dependency generation. -# See: https://rpm-software-management.github.io/rpm/manual/dependency_generators.html +# See: http://www.rpm.org/wiki/PackagerDocs/DependencyGenerator Source3: supermin.attr Source4: supermin-find-requires @@ -127,31 +114,18 @@ appliances (similar to virtual machines), usually around 100KB in size, which get fully instantiated on-the-fly in a fraction of a second when you need to boot one of them. -Note that if you want to run 'supermin --prepare' you will need the -extra dependencies provided by %{name}-devel. - %package devel Summary: Development tools for %{name} Requires: %{name} = %{version}-%{release} Requires: rpm-build -# Dependencies needed for supermin --prepare -%if %{with dnf5} -Requires: dnf5 -%else -Requires: dnf -Requires: dnf-plugins-core -%endif -Requires: findutils - %description devel %{name}-devel contains development tools for %{name}. -It contains extra dependencies needed for 'supermin --prepare' to -work, as well as tools for automatic RPM dependency generation from -supermin appliances. +It just contains tools for automatic RPM dependency generation +from supermin appliances. %prep @@ -163,12 +137,7 @@ supermin appliances. %build -autoreconf -fi -# Setting DNF is temporarily required for Rawhide. We should be able -# to remove this later. See: -# https://bugzilla.redhat.com/show_bug.cgi?id=2209412 -# https://fedoraproject.org/wiki/Changes/ReplaceDnfWithDnf5 -%configure %{?with_dnf5:DNF=%{_bindir}/dnf5} --disable-network-tests +%configure --disable-network-tests %if %{with dietlibc} make -C init CC="diet gcc" @@ -211,163 +180,6 @@ make check || { %changelog -* Mon Oct 13 2025 Richard W.M. Jones - 5.3.5-7 -- OCaml 5.4.0 rebuild - -* Fri Jul 25 2025 Fedora Release Engineering - 5.3.5-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Fri Jul 11 2025 Jerry James - 5.3.5-5 -- Rebuild to fix OCaml dependencies - -* Sun Jan 19 2025 Fedora Release Engineering - 5.3.5-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Thu Jan 9 2025 Jerry James - 5.3.5-3 -- OCaml 5.3.0 rebuild for Fedora 42 - -* Mon Oct 21 2024 Richard W.M. Jones - 5.3.5-2 -- Use stable owner, group and mtime in base.tar.gz (RHBZ#2320025) - -* Sat Aug 31 2024 Richard W.M. Jones - 5.3.5-1 -- New upstream version 5.3.5 - -* Sat Jul 20 2024 Fedora Release Engineering - 5.3.4-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Wed Jun 19 2024 Richard W.M. Jones - 5.3.4-4 -- OCaml 5.2.0 ppc64le fix - -* Wed May 29 2024 Richard W.M. Jones - 5.3.4-3 -- OCaml 5.2.0 for Fedora 41 - -* Sat Jan 27 2024 Fedora Release Engineering - 5.3.4-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Thu Jan 11 2024 Richard W.M. Jones - 5.3.4-1 -- New upstream version 5.3.4 -- Remove patches which are now all upstream. - -* Mon Dec 18 2023 Richard W.M. Jones - 5.3.3-19 -- OCaml 5.1.1 + s390x code gen fix for Fedora 40 - -* Tue Dec 12 2023 Richard W.M. Jones - 5.3.3-18 -- OCaml 5.1.1 rebuild for Fedora 40 - -* Fri Nov 10 2023 Richard W.M. Jones - 5.3.3-17 -- Fix RISC-V gzip compressed kernels - -* Thu Oct 05 2023 Richard W.M. Jones - 5.3.3-16 -- OCaml 5.1 rebuild for Fedora 40 - -* Wed Aug 02 2023 Yaakov Selkowitz - 5.3.3-15 -- Defer dnf5 until Fedora 41 - -* Sat Jul 22 2023 Fedora Release Engineering - 5.3.3-14 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Wed Jul 12 2023 Richard W.M. Jones - 5.3.3-13 -- OCaml 5.0 rebuild for Fedora 39 - -* Mon Jul 10 2023 Jerry James - 5.3.3-10 -- OCaml 5.0.0 rebuild - -* Mon Jun 12 2023 Richard W.M. Jones - 5.3.3-9 -- Fix --if-newer - -* Mon Jun 05 2023 Richard W.M. Jones - 5.3.3-8 -- Migrated to SPDX license - -* Wed May 31 2023 Richard W.M. Jones - 5.3.3-7 -- Further fix for dnf5 (RHBZ#2211386) - -* Tue May 30 2023 Richard W.M. Jones - 5.3.3-6 -- Add support for dnf5 (RHBZ#2209412) - -* Fri May 19 2023 Richard W.M. Jones - 5.3.3-5 -- Rebuild against librpm 10 - -* Tue Jan 24 2023 Richard W.M. Jones - 5.3.3-4 -- Rebuild OCaml packages for F38 - -* Sat Jan 21 2023 Richard W.M. Jones - 5.3.3-3 -- Deal with new RPM database location -- https://fedoraproject.org/wiki/Changes/RelocateRPMToUsr - -* Sat Jan 21 2023 Fedora Release Engineering - 5.3.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Tue Oct 18 2022 Richard W.M. Jones - 5.3.3-1 -- New upstream development version 5.3.3 - -* Wed Sep 07 2022 Richard W.M. Jones - 5.3.2-5 -- Include all upstream patches since 5.3.2 -- Add debugging and accurate exception backtraces (RHBZ#2124571). - -* Sat Jul 23 2022 Fedora Release Engineering - 5.3.2-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Sat Jun 18 2022 Richard W.M. Jones - 5.3.2-3 -- OCaml 4.14.0 rebuild - -* Sun May 15 2022 Richard W.M. Jones - 5.3.2-2 -- Move dependency on dnf to -devel subpackage (RHBZ#2086302) - -* Fri Mar 04 2022 Richard W.M. Jones - 5.3.2-1 -- New upstream development version 5.3.2 - -* Fri Feb 04 2022 Richard W.M. Jones - 5.3.1-5 -- OCaml 4.13.1 rebuild to remove package notes - -* Sat Jan 22 2022 Fedora Release Engineering - 5.3.1-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Wed Dec 01 2021 Richard W.M. Jones - 5.3.1-3 -- Further fix to ignore zfcpdump kernel on s390x - -* Tue Nov 30 2021 Richard W.M. Jones - 5.3.1-2 -- Ignore zfcpdump kernel on s390x - -* Thu Aug 26 2021 Richard W.M. Jones - 5.3.1-1 -- New upstream development version 5.3.1. - -* Fri Jul 23 2021 Fedora Release Engineering - 5.2.1-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Wed Jun 2 2021 Richard W.M. Jones - 5.2.1-3 -- Add gating tests (for RHEL 9) - -* Fri May 07 2021 Richard W.M. Jones - 5.2.1-2 -- Do not include the package on POWER on RHEL 9 - resolves: rhbz#1956934 - -* Mon Feb 01 2021 Richard W.M. Jones - 5.2.1-1 -- New upstream version 5.2.1. - -* Wed Jan 27 2021 Fedora Release Engineering - 5.2.0-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Thu Jan 14 2021 Richard W.M. Jones - 5.2.0-6 -- Remove inactive strip override (see RHBZ#1915570). - -* Mon Nov 23 2020 Richard W.M. Jones - 5.2.0-5 -- Disable dietlibc on RHEL 9. - -* Fri Aug 07 2020 Troy Dawson - 5.2.0-4 -- Use ExclusiveArch: %{kernel_arches} - -* Wed Jul 29 2020 Fedora Release Engineering - 5.2.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Fri Apr 03 2020 Richard W.M. Jones - 5.2.0-2 -- ppc64le: ibmvscsi driver missing from supermin appliance (RHBZ#1819019). - -* Tue Mar 10 2020 Richard W.M. Jones - 5.2.0-1 -- New upstream stable version 5.2.0. - -* Fri Jan 31 2020 Fedora Release Engineering - 5.1.20-12 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - * Tue Dec 10 2019 Richard W.M. Jones - 5.1.20-11 - Add further patch to fix symlinks (RHBZ#1770304). - Add all patches since 5.1.20 was released.