Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornl6720 <nl6720@gmail.com>2023-01-22 12:17:51 +0200
committernl6720 <nl6720@gmail.com>2023-02-02 11:49:16 +0200
commit3f95d391eff6145e0546b8c0b69bd2851fc3c400 (patch)
treec0f1ae8ca936bbcb77a75304ab9a30a9c5475dce
parent8d7ad3c629e1a2d0cb2f2008e62ea979639230e7 (diff)
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
-rw-r--r--CHANGELOG.rst7
-rw-r--r--configs/baseline/grub/grub.cfg8
-rw-r--r--configs/releng/grub/grub.cfg14
3 files changed, 20 insertions, 9 deletions
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 66ffe75..f6a6f25 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -8,9 +8,16 @@ Changelog
Added
-----
+- Support *file system transposition* to simplify boot medium preparation for UEFI boot via extracting the ISO image
+ contents to a drive. ``grub.cfg`` does not hardcode the ISO volume label anymore, instead GRUB will search for volume
+ with a ``/.disk/%UUID_SEARCH_FILENAME%.uuid`` file on it.
+
Changed
-------
+- Identify the ISO volume via a UUID instead of a file system label to avoid collisions of multiple ISOs created in the
+ same month.
+
Removed
-------
diff --git a/configs/baseline/grub/grub.cfg b/configs/baseline/grub/grub.cfg
index d2aa4ab..7d73fe6 100644
--- a/configs/baseline/grub/grub.cfg
+++ b/configs/baseline/grub/grub.cfg
@@ -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
@@ -30,7 +35,6 @@ timeout_style=menu
menuentry "Arch Linux (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/x86_64/initramfs-linux.img
}
diff --git a/configs/releng/grub/grub.cfg b/configs/releng/grub/grub.cfg
index 79ea2d2..ddd8af2 100644
--- a/configs/releng/grub/grub.cfg
+++ b/configs/releng/grub/grub.cfg
@@ -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