]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
util/grub.d/30_os-prober.in: Conditionally show or hide chain and efi menu entries
authorPascal Hambourg <pascal@plouf.fr.eu.org>
Mon, 24 Feb 2025 17:10:45 +0000 (18:10 +0100)
committerDaniel Kiper <daniel.kiper@oracle.com>
Wed, 5 Mar 2025 10:53:33 +0000 (11:53 +0100)
On systems which support multiple boot platforms such as BIOS and
EFI, it makes no sense to show menu entries which are not supported
by the current boot platform. Menu entries generated from os-prober
"chain" boot type use boot sector chainloading which is supported
on PC BIOS platform only.

Show "chain" menu entries only if boot platform is PC BIOS.
Show "efi" menu entries only if boot platform is EFI.

This is aimed to allow os-prober to report both EFI and PC BIOS
boot loaders regardless of the current boot mode on x86 systems
which support both EFI and legacy BIOS boot, in order to generate
a config file which can be used with either BIOS or EFI boot.

Signed-off-by: Pascal Hambourg <pascal@plouf.fr.eu.org>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
util/grub.d/30_os-prober.in

index 3947477598615c5fa0a332dc6d27f637d5dcb3f5..5d8d7529249fa70dc6353f1d335b7cbb20ef824d 100644 (file)
@@ -162,6 +162,8 @@ for OS in ${OSPROBED} ; do
 
          onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
       cat << EOF
+# This menu entry is supported only on PC BIOS platforms.
+if [ "\$grub_platform" = "pc" ]; then
 menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' $CLASS --class os \$menuentry_id_option 'osprober-chain-$(grub_get_device_id "${DEVICE}")' {
 EOF
       save_default_entry | grub_add_tab
@@ -186,6 +188,7 @@ EOF
       cat <<EOF
        chainloader +1
 }
+fi
 EOF
     ;;
     efi)
@@ -194,6 +197,8 @@ EOF
        DEVICE=${DEVICE%@*}
        onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
       cat << EOF
+# This menu entry is supported only on EFI platforms.
+if [ "\$grub_platform" = "efi" ]; then
 menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' $CLASS --class os \$menuentry_id_option 'osprober-efi-$(grub_get_device_id "${DEVICE}")' {
 EOF
       save_default_entry | sed -e "s/^/\t/"
@@ -202,6 +207,7 @@ EOF
       cat <<EOF
        chainloader ${EFIPATH}
 }
+fi
 EOF
     ;;
     linux)