tag 470398 +patch
thanks

Hi, I have attached an updated patch for this feature request.
linux-alternatives.patch implements the alternatives logic in
10_linux. It also discards the restore explicit case, it can be
specified as an alternative. autoexport-alternatives.patch makes
grub-mkconfig automatically export all needed variables defined in
/etc/default/grub. And finally doc-alternatives.patch modifies the
documentation. If someone that is subscribed to the upstream list or
to savannah can forward this upstream, it would be really nice. I
don't really think this is too complicated, as indicated in the
upstream bug report.

-- 

Saludos,
Felipe Sateler
--- a/10_linux	2010-06-04 20:49:34.000000000 -0400
+++ b/10_linux	2010-06-05 15:37:44.000000000 -0400
@@ -54,14 +54,15 @@
 {
   os="$1"
   version="$2"
-  recovery="$3"
+  name="$3"
   args="$4"
-  if ${recovery} ; then
-    title="$(gettext "%s, with Linux %s (recovery mode)")"
+  if [ -n "${name}" ] ; then
+    title="$(gettext "%s, with Linux %s (%s)")"
   else
-    title="$(gettext "%s, with Linux %s")"
+    # An extra space doesn't hurt
+    title="$(gettext "%s, with Linux %s %s")"
   fi
-  printf "menuentry \"${title}\" ${CLASS} {\n" "${os}" "${version}"
+  printf "menuentry \"${title}\" ${CLASS} {\n" "${os}" "${version}" "${name}"
   save_default_entry | sed -e "s/^/\t/"
 
   if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ]; then
@@ -119,13 +120,17 @@
     # "UUID=" magic is parsed by initrds.  Since there's no initrd, it can't work here.
     linux_root_device_thisversion=${GRUB_DEVICE}
   fi
-
-  linux_entry "${OS}" "${version}" false \
+  # Default version always goes in, without name
+  linux_entry "${OS}" "${version}" "" \
       "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
-  if [ "x${GRUB_DISABLE_LINUX_RECOVERY}" != "xtrue" ]; then
-    linux_entry "${OS}" "${version}" true \
-	"single ${GRUB_CMDLINE_LINUX}"
-  fi
+  # Now put all alternatives
+  for alternative in ${GRUB_LINUX_ALTERNATIVES} ; do
+    var_name=`echo GRUB_CMDLINE_LINUX_${alternative}`
+    options="${GRUB_CMDLINE_LINUX} `eval echo \\$$var_name`"
+    var_name=`echo GRUB_NAME_LINUX_${alternative}`
+    name=`eval echo \\$$var_name`
+    linux_entry "${OS}" "${version}" "${name}" "${options}"
+  done
 
   list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
 done
--- a/grub-mkconfig	2010-06-05 15:33:58.000000000 -0400
+++ b/grub-mkconfig	2010-06-05 15:36:00.000000000 -0400
@@ -218,7 +218,6 @@
   GRUB_TERMINAL_OUTPUT \
   GRUB_SERIAL_COMMAND \
   GRUB_DISABLE_LINUX_UUID \
-  GRUB_DISABLE_LINUX_RECOVERY \
   GRUB_GFXMODE \
   GRUB_THEME \
   GRUB_GFXPAYLOAD_LINUX \
@@ -226,6 +225,15 @@
   GRUB_INIT_TUNE \
   GRUB_SAVEDEFAULT
 
+# Export alternatives variables
+if [ -n "${GRUB_LINUX_ALTERNATIVES}" ]; then
+  export GRUB_LINUX_ALTERNATIVES
+  for alternative in ${GRUB_LINUX_ALTERNATIVES}; do
+    export GRUB_CMDLINE_LINUX_${alternative}
+    export GRUB_NAME_LINUX_${alternative}
+  done
+fi
+
 if test "x${grub_cfg}" != "x"; then
   rm -f ${grub_cfg}.new
   exec > ${grub_cfg}.new
--- a/grub.texi
+++ b/grub.texi
@@ -888,13 +888,23 @@ A command to configure the serial port when using the serial console.
 @xref{serial}.  Defaults to @samp{serial}.
 
 @item GRUB_CMDLINE_LINUX
-Command-line arguments to add to menu entries for the Linux kernel.
-
-...@item GRUB_CMDLINE_LINUX_DEFAULT
-Unless @samp{GRUB_DISABLE_LINUX_RECOVERY} is set, 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
-default menu entry, after those listed in @samp{GRUB_CMDLINE_LINUX}.
+Command-line arguments to add to all menu entries for the Linux kernel.
+
+...@item GRUB_LINUX_ALTERNATIVES
+...@itemx GRUB_CMDLINE_LINUX_DEFAULT
+...@itemx grub_cmdline_lin...@{alternative@}
+...@itemx grub_name_lin...@{alternative@}
+Set @samp{GRUB_LINUX_ALTERNATIVES} to a series of names of alternative boot
+configuations, if desired. A default entry with no extra name is always
+generated, use @samp{GRUB_CMDLINE_LINUX_DEFAULT} to provide the extra command
+line arguments for the default version.
+
+For each alternative listed in @samp{GRUB_LINUX_ALTERNATIVES}, define
+...@samp{grub_cmdline_linux_@{alternat...@}} and
+...@samp{grub_name_linux_@{alternat...@}} where @sa...@{alternative@}} must
+case-sensitively match the alternative name listed. The name will be
+displayed in parenthesis after the OS name, and the extra command line
+arguments appended to the boot line.
 
 @item GRUB_CMDLINE_NETBSD
 @itemx GRUB_CMDLINE_NETBSD_DEFAULT
@@ -908,9 +918,6 @@ the Linux kernel, using a @samp{root=UUID=...} kernel parameter.  This is
 usually more reliable, but in some cases it may not be appropriate.  To
 disable the use of UUIDs, set this option to @samp{true}.
 
-...@item GRUB_DISABLE_LINUX_RECOVERY
-Disable the generation of recovery mode menu entries for Linux.
-
 @item GRUB_DISABLE_NETBSD_RECOVERY
 Disable the generation of recovery mode menu entries for NetBSD.
 

Reply via email to