-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #146 from say-paul/boot_compatibility
compatibility for bootc image
- Loading branch information
Showing
8 changed files
with
108 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
#!/bin/bash | ||
set -eo pipefail | ||
|
||
# Boolean variable to track if /boot was initially mounted as read-only | ||
# Ensure compatibility with rpm-ostree where /boot is rw but in bootc /boot is ro | ||
boot_was_ro=false | ||
|
||
# Remount /boot as read-only if it was mounted as read-only ealier | ||
function remount_boot_ro { | ||
if $boot_was_ro; then | ||
mount -o remount,ro /boot || exit 13 | ||
fi | ||
return | ||
} | ||
|
||
# Remount /boot as read-write if it was mounted as read-only | ||
function remount_boot_rw { | ||
if grep -q " /boot .* ro," /proc/mounts; then | ||
mount -o remount,rw /boot || exit 13 | ||
boot_was_ro=true | ||
fi | ||
return | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
#!/bin/bash | ||
|
||
set -eo pipefail | ||
|
||
source /usr/libexec/greenboot/greenboot-boot-remount | ||
remount_boot_rw | ||
|
||
# Run the grub2-editenv commands | ||
if ! /usr/bin/grub2-editenv /boot/grub2/grubenv set boot_success=1; then | ||
# If the first command fails, remount /boot as read-only and exit with failure | ||
remount_boot_ro | ||
exit 1 | ||
fi | ||
|
||
if ! /usr/bin/grub2-editenv /boot/grubenv unset boot_counter; then | ||
# If the second command fails, remount /boot as read-only and exit with failure | ||
remount_boot_ro | ||
exit 1 | ||
fi | ||
|
||
# Remount /boot as read-only if it was mounted as read-write | ||
remount_boot_ro | ||
|
||
# If everything succeeded, exit with success | ||
exit 0 |
37 changes: 34 additions & 3 deletions
37
usr/libexec/greenboot/greenboot-rpm-ostree-grub2-check-fallback
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,47 @@ | ||
#!/bin/bash | ||
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" | ||
fi | ||
grub2-editenv - unset boot_counter | ||
|
||
remount_boot_rw | ||
|
||
if ! /usr/bin/grub2-editenv - unset boot_counter; then | ||
# If the above command fails, remount /boot as read-only and exit with failure | ||
remount_boot_ro | ||
exit 1 | ||
fi | ||
fi | ||
|
||
# Remount /boot as read-only if it was mounted as read-write | ||
remount_boot_ro |