systemd-boot · UKI · Secure Boot · sbctl · MIT

Signed Unified Kernel Images and Secure Boot, on Mint, Fedora and Arch

A distro-aware kit that moves a Linux machine to systemd-boot, Unified Kernel Images (kernel, initramfs and command line signed as one .efi) and Secure Boot with your own keys via sbctl. It signs out-of-tree DKMS modules too, and keeps the signed UKIs in sync when kernels and drivers change, so an NVIDIA update doesn't leave you at a TTY.

Fix a specific problem

"NVRM: API mismatch" after an NVIDIA updateWhy a driver-only DKMS update leaves a signed UKI carrying the old module, and how to rebuild it and keep it current.

Supported distros

FamilyIDs handledinitramfsUKI builder
Archmanjaro, arch, endeavouros, garuda, cachyosmkinitcpiomkinitcpio (native)
Fedorafedora, nobara, bazzitedracutukify (kernel-install plugin)
Debianlinuxmint, ubuntu, debian, popinitramfs-toolsukify (apt postinst hook)

The steps

Numbered phase scripts, run in order, with a reboot to test before anything is enforced:

sudo bin/00-detect.sh                # report environment, no changes
sudo bin/10-install-prereqs.sh       # sbctl, ukify, ...
sudo bin/20-create-keys.sh           # sbctl create-keys
sudo bin/30-install-systemd-boot.sh  # bootctl install + loader.conf
sudo bin/35-generate-bls-fallback.sh # rescue entries you can boot if a UKI fails
sudo bin/40-build-ukis.sh            # standalone initramfs AND UKIs
sudo bin/50-sign-everything.sh       # sbctl sign -s
sudo bin/60-verify.sh                # show state
# reboot, pick "Linux Boot Manager", confirm the UKI boots;
# then firmware Setup Mode → sbctl enroll-keys --microsoft → enable Secure Boot

Full procedure, with reboot points and recovery checkpoints: DEPLOYMENT.md. Lessons that cost real debugging time: GOTCHAS.md.

Safety model

The repository tracks public Secure Boot certificates only. Private keys, LUKS header dumps and captured host state are excluded by its .gitignore.

FAQ

What happens if the signed UKI does not boot?

Every conversion keeps a fallback boot path. Phase 35 writes BLS Type #1 fallback entries that systemd-boot lists next to the UKIs, so you can boot the same kernel through the unsigned path, and GRUB, where present, stays installed and signed as a third fallback.

Does it enroll keys or enable Secure Boot for me?

No. Enabling Secure Boot is a manual firmware step, and keys are enrolled only after a first successful systemd-boot test, with sbctl enroll-keys --microsoft.

Does it set up TPM2 unlock?

No. TPM2 sealing, TPM2-backed LUKS auto-unlock and PCR baselining are out of scope; the kit is built around passphrase-only LUKS by design.

Which distributions does it support?

The Arch family (Manjaro, Arch, EndeavourOS, Garuda, CachyOS) with mkinitcpio, the Fedora family (Fedora, Nobara, Bazzite) with dracut and ukify, and the Debian family (Linux Mint, Ubuntu, Debian, Pop!_OS) with initramfs-tools and ukify.

Encrypting the disk too? LinuxLocker rebuilds and re-signs UKIs as part of an in-place LUKS2 conversion.