grub-devel
[Top][All Lists]
Advanced

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

Re: Proposed PATCH to allow control of the kernel ordering in grub.cfg


From: Jeff Norden
Subject: Re: Proposed PATCH to allow control of the kernel ordering in grub.cfg
Date: Thu, 20 Dec 2018 18:26:20 -0600

Hi Daniel,

Thanks for the quick reply! I've made the suggested changes and attached
a "git format-patch" patch below.  Hopefully this is what you need.  I'm
not much of a git-expert.

Thanks again.  Have a great Holiday Season!

-Jeff

On Thu, 20 Dec 2018, Daniel Kiper wrote:
> This looks like nice commit message. So, please rebase your patch on
> latest GRUB2 master branch and repost it using "git format-patch" and
> "git send-email". And please do not forget to add your Signed-off-by.
> 
> And some minor comments below...


Signed-off-by: Jeffrey Norden <address@hidden>
---
 docs/grub.texi          | 18 ++++++++++++++++++
 util/grub-mkconfig.in   |  3 ++-
 util/grub.d/10_linux.in |  9 ++++++++-
 3 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/docs/grub.texi b/docs/grub.texi
index ecaba9d5c..4aaa151f8 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -1502,6 +1502,24 @@ and @samp{default} (@pxref{default}) environment 
variables as well as saved
 default entry using @command{grub-set-default} and value used with
 @command{grub-reboot}.
 
address@hidden GRUB_PREFERRED_KERNEL
+If this option is set, @command{grub-mkconfig} will list kernels that
+match its value before others.  In particular, the ``top-level'' menu
+entry (assuming submenus are enabled) will be the one with the highest
+version number that matches @samp{GRUB_PREFERRED_KERNEL}.  For
+example, @verb{|GRUB_PREFERRED_KERNEL="4.14"|} will put the 4.14 kernel
+first in @file{grub.cfg}, even if newer kernel(s) are found.
+
+Matching is done via @command{egrep} against the file name of the
+kernel, so regular expressions can be used.  For example:
address@hidden|GRUB_PREFERRED_KERNEL='4\.1[0-6]'|} will put any kernels matching
+4.10 thru 4.16 first, starting with the highest version number. Or,
address@hidden|GRUB_PREFERRED_KERNEL='vmlinuz-3\.16-x86_64'|} would match a
+specific kernel file.  Note that the simple example in the previous
+paragraph can be written more carefully as
address@hidden|GRUB_PREFERRED_KERNEL='4\.14'|} to force the @samp{.} to match
+a period instead of an arbitrary character.
+
 @item GRUB_ENABLE_CRYPTODISK
 If set to @samp{y}, @command{grub-mkconfig} and @command{grub-install} will
 check for encrypted disks and generate additional commands needed to access
diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
index 33332360e..8d6aecf22 100644
--- a/util/grub-mkconfig.in
+++ b/util/grub-mkconfig.in
@@ -238,7 +238,8 @@ export GRUB_DEFAULT \
   GRUB_ENABLE_CRYPTODISK \
   GRUB_BADRAM \
   GRUB_OS_PROBER_SKIP_LIST \
-  GRUB_DISABLE_SUBMENU
+  GRUB_DISABLE_SUBMENU \
+  GRUB_PREFERRED_KERNEL
 
 if test "x${grub_cfg}" != "x"; then
   rm -f "${grub_cfg}.new"
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
index 4532266be..32affd9d6 100644
--- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in
@@ -193,7 +193,14 @@ submenu_indentation=""
 
 is_top_level=true
 while [ "x$list" != "x" ] ; do
-  linux=`version_find_latest $list`
+  linux=""
+  if [ "x${GRUB_PREFERRED_KERNEL}" != "x" ]; then
+    linux=`echo $list | tr ' ' '\n' | egrep "${GRUB_PREFERRED_KERNEL}"`
+  fi
+  if [ "x$linux" = "x" ]; then
+    linux=$list
+  fi
+  linux=`version_find_latest $linux`
   gettext_printf "Found linux image: %s\n" "$linux" >&2
   basename=`basename $linux`
   dirname=`dirname $linux`
-- 
2.19.2




reply via email to

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