grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: feature request + patch: GRUB_CMDLINE_LINUX_RECOVERY


From: Philip Rhoades
Subject: Re: feature request + patch: GRUB_CMDLINE_LINUX_RECOVERY
Date: Sun, 12 Sep 2021 07:26:11 +1000
User-agent: Roundcube Webmail/1.4-rc1

+1


On 2021-09-12 03:23, Chris Vogel wrote:
Hi,

I'd like to propose a patch to add a configuration parameter called
GRUB_CMDLINE_LINUX_RECOVERY.

All credits for the initial idea and first implementation (as far as I
know) go to Kyle Rankin at Purism. I used his improvement without
being aware that it is not a standard feature inluded in original
grub. His implementation can be found here
https://source.puri.sm/pureos/packages/smartcard-key-luks.

There are situations when it would be helpfull to be able to set
command line options to use only when generating a recovery entry for
grub.cfg, e.g.

- when using systemd starting a debug shell using "systemd.debug-shell"
- when using luks disk encryption as shown in the work of Kyle

The inclusion of GRUB_CMDLINE_LINUX_RECOVERY as in the patch below
shouldn't change the behaviour of grub at all if not used in a
configuration. Users not setting the variable shouldn't see any
difference.

Chris


diff --git a/docs/grub.texi b/docs/grub.texi
index f8b4b3b21..8b5482ee1 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -1411,6 +1411,14 @@ entry for recovery mode.  This option lists
command-line arguments to add
 only to the default menu entry, after those listed in
 @samp{GRUB_CMDLINE_LINUX}.

+@item GRUB_CMDLINE_LINUX_RECOVERY
+Unless @samp{GRUB_DISABLE_RECOVERY} is set to @samp{true}, two menu
+entries will be generated for each Linux kernel: one default entry and one
+entry for recovery mode.
+This option lists command-line arguments to add only to the recovery menu
+entry, before those listed in @samp{GRUB_CMDLINE_LINUX}.
+The default is @samp{single}.
+
 @item GRUB_CMDLINE_NETBSD
 @itemx GRUB_CMDLINE_NETBSD_DEFAULT
As @samp{GRUB_CMDLINE_LINUX} and @samp{GRUB_CMDLINE_LINUX_DEFAULT}, but for
diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
index f8cbb8d7a..c3ea7612e 100644
--- a/util/grub-mkconfig.in
+++ b/util/grub-mkconfig.in
@@ -225,6 +225,7 @@ export GRUB_DEFAULT \
   GRUB_DISTRIBUTOR \
   GRUB_CMDLINE_LINUX \
   GRUB_CMDLINE_LINUX_DEFAULT \
+  GRUB_CMDLINE_LINUX_RECOVERY \
   GRUB_CMDLINE_XEN \
   GRUB_CMDLINE_XEN_DEFAULT \
   GRUB_CMDLINE_LINUX_XEN_REPLACE \
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
index e8b01c0d0..af51ae2f7 100644
--- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in
@@ -43,6 +43,10 @@ case ${GRUB_DEVICE} in
   ;;
 esac

+if [ "x${GRUB_CMDLINE_LINUX_RECOVERY}" = "x" ] ; then
+  GRUB_CMDLINE_LINUX_RECOVERY='single'
+fi
+
# Default to disabling partition uuid support to maintian compatibility with
 # older kernels.
 GRUB_DISABLE_LINUX_PARTUUID=${GRUB_DISABLE_LINUX_PARTUUID-true}
@@ -287,7 +291,7 @@ while [ "x$list" != "x" ] ; do
               "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
   if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
     linux_entry "${OS}" "${version}" recovery \
-                "single ${GRUB_CMDLINE_LINUX}"
+                "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}"
   fi

   list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in
index 3b1f47049..992363c3e 100644
--- a/util/grub.d/20_linux_xen.in
+++ b/util/grub.d/20_linux_xen.in
@@ -43,6 +43,10 @@ case ${GRUB_DEVICE} in
   ;;
 esac

+if [ "x${GRUB_CMDLINE_LINUX_RECOVERY}" = "x" ] ; then
+  GRUB_CMDLINE_LINUX_RECOVERY='single'
+fi
+
# Default to disabling partition uuid support to maintian compatibility with
 # older kernels.
 GRUB_DISABLE_LINUX_PARTUUID=${GRUB_DISABLE_LINUX_PARTUUID-true}
@@ -343,7 +347,7 @@ while [ "x${xen_list}" != "x" ] ; do
            "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
"${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}"
        if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
            linux_entry "${OS}" "${version}" "${xen_version}" recovery \
-               "single ${GRUB_CMDLINE_LINUX}" "${GRUB_CMDLINE_XEN}"
+ "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}" "${GRUB_CMDLINE_XEN}"
        fi

        list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

--
Philip Rhoades

PO Box 896
Cowra  NSW  2794
Australia
E-mail:  phil@pricom.com.au



reply via email to

[Prev in Thread] Current Thread [Next in Thread]