gnuboot/resources/grub/config/grub.cfg

233 lines
6.0 KiB
INI
Raw Normal View History

# shellcheck disable=SC2148 # Does not check for #!
# Copyright (C) 2013, 2024 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
grub.cfg: Add copyright header. The GNU Boot project merged several repositories in its main git repository, each with their separate histories. So far we have: - the documentation/website that came from Libreboot - the documentation/website pictures that also came from Libreboot - the build system that also came from Libreboot (it's called lbmk there). - some website autotools build system that was made from scratch by me. The grub.cfg we use comes from the build system repository (lbmk). I extracted the copyrights from the git commits of this repository. However the first commit of lbmk (which we also have in our main GNU Boot repository) is the following: commit 89517ed6b9e89321e1387ed8f534d7f080ffdf57 Author: [Leah Rowe] Date: [2021] libreboot! this is forked from the "libre" branch in osboot, which is itself a libre, deblobbed fork of osboot, a blobbed up fork of libreboot libreboot needed to be purged clean. this is the new libreboot development repository. the old one has been abandoned So I had to continue and look at the libre branch of osboot and extract the copyrights from its commits as well. Then I downloaded osbmk (https://notabug.org/osboot/osbmk) and continued to look. And here too we need to go beyond the first commit again, because osbmk is based on 'Libreboot 20160907': commit df76c3eb63dd8f4979d78ca262218eedb93512ed Author: [Leah Rowe] Date: [2020] Fork Libreboot 20160907 build system. Large parts have been re-written. This build system builds ROMs for X230, but they are so far untested. Use at your own risk! I still need to write documentation and do testing. SOON: T60 with ATI GPU We can find Libreboot 20160907 in https://notabug.org/libreboot/obsolete-repository-preserved-for-historical-purposes And then we end up with this commit: commit cee90ae0fce6d6aee8d78969b60c952c8890abd6 Author: [Leah Rowe] Date: [2014] Libreboot release 6 beta 1. Before that Libreboot only had tarball releases and the very first tarball release was based on build scripts/Makefiles made by me, and the git repository having the GRUB configuration can be found in Libreboot 20131212 in X60/build-makefiles. commit 80c37b9093be8325bf9ca8271ae4c6dba8fe81d6 Author: [GNUtoo] Date: [2013] Initial commit. For now we only build the grub payload. Signed-off-by: [GNUtoo] And the intial grub.cfg was made by hand by me. While I was at it I also updated the name/email combination in the copyright header for the ones currently used. Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> Acked-by: Adrien 'neox' Bourmault <neox@gnu.org>
2024-08-26 14:25:31 +02:00
# Copyright (C) 2013-2016, 2020-2021 Leah Rowe <leah@libreboot.org>
# Copyright (C) 2021 Vitali64 <vitali64pmemail@protonmail.com>
# Copyright (C) 2023 Adrien 'neox' Bourmault <neox@gnu.org>
#
# This program 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.
#
# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
# shellcheck disable=SC2121 # warn against set var=val
# shellcheck disable=SC1036 # error: invalid '('
# shellcheck disable=SC1088 # error: invalid uses of parentheses
set prefix=(memdisk)/boot/grub
insmod at_keyboard
insmod usb_keyboard
insmod nativedisk
insmod ehci
insmod ohci
insmod uhci
insmod usb
insmod usbms
insmod regexp
terminal_input --append at_keyboard
2021-12-20 00:15:32 +01:00
terminal_input --append usb_keyboard
terminal_output --append cbmemc
gfxpayload=keep
terminal_output --append gfxterm
if [ -f (cbfsdisk)/background.png ]; then
insmod png
background_image (cbfsdisk)/background.png
elif [ -f (cbfsdisk)/background.jpg ]; then
insmod jpeg
background_image (cbfsdisk)/background.jpg
fi
set default="0"
set timeout=10
set pager=1
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
for name in '' gnuboot_ osboot_ autoboot_ coreboot_; do
if [ -f /"${dir}"/"${name}"grub.cfg ]; then
2021-10-31 18:55:49 +01:00
unset superusers
configfile /"${dir}"/"${name}"grub.cfg
fi
done
done
}
function search_grub {
echo -n "Attempting to load grub.cfg 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_user_config "(${1}${i},${part})"
done
2021-12-29 07:04:42 +01:00
# raw devices e.g. (ahci0) instead of (ahci0,1)
try_user_config "(${1}${i})"
done
echo # Insert newline
}
function try_isolinux_config {
set root="${1}"
for dir in '' /boot; 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
fi
done
}
function search_isolinux {
echo "\nAttempting to parse isolinux/syslinux 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})"
done
2021-12-29 07:04:42 +01:00
# raw devices e.g. (usb0) instead of (usb0,1)
try_isolinux_config "(${1}${i})"
done
echo # Insert newline
}
menuentry 'Load Operating System (incl. fully encrypted disks) [o]' --hotkey='o' {
if [ "${grub_scan_disk}" != "ata" ]; then
search_grub ahci
fi
if [ "${grub_scan_disk}" != "ahci" ]; then
search_grub ata
fi
2021-12-29 07:04:42 +01:00
for device in (*) ; do
resources: grub: config: fix non-working regexp. If we do 'ls' in grub, the LVM volumes looks like that: '(lvm/[...])' and while in certain conditions, the parenthesis are not necessary, in the case of the code that does the regexp, it is required. I vaguely remember having made the original tests with Trisquel 10, and if we select LVM in Trisquel 10 both in the graphical and netinstall installers, it ends up creating a BIOS boot partition (code ef02), an UEFI partition (code ef00) in the case of the graphical installer, and an LVM physical volume. I then migrated the automatic test to Trisquel 11 before sending it. But with the Trisquel 11 automatic test, we end up with a boot partition, so the test will always succeed regardless of weather or not GRUB is capable of booting from LVM partitions. This was also tested on real hardware with Trisquel 10 installed with the graphical installer. The most likely explanation is that the GRUB config file being tested also differed from the one in git, especially because both the automatic tests and the manual tests were tested with both a non-working GRUB configuration and a working one. In addition using the new configuration file on a computer that was using an old Libreboot version probably from around 2016 was made to boot again using this new configuration file, and this looks even more strange. A possible explanation could be that the GRUB version is different, though the given computer is not available for further testing, so it's not possible to confirm that hypothesis. Reported-by: Adrien Bourmault <neox@gnu.org> neox: private bug report and the information on how to fix it. Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> Tested-by: Adrien 'neox' Bourmault <neox@gnu.org> Acked-by: Adrien 'neox' Bourmault <neox@gnu.org>
2024-12-13 14:58:50 +01:00
if regexp "^\(lvm/" "${device}" ; then
try_user_config "${device}"
fi
done
2021-12-29 07:04:42 +01:00
raidvol="md/0 md/1 md/2 md/3 md/4 md/5 md/6 md/7 md/8 md/9"
# in practise, doing multiple redundant checks is perfectly fast and
# TODO: optimize grub itself, and use */? here for everything
for vol in ${raidvol} ; do
try_user_config "${vol}"
done
unset ahcidev
unset atadev
for i in 11 10 9 8 7 6 5 4 3 2 1 0; do
for part in 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1; do
if [ "${grub_scan_disk}" != "ata" ]; then
ahcidev="(ahci${i},${part}) ${ahcidev}"
fi
if [ "${grub_scan_disk}" != "ahci" ]; then
atadev="(ata${i},${part}) ${atadev}"
fi
done
done
set pager=0
echo -n "Attempting to unlock encrypted volumes"
for dev in ${ahcidev} ${atadev} ${raidvol}; do
if cryptomount "${dev}" ; then break ; fi
done
for device in (*) ; do
resources: grub: config: fix non-working regexp. If we do 'ls' in grub, the LVM volumes looks like that: '(lvm/[...])' and while in certain conditions, the parenthesis are not necessary, in the case of the code that does the regexp, it is required. I vaguely remember having made the original tests with Trisquel 10, and if we select LVM in Trisquel 10 both in the graphical and netinstall installers, it ends up creating a BIOS boot partition (code ef02), an UEFI partition (code ef00) in the case of the graphical installer, and an LVM physical volume. I then migrated the automatic test to Trisquel 11 before sending it. But with the Trisquel 11 automatic test, we end up with a boot partition, so the test will always succeed regardless of weather or not GRUB is capable of booting from LVM partitions. This was also tested on real hardware with Trisquel 10 installed with the graphical installer. The most likely explanation is that the GRUB config file being tested also differed from the one in git, especially because both the automatic tests and the manual tests were tested with both a non-working GRUB configuration and a working one. In addition using the new configuration file on a computer that was using an old Libreboot version probably from around 2016 was made to boot again using this new configuration file, and this looks even more strange. A possible explanation could be that the GRUB version is different, though the given computer is not available for further testing, so it's not possible to confirm that hypothesis. Reported-by: Adrien Bourmault <neox@gnu.org> neox: private bug report and the information on how to fix it. Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> Tested-by: Adrien 'neox' Bourmault <neox@gnu.org> Acked-by: Adrien 'neox' Bourmault <neox@gnu.org>
2024-12-13 14:58:50 +01:00
if regexp "^\(lvm/" "${device}" ; then
if cryptomount "${device}" ; then break ; fi
fi
done
set pager=1
2021-12-29 07:04:42 +01:00
echo
2021-12-29 07:04:42 +01:00
# after cryptomount, lvm volumes might be available
for device in (*) ; do
resources: grub: config: fix non-working regexp. If we do 'ls' in grub, the LVM volumes looks like that: '(lvm/[...])' and while in certain conditions, the parenthesis are not necessary, in the case of the code that does the regexp, it is required. I vaguely remember having made the original tests with Trisquel 10, and if we select LVM in Trisquel 10 both in the graphical and netinstall installers, it ends up creating a BIOS boot partition (code ef02), an UEFI partition (code ef00) in the case of the graphical installer, and an LVM physical volume. I then migrated the automatic test to Trisquel 11 before sending it. But with the Trisquel 11 automatic test, we end up with a boot partition, so the test will always succeed regardless of weather or not GRUB is capable of booting from LVM partitions. This was also tested on real hardware with Trisquel 10 installed with the graphical installer. The most likely explanation is that the GRUB config file being tested also differed from the one in git, especially because both the automatic tests and the manual tests were tested with both a non-working GRUB configuration and a working one. In addition using the new configuration file on a computer that was using an old Libreboot version probably from around 2016 was made to boot again using this new configuration file, and this looks even more strange. A possible explanation could be that the GRUB version is different, though the given computer is not available for further testing, so it's not possible to confirm that hypothesis. Reported-by: Adrien Bourmault <neox@gnu.org> neox: private bug report and the information on how to fix it. Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> Tested-by: Adrien 'neox' Bourmault <neox@gnu.org> Acked-by: Adrien 'neox' Bourmault <neox@gnu.org>
2024-12-13 14:58:50 +01:00
if regexp "^\(lvm/" "${device}" ; then
try_user_config "${device}"
fi
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
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
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 ISOLINUX menu (USB) [u]' --hotkey='u' {
search_isolinux usb
}
menuentry 'Search ISOLINUX menu (ATA/IDE) [d]' --hotkey='d' {
search_isolinux ata
}
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
}
if [ -f (cbfsdisk)/seabios.elf ]; then
menuentry 'Load SeaBIOS (payload) [b]' --hotkey='b' {
2021-10-31 18:55:49 +01:00
set root='cbfsdisk'
chainloader /seabios.elf
}
fi
if [ -f (cbfsdisk)/img/grub2 ]; then
menuentry 'Return to SeaBIOS [b]' --hotkey='b' {
2021-10-31 18:55:49 +01:00
set root='cbfsdisk'
chainloader /fallback/payload
}
fi
menuentry 'Poweroff [p]' --hotkey='p' {
halt
}
menuentry 'Reboot [r]' --hotkey='r' {
reboot
}
if [ -f (cbfsdisk)/img/memtest ]; then
menuentry 'Load MemTest86+ [m]' --hotkey='m' {
set root='cbfsdisk'
chainloader /img/memtest
}
fi