feat: add GRUB installer USB boot detection via configfile

Install a /etc/grub.d/07_startos_installer script that searches for a
.startos-installer marker file at boot. When found, it creates a
"StartOS Installer" menu entry that loads the USB's own grub.cfg via
configfile, making it the default with a 5-second timeout.

Uses configfile instead of chainloader because on hybrid ISOs the
.startos-installer marker and /boot/grub/grub.cfg are on the ISO9660
root partition, while the EFI binary lives on a separate embedded ESP.
chainloader would look for the EFI binary on the wrong partition.
This commit is contained in:
Aiden McClelland
2026-03-12 11:12:42 -06:00
parent dba1cb93c1
commit 3024db2654

View File

@@ -54,18 +54,36 @@ if [ -f /etc/default/grub ]; then
cp /usr/share/grub/unicode.pf2 /boot/grub/fonts/unicode.pf2
fi
# Install conditional serial console script for GRUB
cat > /etc/grub.d/01_serial << 'GRUBEOF'
#!/bin/sh
cat << 'EOF'
# Conditionally enable serial console (avoids breaking gfxterm on EFI
# systems where the serial port is unavailable)
if serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1; then
cat > /etc/grub.d/01_serial <<-'GRUBEOF'
#!/bin/sh
cat << 'EOF'
# Conditionally enable serial console (avoids breaking gfxterm on EFI
# systems where the serial port is unavailable)
if serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1; then
terminal_input console serial
terminal_output gfxterm serial
fi
EOF
GRUBEOF
fi
EOF
GRUBEOF
chmod +x /etc/grub.d/01_serial
# Install GRUB script to boot from StartOS installer USB when present.
# At boot, GRUB searches for the .startos-installer marker and,
# if found, loads the USB's own grub.cfg as the default boot entry.
cat > /etc/grub.d/07_startos_installer <<-'GRUBEOF'
#!/bin/sh
cat << 'EOF'
search --no-floppy --file --set=installer_dev /.startos-installer
if [ -n "$installer_dev" ]; then
menuentry "StartOS Installer" --id startos-installer {
set root=$installer_dev
configfile /boot/grub/grub.cfg
}
set default=startos-installer
set timeout=5
fi
EOF
GRUBEOF
chmod +x /etc/grub.d/07_startos_installer
fi
VERSION="$(cat /usr/lib/startos/VERSION.txt)"