fix: installer auto-start via profile.d, revert to embedded EFI, dark ISOLINUX
All checks were successful
Build Archipelago ISO (dev) / build-iso (push) Successful in 24m33s

Three fixes from real hardware testing:

1. Installer auto-start: replace systemd service with profile.d script.
   The service and getty raced on tty1 — service output was overwritten
   by the login prompt. Profile.d runs AFTER auto-login, same approach
   the working Debian Live build used.

2. xorriso: revert from -append_partition to embedded -e boot/grub/efi.img.
   The appended partition approach produces cyl-align-off with zero CHS
   geometry, which is why BIOS wouldn't recognize the USB. The embedded
   approach matches the working main ISO (cyl-align-on, proper CHS).

3. ISOLINUX: dark theme instead of ugly blue. Black background, orange
   title, dark selection highlight. No blue boxes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-28 00:35:34 +00:00
parent 1b0c52af4b
commit 69c04f4c01

View File

@@ -505,33 +505,18 @@ ExecStart=
ExecStart=-/sbin/agetty --autologin root --noclear %I \$TERM
GETTY
# Create the installer auto-start systemd service
cat > /installer/etc/systemd/system/archipelago-installer.service <<SVCFILE
[Unit]
Description=Archipelago Auto-Installer
After=multi-user.target systemd-logind.service
Wants=multi-user.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/archipelago-start-installer
StandardInput=tty
StandardOutput=tty
StandardError=tty
TTYPath=/dev/tty1
TTYReset=yes
TTYVHangup=yes
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
SVCFILE
chroot /installer systemctl enable archipelago-installer.service
# Create the installer start wrapper
cat > /installer/usr/local/bin/archipelago-start-installer <<WRAPPER
# Auto-start installer via profile.d (runs after auto-login, no getty race)
# This is the same approach the working Debian Live build used.
mkdir -p /installer/etc/profile.d
cat > /installer/etc/profile.d/z99-archipelago-installer.sh <<PROFILE
#!/bin/bash
sleep 2
# Auto-start Archipelago installer on login — only run once
if [ -n "\$INSTALLER_STARTED" ]; then
return 0 2>/dev/null || exit 0
fi
export INSTALLER_STARTED=1
sleep 1
clear
echo ""
echo " ARCHIPELAGO BITCOIN NODE OS"
@@ -551,16 +536,17 @@ if [ -n "\$BOOT_MEDIA" ]; then
echo ""
echo " Press Enter to start installation, or Ctrl+C for shell..."
read
exec bash "\$BOOT_MEDIA/archipelago/auto-install.sh"
sudo bash "\$BOOT_MEDIA/archipelago/auto-install.sh"
else
echo " Installer not found on boot media."
echo " Checked: /run/live/medium, /run/archiso, /cdrom, /media/cdrom"
echo ""
echo " Dropping to shell for manual recovery..."
exec /bin/bash
echo " You can try manually:"
echo " sudo bash /path/to/archipelago/auto-install.sh"
echo ""
fi
WRAPPER
chmod +x /installer/usr/local/bin/archipelago-start-installer
PROFILE
chmod +x /installer/etc/profile.d/z99-archipelago-installer.sh
# Custom initramfs hook: mount ISO boot media at /run/archiso
mkdir -p /installer/etc/initramfs-tools/hooks
@@ -692,7 +678,7 @@ cp "$WORK_DIR/vmlinuz" "$INSTALLER_ISO/live/vmlinuz"
cp "$WORK_DIR/initrd.img" "$INSTALLER_ISO/live/initrd.img"
cp "$WORK_DIR/filesystem.squashfs" "$INSTALLER_ISO/live/filesystem.squashfs"
cp "$WORK_DIR/BOOTX64.EFI" "$INSTALLER_ISO/EFI/BOOT/BOOTX64.EFI"
# Note: efi.img stays in $WORK_DIR — it gets appended as GPT partition 2 by xorriso
cp "$WORK_DIR/efi.img" "$INSTALLER_ISO/boot/grub/efi.img"
cp "$WORK_DIR/isolinux.bin" "$INSTALLER_ISO/isolinux/isolinux.bin"
cp "$WORK_DIR/ldlinux.c32" "$INSTALLER_ISO/isolinux/ldlinux.c32"
cp "$WORK_DIR/menu.c32" "$INSTALLER_ISO/isolinux/menu.c32" 2>/dev/null || true
@@ -2572,11 +2558,17 @@ UI menu.c32
PROMPT 0
TIMEOUT 50
MENU TITLE ARCHIPELAGO INSTALLER
MENU COLOR border 30;44 #40ffffff #00000000 std
MENU COLOR title 1;36;44 #ff00b7ff #00000000 std
MENU COLOR sel 7;37;40 #ffffffff #ff333333 std
MENU COLOR unsel 37;44 #ffaaaaaa #00000000 std
MENU TITLE ARCHIPELAGO - Bitcoin Node OS
MENU COLOR screen 37;40 #80ffffff #00000000 std
MENU COLOR border 30;40 #00000000 #00000000 none
MENU COLOR title 1;37;40 #fffb923c #00000000 std
MENU COLOR sel 7;37;40 #ffffffff #ff1a1a1a std
MENU COLOR unsel 37;40 #ff999999 #00000000 std
MENU COLOR hotkey 1;37;40 #fffb923c #00000000 std
MENU COLOR hotsel 1;37;40 #fffb923c #ff1a1a1a std
MENU COLOR timeout_msg 37;40 #ff666666 #00000000 std
MENU COLOR timeout 1;37;40 #fffb923c #00000000 std
MENU COLOR tabmsg 37;40 #ff666666 #00000000 std
DEFAULT install
@@ -2631,44 +2623,36 @@ if [ ! -f "$ISOHDPFX" ]; then
done
fi
# EFI boot image was built in Step 2 and placed at staging/efiboot.img
# The Will Haley / Debian live-build approach: append EFI as GPT partition 2
# This is what makes USB boot work on real UEFI hardware (not just QEMU)
EFIBOOT="$WORK_DIR/efi.img"
# EFI boot image — embedded inside ISO (same approach as the working main ISO)
# The efi.img must be copied into the ISO directory in Step 2 artifact placement
EFI_IMG="$INSTALLER_ISO/boot/grub/efi.img"
if [ ! -f "$EFIBOOT" ]; then
if [ ! -f "$EFI_IMG" ]; then
echo " WARNING: No EFI boot image — ISO will only support Legacy BIOS boot"
xorriso -as mkisofs -o "$OUTPUT_ISO" \
-volid "ARCHIPELAGO" \
-iso-level 3 \
-full-iso9660-filenames \
--mbr-force-bootable -partition_offset 16 \
-joliet -joliet-long -rational-rock \
-J -joliet-long -R \
-isohybrid-mbr "$ISOHDPFX" \
-eltorito-boot isolinux/isolinux.bin \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
--eltorito-catalog isolinux/isolinux.cat \
-c isolinux/boot.cat \
-b isolinux/isolinux.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-partition_offset 16 \
"$INSTALLER_ISO"
else
xorriso -as mkisofs -o "$OUTPUT_ISO" \
-volid "ARCHIPELAGO" \
-iso-level 3 \
-full-iso9660-filenames \
--mbr-force-bootable -partition_offset 16 \
-joliet -joliet-long -rational-rock \
-J -joliet-long -R \
-isohybrid-mbr "$ISOHDPFX" \
-eltorito-boot isolinux/isolinux.bin \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
--eltorito-catalog isolinux/isolinux.cat \
-c isolinux/boot.cat \
-b isolinux/isolinux.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-eltorito-alt-boot \
-e --interval:appended_partition_2:all:: \
-no-emul-boot \
-isohybrid-gpt-basdat \
-append_partition 2 C12A7328-F81F-11D2-BA4B-00A0C93EC93B "$EFIBOOT" \
-e boot/grub/efi.img \
-no-emul-boot \
-isohybrid-gpt-basdat \
-partition_offset 16 \
"$INSTALLER_ISO"
fi