Last active
January 20, 2020 12:50
-
-
Save rarylson/da6b77ad6edde25529b2 to your computer and use it in GitHub Desktop.
Patched file in the grub2 Ubuntu package (see: http://askubuntu.com/a/498281/197497 and https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1274320)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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="/usr" | |
exec_prefix="/usr" | |
datarootdir="/usr/share" | |
grub_lang=`echo $LANG | cut -d . -f 1` | |
grubdir="`echo "/boot/grub" | sed 's,//*,/,g'`" | |
quick_boot="1" | |
export TEXTDOMAIN=grub | |
export TEXTDOMAINDIR="${datarootdir}/locale" | |
. "${datarootdir}/grub/grub-mkconfig_lib" | |
# Do this as early as possible, since other commands might depend on it. | |
# (e.g. the `loadfont' command might need lvm or raid modules) | |
for i in ${GRUB_PRELOAD_MODULES} ; do | |
echo "insmod $i" | |
done | |
if [ "x${GRUB_DEFAULT}" = "x" ] ; then GRUB_DEFAULT=0 ; fi | |
if [ "x${GRUB_DEFAULT}" = "xsaved" ] ; then GRUB_DEFAULT='${saved_entry}' ; fi | |
if [ "x${GRUB_TIMEOUT}" = "x" ] ; then GRUB_TIMEOUT=5 ; fi | |
if [ "x${GRUB_GFXMODE}" = "x" ] ; then GRUB_GFXMODE=auto ; fi | |
if [ "x${GRUB_DEFAULT_BUTTON}" = "x" ] ; then GRUB_DEFAULT_BUTTON="$GRUB_DEFAULT" ; fi | |
if [ "x${GRUB_DEFAULT_BUTTON}" = "xsaved" ] ; then GRUB_DEFAULT_BUTTON='${saved_entry}' ; fi | |
if [ "x${GRUB_TIMEOUT_BUTTON}" = "x" ] ; then GRUB_TIMEOUT_BUTTON="$GRUB_TIMEOUT" ; fi | |
cat << EOF | |
if [ -s \$prefix/grubenv ]; then | |
set have_grubenv=true | |
load_env | |
fi | |
EOF | |
if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then | |
cat <<EOF | |
if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then | |
set default="${GRUB_DEFAULT_BUTTON}" | |
elif [ "\${next_entry}" ] ; then | |
set default="\${next_entry}" | |
set next_entry= | |
save_env next_entry | |
set boot_once=true | |
else | |
set default="${GRUB_DEFAULT}" | |
fi | |
EOF | |
else | |
cat <<EOF | |
if [ "\${next_entry}" ] ; then | |
set default="\${next_entry}" | |
set next_entry= | |
save_env next_entry | |
set boot_once=true | |
else | |
set default="${GRUB_DEFAULT}" | |
fi | |
EOF | |
fi | |
cat <<EOF | |
if [ x"\${feature_menuentry_id}" = xy ]; then | |
menuentry_id_option="--id" | |
else | |
menuentry_id_option="" | |
fi | |
export menuentry_id_option | |
if [ "\${prev_saved_entry}" ]; then | |
set saved_entry="\${prev_saved_entry}" | |
save_env saved_entry | |
set prev_saved_entry= | |
save_env prev_saved_entry | |
set boot_once=true | |
fi | |
function savedefault { | |
if [ -z "\${boot_once}" ]; then | |
saved_entry="\${chosen}" | |
save_env saved_entry | |
fi | |
} | |
EOF | |
if [ "$quick_boot" = 1 ]; then | |
cat <<EOF | |
function recordfail { | |
set recordfail=1 | |
EOF | |
check_writable () { | |
abstractions="$(grub-probe --target=abstraction "${grubdir}")" | |
for abstraction in $abstractions; do | |
case "$abstraction" in | |
diskfilter | lvm) | |
cat <<EOF | |
# GRUB lacks write support for $abstraction, so recordfail support is disabled. | |
EOF | |
return | |
;; | |
esac | |
done | |
FS="$(grub-probe --target=fs "${grubdir}")" | |
case "$FS" in | |
btrfs | cpiofs | newc | odc | romfs | squash4 | tarfs | zfs) | |
cat <<EOF | |
# GRUB lacks write support for $FS, so recordfail support is disabled. | |
EOF | |
return | |
;; | |
esac | |
cat <<EOF | |
if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi | |
EOF | |
} | |
check_writable | |
cat <<EOF | |
} | |
EOF | |
fi | |
cat <<EOF | |
function load_video { | |
EOF | |
if [ -n "${GRUB_VIDEO_BACKEND}" ]; then | |
cat <<EOF | |
insmod ${GRUB_VIDEO_BACKEND} | |
EOF | |
else | |
# If all_video.mod isn't available load all modules available | |
# with versions prior to introduction of all_video.mod | |
cat <<EOF | |
if [ x\$feature_all_video_module = xy ]; then | |
insmod all_video | |
else | |
insmod efi_gop | |
insmod efi_uga | |
insmod ieee1275_fb | |
insmod vbe | |
insmod vga | |
insmod video_bochs | |
insmod video_cirrus | |
fi | |
EOF | |
fi | |
cat <<EOF | |
} | |
EOF | |
serial=0; | |
gfxterm=0; | |
for x in ${GRUB_TERMINAL_INPUT} ${GRUB_TERMINAL_OUTPUT}; do | |
if [ xserial = "x$x" ]; then | |
serial=1; | |
fi | |
if [ xgfxterm = "x$x" ]; then | |
gfxterm=1; | |
fi | |
done | |
if [ "x$serial" = x1 ]; then | |
if [ "x${GRUB_SERIAL_COMMAND}" = "x" ] ; then | |
grub_warn "$(gettext "Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default parameters will be used.")" | |
GRUB_SERIAL_COMMAND=serial | |
fi | |
echo "${GRUB_SERIAL_COMMAND}" | |
fi | |
if [ "x$gfxterm" = x1 ]; then | |
if [ -n "$GRUB_FONT" ] ; then | |
# Make the font accessible | |
prepare_grub_to_access_device `${grub_probe} --target=device "${GRUB_FONT}"` | |
cat << EOF | |
if loadfont `make_system_path_relative_to_its_root "${GRUB_FONT}"` ; then | |
EOF | |
else | |
for dir in "${pkgdatadir}" "`echo '/boot/grub' | sed "s,//*,/,g"`" /usr/share/grub ; do | |
for basename in unicode unifont ascii; do | |
path="${dir}/${basename}.pf2" | |
if is_path_readable_by_grub "${path}" > /dev/null ; then | |
font_path="${path}" | |
else | |
continue | |
fi | |
break 2 | |
done | |
done | |
if [ -n "${font_path}" ] ; then | |
cat << EOF | |
if [ x\$feature_default_font_path = xy ] ; then | |
font=unicode | |
else | |
EOF | |
# Make the font accessible | |
prepare_grub_to_access_device `${grub_probe} --target=device "${font_path}"` | |
cat << EOF | |
font="`make_system_path_relative_to_its_root "${font_path}"`" | |
fi | |
if loadfont \$font ; then | |
EOF | |
else | |
cat << EOF | |
if loadfont unicode ; then | |
EOF | |
fi | |
fi | |
cat << EOF | |
set gfxmode=${GRUB_GFXMODE} | |
load_video | |
insmod gfxterm | |
EOF | |
# Gettext variables and module | |
if [ "x${LANG}" != "xC" ] && [ "x${LANG}" != "x" ]; then | |
cat << EOF | |
set locale_dir=\$prefix/locale | |
set lang=${grub_lang} | |
insmod gettext | |
EOF | |
fi | |
cat <<EOF | |
fi | |
EOF | |
fi | |
case x${GRUB_TERMINAL_INPUT} in | |
x) | |
# Just use the native terminal | |
;; | |
x*) | |
cat << EOF | |
terminal_input ${GRUB_TERMINAL_INPUT} | |
EOF | |
;; | |
esac | |
case x${GRUB_TERMINAL_OUTPUT} in | |
x) | |
# Just use the native terminal | |
;; | |
x*) | |
cat << EOF | |
terminal_output ${GRUB_TERMINAL_OUTPUT} | |
EOF | |
;; | |
esac | |
if [ "x$gfxterm" = x1 ]; then | |
if [ "x$GRUB_THEME" != x ] && [ -f "$GRUB_THEME" ] \ | |
&& is_path_readable_by_grub "$GRUB_THEME"; then | |
gettext_printf "Found theme: %s\n" "$GRUB_THEME" >&2 | |
prepare_grub_to_access_device `${grub_probe} --target=device "$GRUB_THEME"` | |
cat << EOF | |
insmod gfxmenu | |
EOF | |
themedir="`dirname "$GRUB_THEME"`" | |
for x in "$themedir"/*.pf2 "$themedir"/f/*.pf2; do | |
if [ -f "$x" ]; then | |
cat << EOF | |
loadfont (\$root)`make_system_path_relative_to_its_root $x` | |
EOF | |
fi | |
done | |
if [ x"`echo "$themedir"/*.jpg`" != x"$themedir/*.jpg" ] || [ x"`echo "$themedir"/*.jpeg`" != x"$themedir/*.jpeg" ]; then | |
cat << EOF | |
insmod jpeg | |
EOF | |
fi | |
if [ x"`echo "$themedir"/*.png`" != x"$themedir/*.png" ]; then | |
cat << EOF | |
insmod png | |
EOF | |
fi | |
if [ x"`echo "$themedir"/*.tga`" != x"$themedir/*.tga" ]; then | |
cat << EOF | |
insmod tga | |
EOF | |
fi | |
cat << EOF | |
set theme=(\$root)`make_system_path_relative_to_its_root $GRUB_THEME` | |
export theme | |
EOF | |
elif [ "x$GRUB_BACKGROUND" != x ] && [ -f "$GRUB_BACKGROUND" ] \ | |
&& is_path_readable_by_grub "$GRUB_BACKGROUND"; then | |
gettext_printf "Found background: %s\n" "$GRUB_BACKGROUND" >&2 | |
case "$GRUB_BACKGROUND" in | |
*.png) reader=png ;; | |
*.tga) reader=tga ;; | |
*.jpg|*.jpeg) reader=jpeg ;; | |
*) gettext "Unsupported image format" >&2; echo >&2; exit 1 ;; | |
esac | |
prepare_grub_to_access_device `${grub_probe} --target=device "$GRUB_BACKGROUND"` | |
cat << EOF | |
insmod $reader | |
background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"` | |
EOF | |
fi | |
fi | |
make_timeout () | |
{ | |
cat << EOF | |
if [ "\${recordfail}" = 1 ] ; then | |
set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30} | |
else | |
EOF | |
if [ "x${3}" != "x" ] ; then | |
timeout="${2}" | |
style="${3}" | |
elif [ "x${1}" != "x" ] && \ | |
([ "$quick_boot" = 1 ] || [ "x${1}" != "x0" ]) ; then | |
# Handle the deprecated GRUB_HIDDEN_TIMEOUT scheme. | |
timeout="${1}" | |
if [ "x${2}" != "x0" ] ; then | |
grub_warn "$(gettext "Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.")" | |
fi | |
if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then | |
style="hidden" | |
verbose= | |
else | |
style="countdown" | |
verbose=" --verbose" | |
fi | |
else | |
# No hidden timeout, so treat as GRUB_TIMEOUT_STYLE=menu | |
timeout="${2}" | |
style="menu" | |
fi | |
cat << EOF | |
if [ x\$feature_timeout_style = xy ] ; then | |
set timeout_style=${style} | |
set timeout=${timeout} | |
EOF | |
if [ "x${style}" = "xmenu" ] ; then | |
cat << EOF | |
# Fallback normal timeout code in case the timeout_style feature is | |
# unavailable. | |
else | |
set timeout=${timeout} | |
EOF | |
else | |
cat << EOF | |
# Fallback hidden-timeout code in case the timeout_style feature is | |
# unavailable. | |
elif sleep${verbose} --interruptible ${timeout} ; then | |
set timeout=0 | |
EOF | |
fi | |
cat << EOF | |
fi | |
fi | |
EOF | |
} | |
if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then | |
cat <<EOF | |
if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then | |
EOF | |
make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_STYLE_BUTTON}" | |
echo else | |
make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}" "${GRUB_TIMEOUT_STYLE}" | |
echo fi | |
else | |
make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}" "${GRUB_TIMEOUT_STYLE}" | |
fi | |
if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ] && [ "x$GRUB_BUTTON_CMOS_CLEAN" = "xyes" ]; then | |
cat <<EOF | |
cmosclean $GRUB_BUTTON_CMOS_ADDRESS | |
EOF | |
fi | |
# Play an initial tune | |
if [ "x${GRUB_INIT_TUNE}" != "x" ] ; then | |
echo "play ${GRUB_INIT_TUNE}" | |
fi | |
if [ "x${GRUB_BADRAM}" != "x" ] ; then | |
echo "badram ${GRUB_BADRAM}" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment