diff --git a/Containerfile b/Containerfile index 20ddef9ea8..e73baa5c7e 100644 --- a/Containerfile +++ b/Containerfile @@ -438,7 +438,6 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ # Install new packages RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ rpm-ostree install \ - greenboot \ discover-overlay \ sunshine \ python3-pip \ @@ -828,15 +827,6 @@ RUN rm -f /etc/profile.d/toolbox.sh && \ systemctl --global enable systemd-tmpfiles-setup.service && \ systemctl --global disable sunshine.service && \ systemctl disable waydroid-container.service && \ - systemctl enable greenboot-task-runner \ - greenboot-healthcheck \ - greenboot-status \ - greenboot-loading-message \ - greenboot-grub2-set-counter \ - greenboot-grub2-set-success \ - greenboot-rpm-ostree-grub2-check-fallback \ - redboot-auto-reboot \ - redboot-task-runner && \ curl -Lo /etc/dxvk-example.conf https://raw.githubusercontent.com/doitsujin/dxvk/master/dxvk.conf && \ curl -Lo /usr/bin/waydroid-choose-gpu https://raw.githubusercontent.com/KyleGospo/waydroid-scripts/main/waydroid-choose-gpu.sh && \ chmod +x /usr/bin/waydroid-choose-gpu && \ @@ -1009,7 +999,11 @@ RUN /usr/libexec/containerbuild/image-info && \ systemctl enable cec-onpoweroff.service && \ systemctl enable cec-onsleep.service && \ systemctl enable bazzite-tdpfix.service && \ + systemctl enable bazzite-grub-boot-success.timer && \ + systemctl enable bazzite-grub-boot-success.service && \ systemctl --global disable sdgyrodsu.service && \ + systemctl --global disable grub-boot-success.timer && \ + systemctl disable grub-boot-indeterminate.service && \ systemctl disable input-remapper.service && \ systemctl disable ublue-update.timer && \ systemctl disable jupiter-fan-control.service && \ diff --git a/system_files/deck/shared/usr/lib/systemd/system/bazzite-grub-boot-success.service b/system_files/deck/shared/usr/lib/systemd/system/bazzite-grub-boot-success.service new file mode 100644 index 0000000000..aef4ab1001 --- /dev/null +++ b/system_files/deck/shared/usr/lib/systemd/system/bazzite-grub-boot-success.service @@ -0,0 +1,15 @@ +# In the future this can do more complex checks to ensure the update is +# successful. For now, just assume the user will hold the button or +# something within 5 minutes if boot fails. + +[Unit] +Description=Mark boot as successful and reset counter +DefaultDependencies=no +Before=shutdown.target + +[Service] +Type=oneshot +ExecStart=/usr/libexec/bazzite-grub-boot-success + +[Install] +WantedBy=hibernate.target hybrid-sleep.target suspend-then-hibernate.target halt.target reboot.target shutdown.target \ No newline at end of file diff --git a/system_files/deck/shared/usr/lib/systemd/system/bazzite-grub-boot-success.timer b/system_files/deck/shared/usr/lib/systemd/system/bazzite-grub-boot-success.timer new file mode 100644 index 0000000000..cb483c5304 --- /dev/null +++ b/system_files/deck/shared/usr/lib/systemd/system/bazzite-grub-boot-success.timer @@ -0,0 +1,8 @@ +[Unit] +Description=Mark update as successful after the system has been alive for 3 minutes. + +[Timer] +OnStartupSec=3min + +[Install] +WantedBy=timers.target diff --git a/system_files/deck/shared/usr/libexec/bazzite-grub-boot-success b/system_files/deck/shared/usr/libexec/bazzite-grub-boot-success new file mode 100755 index 0000000000..690bc0f236 --- /dev/null +++ b/system_files/deck/shared/usr/libexec/bazzite-grub-boot-success @@ -0,0 +1,26 @@ +#!/bin/bash + +set -eo pipefail + +maxbootcount=2 + +if ! /usr/bin/grub2-editenv - set boot_success=1; then + exit 1 +fi + +if ! /usr/bin/grub2-editenv - set boot_indeterminate=0; then + exit 1 +fi + +if [ ! -f /usr/bin/bootc ] || + [ "$(sudo /usr/bin/bootc status --json | jq ".status.rollback")" == "null" ]; then + if ! /usr/bin/grub2-editenv - unset boot_counter; then + exit 1 + fi + echo "Marking boot as succeeded, setting boot_success=1 and unsetting boot_counter (missing rollback)" +else + if ! /usr/bin/grub2-editenv - set boot_counter="$maxbootcount"; then + exit 1 + fi + echo "Marking boot as succeeded, setting boot_counter=$maxbootcount and boot_success=1" +fi diff --git a/system_files/desktop/shared/usr/libexec/bazzite-hardware-setup b/system_files/desktop/shared/usr/libexec/bazzite-hardware-setup index 5094048899..3d4305a417 100755 --- a/system_files/desktop/shared/usr/libexec/bazzite-hardware-setup +++ b/system_files/desktop/shared/usr/libexec/bazzite-hardware-setup @@ -342,11 +342,24 @@ touch /etc/bazzite/fixups/snapper_cleanup if [ ! -f /etc/bazzite/fixups/grub_fixup ]; then # Grub settings - # Grub hidden timeout should be 2 if it does not exist - # So that when grub is hidden it exits quicker - if [ -z $(grep "GRUB_HIDDEN_TIMEOUT=" /etc/default/grub) ]; then - echo "Setting GRUB_HIDDEN_TIMEOUT=2" - echo "GRUB_HIDDEN_TIMEOUT=2" >> /etc/default/grub + # Set grub timeout to 3 seconds + if [ -z $(grep "GRUB_TIMEOUT=" /etc/default/grub) ]; then + echo "GRUB_TIMEOUT=3" >> /etc/default/grub + else + sed -i 's/GRUB_TIMEOUT=[0-9]*/GRUB_TIMEOUT=3/' /etc/default/grub + fi + + # Nuke hidden timeout as it will cause issues if GRUB_TIMEOUT exists + if [ -n $(grep "GRUB_HIDDEN_TIMEOUT=" /etc/default/grub) ]; then + sed -i 's/GRUB_HIDDEN_TIMEOUT=[0-9]*//' /etc/default/grub + fi + + # set timeout style to menu to show grub during countdown + # (unless GRUB_TIMEOUT=0) + if [ -z $(grep "GRUB_TIMEOUT_STYLE=" /etc/default/grub) ]; then + echo "GRUB_TIMEOUT_STYLE=menu" >> /etc/default/grub + else + sed -i 's/GRUB_TIMEOUT_STYLE=.*/GRUB_TIMEOUT_STYLE=menu/' /etc/default/grub fi # Autohide grub menu if boot is successful @@ -359,6 +372,15 @@ if [ ! -f /etc/bazzite/fixups/grub_fixup ]; then else grub2-editenv - set menu_auto_hide=1 fi + + # Update grub + if [ -d /sys/firmware/efi ]; then + echo "Updating EFI grub config" + grub2-mkconfig -o /etc/grub2-efi.cfg + else + echo "Updating BIOS grub config" + grub2-mkconfig -o /etc/grub2.cfg + fi fi touch /etc/bazzite/fixups/grub_fixup diff --git a/system_files/desktop/shared/usr/libexec/ublue-motd b/system_files/desktop/shared/usr/libexec/ublue-motd index 6bd2d22610..0fa5773afa 100755 --- a/system_files/desktop/shared/usr/libexec/ublue-motd +++ b/system_files/desktop/shared/usr/libexec/ublue-motd @@ -33,16 +33,6 @@ if [[ -f "$TIP_FILE" ]]; then THEME=$(gsettings get org.gnome.desktop.interface accent-color || echo "'purple'") THEME=${THEME//\'/} THEME=${MOTD_FORCE_THEME:-$THEME} - - GREENBOOT='' - if [[ -f /run/motd.d/boot-status ]]; then - if grep -q "GREEN" /run/motd.d/boot-status && grep -q "SUCCESS" /run/motd.d/boot-status; then - GREENBOOT='Boot Status: Healthy 󰄳' - else - GREENBOOT=$(cat /run/motd.d/boot-status) - fi - fi - GREENBOOT_ESCAPED=$(escape "$GREENBOOT") - - sed -e "s/%IMAGE_NAME%/$IMAGE_NAME_ESCAPED/g" -e "s/%IMAGE_BRANCH%/$IMAGE_BRANCH_ESCAPED/g" -e "s/%TIP%/$TIP_ESCAPED/g" -e "s/%GREENBOOT%/$GREENBOOT_ESCAPED/g" /usr/share/ublue-os/motd/bazzite.md | tr '~' '\n' | /usr/bin/glow -s /usr/share/ublue-os/motd/themes/$COLOR_SCHEME/$THEME.json -w 78 - + + sed -e "s/%IMAGE_NAME%/$IMAGE_NAME_ESCAPED/g" -e "s/%IMAGE_BRANCH%/$IMAGE_BRANCH_ESCAPED/g" -e "s/%TIP%/$TIP_ESCAPED/g" /usr/share/ublue-os/motd/bazzite.md | tr '~' '\n' | /usr/bin/glow -s /usr/share/ublue-os/motd/themes/$COLOR_SCHEME/$THEME.json -w 78 - fi diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just b/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just index f7d2e53b1b..2524ef7fb3 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just +++ b/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just @@ -16,54 +16,18 @@ _install-system-flatpaks: # Configure grub bootmenu visibility and fix duplicate entries configure-grub ACTION="": #!/usr/bin/bash - source /usr/lib/ujust/ujust.sh - sudo touch /etc/default/grub - GRUB_STATE="$(grep -P "^GRUB_TIMEOUT_STYLE=hidden" /etc/default/grub)" - OPTION={{ ACTION }} - if [ "$GRUB_STATE" == "GRUB_TIMEOUT_STYLE=hidden" ]; then - GRUB_STATE="${b}Hidden${n}" - else - GRUB_STATE="${b}Not Hidden${n}" - fi - if [ "$OPTION" == "help" ]; then - echo "Usage: ujust configure-grub