[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 02/11] grub.cfg: support ESP, btrfs subvols and extlinux
From: |
Leah Rowe |
Subject: |
[PATCH v3 02/11] grub.cfg: support ESP, btrfs subvols and extlinux |
Date: |
Tue, 16 Jan 2024 15:39:31 +0000 |
From: Leah Rowe <leah@libreboot.org>
This is backported from lbmk at revision:
09bed9a4c3257dbf9b4d59975db0071472ed67eb
In comparison to the GNU Boot configuration, Libreboot's
GRUB configuration provides the following improvements:
* Support for scanning of BTRFS sub volumes, on most setups.
* Support for scanning syslinux and extlinux configs, in
the main "Load Operating System" menuentry. This will make
distros automatically boot in most cases, where they use
extlinux/syslinux instead of GRUB.
* Support for scanning EFI System Partitions, when scanning
for GRUB, Syslinux and Extlinux configuration files. This
adds support for UEFI-based distro installations; the GNU
Boot supported mainboards are all BIOS-based, but the user
may have transferred an HDD/SSD from another system, where
UEFI was used. On UEFI-based systems, there is a special FAT
partition called the ESP (EFI System Partition) that boot
loaders and configurations are installed to.
* The ESP support is also extended to USB-based booting. This
increases support out of the box for more distro installers,
many of which are now UEFI-only, or only well-tested for UEFI.
Many distros today now use *GRUB* (built for UEFI) on their
install media, but these can also be used on bare metal setups
such as GNU Boot's GRUB payload.
* The fallback entry was removed, that assumed /dev/sda1 as
the root partition; where scanning of GRUB configurations
failed, GNU Boot GRUB would try this fallback logic, but such
logic may in some cases result in the system being booted,
in such a way that *breaks* the user's distro, so it's better
that GNU Boot only scan for GRUB/Extlinux/Syslinux configs
and return with an error if none are found. This is also how
Libreboot does it nowadays.
With this, and the previous patches that I've committed, GNU
Boot's GRUB setup should now be in feature parity with Lbreboot.
Signed-off-by: Leah Rowe <leah@libreboot.org>
---
resources/grub/config/grub.cfg | 77 +++++++++++++++-------------------
1 file changed, 34 insertions(+), 43 deletions(-)
diff --git a/resources/grub/config/grub.cfg b/resources/grub/config/grub.cfg
index 4f5177b..6e87b67 100644
--- a/resources/grub/config/grub.cfg
+++ b/resources/grub/config/grub.cfg
@@ -33,7 +33,9 @@ set grub_scan_disk="both"
keymap usqwerty
function try_user_config {
set root="${1}"
- for dir in boot grub grub2 boot/grub boot/grub2; do
+
+ # The @/... entries are for cases where the BTRFS filesystem is being
used
+ for dir in boot grub grub2 boot/grub boot/grub2 @/boot @/grub @/grub2
@/boot/grub @/boot/grub2; do
for name in '' gnuboot_ osboot_ autoboot_ coreboot_; do
if [ -f /"${dir}"/"${name}"grub.cfg ]; then
unset superusers
@@ -56,16 +58,20 @@ function search_grub {
function try_isolinux_config {
set root="${1}"
- for dir in '' /boot; do
+ for dir in '' /boot /EFI /boot/EFI /@ /@/boot /@/boot/EFI /@/EFI; do
if [ -f "${dir}"/isolinux/isolinux.cfg ]; then
syslinux_configfile -i "${dir}"/isolinux/isolinux.cfg
elif [ -f "${dir}"/syslinux/syslinux.cfg ]; then
syslinux_configfile -s "${dir}"/syslinux/syslinux.cfg
+ elif [ -f "${dir}"/syslinux/extlinux.conf ]; then
+ syslinux_configfile -s "${dir}"/syslinux/extlinux.conf
+ elif [ -f "${dir}"/extlinux/extlinux.conf ]; then
+ syslinux_configfile -s "${dir}"/extlinux/extlinux.conf
fi
done
}
function search_isolinux {
- echo "\nAttempting to parse isolinux/syslinux config from '${1}'
devices"
+ echo "\nAttempting to parse iso/sys/extlinux config from '${1}' devices"
for i in 0 1 2 3 4 5 6 7 8 9 10 11; do
for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20;
do
try_isolinux_config "(${1}${i},${part})"
@@ -75,20 +81,28 @@ function search_isolinux {
done
echo # Insert newline
}
+function try_bootcfg {
+ try_user_config "${1}"
+ try_isolinux_config "${1}"
+}
+function search_bootcfg {
+ search_grub "${1}"
+ search_isolinux "${1}"
+}
menuentry 'Load Operating System (incl. fully encrypted disks) [o]'
--hotkey='o' {
if [ "${grub_scan_disk}" != "ata" ]; then
- search_grub ahci
+ search_bootcfg ahci
fi
if [ "${grub_scan_disk}" != "ahci" ]; then
- search_grub ata
+ search_bootcfg ata
fi
# grub device enumeration is very slow, so checks are hardcoded
# TODO: add more strings, based on what distros set up when
# the user select auto-partitioning on those installers
- lvmvol="lvm/matrix-bootvol lvm/matrix-rootvol"
+ lvmvol="lvm/grubcrypt-bootvol lvm/grubcrypt-rootvol"
raidvol="md/0 md/1 md/2 md/3 md/4 md/5 md/6 md/7 md/8 md/9"
@@ -96,7 +110,7 @@ menuentry 'Load Operating System (incl. fully encrypted
disks) [o]' --hotkey='o
# TODO: optimize grub itself, and use */? here for everything
for vol in ${lvmvol} ${raidvol} ; do
- try_user_config "${vol}"
+ try_bootcfg "${vol}"
done
unset ahcidev
@@ -122,58 +136,35 @@ menuentry 'Load Operating System (incl. fully encrypted
disks) [o]' --hotkey='o
# after cryptomount, lvm volumes might be available
for vol in ${lvmvol}; do
- try_user_config "${vol}"
+ try_bootcfg "${vol}"
done
- search_grub crypto
-
- if [ "${grub_scan_disk}" != "ata" ]; then
- # Last resort, if all else fails
- set root=ahci0,1
- for p in / /boot/; do
- if [ -f "${p}vmlinuz" ]; then
- linux ${p}vmlinuz root=/dev/sda1 rw
- if [ -f "${p}initrd.img" ]; then
- initrd ${p}initrd.img
- fi
- fi
- done
- fi
+ search_bootcfg crypto
- if [ "${grub_scan_disk}" != "ahci" ]; then
- # Last resort (for setups that use IDE instead of SATA)
- set root=ata0,1
- for p in / /boot/; do
- if [ -f "${p}vmlinuz" ]; then
- linux ${p}vmlinuz root=/dev/sda1 rw
- if [ -f "${p}initrd.img" ]; then
- initrd ${p}initrd.img
- fi
- fi
- done
- fi
+ for vol in lvm/* ; do
+ try_bootcfg "${vol}"
+ done
true # Prevent pager requiring to accept each line instead of whole
screen
}
-menuentry 'Search ISOLINUX menu (AHCI) [a]' --hotkey='a' {
- search_isolinux ahci
+menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on USB [s]'
--hotkey='s' {
+ search_bootcfg usb
}
-menuentry 'Search ISOLINUX menu (USB) [u]' --hotkey='u' {
- search_isolinux usb
+menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on AHCI [a]'
--hotkey='a' {
+ search_bootcfg ahci
}
-menuentry 'Search ISOLINUX menu (ATA/IDE) [d]' --hotkey='d' {
- search_isolinux ata
+menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on ATA/IDE [d]'
--hotkey='d' {
+ search_bootcfg ahci
}
+if [ -f (cbfsdisk)/grubtest.cfg ]; then
menuentry 'Load test configuration (grubtest.cfg) inside of CBFS [t]'
--hotkey='t' {
set root='(cbfsdisk)'
if [ -f /grubtest.cfg ]; then
configfile /grubtest.cfg
fi
}
-menuentry 'Search for GRUB2 configuration on external media [s]' --hotkey='s'
{
- search_grub usb
-}
+fi
if [ -f (cbfsdisk)/seabios.elf ]; then
menuentry 'Load SeaBIOS (payload) [b]' --hotkey='b' {
set root='cbfsdisk'
--
2.39.2
- [PATCH v3 01/11] crossgcc/default: fix build errors on host gcc 13.x, Leah Rowe, 2024/01/16
- [PATCH v3 05/11] build/module/grub: disable -Werror on builds, Leah Rowe, 2024/01/16
- [PATCH v3 04/11] cache cbfstool and ifdtool builds, Leah Rowe, 2024/01/16
- [PATCH v3 03/11] build/boot/roms: skip building gnat on fam15h, Leah Rowe, 2024/01/16
- [PATCH v3 07/11] GRUB: Force scancode set 2 with translation, Leah Rowe, 2024/01/16
- [PATCH v3 02/11] grub.cfg: support ESP, btrfs subvols and extlinux,
Leah Rowe <=
- [PATCH v3 10/11] add .log files to .gitignore, Leah Rowe, 2024/01/16
- [PATCH v3 08/11] GRUB: Don't spew "Unknown key 0xFF", Leah Rowe, 2024/01/16
- [PATCH v3 06/11] coreboot/fam15h: fix binutils build error on gcc13, Leah Rowe, 2024/01/16
- [PATCH v3 09/11] NEW MAINBOARD: Dell Latitude E6400, Leah Rowe, 2024/01/16
- [PATCH v3 11/11] Add support for google gru_bob and gru_kevin, Leah Rowe, 2024/01/16