diff --git a/0001-Backport-7f70614a1ac1950ebde3df0e26cc9ab1d72b2f1f.patch b/0001-Backport-7f70614a1ac1950ebde3df0e26cc9ab1d72b2f1f.patch deleted file mode 100644 index fff515d..0000000 --- a/0001-Backport-7f70614a1ac1950ebde3df0e26cc9ab1d72b2f1f.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 3443baa6e63b36d169f57027d7e80df614592c8e Mon Sep 17 00:00:00 2001 -From: Joseph Marrero -Date: Fri, 4 Aug 2023 16:09:20 -0400 -Subject: [PATCH] Backport: 7f70614a1ac1950ebde3df0e26cc9ab1d72b2f1f - ---- - src/libostree/ostree-sysroot-deploy.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c -index 2454a587..4d6d796e 100644 ---- a/src/libostree/ostree-sysroot-deploy.c -+++ b/src/libostree/ostree-sysroot-deploy.c -@@ -1613,9 +1613,8 @@ static void * - sync_in_thread (void *ptr) - { - SyncData *syncdata = ptr; -- // Ensure that the caller is blocked waiting -- g_mutex_lock (&syncdata->mutex); - sync (); -+ g_mutex_lock (&syncdata->mutex); - // Signal success - syncdata->success = true; - g_cond_broadcast (&syncdata->cond); --- -2.41.0 - diff --git a/0001-bootloader-grub2-Don-t-do-anything-if-we-have-static.patch b/0001-bootloader-grub2-Don-t-do-anything-if-we-have-static.patch new file mode 100644 index 0000000..b26cfc1 --- /dev/null +++ b/0001-bootloader-grub2-Don-t-do-anything-if-we-have-static.patch @@ -0,0 +1,105 @@ +From e47b37096343efa3bea8295f3f44c4dc90cc04e2 Mon Sep 17 00:00:00 2001 +From: Colin Walters +Date: Tue, 27 Feb 2024 13:14:16 -0500 +Subject: [PATCH] bootloader/grub2: Don't do anything if we have static configs + +This builds on top of https://github.com/coreos/bootupd/pull/609/commits/fa9924e4fe403c3751392c041cd98614a2cc3611 +(But in a very hacky way because we don't currently link to a JSON library) + +Basically, bootupd supports injecting static configs, and this +is the currently least hacky way for us to detect this and understand +that we shouldn't try to run `grub2-mkconfig`. + +A further patch I'd like to do here is also change the probing +logic to gracefully no-op if `grub2-mkconfig` doesn't exist, +but that has a bit more risk and involvement. +--- + src/libostree/ostree-bootloader-grub2.c | 21 ++++++++++++ + tests/kolainst/destructive/bootupd-static.sh | 36 ++++++++++++++++++++ + 2 files changed, 57 insertions(+) + create mode 100755 tests/kolainst/destructive/bootupd-static.sh + +diff --git a/src/libostree/ostree-bootloader-grub2.c b/src/libostree/ostree-bootloader-grub2.c +index e1ee7868..cbe7605d 100644 +--- a/src/libostree/ostree-bootloader-grub2.c ++++ b/src/libostree/ostree-bootloader-grub2.c +@@ -26,6 +26,11 @@ + + #include + ++// Written by bootupd ++#define BOOTUPD_CONFIG "boot/bootupd-state.json" ++// Horrible hack, to avoid including a JSON parser we just grep for this ++#define BOOTUPD_CONFIG_STATIC_JSON_FRAGMENT "\"static-configs\"" ++ + /* Maintain backwards compatibility with legacy GRUB + * installations that might rely on the -16 suffix + * for real-mode booting. +@@ -75,6 +80,22 @@ _ostree_bootloader_grub2_query (OstreeBootloader *bootloader, gboolean *out_is_a + { + OstreeBootloaderGrub2 *self = OSTREE_BOOTLOADER_GRUB2 (bootloader); + ++ g_autoptr (GFile) bootupd_config ++ = g_file_resolve_relative_path (self->sysroot->path, BOOTUPD_CONFIG); ++ if (g_file_query_exists (bootupd_config, NULL)) ++ { ++ g_autofree char *bootupd_config_contents = NULL; ++ if (!g_file_load_contents (bootupd_config, cancellable, &bootupd_config_contents, NULL, NULL, ++ error)) ++ return glnx_prefix_error (error, "Failed to read bootupd config"); ++ if (strstr (bootupd_config_contents, BOOTUPD_CONFIG_STATIC_JSON_FRAGMENT) != NULL) ++ { ++ g_debug ("Found static bootupd config"); ++ *out_is_active = FALSE; ++ return TRUE; ++ } ++ } ++ + /* Look for the BIOS path first */ + if (g_file_query_exists (self->config_path_bios_1, NULL) + || g_file_query_exists (self->config_path_bios_2, NULL)) +diff --git a/tests/kolainst/destructive/bootupd-static.sh b/tests/kolainst/destructive/bootupd-static.sh +new file mode 100755 +index 00000000..cf836813 +--- /dev/null ++++ b/tests/kolainst/destructive/bootupd-static.sh +@@ -0,0 +1,36 @@ ++#!/bin/bash ++set -xeuo pipefail ++ ++. ${KOLA_EXT_DATA}/libinsttest.sh ++ ++require_writable_sysroot ++prepare_tmpdir ++ ++bootupd_state=/boot/bootupd-state.json ++mount -o remount,rw /boot ++if grep -qFe "\"static-configs\"" "${bootupd_state}"; then ++ echo "Host is using static configs already, overriding this" ++ jq 'del(.["static-configs"])' < "${bootupd_state}" > "${bootupd_state}".new ++ mv "${bootupd_state}.new" "${bootupd_state}" ++fi ++ ++# Print the current value for reference, it's "none" on FCOS derivatives ++ostree config get sysroot.bootloader || true ++ostree config set sysroot.bootloader auto ++ ++ostree admin deploy --stage "${host_commit}" ++systemctl stop ostree-finalize-staged.service ++used_bootloader=$(journalctl -u ostree-finalize-staged -o json MESSAGE_ID=dd440e3e549083b63d0efc7dc15255f1 | tail -1 | jq -r .OSTREE_BOOTLOADER) ++# We're verifying the legacy default now ++assert_streq "${used_bootloader}" "grub2" ++ostree admin undeploy 0 ++ ++# Now synthesize a bootupd config which uses static configs ++jq '. + {"static-configs": {}}' < "${bootupd_state}" > "${bootupd_state}".new ++mv "${bootupd_state}.new" "${bootupd_state}" ++ostree admin deploy --stage "${host_commit}" ++systemctl stop ostree-finalize-staged.service ++used_bootloader=$(journalctl -u ostree-finalize-staged -o json MESSAGE_ID=dd440e3e549083b63d0efc7dc15255f1 | tail -1 | jq -r .OSTREE_BOOTLOADER) ++assert_streq "${used_bootloader}" "none" ++ ++echo "ok bootupd static" +-- +2.41.0 + diff --git a/ostree.spec b/ostree.spec index 8577793..79432c5 100644 --- a/ostree.spec +++ b/ostree.spec @@ -8,11 +8,14 @@ Summary: Tool for managing bootable, immutable filesystem trees Name: ostree Version: 2024.4 -Release: 2%{?dist} +Release: 3%{?dist} Source0: https://github.com/ostreedev/%{name}/releases/download/v%{version}/libostree-%{version}.tar.xz Source1: ostree-readonly-sysroot-migration Source2: ostree-readonly-sysroot-migration.service +# https://issues.redhat.com/browse/RHEL-27199 +Patch0: 0001-bootloader-grub2-Don-t-do-anything-if-we-have-static.patch + License: LGPLv2+ URL: https://ostree.readthedocs.io/en/latest/ @@ -177,6 +180,10 @@ find %{buildroot} -name '*.la' -delete %endif %changelog +* Wed Feb 28 2024 Colin Walters - 2024.4-3 +- Backport + https://github.com/ostreedev/ostree/pull/3205/commits/e47b37096343efa3bea8295f3f44c4dc90cc04e2 + * Fri Feb 23 2024 Colin Walters - 2024.4-2 - https://github.com/ostreedev/ostree/releases/tag/v2024.4