usr/sbin/grub2-switch-to-blscfg 0000755 00000021151 14720425724 0012443 0 ustar 00 #! /bin/sh
#
# Set a default boot entry for GRUB.
# Copyright (C) 2004,2009 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 .
#set -eu
# Initialize some variables.
prefix=/usr
exec_prefix=/usr
sbindir=/usr/sbin
bindir=/usr/bin
sysconfdir="/etc"
PACKAGE_NAME=GRUB
PACKAGE_VERSION=2.03
datarootdir="/usr/share"
datadir="/usr/share"
if [ ! -v pkgdatadir ]; then
pkgdatadir="${datadir}/grub"
fi
self=`basename $0`
grub_get_kernel_settings="${sbindir}/grub2-get-kernel-settings"
grub_editenv=${bindir}/grub2-editenv
etcdefaultgrub=/etc/default/grub
eval "$("${grub_get_kernel_settings}")" || true
EFIDIR=$(grep ^ID= /etc/os-release | sed -e 's/^ID=//' -e 's/rhel/redhat/' -e 's/\"//g')
if [ -d /sys/firmware/efi/efivars/ ]; then
startlink=/etc/grub2-efi.cfg
grubdir=`echo "/boot/efi/EFI/${EFIDIR}/" | sed 's,//*,/,g'`
else
startlink=/etc/grub2.cfg
grubdir=`echo "/boot/grub2" | sed 's,//*,/,g'`
fi
blsdir=`echo "/boot/loader/entries" | sed 's,//*,/,g'`
backupsuffix=.bak
arch="$(uname -m)"
export TEXTDOMAIN=grub
export TEXTDOMAINDIR="${datarootdir}/locale"
. "${pkgdatadir}/grub-mkconfig_lib"
# Usage: usage
# Print the usage.
usage () {
gettext_printf "Usage: %s\n" "$self"
gettext "Switch to BLS config files.\n"; echo
echo
print_option_help "-h, --help" "$(gettext "print this message and exit")"
print_option_help "-V, --version" "$(gettext "print the version information and exit")"
echo
print_option_help "--backup-suffix=$(gettext "SUFFIX")" "$backupsuffix"
print_option_help "--bls-directory=$(gettext "DIR")" "$blsdir"
print_option_help "--config-file=$(gettext "FILE")" "$startlink"
print_option_help "--grub-defaults=$(gettext "FILE")" "$etcdefaultgrub"
print_option_help "--grub-directory=$(gettext "DIR")" "$grubdir"
# echo
# gettext "Report bugs to ."; echo
}
argument () {
opt=$1
shift
if test $# -eq 0; then
gettext_printf "%s: option requires an argument -- \`%s'\n" "$self" "$opt" 1>&2
exit 1
fi
echo $1
}
# Check the arguments.
while test $# -gt 0
do
option=$1
shift
case "$option" in
-h | --help)
usage
exit 0 ;;
-V | --version)
echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}"
exit 0 ;;
--backup-suffix)
backupsuffix=`argument $option "$@"`
shift
;;
--backup-suffix=*)
backupsuffix=`echo "$option" | sed 's/--backup-suffix=//'`
;;
--bls-directory)
blsdir=`argument $option "$@"`
shift
;;
--bls-directory=*)
blsdir=`echo "$option" | sed 's/--bls-directory=//'`
;;
--config-file)
startlink=`argument $option "$@"`
shift
;;
--config-file=*)
startlink=`echo "$option" | sed 's/--config-file=//'`
;;
--grub-defaults)
etcdefaultgrub=`argument $option "$@"`
shift
;;
--grub-defaults=*)
etcdefaultgrub=`echo "$option" | sed 's/--grub-defaults=//'`
;;
--grub-directory)
grubdir=`argument $option "$@"`
shift
;;
--grub-directory=*)
grubdir=`echo "$option" | sed 's/--grub-directory=//'`
;;
*)
gettext_printf "Unrecognized option \`%s'\n" "$option" 1>&2
usage
exit 1
;;
esac
done
find_grub_cfg() {
local candidate=""
while [ -e "${candidate}" -o $# -gt 0 ]
do
if [ ! -e "${candidate}" ] ; then
candidate="$1"
shift
fi
if [ -L "${candidate}" ]; then
candidate="$(realpath "${candidate}")"
fi
if [ -f "${candidate}" ]; then
export GRUB_CONFIG_FILE="${candidate}"
return 0
fi
done
return 1
}
if ! find_grub_cfg ${startlink} ${grubdir}/grub.cfg ; then
gettext_printf "Couldn't find config file\n" 1>&2
exit 1
fi
if [ ! -d "${blsdir}" ]; then
install -m 700 -d "${blsdir}"
fi
if [ -f /etc/machine-id ]; then
MACHINE_ID=$(cat /etc/machine-id)
else
MACHINE_ID=$(dmesg | sha256sum)
fi
mkbls() {
local kernelver=$1 && shift
local datetime=$1 && shift
local bootprefix=$1 && shift
local debugname=""
local debugid=""
local flavor=""
if [ "$kernelver" == *\+* ] ; then
local flavor=-"${kernelver##*+}"
if [ "${flavor}" == "-debug" ]; then
local debugname=" with debugging"
local debugid="-debug"
fi
fi
(
source /etc/os-release
cat <"${bls_target}"
fi
if [ "x$GRUB_LINUX_MAKE_DEBUG" = "xtrue" ]; then
bls_debug="$(echo ${bls_target} | sed -e "s/${kernelver}/${kernelver}~debug/")"
cp -aT "${bls_target}" "${bls_debug}"
title="$(grep '^title[ \t]' "${bls_debug}" | sed -e 's/^title[ \t]*//')"
blsid="$(grep '^id[ \t]' "${bls_debug}" | sed -e "s/\.${ARCH}/-debug.${arch}/")"
sed -i -e "s/^title.*/title ${title}${GRUB_LINUX_DEBUG_TITLE_POSTFIX}/" "${bls_debug}"
sed -i -e "s/^id.*/${blsid}/" "${bls_debug}"
sed -i -e "s/^options.*/options \$kernelopts ${GRUB_CMDLINE_LINUX_DEBUG}/" "${bls_debug}"
fi
done
if [ -f "/boot/vmlinuz-0-rescue-${MACHINE_ID}" ]; then
mkbls "0-rescue-${MACHINE_ID}" "0" "${bootprefix}" >"${blsdir}/${MACHINE_ID}-0-rescue.conf"
fi
}
GENERATE=0
if grep '^GRUB_ENABLE_BLSCFG=.*' "${etcdefaultgrub}" \
| grep -vq '^GRUB_ENABLE_BLSCFG="*true"*\s*$' ; then
if ! sed -i"${backupsuffix}" \
-e 's,^GRUB_ENABLE_BLSCFG=.*,GRUB_ENABLE_BLSCFG=true,' \
"${etcdefaultgrub}" ; then
gettext_printf "Updating %s failed\n" "${etcdefaultgrub}"
exit 1
fi
GENERATE=1
elif ! grep -q '^GRUB_ENABLE_BLSCFG=.*' "${etcdefaultgrub}" ; then
# prepend in case admins have been bad at newlines
sed -i '1iGRUB_ENABLE_BLSCFG=true' "${etcdefaultgrub}"
if ! grep -q '^GRUB_ENABLE_BLSCFG=true' "${etcdefaultgrub}" ; then
gettext_printf "Updating %s failed\n" "${etcdefaultgrub}"
exit 1
fi
GENERATE=1
fi
if [ "${GENERATE}" -eq 1 ] ; then
copy_bls
if [ $arch = "x86_64" ] && [ ! -d /sys/firmware/efi ]; then
if ! cp ${prefix}/lib/grub//i386-pc/blscfg.mod ${grubdir}/i386-pc/ ; then
exit 1
fi
elif [ $arch = "ppc64" -o $arch = "ppc64le" ] && [ ! -d /sys/firmware/opal ]; then
if ! cp ${prefix}/lib/grub/powerpc-ieee1275/blscfg.mod ${grubdir}/powerpc-ieee1275/ ; then
exit 1
fi
fi
cp -af "${GRUB_CONFIG_FILE}" "${GRUB_CONFIG_FILE}${backupsuffix}"
if ! grub2-mkconfig -o "${GRUB_CONFIG_FILE}" ; then
cp -af "${GRUB_CONFIG_FILE}${backupsuffix}" "${GRUB_CONFIG_FILE}"
sed -i"${backupsuffix}" \
-e 's,^GRUB_ENABLE_BLSCFG=.*,GRUB_ENABLE_BLSCFG=false,' \
"${etcdefaultgrub}"
gettext_printf "Updating %s failed\n" "${GRUB_CONFIG_FILE}"
exit 1
fi
fi
# Bye.
exit 0