Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /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
Add Comment
Please, Sign In to add comment