Commit Graph

20 Commits

Author SHA1 Message Date
Leah Rowe 37817e6bcb GRUB: insert only 1 keymap per board, in cbfs
There is no need to add multiple keymap files, because
GRUB can load keymaps from CBFS. The current build logic
is designed to avoid building multiple GRUB binaries,
which are expensive computationally because each one
would then have to be compressed for each board.

This patch provides the best of both worlds: less space
used in flash like in the old lbmk design (1 keymap per
board), but retaining the current build speeds and therefore
not re-introducing the slowness of lbmk's previous GRUB
build logic.

The grub.cfg file has been modified, accordingly. It now
only loads a keymap.gkb file from CBFS, by default. It does
this, only if that file exists; if not, GRUB already defaults
to US Qwerty layout anyway.

ALSO: compress all keymap gkb files with xz -6

GRUB automatically decompresses files when accessed.
This results in about 2KB of flash space saved in CBFS.

Here is real-world data, showing the increased flash space:

< fallback/payload               0x3eb80    simple elf     548821 none
< keymap.cfg                     0xc4bc0    raw                16 none
< (empty)                        0xc4c00    null         11633316 none
---
> fallback/payload               0x3eb80    simple elf     546787 none
> keymap.gkb                     0xc43c0    raw               344 none
> (empty)                        0xc4540    null         11635044 none

This was taken by diffing the cbfstool "print" output,
both before and after. The *after* result is with this change.
11633316. In this example, 1728 bytes have been saved. Therefore,
with compression taken into account, this patch saves about 1.7KB
of space in CBFS.

This change means that lbmk can now scale to support hundreds
of keymaps, without increasing the amount of flash space used,
in each given image. Since the keymap files are compressed in
lbmk.git, in advance, we spend no additional time on compression
at build time. The resulting change in build speed in negligible.

Adding your own keymap.gkb file was already possible, for changing
the keymap in libreboot images, if you didn't want to change the
memdisk (and thus re-compile grub.elf). Now, this is the default
behaviour, and the only way to do it. It's much more efficient.

The original keymap files can be restored, by running unxz.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-18 00:27:33 +00:00
Leah Rowe b9f69f26c5 grub.cfg syslinux: support scanning /boot/EFI/
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-18 10:00:23 +00:00
Leah Rowe 766bb46c5f grub.cfg: fix path
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-18 09:59:08 +00:00
Leah Rowe 430918ee78 grub.cfg: handle btrfs subvols for extlinux.conf
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-18 08:31:38 +00:00
Leah Rowe d74c6c7114 grub.cfg: scan extlinux/extlinux.conf
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-18 08:16:21 +00:00
Leah Rowe f1d6c14367 grub.cfg: support grub and extlinux on ata/ahci
there are special menuentries just for loading
configs, without handling luks, lvm and whatnot.
it's intended for users of cd/dvd drives. well,
now we support both extlinux and grub, with this patch.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-18 08:14:06 +00:00
Leah Rowe 6db94c1a11 grub.cfg: merge isolinux/grub usb menuentries
many modern distros use grub in their installer images,
so scan for grub.cfg first.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-18 08:05:37 +00:00
Leah Rowe c4544e04bb grub.cfg: handle extlinux in the default menuentry
isolinux/syslinux/extlinux config files should all work,
using the syslinux parser function in grub

the current behaviour is to only search for grub.cfg,
so extlinux users can't use the default libreboot setup.
with this change, their systems should hopefully work.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-18 07:58:31 +00:00
Leah Rowe eaa1341b9e grub.cfg syslinux: support ESP and extlinux.conf
the so-called EFI System Partition (ESP) is used
on many UEFI-based setups. some users may be
migrating to libreboot, so let's support it.

on BIOS setups, it would be e.g.
/boot/syslinux/syslinux.conf

on UEFI setups, it would be e.g.

/boot/EFI/syslinux/syslinux.conf

additionally, support scanning for extlinux.conf

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-18 07:46:14 +00:00
Leah Rowe b817001e29 grub.cfg: don't boot linux without a grub.cfg
the fallback code in the main menuentry is
potentially unsafe, depending on user config.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-18 06:45:56 +00:00
Leah Rowe 2d6e5ca4c4 grub.cfg: scan lvm volumes last
lvm/* is slow to resolve in grub, on some machines,
because grub enumeration is very slow in general.

however, many people will install distros with any
number of lvm configurations, so we should try to
support them.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-18 05:11:06 +00:00
Leah Rowe 49eed9ac46 Revert "grub.cfg: try luks2/crypto-lvm before non-crypto"
This reverts commit 20389655e4.

If the user actually has encryption, but has /boot unencrypted,
this will considerably slow down the boot, so the patch has
been reverted.

The patch was originally meant to favour encrypted /boot
setups, but the old behaviour also still works there.
2023-12-18 04:17:05 +00:00
Leah Rowe 20389655e4 grub.cfg: try luks2/crypto-lvm before non-crypto
when the user sets up an encrypted machine, grub.cfg
defaults to non-encrypted setups if found, first

this patch reverses the order, deferring to
non-encrypted installations only when encrypted ones
are unavailable

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-12-18 02:55:25 +00:00
semigel ababbc09f0 Update config/grub/config/grub.cfg
grub.cfg: add BTRFS subvol support
2023-12-18 00:56:48 +00:00
Leah Rowe ed27ab8a2b grub.cfg: use better description in menu entries
more user friendly, especially the GRUB (USB) one

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-11-01 07:24:08 +00:00
Leah Rowe a06c38ce15 change default volname in grub.cfg
it's been a while since we did encrypted /boot
and the current name sucks.

it's unlikely that anyone still uses it, but
people will soon

change the default assumed lvm name to grubcrypt
and stick to that.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-21 00:02:15 +01:00
Leah Rowe 2e60e11798 grub.cfg: disable the pager
The pager causes trouble in some cases, where the user has
to press enter at boot time depending on the configuration.

Interactive use is one thing, but we should leave this
disabled for smoother experience. If the user *wishes* to
use the shell, they can always just enable the pager
themselves by doing:

set pager=1

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-10-02 22:03:10 +01:00
Leah Rowe 208620198c Update email address for Leah Rowe copyrights
also, some of them were out of date; years now updated.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-09-25 02:27:26 +01:00
Leah Rowe a69e8548b3 set grub.cfg timeout to 5s (10 on some boards)
target.cfg can now specify e.g.

grub_timeout=20

this would then be inserted as timeout.cfg in cbfs,
containing the instruction:
set timeout=20

HP laptops need a bit of extra time, due to the delay
caused by the EC bug workaround deployed in GRUB

desktops in general need extra time. this too is set to
10s, like the HP laptops.

only insert timeout.cfg if actually needed (declared in
target.cfg), otherwise grub.cfg will default to 5s

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-09-09 00:01:22 +01:00
Leah Rowe da3c9bb3c5 merge config/ and resources/
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-09-04 02:47:25 +01:00