konradr / rpms / grub2

Forked from rpms/grub2 6 years ago
Clone
1d9771a
From d3d42740661dce4df12330e57a1681a3b296622e Mon Sep 17 00:00:00 2001
1d9771a
From: Peter Jones <pjones@redhat.com>
1d9771a
Date: Thu, 23 Jun 2016 11:01:39 -0400
1d9771a
Subject: [PATCH 87/87] Add grub-get-kernel-settings and use it in 10_linux
1d9771a
1d9771a
This patch adds grub-get-kernel-settings, which reads the system kernel
1d9771a
installation configuration from /etc/sysconfig/kernel, and outputs
1d9771a
${GRUB_...} variables suitable for evaluation by grub-mkconfig.  Those
1d9771a
variables are then used by 10_linux to choose whether or not to create
1d9771a
debug stanzas.
1d9771a
1d9771a
Resolves: rhbz#1226325
1d9771a
---
1d9771a
 .gitignore                                     |  1 +
1d9771a
 Makefile.util.def                              |  7 +++
1d9771a
 configure.ac                                   |  2 +
1d9771a
 util/bash-completion.d/grub-completion.bash.in | 22 ++++++++
1d9771a
 util/grub-get-kernel-settings.3                | 20 +++++++
1d9771a
 util/grub-get-kernel-settings.in               | 78 ++++++++++++++++++++++++++
1d9771a
 util/grub-mkconfig.in                          |  3 +
1d9771a
 util/grub.d/10_linux.in                        | 23 ++++++--
1d9771a
 8 files changed, 151 insertions(+), 5 deletions(-)
1d9771a
 create mode 100644 util/grub-get-kernel-settings.3
1d9771a
 create mode 100644 util/grub-get-kernel-settings.in
1d9771a
1d9771a
diff --git a/.gitignore b/.gitignore
1d9771a
index 53a391e..f2f1ef5 100644
1d9771a
--- a/.gitignore
1d9771a
+++ b/.gitignore
1d9771a
@@ -112,6 +112,7 @@ grub-emu-lite
1d9771a
 grub-file
1d9771a
 grub-fs-tester
1d9771a
 grub-fstest
1d9771a
+grub-get-kernel-settings
1d9771a
 grub-glue-efi
1d9771a
 grub-install
1d9771a
 grub-kbdcomp
1d9771a
diff --git a/Makefile.util.def b/Makefile.util.def
1d9771a
index 8007de9..38cdf4c 100644
1d9771a
--- a/Makefile.util.def
1d9771a
+++ b/Makefile.util.def
1d9771a
@@ -716,6 +716,13 @@ script = {
1d9771a
 };
1d9771a
 
1d9771a
 script = {
1d9771a
+  name = grub-get-kernel-settings;
1d9771a
+  common = util/grub-get-kernel-settings.in;
1d9771a
+  mansection = 3;
1d9771a
+  installdir = sbin;
1d9771a
+};
1d9771a
+
1d9771a
+script = {
1d9771a
   name = grub-set-default;
1d9771a
   common = util/grub-set-default.in;
1d9771a
   mansection = 8;
1d9771a
diff --git a/configure.ac b/configure.ac
1d9771a
index 25de2c1..1d8f7e7 100644
1d9771a
--- a/configure.ac
1d9771a
+++ b/configure.ac
1d9771a
@@ -58,6 +58,7 @@ grub_TRANSFORM([grub-install])
1d9771a
 grub_TRANSFORM([grub-mkconfig])
1d9771a
 grub_TRANSFORM([grub-mkfont])
1d9771a
 grub_TRANSFORM([grub-mkimage])
1d9771a
+grub_TRANSFORM([grub-get-kernel-settings])
1d9771a
 grub_TRANSFORM([grub-glue-efi])
1d9771a
 grub_TRANSFORM([grub-mklayout])
1d9771a
 grub_TRANSFORM([grub-mkpasswd-pbkdf2])
1d9771a
@@ -75,6 +76,7 @@ grub_TRANSFORM([grub-file])
1d9771a
 grub_TRANSFORM([grub-bios-setup.3])
1d9771a
 grub_TRANSFORM([grub-editenv.1])
1d9771a
 grub_TRANSFORM([grub-fstest.3])
1d9771a
+grub_TRANSFORM([grub-get-kernel-settings.3])
1d9771a
 grub_TRANSFORM([grub-glue-efi.3])
1d9771a
 grub_TRANSFORM([grub-install.1])
1d9771a
 grub_TRANSFORM([grub-kbdcomp.3])
1d9771a
diff --git a/util/bash-completion.d/grub-completion.bash.in b/util/bash-completion.d/grub-completion.bash.in
1d9771a
index 44bf135..5c4acd4 100644
1d9771a
--- a/util/bash-completion.d/grub-completion.bash.in
1d9771a
+++ b/util/bash-completion.d/grub-completion.bash.in
1d9771a
@@ -265,6 +265,28 @@ unset __grub_sparc64_setup_program
1d9771a
 
1d9771a
 
1d9771a
 #
1d9771a
+# grub-get-kernel-settings
1d9771a
+#
1d9771a
+_grub_get_kernel_settings () {
1d9771a
+    local cur
1d9771a
+
1d9771a
+    COMPREPLY=()
1d9771a
+    cur=`_get_cword`
1d9771a
+
1d9771a
+    if [[ "$cur" == -* ]]; then
1d9771a
+        __grubcomp "$(__grub_get_options_from_help)"
1d9771a
+    else
1d9771a
+        # Default complete with a filename
1d9771a
+        _filedir
1d9771a
+    fi
1d9771a
+}
1d9771a
+__grub_get_kernel_settings_program="@grub_get_kernel_settings@"
1d9771a
+have ${__grub_get_kernel_settings_program} && \
1d9771a
+ complete -F _grub_get_kernel_settings -o filenames ${__grub_get_kernel_settings_program}
1d9771a
+unset __grub_get_kernel_settings_program
1d9771a
+
1d9771a
+
1d9771a
+#
1d9771a
 # grub-install
1d9771a
 #
1d9771a
 _grub_install () {
1d9771a
diff --git a/util/grub-get-kernel-settings.3 b/util/grub-get-kernel-settings.3
1d9771a
new file mode 100644
1d9771a
index 0000000..ba33330
1d9771a
--- /dev/null
1d9771a
+++ b/util/grub-get-kernel-settings.3
1d9771a
@@ -0,0 +1,20 @@
1d9771a
+.TH GRUB-GET-KERNEL-SETTINGS 3 "Thu Jun 25 2015"
1d9771a
+.SH NAME
1d9771a
+\fBgrub-get-kernel-settings\fR \(em Evaluate the system's kernel installation settings for use while making a grub configuration file.
1d9771a
+
1d9771a
+.SH SYNOPSIS
1d9771a
+\fBgrub-get-kernel-settings\fR [OPTION]
1d9771a
+
1d9771a
+.SH DESCRIPTION
1d9771a
+\fBgrub-get-kernel-settings\fR reads the kernel installation settings on the host system, and emits a set of grub settings suitable for use when creating a grub configuration file.
1d9771a
+
1d9771a
+.SH OPTIONS
1d9771a
+.TP
1d9771a
+-h, --help
1d9771a
+Display program usage and exit.
1d9771a
+.TP
1d9771a
+-v, --version
1d9771a
+Display the current version.
1d9771a
+
1d9771a
+.SH SEE ALSO
1d9771a
+.BR "info grub"
1d9771a
diff --git a/util/grub-get-kernel-settings.in b/util/grub-get-kernel-settings.in
1d9771a
new file mode 100644
1d9771a
index 0000000..1204621
1d9771a
--- /dev/null
1d9771a
+++ b/util/grub-get-kernel-settings.in
1d9771a
@@ -0,0 +1,78 @@
1d9771a
+#!/bin/sh
1d9771a
+set -e
1d9771a
+
1d9771a
+# Evaluate new-kernel-pkg's configuration file.
1d9771a
+# Copyright (C) 2016 Free Software Foundation, Inc.
1d9771a
+#
1d9771a
+# GRUB is free software: you can redistribute it and/or modify
1d9771a
+# it under the terms of the GNU General Public License as published by
1d9771a
+# the Free Software Foundation, either version 3 of the License, or
1d9771a
+# (at your option) any later version.
1d9771a
+#
1d9771a
+# GRUB is distributed in the hope that it will be useful,
1d9771a
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1d9771a
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1d9771a
+# GNU General Public License for more details.
1d9771a
+#
1d9771a
+# You should have received a copy of the GNU General Public License
1d9771a
+# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
1d9771a
+
1d9771a
+PACKAGE_NAME=@PACKAGE_NAME@
1d9771a
+PACKAGE_VERSION=@PACKAGE_VERSION@
1d9771a
+datadir="@datadir@"
1d9771a
+if [ "x$pkgdatadir" = x ]; then
1d9771a
+    pkgdatadir="${datadir}/@PACKAGE@"
1d9771a
+fi
1d9771a
+
1d9771a
+self=`basename $0`
1d9771a
+
1d9771a
+export TEXTDOMAIN=@PACKAGE@
1d9771a
+export TEXTDOMAINDIR="@localedir@"
1d9771a
+
1d9771a
+. "${pkgdatadir}/grub-mkconfig_lib"
1d9771a
+
1d9771a
+# Usage: usage
1d9771a
+# Print the usage.
1d9771a
+usage () {
1d9771a
+    gettext_printf "Usage: %s [OPTION]\n" "$self"
1d9771a
+    gettext "Evaluate new-kernel-pkg configuration"; echo
1d9771a
+    echo
1d9771a
+    print_option_help "-h, --help" "$(gettext "print this message and exit")"
1d9771a
+    print_option_help "-v, --version" "$(gettext "print the version information and exit")"
1d9771a
+    echo
1d9771a
+}
1d9771a
+
1d9771a
+# Check the arguments.
1d9771a
+while test $# -gt 0
1d9771a
+do
1d9771a
+    option=$1
1d9771a
+    shift
1d9771a
+
1d9771a
+    case "$option" in
1d9771a
+    -h | --help)
1d9771a
+	usage
1d9771a
+	exit 0 ;;
1d9771a
+    -v | --version)
1d9771a
+	echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}"
1d9771a
+	exit 0 ;;
1d9771a
+    -*)
1d9771a
+	gettext_printf "Unrecognized option \`%s'\n" "$option" 1>&2
1d9771a
+	usage
1d9771a
+	exit 1
1d9771a
+	;;
1d9771a
+    # Explicitly ignore non-option arguments, for compatibility.
1d9771a
+    esac
1d9771a
+done
1d9771a
+
1d9771a
+if test -f /etc/sysconfig/kernel ; then
1d9771a
+    . /etc/sysconfig/kernel
1d9771a
+fi
1d9771a
+
1d9771a
+if [ "$MAKEDEBUG" = "yes" ]; then
1d9771a
+    echo GRUB_LINUX_MAKE_DEBUG=true
1d9771a
+    echo export GRUB_LINUX_MAKE_DEBUG
1d9771a
+    echo GRUB_CMDLINE_LINUX_DEBUG=\"systemd.log_level=debug systemd.log_target=kmsg\"
1d9771a
+    echo export GRUB_CMDLINE_LINUX_DEBUG
1d9771a
+    echo GRUB_LINUX_DEBUG_TITLE_POSTFIX=\" with debugging\"
1d9771a
+    echo export GRUB_LINUX_DEBUG_TITLE_POSTFIX
1d9771a
+fi
1d9771a
diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
1d9771a
index fb87247..e32de5e 100644
1d9771a
--- a/util/grub-mkconfig.in
1d9771a
+++ b/util/grub-mkconfig.in
1d9771a
@@ -45,6 +45,7 @@ grub_probe="${sbindir}/@grub_probe@"
1d9771a
 grub_file="${bindir}/@grub_file@"
1d9771a
 grub_editenv="${bindir}/@grub_editenv@"
1d9771a
 grub_script_check="${bindir}/@grub_script_check@"
1d9771a
+grub_get_kernel_settings="${sbindir}/@grub_get_kernel_settings@"
1d9771a
 
1d9771a
 export TEXTDOMAIN=@PACKAGE@
1d9771a
 export TEXTDOMAINDIR="@localedir@"
1d9771a
@@ -151,6 +152,8 @@ if test -f ${sysconfdir}/default/grub ; then
1d9771a
   . ${sysconfdir}/default/grub
1d9771a
 fi
1d9771a
 
1d9771a
+eval "$("${grub_get_kernel_settings}")" || true
1d9771a
+
1d9771a
 if [ "x$GRUB_DISABLE_UUID" != "xtrue" -a -z "$GRUB_DEVICE_UUID" ]; then
1d9771a
   GRUB_DEVICE_UUID="$GRUB_DEVICE_UUID_GENERATED"
1d9771a
 fi
1d9771a
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
1d9771a
index 1215241..0c5b227 100644
1d9771a
--- a/util/grub.d/10_linux.in
1d9771a
+++ b/util/grub.d/10_linux.in
1d9771a
@@ -84,7 +84,8 @@ linux_entry ()
1d9771a
   os="$1"
1d9771a
   version="$2"
1d9771a
   type="$3"
1d9771a
-  args="$4"
1d9771a
+  isdebug="$4"
1d9771a
+  args="$5"
1d9771a
 
1d9771a
   sixteenbit=""
1d9771a
   linuxefi="linux"
1d9771a
@@ -116,6 +117,9 @@ linux_entry ()
1d9771a
 	  quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
1d9771a
 	  title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
1d9771a
       fi
1d9771a
+      if [ x$isdebug = xdebug ]; then
1d9771a
+	  title="$title${GRUB_LINUX_DEBUG_TITLE_POSTFIX}"
1d9771a
+      fi
1d9771a
       echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
1d9771a
   else
1d9771a
       echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
1d9771a
@@ -273,11 +277,15 @@ while [ "x$list" != "x" ] ; do
1d9771a
   fi
1d9771a
 
1d9771a
   if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xtrue ]; then
1d9771a
-    linux_entry "${OS}" "${version}" simple \
1d9771a
+    linux_entry "${OS}" "${version}" simple standard \
1d9771a
     "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
1d9771a
+    if [ "x$GRUB_LINUX_MAKE_DEBUG" = "xtrue" ]; then
1d9771a
+      linux_entry "${OS}" "${version}" simple debug \
1d9771a
+        "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} ${GRUB_CMDLINE_LINUX_DEBUG}"
1d9771a
+    fi
1d9771a
 
1d9771a
     submenu_indentation="$grub_tab"
1d9771a
-    
1d9771a
+
1d9771a
     if [ -z "$boot_device_id" ]; then
1d9771a
 	boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
1d9771a
     fi
1d9771a
@@ -286,10 +294,15 @@ while [ "x$list" != "x" ] ; do
1d9771a
     is_top_level=false
1d9771a
   fi
1d9771a
 
1d9771a
-  linux_entry "${OS}" "${version}" advanced \
1d9771a
+  linux_entry "${OS}" "${version}" advanced standard \
1d9771a
               "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
1d9771a
+  if [ "x$GRUB_LINUX_MAKE_DEBUG" = "xtrue" ]; then
1d9771a
+    linux_entry "${OS}" "${version}" advanced debug \
1d9771a
+                "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} ${GRUB_CMDLINE_LINUX_DEBUG}"
1d9771a
+  fi
1d9771a
+
1d9771a
   if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
1d9771a
-    linux_entry "${OS}" "${version}" recovery \
1d9771a
+    linux_entry "${OS}" "${version}" recovery standard \
1d9771a
                 "single ${GRUB_CMDLINE_LINUX}"
1d9771a
   fi
1d9771a
 
1d9771a
-- 
1d9771a
2.7.4
1d9771a