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