orchestrator: probe multiple paths for limine.conf after add_bootloader

archinstall 4.3 writes limine.conf to <target>/<esp_mount>/EFI/arch-limine/
limine.conf for UEFI non-removable installs (lib/installer.py:1487), not
to /mnt/boot/limine.conf as our code assumed. Older archinstall versions
used different paths.

Probe the 4.3 paths (arch-limine, BOOT, limine subdir) and the legacy
/boot/limine.conf in order; pick whichever exists. Error message now
lists everywhere it looked so future drift is easy to diagnose.
This commit is contained in:
Ryan Hughes committed 2026-05-21 20:56:58 -04:00
1 parent 16cc1058be
commit 39113a2d2b
1 file changed
+17 -3
@@ -183,9 +183,23 @@ def _write_limine_defaults(ctx: InstallContext) -> None:
if not arch.is_limine(ctx.state["arch_config_handler"].config):
return
limine_conf = ctx.target / "boot" / "limine.conf"
if not limine_conf.exists():
raise RuntimeError(f"{limine_conf} not found after add_bootloader")
# archinstall 4.3 writes limine.conf to one of:
# <target>/<esp_mount>/EFI/arch-limine/limine.conf (UEFI, non-removable)
# <target>/<esp_mount>/EFI/BOOT/limine.conf (UEFI, removable)
# <target>/boot/limine/limine.conf (BIOS or fallback)
# Probe in that order and use whichever exists.
candidates = [
ctx.target / "boot" / "EFI" / "arch-limine" / "limine.conf",
ctx.target / "boot" / "EFI" / "BOOT" / "limine.conf",
ctx.target / "boot" / "limine" / "limine.conf",
ctx.target / "boot" / "limine.conf", # very-old archinstall path
]
limine_conf = next((p for p in candidates if p.exists()), None)
if limine_conf is None:
searched = "\n ".join(str(p) for p in candidates)
raise RuntimeError(
"limine.conf not found after add_bootloader. Searched:\n " + searched
)
cmdline = _extract_cmdline(limine_conf)
if not cmdline.strip():