Drop 10_linux_bls and avoid corner case of blsdir set with ostree
The logic to parse the BLS configs to generate a set of menuentry commands that's needed on ppc64le machines with bootloaders that don't have support to parse BLS config directly, was implemented in a 10_linux_bls script. But there's no need to have a separate script just for this and this logic can be merged into the 10_linux script to avoid code duplication. Also since the blscfg module will also now be used by ostree-based distros there is a possible corner case in which a user set the blsdir variable to a BLS directory path that is different than the default used by ostree. So to avoid possible issues, only drop the marker file to specify that the bootloader has support to parse BLS files if this variable hasn't been set. Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
This commit is contained in:
parent
7c2bab5e98
commit
7509e59c4a
@ -0,0 +1,37 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Martinez Canillas <javierm@redhat.com>
|
||||
Date: Thu, 2 Apr 2020 11:07:24 +0200
|
||||
Subject: [PATCH] grub-switch-to-blscfg: Only mark GRUB as BLS supported if
|
||||
blsdir isn't set
|
||||
|
||||
If the user set the blsdir environemnt variable to a path that is not the
|
||||
default where ostree writes the BLS snippets, the blscfg module won't be
|
||||
able to parse them and can lead to not having any menu entries on boot.
|
||||
|
||||
So to minimize the risk of things going wrong when dropping the 15_ostree
|
||||
script used by ostree to create the menu entries, only mark the bootloader
|
||||
as BLS supported if the blsdir variable has not been set.
|
||||
|
||||
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||
---
|
||||
util/grub-switch-to-blscfg.in | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/util/grub-switch-to-blscfg.in b/util/grub-switch-to-blscfg.in
|
||||
index a05a8d98554..4bbed8e4fe9 100644
|
||||
--- a/util/grub-switch-to-blscfg.in
|
||||
+++ b/util/grub-switch-to-blscfg.in
|
||||
@@ -267,8 +267,11 @@ copy_bls() {
|
||||
}
|
||||
|
||||
# The grub2 EFI binary is not copied to the ESP as a part of an ostree
|
||||
-# transaction. Make sure a grub2 version with BLS support is installed.
|
||||
-if test -f /run/ostree-booted && test -d /sys/firmware/efi/efivars/; then
|
||||
+# transaction. Make sure a grub2 version with BLS support is installed
|
||||
+# but only do this if the blsdir is not set, to make sure that the BLS
|
||||
+# parsing module will search for the BLS snippets in the default path.
|
||||
+if test -f /run/ostree-booted && test -d /sys/firmware/efi/efivars && \
|
||||
+ ! ${grub_editenv} - list | grep -q blsdir; then
|
||||
grub_binary="$(find /usr/lib/ostree-boot/efi/EFI/${EFIDIR}/ -name grub*.efi)"
|
||||
cp ${grub_binary} ${grubdir} || exit 1
|
||||
# Create a hidden file to indicate that grub2 now has BLS support.
|
662
0207-10_linux.in-Merge-logic-from-10_linux_bls-and-drop-t.patch
Normal file
662
0207-10_linux.in-Merge-logic-from-10_linux_bls-and-drop-t.patch
Normal file
@ -0,0 +1,662 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Martinez Canillas <javierm@redhat.com>
|
||||
Date: Tue, 31 Mar 2020 12:35:42 +0200
|
||||
Subject: [PATCH] 10_linux.in: Merge logic from 10_linux_bls and drop that
|
||||
script
|
||||
|
||||
There's a 10_linux_bls snippet that's used in ppc64le machines to generate
|
||||
a set of menuentry commands by parsing BLS configs in /boot/loader/entries.
|
||||
|
||||
This was made because on PowerNV ppc64le machines that boot using the OPAL
|
||||
firmware, there could be an old version of the Petitboot bootloader that
|
||||
doesn't have support to parse BLS snippets.
|
||||
|
||||
But there is no need to have a separate GRUB script for that and the logic
|
||||
could just be part of the usual 10_linux snippet.
|
||||
|
||||
Also the BLS files could be used directly if the bootloader has support to
|
||||
parse them, which is the case for GRUB that's used in ppc64le OF or if the
|
||||
Petitboot used in ppc64le OPAL machines is version 1.8.0 or newer.
|
||||
|
||||
So only generate the menuentry commands from the BLS snippets in the case
|
||||
of OPAL machines with an old Petitboot version.
|
||||
|
||||
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||
---
|
||||
Makefile.util.def | 7 -
|
||||
util/grub.d/10_linux.in | 97 ++++++++-
|
||||
util/grub.d/10_linux_bls.in | 470 --------------------------------------------
|
||||
3 files changed, 96 insertions(+), 478 deletions(-)
|
||||
delete mode 100644 util/grub.d/10_linux_bls.in
|
||||
|
||||
diff --git a/Makefile.util.def b/Makefile.util.def
|
||||
index 1fa92caad4d..f3a699691bf 100644
|
||||
--- a/Makefile.util.def
|
||||
+++ b/Makefile.util.def
|
||||
@@ -517,13 +517,6 @@ script = {
|
||||
condition = COND_HOST_LINUX;
|
||||
};
|
||||
|
||||
-script = {
|
||||
- name = '10_linux_bls';
|
||||
- common = util/grub.d/10_linux_bls.in;
|
||||
- installdir = grubconf;
|
||||
- condition = COND_HOST_LINUX;
|
||||
-};
|
||||
-
|
||||
script = {
|
||||
name = '10_reset_boot_success';
|
||||
common = util/grub.d/10_reset_boot_success.in;
|
||||
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
|
||||
index b70dca27567..c72cc3246bb 100644
|
||||
--- a/util/grub.d/10_linux.in
|
||||
+++ b/util/grub.d/10_linux.in
|
||||
@@ -84,18 +84,86 @@ esac
|
||||
|
||||
populate_header_warn()
|
||||
{
|
||||
+if [ "x${BLS_POPULATE_MENU}" = "xtrue" ]; then
|
||||
+ bls_parser="10_linux script"
|
||||
+else
|
||||
+ bls_parser="blscfg command"
|
||||
+fi
|
||||
cat <<EOF
|
||||
|
||||
# This section was generated by a script. Do not modify the generated file - all changes
|
||||
# will be lost the next time file is regenerated. Instead edit the BootLoaderSpec files.
|
||||
#
|
||||
-# The blscfg command parses the BootLoaderSpec files stored in /boot/loader/entries and
|
||||
+# The $bls_parser parses the BootLoaderSpec files stored in /boot/loader/entries and
|
||||
# populates the boot menu. Please refer to the Boot Loader Specification documentation
|
||||
# for the files format: https://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
+read_config()
|
||||
+{
|
||||
+ config_file=${1}
|
||||
+ title=""
|
||||
+ initrd=""
|
||||
+ options=""
|
||||
+ linux=""
|
||||
+ grub_arg=""
|
||||
+
|
||||
+ while read -r line
|
||||
+ do
|
||||
+ record=$(echo ${line} | cut -f 1 -d ' ')
|
||||
+ value=$(echo ${line} | cut -s -f2- -d ' ')
|
||||
+ case "${record}" in
|
||||
+ "title")
|
||||
+ title=${value}
|
||||
+ ;;
|
||||
+ "initrd")
|
||||
+ initrd=${value}
|
||||
+ ;;
|
||||
+ "linux")
|
||||
+ linux=${value}
|
||||
+ ;;
|
||||
+ "options")
|
||||
+ options=${value}
|
||||
+ ;;
|
||||
+ "grub_arg")
|
||||
+ grub_arg=${value}
|
||||
+ ;;
|
||||
+ esac
|
||||
+ done < ${config_file}
|
||||
+}
|
||||
+
|
||||
+populate_menu()
|
||||
+{
|
||||
+ blsdir="/boot/loader/entries"
|
||||
+ local -a files
|
||||
+ local IFS=$'\n'
|
||||
+ gettext_printf "Generating boot entries from BLS files...\n" >&2
|
||||
+
|
||||
+ files=($(for bls in ${blsdir}/*.conf ; do
|
||||
+ if ! [[ -e "${bls}" ]] ; then
|
||||
+ continue
|
||||
+ fi
|
||||
+ bls="${bls%.conf}"
|
||||
+ bls="${bls##*/}"
|
||||
+ echo "${bls}"
|
||||
+ done | ${kernel_sort} | tac)) || :
|
||||
+
|
||||
+ for bls in "${files[@]}" ; do
|
||||
+ read_config "${blsdir}/${bls}.conf"
|
||||
+
|
||||
+ menu="${menu}menuentry '${title}' ${grub_arg} --id=${bls} {\n"
|
||||
+ menu="${menu}\t linux ${linux} ${options}\n"
|
||||
+ if [ -n "${initrd}" ] ; then
|
||||
+ menu="${menu}\t initrd ${boot_prefix}${initrd}\n"
|
||||
+ fi
|
||||
+ menu="${menu}}\n\n"
|
||||
+ done
|
||||
+ # The printf command seems to be more reliable across shells for special character (\n, \t) evaluation
|
||||
+ printf "$menu"
|
||||
+}
|
||||
+
|
||||
if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then
|
||||
if [ x$dirname = x/ ]; then
|
||||
if [ -z "${prepare_root_cache}" ]; then
|
||||
@@ -115,6 +183,26 @@ if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then
|
||||
prepare_grub_to_access_device_with_variable boot ${boot_device}
|
||||
fi
|
||||
|
||||
+ arch="$(uname -m)"
|
||||
+ if [ "x${arch}" = "xppc64le" ] && [ -d /sys/firmware/opal ]; then
|
||||
+
|
||||
+ petitboot_path="/sys/firmware/devicetree/base/ibm,firmware-versions/petitboot"
|
||||
+
|
||||
+ if test -e ${petitboot_path}; then
|
||||
+ read -a petitboot_version < ${petitboot_path}
|
||||
+ petitboot_version="$(echo ${petitboot_version//v})"
|
||||
+ major_version="$(echo ${petitboot_version} | cut -d . -f1)"
|
||||
+ minor_version="$(echo ${petitboot_version} | cut -d . -f2)"
|
||||
+
|
||||
+ if test -z ${petitboot_version} || test ${major_version} -lt 1 || \
|
||||
+ test ${major_version} -eq 1 -a ${minor_version} -lt 8; then
|
||||
+ BLS_POPULATE_MENU="true"
|
||||
+ fi
|
||||
+ else
|
||||
+ BLS_POPULATE_MENU="true"
|
||||
+ fi
|
||||
+ fi
|
||||
+
|
||||
populate_header_warn
|
||||
|
||||
cat << EOF
|
||||
@@ -129,10 +217,17 @@ if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then
|
||||
if [ -z "\${kernelopts}" ]; then
|
||||
set kernelopts="root=${LINUX_ROOT_DEVICE} ro ${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
|
||||
fi
|
||||
+EOF
|
||||
+
|
||||
+ if [ "x${BLS_POPULATE_MENU}" = "xtrue" ]; then
|
||||
+ populate_menu
|
||||
+ else
|
||||
+ cat << EOF
|
||||
|
||||
insmod blscfg
|
||||
blscfg
|
||||
EOF
|
||||
+ fi
|
||||
|
||||
if [ "x${GRUB_GRUBENV_UPDATE}" = "xyes" ]; then
|
||||
blsdir="/boot/loader/entries"
|
||||
diff --git a/util/grub.d/10_linux_bls.in b/util/grub.d/10_linux_bls.in
|
||||
deleted file mode 100644
|
||||
index 68fbedf2129..00000000000
|
||||
--- a/util/grub.d/10_linux_bls.in
|
||||
+++ /dev/null
|
||||
@@ -1,470 +0,0 @@
|
||||
-#! /bin/sh
|
||||
-set -e
|
||||
-
|
||||
-# grub-mkconfig helper script.
|
||||
-# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc.
|
||||
-#
|
||||
-# GRUB is free software: you can redistribute it and/or modify
|
||||
-# it under the terms of the GNU General Public License as published by
|
||||
-# the Free Software Foundation, either version 3 of the License, or
|
||||
-# (at your option) any later version.
|
||||
-#
|
||||
-# GRUB is distributed in the hope that it will be useful,
|
||||
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-# GNU General Public License for more details.
|
||||
-#
|
||||
-# You should have received a copy of the GNU General Public License
|
||||
-# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||
-
|
||||
-prefix="@prefix@"
|
||||
-exec_prefix="@exec_prefix@"
|
||||
-datarootdir="@datarootdir@"
|
||||
-
|
||||
-. "$pkgdatadir/grub-mkconfig_lib"
|
||||
-
|
||||
-export TEXTDOMAIN=@PACKAGE@
|
||||
-export TEXTDOMAINDIR="@localedir@"
|
||||
-
|
||||
-CLASS="--class gnu-linux --class gnu --class os --unrestricted"
|
||||
-
|
||||
-if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
|
||||
- OS="$(eval $(grep PRETTY_NAME /etc/os-release) ; echo ${PRETTY_NAME})"
|
||||
- CLASS="--class $(eval $(grep '^ID_LIKE=\|^ID=' /etc/os-release) ; [ -n "${ID_LIKE}" ] && echo ${ID_LIKE} || echo ${ID}) ${CLASS}"
|
||||
-else
|
||||
- OS="${GRUB_DISTRIBUTOR}"
|
||||
- CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
|
||||
-fi
|
||||
-
|
||||
-# loop-AES arranges things so that /dev/loop/X can be our root device, but
|
||||
-# the initrds that Linux uses don't like that.
|
||||
-case ${GRUB_DEVICE} in
|
||||
- /dev/loop/*|/dev/loop[0-9])
|
||||
- GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
|
||||
- ;;
|
||||
-esac
|
||||
-
|
||||
-# Default to disabling partition uuid support to maintian compatibility with
|
||||
-# older kernels.
|
||||
-GRUB_DISABLE_LINUX_PARTUUID=${GRUB_DISABLE_LINUX_PARTUUID-true}
|
||||
-
|
||||
-# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter
|
||||
-# and mounting btrfs requires user space scanning, so force UUID in this case.
|
||||
-if ( [ "x${GRUB_DEVICE_UUID}" = "x" ] && [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] ) \
|
||||
- || ( [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
|
||||
- && [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ] ) \
|
||||
- || ( ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
|
||||
- && ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}" ) \
|
||||
- || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then
|
||||
- LINUX_ROOT_DEVICE=${GRUB_DEVICE}
|
||||
-elif [ "x${GRUB_DEVICE_UUID}" = "x" ] \
|
||||
- || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ]; then
|
||||
- LINUX_ROOT_DEVICE=PARTUUID=${GRUB_DEVICE_PARTUUID}
|
||||
-else
|
||||
- LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
|
||||
-fi
|
||||
-
|
||||
-case x"$GRUB_FS" in
|
||||
- xbtrfs)
|
||||
- if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ]; then
|
||||
- GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX} \${extra_cmdline}"
|
||||
- else
|
||||
- rootsubvol="`make_system_path_relative_to_its_root /`"
|
||||
- rootsubvol="${rootsubvol#/}"
|
||||
- if [ "x${rootsubvol}" != x ]; then
|
||||
- GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
|
||||
- fi
|
||||
- fi;;
|
||||
- xzfs)
|
||||
- rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
|
||||
- bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
|
||||
- LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}"
|
||||
- ;;
|
||||
-esac
|
||||
-
|
||||
-mktitle ()
|
||||
-{
|
||||
- local title_type
|
||||
- local version
|
||||
- local OS_NAME
|
||||
- local OS_VERS
|
||||
-
|
||||
- title_type=$1 && shift
|
||||
- version=$1 && shift
|
||||
-
|
||||
- OS_NAME="$(eval $(grep ^NAME= /etc/os-release) ; echo ${NAME})"
|
||||
- OS_VERS="$(eval $(grep ^VERSION= /etc/os-release) ; echo ${VERSION})"
|
||||
-
|
||||
- case $title_type in
|
||||
- recovery)
|
||||
- title=$(printf '%s (%s) %s (recovery mode)' \
|
||||
- "${OS_NAME}" "${version}" "${OS_VERS}")
|
||||
- ;;
|
||||
- *)
|
||||
- title=$(printf '%s (%s) %s' \
|
||||
- "${OS_NAME}" "${version}" "${OS_VERS}")
|
||||
- ;;
|
||||
- esac
|
||||
- echo -n ${title}
|
||||
-}
|
||||
-
|
||||
-title_correction_code=
|
||||
-
|
||||
-populate_header_warn()
|
||||
-{
|
||||
-cat <<EOF
|
||||
-
|
||||
-# This section was generated by a script. Do not modify the generated file - all changes
|
||||
-# will be lost the next time file is regenerated. Instead edit the BootLoaderSpec files.
|
||||
-
|
||||
-EOF
|
||||
-}
|
||||
-
|
||||
-read_config()
|
||||
-{
|
||||
- config_file=${1}
|
||||
- title=""
|
||||
- initrd=""
|
||||
- options=""
|
||||
- linux=""
|
||||
- grub_arg=""
|
||||
-
|
||||
- while read -r line
|
||||
- do
|
||||
- record=$(echo ${line} | cut -f 1 -d ' ')
|
||||
- value=$(echo ${line} | cut -s -f2- -d ' ')
|
||||
- case "${record}" in
|
||||
- "title")
|
||||
- title=${value}
|
||||
- ;;
|
||||
- "initrd")
|
||||
- initrd=${value}
|
||||
- ;;
|
||||
- "linux")
|
||||
- linux=${value}
|
||||
- ;;
|
||||
- "options")
|
||||
- options=${value}
|
||||
- ;;
|
||||
- "grub_arg")
|
||||
- grub_arg=${value}
|
||||
- ;;
|
||||
- esac
|
||||
- done < ${config_file}
|
||||
-}
|
||||
-
|
||||
-populate_menu()
|
||||
-{
|
||||
- blsdir="/boot/loader/entries"
|
||||
- local -a files
|
||||
- local IFS=$'\n'
|
||||
- gettext_printf "Generating boot entries from BLS files...\n" >&2
|
||||
-
|
||||
- files=($(for bls in ${blsdir}/*.conf ; do
|
||||
- if ! [[ -e "${bls}" ]] ; then
|
||||
- continue
|
||||
- fi
|
||||
- bls="${bls%.conf}"
|
||||
- bls="${bls##*/}"
|
||||
- echo "${bls}"
|
||||
- done | ${kernel_sort} | tac)) || :
|
||||
-
|
||||
- for bls in "${files[@]}" ; do
|
||||
- read_config "${blsdir}/${bls}.conf"
|
||||
-
|
||||
- menu="${menu}menuentry '${title}' ${grub_arg} --id=${bls} {\n"
|
||||
- menu="${menu}\t linux ${linux} ${options}\n"
|
||||
- if [ -n "${initrd}" ] ; then
|
||||
- menu="${menu}\t initrd ${boot_prefix}${initrd}\n"
|
||||
- fi
|
||||
- menu="${menu}}\n\n"
|
||||
- done
|
||||
- # The printf command seems to be more reliable across shells for special character (\n, \t) evaluation
|
||||
- printf "$menu"
|
||||
-}
|
||||
-
|
||||
-linux_entry ()
|
||||
-{
|
||||
- os="$1"
|
||||
- version="$2"
|
||||
- type="$3"
|
||||
- isdebug="$4"
|
||||
- args="$5"
|
||||
-
|
||||
- if [ -z "$boot_device_id" ]; then
|
||||
- boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
|
||||
- fi
|
||||
-
|
||||
- if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then
|
||||
- if [ x$dirname = x/ ]; then
|
||||
- if [ -z "${prepare_root_cache}" ]; then
|
||||
- prepare_grub_to_access_device ${GRUB_DEVICE}
|
||||
- fi
|
||||
- else
|
||||
- if [ -z "${prepare_boot_cache}" ]; then
|
||||
- prepare_grub_to_access_device ${GRUB_DEVICE_BOOT}
|
||||
- fi
|
||||
- fi
|
||||
-
|
||||
- if [ -d /sys/firmware/efi ]; then
|
||||
- bootefi_device="`${grub_probe} --target=device /boot/efi/`"
|
||||
- prepare_grub_to_access_device_with_variable boot ${bootefi_device}
|
||||
- else
|
||||
- boot_device="`${grub_probe} --target=device /boot/`"
|
||||
- prepare_grub_to_access_device_with_variable boot ${boot_device}
|
||||
- fi
|
||||
-
|
||||
- populate_header_warn
|
||||
- populate_menu
|
||||
-
|
||||
- if [ "x${GRUB_GRUBENV_UPDATE}" = "xyes" ]; then
|
||||
- blsdir="/boot/loader/entries"
|
||||
- [ -d "${blsdir}" ] && GRUB_BLS_FS="$(${grub_probe} --target=fs ${blsdir})"
|
||||
- if [ "x${GRUB_BLS_FS}" = "xbtrfs" ] || [ "x${GRUB_BLS_FS}" = "xzfs" ]; then
|
||||
- blsdir=$(make_system_path_relative_to_its_root "${blsdir}")
|
||||
- if [ "x${blsdir}" != "x/loader/entries" ] && [ "x${blsdir}" != "x/boot/loader/entries" ]; then
|
||||
- ${grub_editenv} - set blsdir="${blsdir}"
|
||||
- fi
|
||||
- fi
|
||||
-
|
||||
- ${grub_editenv} - set kernelopts="root=${linux_root_device_thisversion} ro ${args}"
|
||||
- if [ -n "${GRUB_EARLY_INITRD_LINUX_CUSTOM}" ]; then
|
||||
- ${grub_editenv} - set early_initrd="${GRUB_EARLY_INITRD_LINUX_CUSTOM}"
|
||||
- fi
|
||||
- fi
|
||||
-
|
||||
- exit 0
|
||||
- fi
|
||||
-
|
||||
- if [ x$type != xsimple ] ; then
|
||||
- title=$(mktitle "$type" "$version")
|
||||
- if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
|
||||
- replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
|
||||
- quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
|
||||
- title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
|
||||
- fi
|
||||
- if [ x$isdebug = xdebug ]; then
|
||||
- title="$title${GRUB_LINUX_DEBUG_TITLE_POSTFIX}"
|
||||
- fi
|
||||
- echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
|
||||
- else
|
||||
- echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
|
||||
- fi
|
||||
- if [ x$type != xrecovery ] ; then
|
||||
- save_default_entry | grub_add_tab
|
||||
- fi
|
||||
-
|
||||
- # Use ELILO's generic "efifb" when it's known to be available.
|
||||
- # FIXME: We need an interface to select vesafb in case efifb can't be used.
|
||||
- if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then
|
||||
- echo " load_video" | sed "s/^/$submenu_indentation/"
|
||||
- if grep -qx "CONFIG_FB_EFI=y" "${config}" 2> /dev/null \
|
||||
- && grep -qx "CONFIG_VT_HW_CONSOLE_BINDING=y" "${config}" 2> /dev/null; then
|
||||
- echo " set gfxpayload=keep" | sed "s/^/$submenu_indentation/"
|
||||
- fi
|
||||
- else
|
||||
- if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then
|
||||
- echo " load_video" | sed "s/^/$submenu_indentation/"
|
||||
- fi
|
||||
- echo " set gfxpayload=$GRUB_GFXPAYLOAD_LINUX" | sed "s/^/$submenu_indentation/"
|
||||
- fi
|
||||
-
|
||||
- echo " insmod gzio" | sed "s/^/$submenu_indentation/"
|
||||
-
|
||||
- if [ x$dirname = x/ ]; then
|
||||
- if [ -z "${prepare_root_cache}" ]; then
|
||||
- prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab)"
|
||||
- fi
|
||||
- printf '%s\n' "${prepare_root_cache}" | sed "s/^/$submenu_indentation/"
|
||||
- else
|
||||
- if [ -z "${prepare_boot_cache}" ]; then
|
||||
- prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
|
||||
- fi
|
||||
- printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
|
||||
- fi
|
||||
- sed "s/^/$submenu_indentation/" << EOF
|
||||
- linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
|
||||
-EOF
|
||||
- if test -n "${initrd}" ; then
|
||||
- initrd_path=
|
||||
- for i in ${initrd}; do
|
||||
- initrd_path="${initrd_path} ${rel_dirname}/${i}"
|
||||
- done
|
||||
- sed "s/^/$submenu_indentation/" << EOF
|
||||
- initrd $(echo $initrd_path)
|
||||
-EOF
|
||||
- fi
|
||||
- if test -n "${fdt}" ; then
|
||||
- sed "s/^/$submenu_indentation/" << EOF
|
||||
- devicetree ${rel_dirname}/${fdt}
|
||||
-EOF
|
||||
- fi
|
||||
- sed "s/^/$submenu_indentation/" << EOF
|
||||
-}
|
||||
-EOF
|
||||
-}
|
||||
-
|
||||
-machine=`uname -m`
|
||||
-case "x$machine" in
|
||||
- xi?86 | xx86_64)
|
||||
- list=
|
||||
- for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
|
||||
- if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
|
||||
- done ;;
|
||||
- *)
|
||||
- list=
|
||||
- for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
|
||||
- if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
|
||||
- done ;;
|
||||
-esac
|
||||
-
|
||||
-if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then
|
||||
- for i in /boot/ostree/*/vmlinuz-* ; do
|
||||
- if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
|
||||
- done
|
||||
-fi
|
||||
-
|
||||
-case "$machine" in
|
||||
- i?86) GENKERNEL_ARCH="x86" ;;
|
||||
- mips|mips64) GENKERNEL_ARCH="mips" ;;
|
||||
- mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
|
||||
- arm*) GENKERNEL_ARCH="arm" ;;
|
||||
- *) GENKERNEL_ARCH="$machine" ;;
|
||||
-esac
|
||||
-
|
||||
-prepare_boot_cache=
|
||||
-prepare_root_cache=
|
||||
-boot_device_id=
|
||||
-title_correction_code=
|
||||
-
|
||||
-# Extra indentation to add to menu entries in a submenu. We're not in a submenu
|
||||
-# yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
|
||||
-submenu_indentation=""
|
||||
-
|
||||
-is_top_level=true
|
||||
-while [ "x$list" != "x" ] ; do
|
||||
- linux=`version_find_latest $list`
|
||||
- if [ "x${GRUB_ENABLE_BLSCFG}" != "xtrue" ]; then
|
||||
- gettext_printf "Found linux image: %s\n" "$linux" >&2
|
||||
- fi
|
||||
-
|
||||
- basename=`basename $linux`
|
||||
- dirname=`dirname $linux`
|
||||
- rel_dirname=`make_system_path_relative_to_its_root $dirname`
|
||||
- version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
|
||||
- alt_version=`echo $version | sed -e "s,\.old$,,g"`
|
||||
- linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
|
||||
-
|
||||
- initrd_early=
|
||||
- for i in ${GRUB_EARLY_INITRD_LINUX_STOCK} \
|
||||
- ${GRUB_EARLY_INITRD_LINUX_CUSTOM}; do
|
||||
- if test -e "${dirname}/${i}" ; then
|
||||
- initrd_early="${initrd_early} ${i}"
|
||||
- fi
|
||||
- done
|
||||
-
|
||||
- initrd_real=
|
||||
- for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
|
||||
- "initrd-${version}" "initramfs-${version}.img" \
|
||||
- "initrd.img-${alt_version}" "initrd-${alt_version}.img" \
|
||||
- "initrd-${alt_version}" "initramfs-${alt_version}.img" \
|
||||
- "initramfs-genkernel-${version}" \
|
||||
- "initramfs-genkernel-${alt_version}" \
|
||||
- "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
|
||||
- "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do
|
||||
- if test -e "${dirname}/${i}" ; then
|
||||
- initrd_real="${i}"
|
||||
- break
|
||||
- fi
|
||||
- done
|
||||
-
|
||||
- initrd=
|
||||
- if test -n "${initrd_early}" || test -n "${initrd_real}"; then
|
||||
- initrd="${initrd_early} ${initrd_real}"
|
||||
-
|
||||
- initrd_display=
|
||||
- for i in ${initrd}; do
|
||||
- initrd_display="${initrd_display} ${dirname}/${i}"
|
||||
- done
|
||||
- if [ "x${GRUB_ENABLE_BLSCFG}" != "xtrue" ]; then
|
||||
- gettext_printf "Found initrd image: %s\n" "$(echo $initrd_display)" >&2
|
||||
- fi
|
||||
- fi
|
||||
-
|
||||
- fdt=
|
||||
- for i in "dtb-${version}" "dtb-${alt_version}"; do
|
||||
- if test -f "${dirname}/${i}/${GRUB_DEFAULT_DTB}" ; then
|
||||
- fdt="${i}/${GRUB_DEFAULT_DTB}"
|
||||
- break
|
||||
- fi
|
||||
- done
|
||||
-
|
||||
- config=
|
||||
- for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
|
||||
- if test -e "${i}" ; then
|
||||
- config="${i}"
|
||||
- break
|
||||
- fi
|
||||
- done
|
||||
-
|
||||
- initramfs=
|
||||
- if test -n "${config}" ; then
|
||||
- initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${config}" | cut -f2 -d= | tr -d \"`
|
||||
- fi
|
||||
-
|
||||
- if test -z "${initramfs}" && test -z "${initrd_real}" ; then
|
||||
- # "UUID=" and "ZFS=" magic is parsed by initrd or initramfs. Since there's
|
||||
- # no initrd or builtin initramfs, it can't work here.
|
||||
- if [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] \
|
||||
- || [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ]; then
|
||||
-
|
||||
- linux_root_device_thisversion=${GRUB_DEVICE}
|
||||
- else
|
||||
- linux_root_device_thisversion=PARTUUID=${GRUB_DEVICE_PARTUUID}
|
||||
- fi
|
||||
- fi
|
||||
-
|
||||
- if [ "x${GRUB_DISABLE_SUBMENU}" = "xyes" ] || [ "x${GRUB_DISABLE_SUBMENU}" = "xy" ]; then
|
||||
- GRUB_DISABLE_SUBMENU="true"
|
||||
- fi
|
||||
-
|
||||
- if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xtrue ]; then
|
||||
- linux_entry "${OS}" "${version}" simple standard \
|
||||
- "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
|
||||
- if [ "x$GRUB_LINUX_MAKE_DEBUG" = "xtrue" ]; then
|
||||
- linux_entry "${OS}" "${version}" simple debug \
|
||||
- "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} ${GRUB_CMDLINE_LINUX_DEBUG}"
|
||||
- fi
|
||||
-
|
||||
- submenu_indentation="$grub_tab"
|
||||
-
|
||||
- if [ -z "$boot_device_id" ]; then
|
||||
- boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
|
||||
- fi
|
||||
- # TRANSLATORS: %s is replaced with an OS name
|
||||
- echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
|
||||
- is_top_level=false
|
||||
- fi
|
||||
-
|
||||
- linux_entry "${OS}" "${version}" advanced standard \
|
||||
- "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
|
||||
- if [ "x$GRUB_LINUX_MAKE_DEBUG" = "xtrue" ]; then
|
||||
- linux_entry "${OS}" "${version}" advanced debug \
|
||||
- "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} ${GRUB_CMDLINE_LINUX_DEBUG}"
|
||||
- fi
|
||||
-
|
||||
- if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
|
||||
- linux_entry "${OS}" "${version}" recovery standard \
|
||||
- "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
|
||||
-# add a closing '}' for the submenu command.
|
||||
-if [ x"$is_top_level" != xtrue ]; then
|
||||
- echo '}'
|
||||
-fi
|
||||
-
|
||||
-echo "$title_correction_code"
|
@ -13,11 +13,26 @@ if [[ -e /sys/hypervisor/type ]] && grep -q "^xen$" /sys/hypervisor/type; then
|
||||
fi
|
||||
|
||||
ARCH=$(uname -m)
|
||||
# Older ppc64le OPAL firmware don't have BLS support so grub2-mkconfig has to
|
||||
# be run to generate a GRUB config file that contains menuentry commands.
|
||||
if [[ $ARCH = "ppc64le" ]]; then
|
||||
# Older ppc64le OPAL firmware (petitboot version < 1.8.0) don't have BLS support
|
||||
# so grub2-mkconfig has to be run to generate a config with menuentry commands.
|
||||
if [[ $ARCH = "ppc64le" ]] && [ -d /sys/firmware/opal ]; then
|
||||
|
||||
petitboot_path="/sys/firmware/devicetree/base/ibm,firmware-versions/petitboot"
|
||||
|
||||
if test -e ${petitboot_path}; then
|
||||
read -a petitboot_version < ${petitboot_path}
|
||||
petitboot_version="$(echo ${petitboot_version//v})"
|
||||
major_version="$(echo ${petitboot_version} | cut -d . -f1)"
|
||||
minor_version="$(echo ${petitboot_version} | cut -d . -f2)"
|
||||
|
||||
if test -z ${petitboot_version} || test ${major_version} -lt 1 || \
|
||||
test ${major_version} -eq 1 -a ${minor_version} -lt 8; then
|
||||
RUN_MKCONFIG=true
|
||||
fi
|
||||
else
|
||||
RUN_MKCONFIG=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $DISABLE_BLS = "true" ]]; then
|
||||
if grep -q '^GRUB_ENABLE_BLSCFG="*true"*\s*$' /etc/default/grub; then
|
||||
|
@ -203,3 +203,5 @@ Patch0202: 0202-efi-ip4_config-Improve-check-to-detect-literal-IPv6-.patch
|
||||
Patch0203: 0203-efi-net-Print-a-debug-message-if-parsing-the-address.patch
|
||||
Patch0204: 0204-blscfg-return-NULL-instead-of-a-zero-length-array-in.patch
|
||||
Patch0205: 0205-grub-switch-to-blscfg-Update-grub2-binary-in-ESP-for.patch
|
||||
Patch0206: 0206-grub-switch-to-blscfg-Only-mark-GRUB-as-BLS-supporte.patch
|
||||
Patch0207: 0207-10_linux.in-Merge-logic-from-10_linux_bls-and-drop-t.patch
|
||||
|
10
grub2.spec
10
grub2.spec
@ -9,7 +9,7 @@
|
||||
Name: grub2
|
||||
Epoch: 1
|
||||
Version: 2.04
|
||||
Release: 11%{?dist}
|
||||
Release: 12%{?dist}
|
||||
Summary: Bootloader with support for Linux, Multiboot and more
|
||||
License: GPLv3+
|
||||
URL: http://www.gnu.org/software/grub/
|
||||
@ -387,11 +387,6 @@ rm -r /boot/grub2.tmp/ || :
|
||||
%files tools
|
||||
%attr(0644,root,root) %ghost %config(noreplace) %{_sysconfdir}/default/grub
|
||||
%config %{_sysconfdir}/grub.d/??_*
|
||||
%ifarch ppc64 ppc64le
|
||||
%exclude %{_sysconfdir}/grub.d/10_linux
|
||||
%else
|
||||
%exclude %{_sysconfdir}/grub.d/10_linux_bls
|
||||
%endif
|
||||
%{_sysconfdir}/grub.d/README
|
||||
%{_userunitdir}/grub-boot-success.timer
|
||||
%{_userunitdir}/grub-boot-success.service
|
||||
@ -509,6 +504,9 @@ rm -r /boot/grub2.tmp/ || :
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Thu Apr 02 2020 Javier Martinez Canillas <javierm@redhat.com> - 2.04-12
|
||||
- Merge 10_linux_bls logic into 10_linux and avoid issues if blsdir is set
|
||||
|
||||
* Thu Mar 26 2020 Javier Martinez Canillas <javierm@redhat.com> - 2.04-11
|
||||
- grub-switch-to-blscfg: Update grub2 binary in ESP for OSTree systems
|
||||
Related: rhbz#1751272
|
||||
|
Loading…
Reference in New Issue
Block a user