From ad7feac4d1587b8c8dbc2b84388ed2d09a4cce0d Mon Sep 17 00:00:00 2001 From: saypaul Date: Fri, 9 Aug 2024 18:27:55 +0530 Subject: [PATCH] auto-detect image type and use correct rollback greenboot will able able to detect the image type of the os, i.e ostree or bootc and use the correct verb to rollback to previous stable deployment. Signed-off-by: saypaul --- .../greenboot-rpm-ostree-grub2-check-fallback | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/usr/libexec/greenboot/greenboot-rpm-ostree-grub2-check-fallback b/usr/libexec/greenboot/greenboot-rpm-ostree-grub2-check-fallback index fd30bc4..254abda 100755 --- a/usr/libexec/greenboot/greenboot-rpm-ostree-grub2-check-fallback +++ b/usr/libexec/greenboot/greenboot-rpm-ostree-grub2-check-fallback @@ -6,13 +6,32 @@ function remount_boot_ro { return } +function attempt_rollback { + # Check if the bootc command is available + if command -v bootc &> /dev/null; then + status_type=$(bootc status --booted --json 2>/dev/null | jq -r .status.type 2>/dev/null) + if [ "$status_type" == "bootcHost" ]; then + bootc rollback + echo "<3>FALLBACK BOOT DETECTED! Default bootc deployment has been rolled back." + fi + return + fi + # Check if its ostree based os + if [ -f /run/ostree-booted ]; then + rpm-ostree rollback + echo "<3>FALLBACK BOOT DETECTED! Default rpm-ostree deployment has been rolled back." + return + fi + echo "<3>Rollback is only supported in ostree or bootc based os." + return +} + # Determine if the current boot is a fallback boot # If booted into fallback deployment, clean up bootloader entries (rollback) if grub2-editenv list | grep -q "^boot_counter=-1$"; then # Logs from previous boot may be unavailable on systems without internal RTC; defaulting to empty string prev_logs="$(journalctl -u greenboot-healthcheck.service -p 2 -b -1 -o cat)" || true - rpm-ostree rollback - echo "<3>FALLBACK BOOT DETECTED! Default rpm-ostree deployment has been rolled back." + attempt_rollback if [ -n "$prev_logs" ]; then echo "<3>Health check logs from previous boot:" echo "<3>$prev_logs"