configs/*/grub/grub.cfg: search for a .uuid file in /.disk/ and use the volume it's on

Search for `/.disk/%UUID_SEARCH_FILENAME%.uuid` and pass the UUID of the
volume it's on as `archisodevice`. mkarchiso will replace
`%UUID_SEARCH_FILENAME%` with a hardcoded value generated using
`SOURCE_DATE_EPOCH` durring ISO build.

This allows to prepare an UEFI bootable installation medium by simply
copying the directory structure without having to touch `grub.cfg`.

Relying on the volume UUID instead of its LABEL also avoids collisions
of multiple ISOs created in the same month.

Fixes #202
This commit is contained in:
nl6720 2023-01-22 12:17:51 +02:00
parent 317169cd2e
commit 51b90129d5
1 changed files with 7 additions and 7 deletions

View File

@ -20,6 +20,11 @@ if serial --unit=0 --speed=115200; then
terminal_output --append serial
fi
# Search for the ISO volume
regexp --set=1:ARCHISO_HINT '^\(([^)]+)\)' "${cmdpath}"
search --no-floppy --set=root --file '/.disk/%UUID_SEARCH_FILENAME%.uuid' --hint "${ARCHISO_HINT}"
probe --set ARCHISO_UUID --fs-uuid "${root}"
# Set default menu entry
default=archlinux
timeout=15
@ -32,15 +37,13 @@ play 600 988 1 1319 4
menuentry "Arch Linux install medium (x86_64, UEFI)" --class arch --class gnu-linux --class gnu --class os --id 'archlinux' {
set gfxpayload=keep
search --no-floppy --set=root --label %ARCHISO_LABEL%
linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL%
linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisodevice=/dev/disk/by-uuid/${ARCHISO_UUID}
initrd /%INSTALL_DIR%/boot/intel-ucode.img /%INSTALL_DIR%/boot/amd-ucode.img /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img
}
menuentry "Arch Linux install medium with speakup screen reader (x86_64, UEFI)" --hotkey s --class arch --class gnu-linux --class gnu --class os --id 'archlinux-accessibility' {
set gfxpayload=keep
search --no-floppy --set=root --label %ARCHISO_LABEL%
linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% accessibility=on
linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisodevice=/dev/disk/by-uuid/${ARCHISO_UUID} accessibility=on
initrd /%INSTALL_DIR%/boot/intel-ucode.img /%INSTALL_DIR%/boot/amd-ucode.img /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img
}
@ -48,18 +51,15 @@ if [ "${grub_platform}" == "efi" ]; then
if [ "${grub_cpu}" == "x86_64" ]; then
menuentry "Run Memtest86+ (RAM test)" --class memtest86 --class gnu --class tool {
set gfxpayload=800x600,1024x768
search --fs-uuid --no-floppy --set=root --label %ARCHISO_LABEL%
linux /%INSTALL_DIR%/boot/memtest.efi
}
menuentry "UEFI Shell" {
insmod chain
search --no-floppy --set=root --label %ARCHISO_LABEL%
chainloader /shellx64.efi
}
elif [ "${grub_cpu}" == "i386" ]; then
menuentry "UEFI Shell" {
insmod chain
search --no-floppy --set=root --label %ARCHISO_LABEL%
chainloader /shellia32.efi
}
fi