Deze handleiding helpt je met het installeren/converteren/afconfigureren van systemd-boot op Fedora ter vervanging van GRUB als de bootloader. Ook komt het ondertekenen van alle benodige zaken en het configureren van het systeem voor (je eigen) secure boot installatie aan bod omdat dit twee onderwerpen zijn die heel erg met elkaar verbonden zijn.
Update in verband met Fedora 43.
Fedora 43 heeft een aantal wijzigingen waardoor deze handleiding niet meer werkt. Volg deze handleiding dus niet! Ik ben met een update voor deze handleiding bezig.
Benodigdheden
Je hebt de volgende dingen nodig voor deze installatie/conversie:
- Een USB stick met Fedora Everything versie 42 of nieuwer erop geïnstalleerd
- Geduld
- Koffie
Installatie
Om ervoor te zorgen dat Fedora standaard systemd-boot als bootloader installeert en niet GRUB voeg je het volgende toe aan het opstartmenu:
inst.sdboot
Voeg dit toe aan de regel die begint met linux en eindigt met rd.live.image.
Hoe je de installatie verder doet heeft geen invloed verder op deze handleiding, dus dat bespreek ik hier niet.
Configuratie systeem ná installatie
Na het installeren van Fedora met systemd-boot is het nog niet helemaal klaar. Het systeem is prima bruikbaar zoals het nu is en zal perfect werken, maar dat wil niet zeggen dat het af is.
Software installatie
Om te beginnen heb je een aantal softwarepaketten nodig voor taken die later volgen die Fedora niet standaard geïnstalleerd heeft, namelijk:
systemd-ukifysbsigntoolszstd
Mappen en bestanden in /boot/
Om een werkend systeem te houden moet /boot/ opgeruimd worden tot je het volgende overhoud:
/boot/efi/EFI/BOOT//bot/efi/EFI/fedora//boot/efi/EFI/Linux//boot/efi/EFI/systemd//boot/efi/loader/loader.conf/boot/efi/loader/entries//boot/efi/loader/keys/
De inhoud van /boot/efi/loader/loader.conf is als volgt:
timeout 5
auto-firmware no
console-mode keep
secure-boot-enroll manual
Kernel commandline
Tijdens het maken van de image word de (huidige) kernel commandline gebruikt. Hiervoor word het bestand /etc/kernel/cmdline gelezen, of als dit niet bestaat /usr/lib/kernel/cmdline. Schrijf dus de huidige kernel commandline naar /etc/kernel/cmdline met het volgende commando:
cat /proc/cmdline | cut -d " " -f2- | sudo tee /etc/kernel/cmdline
Configuratie systemd-boot via install.conf
De standaardconfiguratie voor systemd-boot in /etc/kernel/install.conf zoals aangeleverd door Fedora is in de basis goed, maar voor de gewenste situatie nog niet helemaal compleet. Voeg het volgende toe aan het einde van het bestand om dit recht te trekken:
layout=uki
initrd_generator=dracut
uki_generator=ukify
Ook plaatst Fedora standaard een aantal extra configuratiebestanden in /usr/lib/kernel/install.d/. De meeste hiervan zijn niet nodig, de snelste manier om deze uit te schakelen is door een symlink naar /dev/null te maken met dezelfde naam in /etc/kernel/install.d/. Dus:
sudo ln -sv /dev/null /etc/kernel/install.d/50-depmod.install
sudo ln -sv /dev/null /etc/kernel/install.d/51-dracut-rescue.install
sudo ln -sv /dev/null /etc/kernel/install.d/60-kdump.install
sudo ln -sv /dev/null /etc/kernel/install.d/90-loaderentry.install
sudo ln -sv /dev/null /etc/kernel/install.d/92-crashkernel.install
sudo ln -sv /dev/null /etc/kernel/install.d/92-tuned.install
De volgende configuratiebestanden worden dus niet meegenomen, want die zijn nodig:
50-dracut.install60-ukify.install90-uki-copy.install
Naamgeving Fedora in systemd-boot
Standaard gebruikt systemd-boot de naam van de kernel in het getoonde menu. Dit kan erg snel onduidelijk worden. Om dit duidelijker te maken kun je systemd-boot configureren wat het iets moet noemen door dit in het (niet standaard aanwezige) configuratiebestand /etc/kernel/entry-token te plaatsen. Bijvoorbeeld
fedora
Opruimen oude kernels en meer
Na het updaten van een kernel blijft de oude kernel EFI image bestaan. Na verloop van tijd loopt daarmee de /boot/efi/ map vol en dat levert problemen op. Om dat op te lossen plaats het volgende in /etc/kernel/install.d/99-cleanup.install en maak het dan uitvoerbaar met sudo chmod +x /etc/kernel/install.d/99-cleanup.install en zorg ervoor dat het correcte SELinux label meegegeven is met sudo restorecon -RvF /etc/kernel/install.d/99-cleanup.install
#!/usr/bin/env bash
COMMAND="${1:?}"
KERNEL_VERSION="${2:?}"
UKI_DIR="$(bootctl -p)/EFI/Linux"
ENTRY_TOKEN="$(< /etc/kernel/entry-token)"
case "$COMMAND" in
remove)
if [[ -f "$UKI_DIR/$ENTRY_TOKEN-$KERNEL_VERSION.efi" ]]; then
exec rm -rf \
"$UKI_DIR/$ENTRY_TOKEN-$KERNEL_VERSION.efi"
"/boot/symvers-$KERNEL_VERSION.xz"
fi
;;
esac
exit 0
Configuratie dracut
Eén van de tools die gebruikt word om een kernel image te bouwen is dracut. Ook hiervan is de standaard configuratie voor 90% in orde, maar moeten er een paar kleine aanpassingen gedaan worden voor onze gewenste situatie. Plaats deze configuratie items in een (nieuw) configuratiebestand in /etc/dracut.conf.d/uki.conf:
show_modules=no
hostonly=yes
kernel_cmdline="$(< /etc/kernel/cmdline)"
do_strip=yes
agressive_strip=yes
compress=zstd
squash_compress=zstd
Genereren image(s)
Na het configureren van het systeem kun je eindelijk de kernel image(s) gaan genereren. Doe dit met
sudo kernel-install -v add-all
Afhankelijk van hoeveel kernel(s) je geïnstalleerd hebt (max in Fedora is 3) word(en) er nu een (aantal) kernel image(s) gegenereerd en, volgens de configuratie, naar de juiste plek in /boot/efi/EFI/Linux geschreven.
Secure boot met eigen sleutel(s)
Na het ombouwen en configureren van het systeem om systemd-boot te gebruiken is de volgende stap het configureren van het systeem om je eigen secure boot sleutel(s) te gebruiken.
Dit is optioneel. Als je wilt kun je hier stoppen en het systeem gebruiken zoals het is.
Configuratie eigen sleutel(s)
Het configureren van je eigen secure boot sleutel(s) is met een tool als ukify goed te doen. Het configuratiebestand hiervoor is /etc/kernel/uki.conf met het volgende:
[UKI]
SecureBootSigningTool=sbsign
SecureBootPrivateKey=/etc/kernel/keys/secureboot.key
SecureBootCertificate=/etc/kernel/keys/secureboot.cert
Vergeet ook niet om de map /etc/kernel/keys/ aan te maken als dit nog niet gedaan is! Na het configureren van ukify kun je je secure boot key(s) laten genereren met het volgende:
sudo ukify genkey --config /etc/kernel/uki.conf
Ondertekenen bestanden systemd-boot met je eigen secure boot sleutel(s)
Nu je je eigen secure boot sleutel(s) hebt is het eerste wat je moet doen is het ondertekenen van de bestanden die systemd-boot gebruikt om Fedora te starten, zodat dit blijft werken. Doe dat met
sudo sbsign --key=/etc/kernel/keys/secureboot.key --cert=/etc/kernel/keys/secureboot.cert --output=/usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi
Herinstalleer daarna de bootloaderbestanden van systemd-boot met
sudo bootctl install --secure-boot-auto-enroll=yes --private-key=/etc/kernel/keys/secureboot.key --certificate=/etc/kernel/keys/secureboot.cert
Ondertekenen bestanden fwupd
Nu je toch bezig bent met het ondertekenen van allerlei benodigde bestanden met je eigen sleutel(s) kun je net zo goed de bestanden van fwupd doen, zodat ook firmware update(s) in de toekomst blijven werken.
sudo sbsign --key=/etc/kernel/keys/secureboot.key --cert=/etc/kernel/keys/secureboot.cert --output=/usr/libexec/fwupd/efi/fwupdx64.efi.signed /usr/libexec/fwupd/efi/fwupdx64.efi
Configuratie fwupd
De standaardconfiguratie van fwupd houd geen rekening met de aangepaste situatie en zal dus niet werken. Om dit recht te trekken voeg je het volgende toe aan het einde van /etc/fwupd/fwupd.conf:
[uefi_capsule]
DisableShimForSecureBoot=true
Opnieuw genereren image(s)
Zie hiervoor het stuk hierboven genereren image(s)