Hi all, First time submitting - please let me know if I'm doing anything wrong.
This patch adds an option, GRUB_LINUX_PREF_VERSION_SUBSTR, that can be set to prioritize Linux kernels containing a given substring. This takes precedence over version ordering, so if you have 3.14.1-generic, 3.14.2-generic, 3.8.13-fnord1, and 3.8.13-fnord2 and the substring is 'fnord', the order is: 3.8.13-fnord2 3.8.13-fnord1 3.14.2-generic 3.14.1-generic Rationale: I and others, (see e.g. http://askubuntu.com/questions/216398/set-older-kernel-as-default-grub-entry) needed to change the Linux kernel version GRUB sets as default. The process is error-prone: you have to figure out where in the GRUB menu it will appear, then enter that in /etc/default/grub, and if the menu position changes due to new kernels added to the system you have to do it all over again. I had older kernels with a distinctive local version naming scheme that I wanted preferred over the stock kernels, but it could also be used to specify a particular kernel version. * util/grub-mkconfig.in: Add export of GRUB_LINUX_PREF_VERSION_SUBSTR * util/grub.d/10_linux.in: Handle GRUB_LINUX_PREF_VERSION_SUBSTR when adding kernels Signed-off-by: Doug Brunner <d...@doug-brunner.com> --- util/grub-mkconfig.in | 3 ++- util/grub.d/10_linux.in | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in index d1fae49..9a3a3e9 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -224,7 +224,8 @@ export GRUB_DEFAULT \ GRUB_ENABLE_CRYPTODISK \ GRUB_BADRAM \ GRUB_OS_PROBER_SKIP_LIST \ - GRUB_DISABLE_SUBMENU + GRUB_DISABLE_SUBMENU \ + GRUB_LINUX_PREF_VERSION_SUBSTR 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 d2e2a8f..0c447f6 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -173,9 +173,25 @@ title_correction_code= # yet, so it's empty. In a submenu it will be equal to '\t' (one tab). submenu_indentation="" +pref_list="" +non_pref_list="" +for entry in $list; do + if [[ "$entry" == *$GRUB_LINUX_PREF_VERSION_SUBSTR* ]]; then + pref_list="$pref_list $entry" + else + non_pref_list="$non_pref_list $entry" + fi +done + is_top_level=true -while [ "x$list" != "x" ] ; do - linux=`version_find_latest $list` +while [ "x$pref_list$non_pref_list" != "x" ] ; do + if [ "x$pref_list" != "x" ]; then + linux=`version_find_latest $pref_list` + pref_list=`echo $pref_list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '` + else + linux=`version_find_latest $non_pref_list` + non_pref_list=`echo $non_pref_list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '` + fi gettext_printf "Found linux image: %s\n" "$linux" >&2 basename=`basename $linux` dirname=`dirname $linux` @@ -240,8 +256,6 @@ while [ "x$list" != "x" ] ; do linux_entry "${OS}" "${version}" recovery \ "single ${GRUB_CMDLINE_LINUX}" fi - - list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '` done # If at least one kernel was found, then we need to _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel