[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