diff --git a/.gitignore b/.gitignore index d302873..20426de 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/libostree-2023.6.tar.xz +SOURCES/libostree-2024.4.tar.xz diff --git a/.ostree.metadata b/.ostree.metadata index 4099ae6..008a7d5 100644 --- a/.ostree.metadata +++ b/.ostree.metadata @@ -1 +1 @@ -1f063c495ee29b92903c152fa410df96c80d5e25 SOURCES/libostree-2023.6.tar.xz +2aab75147722cc35e7bce341aa836fff81c6f176 SOURCES/libostree-2024.4.tar.xz diff --git a/SOURCES/0001-bootloader-grub2-Don-t-do-anything-if-we-have-static.patch b/SOURCES/0001-bootloader-grub2-Don-t-do-anything-if-we-have-static.patch new file mode 100644 index 0000000..b26cfc1 --- /dev/null +++ b/SOURCES/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/SPECS/ostree.spec b/SPECS/ostree.spec index 3054f05..79432c5 100644 --- a/SPECS/ostree.spec +++ b/SPECS/ostree.spec @@ -7,12 +7,15 @@ Summary: Tool for managing bootable, immutable filesystem trees Name: ostree -Version: 2023.6 -Release: 1%{?dist} +Version: 2024.4 +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,36 @@ 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 + +* Wed Feb 14 2024 Colin Walters - 2024.3-2 +- https://github.com/ostreedev/ostree/releases/tag/v2024.3 + Resolves: #RHEL-19419 + +* Thu Feb 08 2024 Colin Walters - 2024.2-2 +- https://github.com/ostreedev/ostree/releases/tag/v2024.2 + +* Sun Jan 21 2024 Colin Walters - 2024.1-2 +- https://github.com/ostreedev/ostree/releases/tag/v2024.1 + Resolves: #RHEL-19419 + +* Wed Dec 13 2023 Joseph Marrero - 2023.8-3 +- https://github.com/ostreedev/ostree/releases/tag/v2023.8 + Resolves: #RHEL-19419 + +* Wed Dec 06 2023 Colin Walters - 2023.8-2 +- https://github.com/ostreedev/ostree/releases/tag/v2023.8 + Resolves: #RHEL-19419 + +* Fri Oct 20 2023 Colin Walters - 2023.7-2 +- https://github.com/ostreedev/ostree/releases/tag/v2023.7 + Resolves: #RHEL-14381 + * Fri Aug 25 2023 Joseph Marrero - 2023.6-1 - https://github.com/ostreedev/ostree/releases/tag/v2023.6 Resolves: rhbz#2234351