From 6b51ec927eb032559e6b61b7d4a678d76a616095 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 35a0dcb..d15b98e 100755 --- a/usr/libexec/greenboot/greenboot-rpm-ostree-grub2-check-fallback +++ b/usr/libexec/greenboot/greenboot-rpm-ostree-grub2-check-fallback @@ -3,13 +3,32 @@ set -euo pipefail source /usr/libexec/greenboot/greenboot-boot-remount +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"