From: Jeff Norden <jeff@math.tntech.edu>
To: grub-devel@gnu.org
Subject: Proposed PATCH to allow control of the kernel ordering in grub.cfg
Date: Wed, 19 Dec 2018 00:50:21 -0600 [thread overview]
Message-ID: <fd1s6eypqq.fsf@norden.math.tntech.edu> (raw)
Greetings.
The small patch below adds a new variable (for use by 10_linux) that
allows you to tweak the ordering of kernels in grub.cfg
When the 10_linux script finds more than one installed kernel, it orders
them by version number. If you have several kernels, the one with the
highest version might be one you are trying out, but not the one that
you want to use most of the time.
The patch below adds a new /etc/default/grub variable for use by 10_linux.
The line
GRUB_PREFERRED_KERNEL="4.14"
will cause the 4.14 kernel to be listed before any others. In particular,
4.14 will be the kernel used for the top-level "simple" menu entry. If
GRUB_PREFERRED_KERNEL is not set, then the behavior of 10_linux isn't changed.
Background: I've been trying out manjaro lately, which has a nice gui
for installing multiple kernels. I discovered that 4.19 wasn't
interacting well with my video card. I got tired of having to
drill-down to the 4.14 kernel entry on each re-boot. But I wanted to
keep 4.19 installed so that I could try it out after updates (and maybe
try to isolate the problem in my "spare" time).
I could have used the GRUB_DEFAULT variable, but that would mean
disabling GRUB_SAVEDEFAULT, and another member of my household uses the
windows partition on this computer :-(. Also, GRUB_DEFAULT would need
to be adjusted if/when other kernels are added/deleted.
I've been using the attached patch for a month or so with no problems
(the kernel has been updated and grub.cfg has been re-build several
times). Right now, I've have the GRUB_PREFERRED_KERNEL="4.14" line
commented out (the video problem is fixed - not by me), and the modified
10_linux works fine in this mode as well.
Thanks,
-Jeff Norden
==== cut here ====x snip x=====
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
index 4532266be..f2dea11e9 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' | grep "${GRUB_PREFERRED_KERNEL}" | tr '\n' ' '`
+ 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`
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/docs/grub.texi b/docs/grub.texi
index ecaba9d5c..ac07a453f 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}.
+@item 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{grep} against the file name of the
+kernel, so regular expressions can be used. For example:
+@verb{|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,
+@verb{|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
+@verb{|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
=====x snip x====x snip x====
next reply other threads:[~2018-12-19 14:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-19 6:50 Jeff Norden [this message]
2018-12-20 11:53 ` Proposed PATCH to allow control of the kernel ordering in grub.cfg Daniel Kiper
2018-12-21 5:20 ` Mihai Moldovan
2018-12-21 0:26 ` Jeff Norden
2018-12-27 14:23 ` Jeff Norden
2018-12-31 8:09 ` Mihai Moldovan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fd1s6eypqq.fsf@norden.math.tntech.edu \
--to=jeff@math.tntech.edu \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.