dcavalca / rpms / grub2

Forked from rpms/grub2 3 years ago
Clone

Blame SOURCES/0279-grub.d-Split-out-boot-success-reset-from-menu-auto-h.patch

964c53
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
964c53
From: Christian Glombek <lorbus@fedoraproject.org>
964c53
Date: Tue, 2 Apr 2019 16:22:21 +0200
964c53
Subject: [PATCH] grub.d: Split out boot success reset from menu auto hide
964c53
 script
964c53
964c53
Also rename fallback and menu auto hide script to be executed
964c53
before and after boot success reset script.
964c53
In menu auto hide script, rename last_boot_ok var to menu_hide_ok
964c53
---
964c53
 Makefile.util.def                                  | 14 ++++++++----
964c53
 ...allback_counting.in => 08_fallback_counting.in} | 14 ++++++------
964c53
 util/grub.d/10_reset_boot_success.in               | 25 ++++++++++++++++++++++
964c53
 .../{01_menu_auto_hide.in => 12_menu_auto_hide.in} | 23 +++++---------------
964c53
 4 files changed, 48 insertions(+), 28 deletions(-)
964c53
 rename util/grub.d/{01_fallback_counting.in => 08_fallback_counting.in} (65%)
964c53
 create mode 100644 util/grub.d/10_reset_boot_success.in
964c53
 rename util/grub.d/{01_menu_auto_hide.in => 12_menu_auto_hide.in} (58%)
964c53
964c53
diff --git a/Makefile.util.def b/Makefile.util.def
964c53
index eca3dfa753f..5062a0e50fa 100644
964c53
--- a/Makefile.util.def
964c53
+++ b/Makefile.util.def
964c53
@@ -449,14 +449,14 @@ script = {
964c53
 };
964c53
 
964c53
 script = {
964c53
-  name = '01_fallback_counting';
964c53
-  common = util/grub.d/01_fallback_counting.in;
964c53
+  name = '08_fallback_counting';
964c53
+  common = util/grub.d/08_fallback_counting.in;
964c53
   installdir = grubconf;
964c53
 };
964c53
 
964c53
 script = {
964c53
-  name = '01_menu_auto_hide';
964c53
-  common = util/grub.d/01_menu_auto_hide.in;
964c53
+  name = '12_menu_auto_hide';
964c53
+  common = util/grub.d/12_menu_auto_hide.in;
964c53
   installdir = grubconf;
964c53
 };
964c53
 
964c53
@@ -515,6 +515,12 @@ script = {
964c53
   condition = COND_HOST_LINUX;
964c53
 };
964c53
 
964c53
+script = {
964c53
+  name = '10_reset_boot_success';
964c53
+  common = util/grub.d/10_reset_boot_success.in;
964c53
+  installdir = grubconf;
964c53
+};
964c53
+
964c53
 script = {
964c53
   name = '10_xnu';
964c53
   common = util/grub.d/10_xnu.in;
964c53
diff --git a/util/grub.d/01_fallback_counting.in b/util/grub.d/08_fallback_counting.in
964c53
similarity index 65%
964c53
rename from util/grub.d/01_fallback_counting.in
964c53
rename to util/grub.d/08_fallback_counting.in
964c53
index be0e770ea82..2e2c3ff7d31 100644
964c53
--- a/util/grub.d/01_fallback_counting.in
964c53
+++ b/util/grub.d/08_fallback_counting.in
964c53
@@ -1,15 +1,17 @@
964c53
 #! /bin/sh -e
964c53
-
964c53
-# Boot Counting
964c53
+# Fallback Countdown
964c53
+#
964c53
+# This snippet depends on 10_reset_boot_success and needs to be kept in sync.
964c53
+#
964c53
 # The boot_counter env var can be used to count down boot attempts after an
964c53
-# OSTree upgrade and choose the rollback deployment when 0 is reached.  Both
964c53
-# boot_counter and boot_success need to be (re-)set from userspace.
964c53
+# OSTree upgrade and choose the rollback deployment when 0 is reached.
964c53
+# Both boot_counter=X and boot_success=1 need to be set from userspace.
964c53
 cat << EOF
964c53
 insmod increment
964c53
 # Check if boot_counter exists and boot_success=0 to activate this behaviour.
964c53
 if [ -n "\${boot_counter}" -a "\${boot_success}" = "0" ]; then
964c53
-  # if countdown has ended, choose to boot rollback deployment (default=1 on
964c53
-  # OSTree-based systems)
964c53
+  # if countdown has ended, choose to boot rollback deployment,
964c53
+  # i.e. default=1 on OSTree-based systems.
964c53
   if  [ "\${boot_counter}" = "0" -o "\${boot_counter}" = "-1" ]; then
964c53
     set default=1
964c53
     set boot_counter=-1
964c53
diff --git a/util/grub.d/10_reset_boot_success.in b/util/grub.d/10_reset_boot_success.in
964c53
new file mode 100644
964c53
index 00000000000..6c88d933dde
964c53
--- /dev/null
964c53
+++ b/util/grub.d/10_reset_boot_success.in
964c53
@@ -0,0 +1,25 @@
964c53
+#! /bin/sh -e
964c53
+# Reset Boot Success
964c53
+#
964c53
+# The 08_fallback_counting and 12_menu_auto_hide snippets rely on this one
964c53
+# and need to be kept in sync.
964c53
+#
964c53
+# The boot_success var needs to be set to 1 from userspace to mark a boot successful.
964c53
+cat << EOF
964c53
+insmod increment
964c53
+# Hiding the menu is ok if last boot was ok or if this is a first boot attempt to boot the entry
964c53
+if [ "\${boot_success}" = "1" -o "\${boot_indeterminate}" = "1" ]; then
964c53
+  set menu_hide_ok=1
964c53
+else
964c53
+  set menu_hide_ok=0 
964c53
+fi
964c53
+# Reset boot_indeterminate after a successful boot, increment otherwise
964c53
+if [ "\${boot_success}" = "1" ] ; then
964c53
+  set boot_indeterminate=0
964c53
+else
964c53
+  increment boot_indeterminate
964c53
+fi
964c53
+# Reset boot_success for current boot 
964c53
+set boot_success=0
964c53
+save_env boot_success boot_indeterminate
964c53
+EOF
964c53
diff --git a/util/grub.d/01_menu_auto_hide.in b/util/grub.d/12_menu_auto_hide.in
964c53
similarity index 58%
964c53
rename from util/grub.d/01_menu_auto_hide.in
964c53
rename to util/grub.d/12_menu_auto_hide.in
964c53
index ad175870a54..6a7c0fa0d43 100644
964c53
--- a/util/grub.d/01_menu_auto_hide.in
964c53
+++ b/util/grub.d/12_menu_auto_hide.in
964c53
@@ -1,5 +1,8 @@
964c53
 #! /bin/sh
964c53
-
964c53
+# Menu Auto Hide
964c53
+#
964c53
+# This snippet depends on 10_reset_boot_success and needs to be kept in sync.
964c53
+#
964c53
 # Disable / skip generating menu-auto-hide config parts on serial terminals
964c53
 for x in ${GRUB_TERMINAL_INPUT} ${GRUB_TERMINAL_OUTPUT}; do
964c53
   case "$x" in
964c53
@@ -10,29 +13,13 @@ for x in ${GRUB_TERMINAL_INPUT} ${GRUB_TERMINAL_OUTPUT}; do
964c53
 done
964c53
 
964c53
 cat << EOF
964c53
-if [ "\${boot_success}" = "1" -o "\${boot_indeterminate}" = "1" ]; then
964c53
-  set last_boot_ok=1
964c53
-else
964c53
-  set last_boot_ok=0
964c53
-fi
964c53
-
964c53
-# Reset boot_indeterminate after a successful boot
964c53
-if [ "\${boot_success}" = "1" ] ; then
964c53
-  set boot_indeterminate=0
964c53
-# Avoid boot_indeterminate causing the menu to be hidden more then once
964c53
-elif [ "\${boot_indeterminate}" = "1" ]; then
964c53
-  set boot_indeterminate=2
964c53
-fi
964c53
-set boot_success=0
964c53
-save_env boot_success boot_indeterminate
964c53
-
964c53
 if [ x\$feature_timeout_style = xy ] ; then
964c53
   if [ "\${menu_show_once}" ]; then
964c53
     unset menu_show_once
964c53
     save_env menu_show_once
964c53
     set timeout_style=menu
964c53
     set timeout=60
964c53
-  elif [ "\${menu_auto_hide}" -a "\${last_boot_ok}" = "1" ]; then
964c53
+  elif [ "\${menu_auto_hide}" -a "\${menu_hide_ok}" = "1" ]; then
964c53
     set orig_timeout_style=\${timeout_style}
964c53
     set orig_timeout=\${timeout}
964c53
     if [ "\${fastboot}" = "1" ]; then