| LIMINE-SYNC(8) | System Manager's Manual | man.rawnix.org |
limine-sync —
write the boot menu from what is in /boot
limine-sync |
[-n] [-q] |
limine-sync reconciles the EFI system
partition with /boot and writes the Limine boot
menu. It takes no argument that changes what it does: the result is a
function of three directory listings.
mkpkg(8) runs it through the
boot/ trigger whenever a package adds or removes
something there, so installing or removing a kernel updates the menu by
itself. Running it by hand at any time is safe and changes nothing that is
already correct.
A kernel in /boot is only offered if
/lib/modules/version exists: a
kernel whose modules were removed, or whose install was interrupted, would
boot into a system that cannot load a single driver. Such a kernel is
reported and left out. Every kernel, initramfs and microcode image on the
ESP that no longer has a counterpart in /boot is
deleted. Files limine-sync did not put there are
left alone.
The options are as follows:
The menu has two halves.
/etc/limine.conf.in is written by hand and holds the
global settings; limine-sync replaces the line
@KERNELS@ in it with an entry per usable kernel,
newest first, and writes the result to
/boot/efi/limine.conf. That file is generated: edit
the template, never it.
default_entry must not appear in the
template. It is a one-based index, so it moves to a different kernel every
time one is added or removed; limine-sync refuses a
template that sets it. To boot something other than the newest kernel, use
remember_last_entry: yes, which follows the entry
rather than its position.
Each generated entry gets the command line from
CMDLINE, and up to two
module_path lines: the microcode first, because the
kernel only applies an early update from the head of the initrd chain, then
the initramfs.
/etc/limine-sync.conf supplies the few
things a directory listing cannot: one
KEY=value per line, keys
uppercase, surrounding quotes stripped, and
‘#’ starting a comment anywhere on the
line. An unknown key is reported and ignored.
/etc/limine-sync.conf.example documents every key at
its default.
CMDLINETITLErawnix.INITRDtinyrd.img.MICROCODEmodule_path and only if the file is on the
ESP.
Unset, the default, limine-sync uses
whichever of amd-ucode.img and
intel-ucode.img is on the ESP: a machine has one
CPU vendor and installs one microcode package, so the file that is there
is the answer. Set, that name is used and its absence is reported, since
an omitted microcode line is otherwise invisible until the next boot
applies no early update. none emits none at
all.
XEN_KERNEL,
XEN_CMDLINE, XEN_OPTIONS,
XEN_UCODEXEN_KERNEL pins a series, not a version:
6.12 selects the newest 6.12.x that has a module
tree. Empty leaves xen.cfg alone.CMDLINE.@KERNELS@.limine-sync.The limine-sync utility exits 0 on
success, and >0 if an error occurs. It refuses to run, changing
nothing, when CMDLINE is missing, when
/boot/efi is not a mount point, or when the template
sets default_entry.
After editing the configuration, look before you leap:
# limine-sync -n # limine-sync
A machine with an encrypted root; the UUID is the LUKS
partition's, from cryptsetup luksUUID, and the
mapping name in root= is the one tinyrd creates:
CMDLINE=cryptroot=UUID=xxxxxxxx-... root=/dev/mapper/croot ro quiet
bootloader(7), rawnix(7), mkpkg(8), setup-boot(8), tinyrd(8)
zorz <zorz@rawnix.org>
limine-sync writes the UEFI half of the
boot chain: it requires a FAT partition mounted at
/boot/efi and installs
BOOTX64.EFI.
On a machine that boots legacy BIOS it still writes the menu and
the kernels, and the firmware reads limine.conf from
the same partition, but the BIOS half is installed by hand:
limine bios-install writes stage 1 to the disk and
limine-bios.sys is copied onto the partition.
limine-sync removes neither, so the copy survives
every later run; after upgrading limine, redo both together. See
rawnix(7).
| October 17, 2026 | limine-sync 1.2 |