Patch against 10_linux to allow extra entries with special options

Marc Haber mh+pkg-grub-devel at zugschlus.de
Mon Nov 18 06:10:12 GMT 2019


Hi,

*poke*

Is there a method to file a pull request? If this mailing list is the
wrong place to submit a patch, what is the correct place?

Greetings
Marc


On Sat, Feb 02, 2019 at 10:30:29AM +0100, Marc Haber wrote:
> From: Marc Haber <mh+pkg-grub-devel at zugschlus.de>
> Subject: Patch against 10_linux to allow extra entries with special options
> To: pkg-grub-devel at alioth-lists.debian.net
> Date: Sat, 2 Feb 2019 10:30:29 +0100
> User-Agent: Mutt/1.10.1 (2018-07-13)
> 
> Hi,
> 
> I would like to suggest the attached patch to 10_linux that allows
> adding of extra options to /etc/default/grub that will result in
> additional menu entries. For example:
> 
> GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,57600n8"
> GRUB_CMDLINE_LINUX=""
> GRUB_CMDLINE_LINUX_EXTRA_ENTRIES="noserial"
> GRUB_CMDLINE_LINUX_noserial="quiet splash"
> 
> Behavior of GRUB_CMDLINE_LINUX_DEFAULT and GRUB_CMDLINE_LINUX is
> unchanged, full backwards compatibility is preserved. Behavior of init
> system dependent entries and recovery entries is not changed.
> 
> For each entry listed in GRUB_CMDLINE_LINUX_EXTRA_ENTRIES, an additional
> linux_entry is generated, with the options taken from the variable
> GRUB_CMDLINE_LINUX_$ENTRYNAME.
> 
> Thus, the example will generate the following entries:
> 
> - the DEFAULT entry with the quiet splash console=ttyS0,57600n8 options
> - the recovery entry, if so configured
> - the init system entries, if so configured
> - a "noserial" entry with the quiet splash options
> 
> This is a real-life usecase for a server that is usually booted with a
> serial console, but in debugging cases wit a local console.
> 
> Frankly, I find this patch a bit ugly for three reasons:
> 
> - the re-sourcing of /etc/default/grub is necessary since the files from
>   /etc/grub.d are executed, not sourced, and therefore all environent
>   variables being used there need to be manually exported. I went for
>   the minimal-invasive way that only need changes in a single file.
> - the extra variable GRUB_CMDLINE_LINUX_EXTRA_ENTRIES is needed since
>   enumerating environment variables is a bashism, the scripts being
>   #!/bin/sh files
> - the eval needed to build the variable name to evaluate might have
>   security implcations, but we're calling the script as root anyway, and
>   all related files are owned by root.
> 
> I didn't try upstreaming the change while it might be worthwhile to,
> since our 10_linux is heavily changed anyway.
> 
> Please indicate whether you might be willing to accept this patch or
> whether you would want the implementation to be different. If the
> debian-related changes to 10_linux and the meanings of the environment
> variables are documented anywhere (I didn't find the docs) I'd be
> willing to adapt the documentation as well. I would submit a salsa PR to
> make things easier for you.
> 
> I'd love hearing from you. Please Cc me as I am not subscribed.
> 
> Greetings
> Marc
> 
> 
> --- 10_linux.orig       2019-02-01 20:06:00.181034980 +0100
> +++ 10_linux    2019-02-01 20:10:40.724607616 +0100
> @@ -34,6 +34,20 @@
>  CLASS="--class gnu-linux --class gnu --class os"
>  SUPPORTED_INITS="sysvinit:/lib/sysvinit/init systemd:/lib/systemd/systemd upstart:/sbin/upstart"
>  
> +# copied from /usr/sbin/grub-mkconfig
> +# we need to read the configuration again since otherwise all variables
> +# would need extra exports
> +# is sysconfdir not exported?
> +sysconfdir="/etc"
> +if test -f ${sysconfdir}/default/grub ; then
> +  . ${sysconfdir}/default/grub
> +fi
> +for x in ${sysconfdir}/default/grub.d/*.cfg ; do
> +  if [ -e "${x}" ]; then
> +    . "${x}"
> +  fi
> +done
> +
>  if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
>    OS=GNU/Linux
>  else
> @@ -120,6 +134,8 @@
>               title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "$(gettext "${GRUB_RECOVERY_TITLE}")")" ;;
>           init-*)
>               title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "${type#init-}")" ;;
> +          extra-*)
> +              title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "${type#extra-}")" ;;
>           *)
>               title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;;
>        esac
> @@ -358,7 +374,11 @@
>      linux_entry "${OS}" "${version}" recovery \
>                  "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}"
>    fi
> -
> +  for extra_entry in ${GRUB_CMDLINE_LINUX_EXTRA_ENTRIES}; do
> +    eval EXTRA_ENTRY_OPTIONS=\$GRUB_CMDLINE_LINUX_${extra_entry}
> +    linux_entry "${OS}" "${version}" "extra-${extra_entry}" \
> +                "${EXTRA_ENTRY_OPTIONS} ${GRUB_CMDLINE_LINUX}"
> +  done
>    list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
>  done
>  
> 
> 
> 
> -- 
> -----------------------------------------------------------------------------
> Marc Haber         | "I don't trust Computers. They | Mailadresse im Header
> Leimen, Germany    |  lose things."    Winona Ryder | Fon: *49 6224 1600402
> Nordisch by Nature |  How to make an American Quilt | Fax: *49 6224 1600421

-- 
-----------------------------------------------------------------------------
Marc Haber         | "I don't trust Computers. They | Mailadresse im Header
Leimen, Germany    |  lose things."    Winona Ryder | Fon: *49 6224 1600402
Nordisch by Nature |  How to make an American Quilt | Fax: *49 6224 1600421



More information about the Pkg-grub-devel mailing list