Bug#960565: grub-common: update-grub ignores os-prober when not told to do so (no automatic dual boot with FreeBSD)
Leandro Doctors
ldoctors at gmail.com
Thu May 14 02:16:19 BST 2020
Package: grub-common
Version: 2.04-7
Severity: important
Dear Maintainer,
I am trying to dual-boot Debian and FreeBSD. It seems update-grub ignores os-
prober when adding options to the boot menu.
FreeBSD is correctly detected by os-prober.
```
% sudo update-grub
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-5.6.0-1-amd64
Found initrd image: /boot/initrd.img-5.6.0-1-amd64
Found FreeBSD 13.0-CURRENT on /dev/sda6
Adding boot menu entry for EFI firmware configuration
done
```
However, even after a 'grub-install', there is no FreeBSD menu entry in GRUB...
I have already checked /etc/default/grub, and there is no mention to
"GRUB_DISABLE_OS_PROBER"...
```
% more /etc/default/grub |grep DISABLE
#GRUB_DISABLE_LINUX_UUID=true
#GRUB_DISABLE_RECOVERY="true"
```
I have already read
https://wiki.debian.org/Grub#Dual_Boot_FreeBSD_with_GPT_partition.
However, I think that the manual modification of
`/etc/grub.d/40_custom` specified there implies an unnecessary
nuisance...
Shouldn't dual boot functionality work 'out-of-the-box' for any
detected other system? For instance, when a Microsoft Windows system is
detected, it is added by default to the GRUB menu. Why not applying the same
logic to FreeBSD? (or any other system)
Thank you for considering my request, dear Maintainer.
Sincerely,
Leandro Doctors
-- Package-specific info:
*********************** BEGIN /proc/mounts
/dev/mapper/debian-root / ext4 rw,relatime,errors=remount-ro 0 0
/dev/sda2 /boot ext4 rw,relatime 0 0
/dev/sda4 /home ext4 rw,relatime 0 0
/dev/sda1 /boot/efi vfat
rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro
0 0
/dev/mapper/debian-tmp /tmp ext4 rw,relatime 0 0
/dev/mapper/debian-var /var ext4 rw,relatime 0 0
*********************** END /proc/mounts
*********************** BEGIN /boot/grub/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="0"
fi
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
}
function load_video {
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
}
if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod part_gpt
insmod lvm
insmod ext2
set root='lvmid/CE2WTY-k9fS-EGVC-HXzs-ikxS-yHeC-vwOV0w/gSSeTD-j1Tk-d1EP-nDMI-8u4p-mB9s-ie4m3m'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root
--hint='lvmid/CE2WTY-k9fS-EGVC-HXzs-ikxS-yHeC-vwOV0w/gSSeTD-j1Tk-d1EP-nDMI-8u4p-mB9s-ie4m3m'
0bf5ca7c-3b95-4e98-9da0-b3c1582c1398
else
search --no-floppy --fs-uuid --set=root 0bf5ca7c-3b95-4e98-9da0-b3c1582c1398
fi
font="/usr/share/grub/unicode.pf2"
fi
if loadfont $font ; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=en_IE
insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
set timeout=30
else
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=2
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=2
fi
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
insmod part_gpt
insmod lvm
insmod ext2
set root='lvmid/CE2WTY-k9fS-EGVC-HXzs-ikxS-yHeC-vwOV0w/gSSeTD-j1Tk-d1EP-nDMI-8u4p-mB9s-ie4m3m'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root
--hint='lvmid/CE2WTY-k9fS-EGVC-HXzs-ikxS-yHeC-vwOV0w/gSSeTD-j1Tk-d1EP-nDMI-8u4p-mB9s-ie4m3m'
0bf5ca7c-3b95-4e98-9da0-b3c1582c1398
else
search --no-floppy --fs-uuid --set=root 0bf5ca7c-3b95-4e98-9da0-b3c1582c1398
fi
insmod png
if background_image
/usr/share/desktop-base/futureprototype-theme/grub/grub-16x9.png; then
set color_normal=white/black
set color_highlight=black/white
else
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
fi
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
set gfxpayload="${1}"
}
set linux_gfx_mode=
export linux_gfx_mode
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class
gnu --class os $menuentry_id_option
'gnulinux-simple-0bf5ca7c-3b95-4e98-9da0-b3c1582c1398' {
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2
--hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2
7d7fca75-1d45-49b4-9258-99dedfb49fc6
else
search --no-floppy --fs-uuid --set=root
7d7fca75-1d45-49b4-9258-99dedfb49fc6
fi
echo 'Loading Linux 5.6.0-1-amd64 ...'
linux /vmlinuz-5.6.0-1-amd64 root=/dev/mapper/debian-root ro quiet
echo 'Loading initial ramdisk ...'
initrd /initrd.img-5.6.0-1-amd64
}
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option
'gnulinux-advanced-0bf5ca7c-3b95-4e98-9da0-b3c1582c1398' {
menuentry 'Debian GNU/Linux, with Linux 5.6.0-1-amd64' --class
debian --class gnu-linux --class gnu --class os $menuentry_id_option
'gnulinux-5.6.0-1-amd64-advanced-0bf5ca7c-3b95-4e98-9da0-b3c1582c1398'
{
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2
--hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2
7d7fca75-1d45-49b4-9258-99dedfb49fc6
else
search --no-floppy --fs-uuid --set=root
7d7fca75-1d45-49b4-9258-99dedfb49fc6
fi
echo 'Loading Linux 5.6.0-1-amd64 ...'
linux /vmlinuz-5.6.0-1-amd64 root=/dev/mapper/debian-root ro quiet
echo 'Loading initial ramdisk ...'
initrd /initrd.img-5.6.0-1-amd64
}
menuentry 'Debian GNU/Linux, with Linux 5.6.0-1-amd64 (recovery
mode)' --class debian --class gnu-linux --class gnu --class os
$menuentry_id_option
'gnulinux-5.6.0-1-amd64-recovery-0bf5ca7c-3b95-4e98-9da0-b3c1582c1398'
{
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2
--hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2
7d7fca75-1d45-49b4-9258-99dedfb49fc6
else
search --no-floppy --fs-uuid --set=root
7d7fca75-1d45-49b4-9258-99dedfb49fc6
fi
echo 'Loading Linux 5.6.0-1-amd64 ...'
linux /vmlinuz-5.6.0-1-amd64 root=/dev/mapper/debian-root ro single
echo 'Loading initial ramdisk ...'
initrd /initrd.img-5.6.0-1-amd64
}
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/30_uefi-firmware ###
menuentry 'System setup' $menuentry_id_option 'uefi-firmware' {
fwsetup
}
### END /etc/grub.d/30_uefi-firmware ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
*********************** END /boot/grub/grub.cfg
*********************** BEGIN /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5]
[raid4] [raid10]
unused devices: <none>
*********************** END /proc/mdstat
*********************** BEGIN LVM
*********************** END LVM
*********************** BEGIN /dev/disk/by-id
total 0
lrwxrwxrwx 1 root root 9 May 13 21:52
ata-SAMSUNG_SSD_SM841N_mSATA_512GB_S1JZNYAF608876 -> ../../sda
lrwxrwxrwx 1 root root 10 May 13 21:52
ata-SAMSUNG_SSD_SM841N_mSATA_512GB_S1JZNYAF608876-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 13 21:52
ata-SAMSUNG_SSD_SM841N_mSATA_512GB_S1JZNYAF608876-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 13 21:52
ata-SAMSUNG_SSD_SM841N_mSATA_512GB_S1JZNYAF608876-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 13 21:52
ata-SAMSUNG_SSD_SM841N_mSATA_512GB_S1JZNYAF608876-part4 -> ../../sda4
lrwxrwxrwx 1 root root 10 May 13 21:52
ata-SAMSUNG_SSD_SM841N_mSATA_512GB_S1JZNYAF608876-part5 -> ../../sda5
lrwxrwxrwx 1 root root 10 May 13 21:52
ata-SAMSUNG_SSD_SM841N_mSATA_512GB_S1JZNYAF608876-part6 -> ../../sda6
lrwxrwxrwx 1 root root 10 May 13 21:52
ata-SAMSUNG_SSD_SM841N_mSATA_512GB_S1JZNYAF608876-part7 -> ../../sda7
lrwxrwxrwx 1 root root 10 May 13 21:52 dm-name-debian-root -> ../../dm-0
lrwxrwxrwx 1 root root 10 May 13 21:52 dm-name-debian-swap -> ../../dm-1
lrwxrwxrwx 1 root root 10 May 13 21:52 dm-name-debian-tmp -> ../../dm-3
lrwxrwxrwx 1 root root 10 May 13 21:52 dm-name-debian-var -> ../../dm-2
lrwxrwxrwx 1 root root 10 May 13 21:52
dm-uuid-LVM-CE2WTYk9fSEGVCHXzsikxSyHeCvwOV0wDnTVKks4vL4TcpR5qBsbNoxa9VP2opSE
-> ../../dm-1
lrwxrwxrwx 1 root root 10 May 13 21:52
dm-uuid-LVM-CE2WTYk9fSEGVCHXzsikxSyHeCvwOV0wad7KYEf105PCJRp9jOCUzUnobsca8yQV
-> ../../dm-2
lrwxrwxrwx 1 root root 10 May 13 21:52
dm-uuid-LVM-CE2WTYk9fSEGVCHXzsikxSyHeCvwOV0wc34TtU78c5vJdl7oNQJ9F2mYXBrfLAHQ
-> ../../dm-3
lrwxrwxrwx 1 root root 10 May 13 21:52
dm-uuid-LVM-CE2WTYk9fSEGVCHXzsikxSyHeCvwOV0wgSSeTDj1Tkd1EPnDMI8u4pmB9sie4m3m
-> ../../dm-0
lrwxrwxrwx 1 root root 10 May 13 21:52
lvm-pv-uuid-MahmDQ-frLo-hE3P-eiQC-xQZo-3eDP-rSexy2 -> ../../sda3
lrwxrwxrwx 1 root root 9 May 13 21:52 wwn-0x50025385001fdd15 -> ../../sda
lrwxrwxrwx 1 root root 10 May 13 21:52 wwn-0x50025385001fdd15-part1 ->
../../sda1
lrwxrwxrwx 1 root root 10 May 13 21:52 wwn-0x50025385001fdd15-part2 ->
../../sda2
lrwxrwxrwx 1 root root 10 May 13 21:52 wwn-0x50025385001fdd15-part3 ->
../../sda3
lrwxrwxrwx 1 root root 10 May 13 21:52 wwn-0x50025385001fdd15-part4 ->
../../sda4
lrwxrwxrwx 1 root root 10 May 13 21:52 wwn-0x50025385001fdd15-part5 ->
../../sda5
lrwxrwxrwx 1 root root 10 May 13 21:52 wwn-0x50025385001fdd15-part6 ->
../../sda6
lrwxrwxrwx 1 root root 10 May 13 21:52 wwn-0x50025385001fdd15-part7 ->
../../sda7
*********************** END /dev/disk/by-id
*********************** BEGIN /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 10 May 13 21:52
0bf5ca7c-3b95-4e98-9da0-b3c1582c1398 -> ../../dm-0
lrwxrwxrwx 1 root root 10 May 13 21:52
5b94c943-c68d-4a06-b735-da85645692a4 -> ../../sda4
lrwxrwxrwx 1 root root 10 May 13 21:52 5ebc8d2bee22b6c3 -> ../../sda6
lrwxrwxrwx 1 root root 10 May 13 21:52
765a9a13-5844-443b-992d-90f6787cb8b4 -> ../../dm-1
lrwxrwxrwx 1 root root 10 May 13 21:52
7d7fca75-1d45-49b4-9258-99dedfb49fc6 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 13 21:52
92f21c45-9dcd-4377-acd5-8c6a40dabd30 -> ../../dm-3
lrwxrwxrwx 1 root root 10 May 13 21:52 C50C-E0C8 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 13 21:52 F221-07F2 -> ../../sda5
lrwxrwxrwx 1 root root 10 May 13 21:52
e7b117d0-b915-47dc-a9ff-d7bad647ea96 -> ../../dm-2
*********************** END /dev/disk/by-uuid
-- System Information:
Debian Release: bullseye/sid
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 5.6.0-1-amd64 (SMP w/8 CPU cores)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE,
TAINT_UNSIGNED_MODULE
Locale: LANG=en_IE.UTF-8, LC_CTYPE=en_IE.UTF-8 (charmap=UTF-8),
LANGUAGE=en_IE:en (charmap=UTF-8)
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages grub-common depends on:
ii gettext-base 0.19.8.1-10
ii libc6 2.30-7
ii libdevmapper1.02.1 2:1.02.167-1+b1
ii libefiboot1 37-2
ii libefivar1 37-2
ii libfreetype6 2.10.1-2
ii libfuse2 2.9.9-3
ii liblzma5 5.2.4-1+b1
Versions of packages grub-common recommends:
ii os-prober 1.77
Versions of packages grub-common suggests:
ii console-setup 1.195
ii desktop-base 10.0.3
pn grub-emu <none>
pn multiboot-doc <none>
pn xorriso <none>
-- Configuration Files:
/etc/grub.d/00_header changed:
set -e
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="0"
export TEXTDOMAIN=grub
export TEXTDOMAINDIR="${datarootdir}/locale"
. "$pkgdatadir/grub-mkconfig_lib"
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_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 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
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
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 [ "$recordfail_broken" = 1 ]; then
cat << EOF
if [ \$grub_platform = efi ]; then
set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30}
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
if [ "x${GRUB_INIT_TUNE}" != "x" ] ; then
echo "play ${GRUB_INIT_TUNE}"
fi
if [ "x${GRUB_BADRAM}" != "x" ] ; then
echo "badram ${GRUB_BADRAM}"
fi
-- no debconf information
More information about the Pkg-grub-devel
mailing list