#! /bin/sh set -e # grub-mkconfig helper script. # Copyright (C) 2012 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 . prefix="/usr" exec_prefix="/usr" datarootdir="/usr/share" export TEXTDOMAIN=grub export TEXTDOMAINDIR="${datarootdir}/locale" . "${datarootdir}/grub/grub-mkconfig_lib" efi_vars_dir=/sys/firmware/efi/vars EFI_GLOBAL_VARIABLE=8be4df61-93ca-11d2-aa0d-00e098032b8c OsIndications="$efi_vars_dir/OsIndicationsSupported-$EFI_GLOBAL_VARIABLE/data" if [ -e "$OsIndications" ] && \ [ "$(( $(printf 0x%x \'"$(cat $OsIndications | cut -b1)") & 1 ))" = 1 ]; then LABEL="System setup" gettext_printf "Adding boot menu entry for EFI firmware configuration\n" >&2 onstr="$(gettext_printf "(on %s)" "${DEVICE}")" cat << EOF menuentry '$LABEL' \$menuentry_id_option 'uefi-firmware' { fwsetup } EOF fi #See for EFI present if [ -d /sys/firmware/efi ]; then . "/usr/share/grub/grub-mkconfig_lib" #See for Windows EFI string in EFI BIOS WINDOWS_EFI=$(/usr/sbin/efibootmgr -v | grep -E -m 1 '(WINDOWS|Windows Boot Manager)' | sed 's/.*\(HD([^()]*)File([^()]*)\).*/\1/i') if [ -z "$WINDOWS_EFI" ]; then exit 0 fi WIN_EFI_PATH_LINUX=/EFI/Microsoft/Boot/bootmgfw.efi #Determine EFI UUID WIN_EFI_UUID=$(grub2-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi) ESP_SEARCH_HINTS=$(grub2-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi) cat << EOF menuentry "Windows Boot Manager" { EOF save_default_entry | sed -e "s/^/ /" cat << EOF insmod part_gpt insmod fat insmod search_fs_uuid insmod chain search --fs-uuid --set=root ${ESP_SEARCH_HINTS} ${WIN_EFI_UUID} chainloader $WIN_EFI_PATH_LINUX } EOF fi