From abd8b83cdc6398c52c7d2b71b378938cf51872fd Mon Sep 17 00:00:00 2001 From: Michael Chang Date: Wed, 13 Mar 2024 15:26:42 +0800 Subject: [PATCH 9/9] 10_linux: Some refinement for BLS Remove BLS_POPULATE_MENU as it is not being used currently and removing kernelopts assignment in the grub boot config itself to fully delegate the responsibility of generating kernel options to a functioning BLS generator. Additionally, removing unused dead code, which is often blamed for causing errors in the dash shell script. Signed-off-by: Michael Chang --- util/grub.d/10_linux.in | 194 ---------------------------------------- 1 file changed, 194 deletions(-) diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in index edf0fca55..666eae995 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -93,11 +93,7 @@ fi populate_header_warn() { -if [ "x${BLS_POPULATE_MENU}" = "xtrue" ]; then - bls_parser="10_linux script" -else bls_parser="blscfg command" -fi cat </dev/null | tac)) || : - - echo "${files[@]}" -} - -update_bls_cmdline() -{ - local cmdline="root=${LINUX_ROOT_DEVICE} ro ${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" - local -a files=($(get_sorted_bls)) - - for bls in "${files[@]}"; do - local options="${cmdline}" - if [ -z "${bls##*debug*}" ]; then - options="${options} ${GRUB_CMDLINE_LINUX_DEBUG}" - fi - options="$(echo "${options}" | sed -e 's/\//\\\//g')" - sed -i -e "s/^options.*/options ${options}/" "${blsdir}/${bls}.conf" - done -} - -populate_menu() -{ - local -a files=($(get_sorted_bls)) - - gettext_printf "Generating boot entries from BLS files...\n" >&2 - - 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" -} - -# Make BLS the default if GRUB_ENABLE_BLSCFG was not set and grubby is not installed. -# FIXME: The test should be aligned to openSUSE, grubby is not our default tool -if [ -z "${GRUB_ENABLE_BLSCFG}" ] && ! command -v new-kernel-pkg >/dev/null && false; then - GRUB_ENABLE_BLSCFG="true" -fi - if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then if [ x$dirname = x/ ]; then if [ -z "${prepare_root_cache}" ]; then @@ -225,111 +125,17 @@ 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 - - BLS_POPULATE_MENU="true" - petitboot_path="/sys/firmware/devicetree/base/ibm,firmware-versions/petitboot" - - if test -e ${petitboot_path}; then - read -r -d '' petitboot_version < ${petitboot_path} - petitboot_version="$(echo ${petitboot_version//v})" - - if test -n ${petitboot_version}; then - major_version="$(echo ${petitboot_version} | cut -d . -f1)" - minor_version="$(echo ${petitboot_version} | cut -d . -f2)" - - re='^[0-9]+$' - if [[ $major_version =~ $re ]] && [[ $minor_version =~ $re ]] && - ([[ ${major_version} -gt 1 ]] || - [[ ${major_version} -eq 1 && - ${minor_version} -ge 8 ]]); then - BLS_POPULATE_MENU="false" - fi - fi - fi - fi - populate_header_warn - cat << EOF -# The kernelopts variable should be defined in the grubenv file. But to ensure that menu -# entries populated from BootLoaderSpec files that use this variable work correctly even -# without a grubenv file, define a fallback kernelopts variable if this has not been set. -# -# The kernelopts variable in the grubenv file can be modified using the grubby tool or by -# executing the grub2-mkconfig tool. For the latter, the values of the GRUB_CMDLINE_LINUX -# and GRUB_CMDLINE_LINUX_DEFAULT options from /etc/default/grub file are used to set both -# the kernelopts variable in the grubenv file and the fallback kernelopts variable. -if [ -z "\${kernelopts}" ]; then - set kernelopts="root=${LINUX_ROOT_DEVICE} ro ${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" -fi -EOF - - update_bls_cmdline - - 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" - [ -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 - - if [ -n "${GRUB_EARLY_INITRD_LINUX_CUSTOM}" ]; then - ${grub_editenv} - set early_initrd="${GRUB_EARLY_INITRD_LINUX_CUSTOM}" - fi - - if [ -n "${GRUB_DEFAULT_DTB}" ]; then - ${grub_editenv} - set devicetree="${GRUB_DEFAULT_DTB}" - fi - - if [ -n "${GRUB_SAVEDEFAULT}" ]; then - ${grub_editenv} - set save_default="${GRUB_SAVEDEFAULT}" - fi - fi exit 0 fi -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= hotkey=1 -- 2.45.2