fix(installer): use Limine on 32-bit UEFI firmware
Atom Bay Trail / Cherry Trail mini-PCs and tablets have a 64-bit CPU behind 32-bit UEFI. We picked systemd-boot there (Arch ships no ia32 build), and archinstall 4.4's GRUB path hardcodes --target=x86_64-efi, so the installed system could not boot. archinstall's Limine path copies both BOOTIA32.EFI and BOOTX64.EFI and chooses the entry by /sys/firmware/efi/fw_platform_size; the default layout's FAT /boot satisfies its layout check. 64-bit UEFI and BIOS keep systemd-boot / GRUB. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wq1hzUp4ZmCKHDuLKCnu73
This commit is contained in:
parent
bfa7ee8cba
commit
455150f97f
2 changed files with 25 additions and 2 deletions
|
|
@ -390,3 +390,16 @@ def test_error_page_offers_retry(monkeypatch, tmp_path):
|
|||
html = app_module.app.test_client().get("/install/log").get_data(as_text=True)
|
||||
assert "Try again" in html
|
||||
assert "next-steps" not in html
|
||||
|
||||
|
||||
def test_detect_bootloader_by_firmware(tmp_path):
|
||||
import app as app_module
|
||||
|
||||
efi = tmp_path / "efi"
|
||||
assert app_module._detect_bootloader(efi) == "Grub" # BIOS / legacy
|
||||
efi.mkdir()
|
||||
assert app_module._detect_bootloader(efi) == "Systemd-boot" # no bitness file
|
||||
(efi / "fw_platform_size").write_text("64\n")
|
||||
assert app_module._detect_bootloader(efi) == "Systemd-boot"
|
||||
(efi / "fw_platform_size").write_text("32\n")
|
||||
assert app_module._detect_bootloader(efi) == "Limine"
|
||||
|
|
|
|||
|
|
@ -515,10 +515,20 @@ def _post_install_commands(hostname, admin_username, admin_password):
|
|||
]
|
||||
|
||||
|
||||
def _detect_bootloader():
|
||||
def _detect_bootloader(efi_dir=Path("/sys/firmware/efi")):
|
||||
# systemd-boot is UEFI-only; on BIOS/legacy it trips HardwareIncompatibilityError
|
||||
# inside archinstall. /sys/firmware/efi exists iff we were booted via UEFI.
|
||||
return "Systemd-boot" if Path("/sys/firmware/efi").exists() else "Grub"
|
||||
if not efi_dir.exists():
|
||||
return "Grub"
|
||||
# 64-bit CPU behind 32-bit UEFI (Atom Bay Trail / Cherry Trail mini-PCs
|
||||
# and tablets): Arch ships no ia32 systemd-boot, and archinstall's GRUB
|
||||
# path hardcodes --target=x86_64-efi. Its Limine path installs both
|
||||
# BOOTIA32.EFI and BOOTX64.EFI and picks the entry by firmware bitness.
|
||||
try:
|
||||
bitness = (efi_dir / "fw_platform_size").read_text().strip()
|
||||
except OSError:
|
||||
bitness = "64"
|
||||
return "Limine" if bitness == "32" else "Systemd-boot"
|
||||
|
||||
|
||||
def build_archinstall_config(s):
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue