From 1ae35926e566771a1231c38d4c5f688d725665dd Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Mon, 12 Jun 2023 13:10:51 +0100 Subject: [PATCH] Fix --if-newer --- ...base-location-in-usr-lib-sysimage-rp.patch | 2 +- 0002-Add-support-for-OCaml-5.0.patch | 2 +- ...estore-compatibility-with-OCaml-4.07.patch | 2 +- ...Detect-dnf5-and-omit-missing-options.patch | 2 +- 0005-rpm-Use-dnf-config-instead-of-c.patch | 2 +- ...ugging-of-the-supermin-if-newer-calc.patch | 56 +++++++++++++++++++ 0007-src-Fix-if-newer-copy-kernel.patch | 39 +++++++++++++ supermin.spec | 8 ++- 8 files changed, 107 insertions(+), 6 deletions(-) create mode 100644 0006-src-Improved-debugging-of-the-supermin-if-newer-calc.patch create mode 100644 0007-src-Fix-if-newer-copy-kernel.patch diff --git a/0001-rpm-New-RPM-database-location-in-usr-lib-sysimage-rp.patch b/0001-rpm-New-RPM-database-location-in-usr-lib-sysimage-rp.patch index 585fa81..1c5e464 100644 --- a/0001-rpm-New-RPM-database-location-in-usr-lib-sysimage-rp.patch +++ b/0001-rpm-New-RPM-database-location-in-usr-lib-sysimage-rp.patch @@ -1,7 +1,7 @@ From 86fd6f3e86ab99d54a22b475aecccfc19bdff07e Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Sat, 21 Jan 2023 09:38:55 +0000 -Subject: [PATCH 1/5] rpm: New RPM database location in /usr/lib/sysimage/rpm +Subject: [PATCH 1/7] rpm: New RPM database location in /usr/lib/sysimage/rpm A few years ago the RPM database was moved from /var to /usr. This is now feeding through to Linux distros. diff --git a/0002-Add-support-for-OCaml-5.0.patch b/0002-Add-support-for-OCaml-5.0.patch index 6372301..01fc281 100644 --- a/0002-Add-support-for-OCaml-5.0.patch +++ b/0002-Add-support-for-OCaml-5.0.patch @@ -1,7 +1,7 @@ From f8774efbe02d3651cde449333cf108e79adba48c Mon Sep 17 00:00:00 2001 From: Kate Date: Wed, 16 Nov 2022 19:30:01 +0000 -Subject: [PATCH 2/5] Add support for OCaml 5.0 +Subject: [PATCH 2/7] Add support for OCaml 5.0 --- src/mode_build.ml | 4 ++-- diff --git a/0003-Restore-compatibility-with-OCaml-4.07.patch b/0003-Restore-compatibility-with-OCaml-4.07.patch index 6fd79e4..ae5fa78 100644 --- a/0003-Restore-compatibility-with-OCaml-4.07.patch +++ b/0003-Restore-compatibility-with-OCaml-4.07.patch @@ -1,7 +1,7 @@ From 3efe663421d94376694f292ca1fcf2732a82149f Mon Sep 17 00:00:00 2001 From: Kate Date: Wed, 16 Nov 2022 19:59:36 +0000 -Subject: [PATCH 3/5] Restore compatibility with OCaml < 4.07 +Subject: [PATCH 3/7] Restore compatibility with OCaml < 4.07 --- src/mode_build.ml | 6 ++++-- diff --git a/0004-rpm-Detect-dnf5-and-omit-missing-options.patch b/0004-rpm-Detect-dnf5-and-omit-missing-options.patch index 9d9d7f1..81fe831 100644 --- a/0004-rpm-Detect-dnf5-and-omit-missing-options.patch +++ b/0004-rpm-Detect-dnf5-and-omit-missing-options.patch @@ -1,7 +1,7 @@ From 92d5d7e8c27088fa3fb8e5e6e9c5b8d3209053d6 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 30 May 2023 09:12:14 +0100 -Subject: [PATCH 4/5] rpm: Detect dnf5 and omit missing options +Subject: [PATCH 4/7] rpm: Detect dnf5 and omit missing options Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2209412 --- diff --git a/0005-rpm-Use-dnf-config-instead-of-c.patch b/0005-rpm-Use-dnf-config-instead-of-c.patch index a9badb1..614dd68 100644 --- a/0005-rpm-Use-dnf-config-instead-of-c.patch +++ b/0005-rpm-Use-dnf-config-instead-of-c.patch @@ -1,7 +1,7 @@ From 057ea99a3211057d2cb2c9971afe56e0a85e0f78 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Wed, 31 May 2023 12:52:13 +0100 -Subject: [PATCH 5/5] rpm: Use dnf --config instead of -c +Subject: [PATCH 5/7] rpm: Use dnf --config instead of -c dnf5 does not support -c. dnf4 supports either. diff --git a/0006-src-Improved-debugging-of-the-supermin-if-newer-calc.patch b/0006-src-Improved-debugging-of-the-supermin-if-newer-calc.patch new file mode 100644 index 0000000..6fa0426 --- /dev/null +++ b/0006-src-Improved-debugging-of-the-supermin-if-newer-calc.patch @@ -0,0 +1,56 @@ +From 8dd37da1b5979842b0db44b44655eeaf621f7ac9 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 12 Jun 2023 12:51:56 +0100 +Subject: [PATCH 6/7] src: Improved debugging of the supermin if-newer + calculation + +Also I expanded the code to make it easier to read. There is no +change to the calculation intended. +--- + src/supermin.ml | 29 ++++++++++++++++++++++++++--- + 1 file changed, 26 insertions(+), 3 deletions(-) + +diff --git a/src/supermin.ml b/src/supermin.ml +index d49c1e8..c30c73c 100644 +--- a/src/supermin.ml ++++ b/src/supermin.ml +@@ -241,10 +241,33 @@ appliance automatically. + try + let outputs = Mode_build.get_outputs args inputs in + let outputs = List.map ((//) outputdir) outputs in +- let odates = List.map (fun d -> (lstat d).st_mtime) (outputdir :: outputs) in +- let idates = List.map (fun d -> (lstat d).st_mtime) inputs in ++ let outputs = outputdir :: outputs in ++ let odates = List.map (fun f -> (lstat f).st_mtime) outputs in ++ if debug >= 2 then ( ++ List.iter ( ++ fun f -> ++ printf "supermin: if-newer: output %s => %.2f\n" ++ f (lstat f).st_mtime ++ ) outputs; ++ ); ++ let idates = List.map (fun f -> (lstat f).st_mtime) inputs in ++ if debug >= 2 then ( ++ List.iter ( ++ fun f -> ++ printf "supermin: if-newer: input %s => %.2f\n" ++ f (lstat f).st_mtime ++ ) inputs; ++ ); + let pdate = (get_package_handler ()).ph_get_package_database_mtime () in +- if List.for_all (fun idate -> List.for_all (fun odate -> idate < odate) odates) (pdate :: idates) then ( ++ if debug >= 2 then ( ++ printf "supermin: if-newer: package database date: %.2f\n" pdate; ++ ); ++ let older = ++ List.for_all ( ++ fun idate -> ++ List.for_all (fun odate -> idate < odate) odates ++ ) (pdate :: idates) in ++ if older then ( + if debug >= 1 then + printf "supermin: if-newer: output does not need rebuilding\n%!"; + exit 0 +-- +2.37.3 + diff --git a/0007-src-Fix-if-newer-copy-kernel.patch b/0007-src-Fix-if-newer-copy-kernel.patch new file mode 100644 index 0000000..19117db --- /dev/null +++ b/0007-src-Fix-if-newer-copy-kernel.patch @@ -0,0 +1,39 @@ +From 8c38641042e274a713a18daf7fc85584ca0fc9bb Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 12 Jun 2023 13:02:37 +0100 +Subject: [PATCH 7/7] src: Fix --if-newer --copy-kernel + +We previously copied the kernel into the appliance using 'cp -p' which +preserves the datestamps of the installed kernel. This can confuse +the --if-newer calculation, if for example the package database is +newer than the date on the installed kernel (which quite often is the +case). This makes it think that the appliance is always older than +the package database, thus forcing a rebuild. + +We can fix this using 'cp' instead of 'cp -p'. We don't need the +permissions and datestamps on the copied kernel to be preserved anyway +(in fact, it could cause problems if the permissions are restrictive). + +Fixes: commit 30de2cb603cdde33524a66d5466f6a9b986ce8a6 +--- + src/format_ext2_kernel.ml | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/format_ext2_kernel.ml b/src/format_ext2_kernel.ml +index c592703..6d2e699 100644 +--- a/src/format_ext2_kernel.ml ++++ b/src/format_ext2_kernel.ml +@@ -311,6 +311,9 @@ and copy_or_symlink_file copy_kernel src dest = + if not copy_kernel then + symlink src dest + else ( +- let cmd = sprintf "cp -p %s %s" (quote src) (quote dest) in ++ (* NB: Do not use -p here, we want the kernel to appear newer ++ * so that --if-newer works. ++ *) ++ let cmd = sprintf "cp %s %s" (quote src) (quote dest) in + run_command cmd + ) +-- +2.37.3 + diff --git a/supermin.spec b/supermin.spec index de651ef..5cab75b 100644 --- a/supermin.spec +++ b/supermin.spec @@ -31,7 +31,7 @@ Summary: Tool for creating supermin appliances Name: supermin Version: 5.3.3 -Release: 8%{?dist} +Release: 9%{?dist} License: GPL-2.0-or-later ExclusiveArch: %{kernel_arches} @@ -55,6 +55,9 @@ Patch: 0003-Restore-compatibility-with-OCaml-4.07.patch Patch: 0004-rpm-Detect-dnf5-and-omit-missing-options.patch # dnf5 (https://bugzilla.redhat.com/show_bug.cgi?id=2211386) Patch: 0005-rpm-Use-dnf-config-instead-of-c.patch +# Fix --if-newer +Patch: 0006-src-Improved-debugging-of-the-supermin-if-newer-calc.patch +Patch: 0007-src-Fix-if-newer-copy-kernel.patch BuildRequires: gcc BuildRequires: make @@ -199,6 +202,9 @@ make check || { %changelog +* 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