123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448 |
- #! /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"
- . "$pkgdatadir/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
- cat <<EOF
- if [ "\${initrdfail}" = 2 ]; then
- set initrdfail=
- elif [ "\${initrdfail}" = 1 ]; then
- set next_entry="\${prev_entry}"
- set prev_entry=
- save_env prev_entry
- if [ "\${next_entry}" ]; then
- set initrdfail=2
- fi
- 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
- cat <<"EOF"
- function initrdfail {
- if [ -n "${have_grubenv}" ]; then if [ -n "${partuuid}" ]; then
- if [ -z "${initrdfail}" ]; then
- set initrdfail=1
- if [ -n "${boot_once}" ]; then
- set prev_entry="${default}"
- save_env prev_entry
- fi
- fi
- save_env initrdfail
- fi; 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 1
- ;;
- 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 1
- ;;
- esac
- cat <<EOF
- if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
- EOF
- }
- if ! check_writable; then
- recordfail_broken=1
- fi
- 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:-3}
- 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 [ "$recordfail_broken" = 1 ]; then
- cat << EOF
- if [ \$grub_platform = efi ]; then
- set timeout=${GRUB_RECORDFAIL_TIMEOUT:-3}
- if [ x\$feature_timeout_style = xy ] ; then
- set timeout_style=menu
- fi
- fi
- EOF
- fi
- }
- 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
|