Update 14-11-2023

Met de aankomende wijzigingen in de werking van bootloaders in Fedora en het aanpassen van de bootcode/bootcyclus is het niet aan te raden om wat hieronder staat uit te voeren. Gebruik het als inspiratiebron, maar doe zelf wel eerst onderzoek. Je bent gewaarschuwd.

Na de doorgevoerde wijzigingen in Fedora om grub en alle bijbehorende software niet langer verplicht geïnstalleerd te hebben, en de introductie van sdubby in de softwarelijst is het nu mogelijk / makkelijker om een systeem om te bouwen van grub naar systemd-boot zonder dat je je in allerlei bochten hoeft te wringen.

Met deze aanpassingen is het ook mogelijk om een nieuwe installatie te doen die standaard gebruik maakt van systemd-boot als bootloader door de optie inst.sdboot mee te geven tijdens het starten van de installatie van Fedora via een USB stick.

Wat is het verschil met de standaardinstallatie?

Ik heb een virtuele machine geïnstalleerd met de optie inst.sdboot om te kijken wat er anders is in vergelijking met een “normale” installatie met GRUB.

Op zich valt het mee. Er ontbreken een aantal stukken software, namelijk:

En er is software geïnstalleerd die op een GRUB installatie ontbreekt, namelijk:

Het resultaat?

Een installatie die niet wil booten, omdat de kernel geen commandline meekrijgt vanuit systemd-boot, omdat die tijdens de installatie niet is meegenomen om een of andere reden. Het gaat dan voornamelijk om de root= en rootflags=subvol=root argumenten. Die kun je, nadat de installatie klaar is, makkelijk zelf toevoegen aan /etc/kernel/cmdline en de geïnstalleerde kernel configuraties in /boot/efi/loader/entries/*.conf.

Ombouwen naar een uki kernel / bootloader

De huidige implementatie in Fedora is er een voor de 1e fase. Dat wil zeggen dat het systeem zo is “omgebouwd” dat systemd-boot met zo min mogelijk systeemaanpassingen ingesteld is en dat het “gewoon werkt” (it “Just Works”).

Dat betekent dat er geen gebruik gemaakt wordt van zogenaamde Unified Kernel Images, maar dat de kernel en het initramfs nog steeds twee losse componenten zijn.

Voor nu is dat prima. Eerst hier de kinderziektes en dergelijke maar eens uitkrijgen voordat dit uitgerold word naar alle Fedora gebruikers wereldwijd (die machines hebben die dit ondersteunen, met UEFI als firmware).

Gelukkig zijn de bouwblokken die nodig zijn om dit op je eigen systeem te doen sinds Fedora 39 aanwezig in Fedora. Eigeljik het enige wat er nodig is om je systeem bij elke kernel update een UKI te laten maken en die te booten is het installeren van systemd-ukify, wat het tooltje /usr/lib/systemd/ukify levert.

Een mededeling

Zoals altijd is het kwestie van goed lezen en logisch nadenken. Ik ben niet verantwoordelijk als je je computer of Fedora installatie hiermee om zeep helpt. Zorg voordat je verder gaat voor een goede backup van in ieder geval je documenten / data. Een besturingssysteem is opnieuw te installeren in geval van nood, je data is niet terug te halen als je dit wist.

Ook is deze handleiding nog niet 100% definitief. Het kan zijn dat er in de aankomende tijd nog wijzigingen in de implementatie van Fedora zit, het is immers nog niet in steen gegoten. Houd deze handleiding dus in de gaten voor wijzigingen en dergelijke. Als ik iets wijzigig zal ik dit aangeven in de inleiding van de handleiding.

Ombouwen vanaf een standaard Fedora installatie

Als je dit wilt doen met een standaard Fedora installatie (met GRUB dus) is dat vrij eenvoudig:

layout=uki
initrd_generator=dracut
uki_generator=ukify
dracut_rescue_image="no"

Hierna is het enige wat je hoeft te doen het herinstalleren van het kernel-core pakket:

for kver in $(dnf list installed kernel-core | tail -n +2 | awk '{print "kernel-core-"$2".x86_64"}'); do
	dnf reinstall $kver
done

Tip: voordat je (oude) kernels weg gaat gooien is het zeer aan te raden je systeem te herstarten om te controleren of de nieuwe UKI werkt / UKIs werken én of dat de cmdline (uit /etc/kernel/cmdline) netjes én correct wordt meegenomen in de image.

Is dat niet het geval heb je altijd nog een werkende configuratie om op terug te vallen hier. Hierna kun je verder met de stappen voor na de installatie.

Ombouwen vanaf een installatie die al gebruik maakt van systemd-boot

Het verder ombouwen van een installatie die al gebruik maakt van systemd-boot is wat makkelijker, maar kent wel een aantal haken en ogen. Om te beginnen voer je de volgende stappen uit:

Dit is om de aanpassingen aan het systeem (vooral aan kernel-install en dracut) ongedaan te maken aangezien dit aangepast moet worden. Als alles hierboven eenmaal gedaan is kun je door met de volgende stappen.

layout=uki
initrd_generator=dracut
uki_generator=ukify
dracut_rescue_image="no"

Daarna is het een kwestie van de kernel images opnieuw installeren / laten bouwen:

for kver in $(dnf list installed kernel-core | tail -n +2 | awk '{print "kernel-core-"$2".x86_64"}'); do
	dnf reinstall $kver
done

Hierna kun je verder met de stappen voor na de installatie.

Stappen na de installatie of ombouw

Als systemd-boot eenmaal is geïnstalleerd en is bevorderd tot hoofdbootloader is het tijd om één configuratiewijziging te doen, om het testproces hierna makkelijker te maken. Plaats het volgende in /boot/efi/loader/loader.conf:

timeout 30

Dit zorgt ervoor dat systemd-boot 30 seonden (!) wacht en een menu laat zien met kernelkeuzes.

Als je de stappen hierboven hebt gedaan is het een kwestie van je systeem te herstarten en te kijken of GRUB naar voren komt (wat niet zou moeten), of dat je begroet word door systemd-boot (wat wél zou moeten).

Als je tijdens het herstarten 30 seconden lang een menu ziet met (maximaal) 3 kernels in het midden van je scherm is het installeren van systemd-boot gelukt. Zie je dit niet, of zie je een foutmelding dan is er iets niet goed gegaan en moet ik je helaas doorverwijzen naar andere hulpbronnen.

Schoonmaken

Als de test hierboven goed is gegaan én je systeem start netjes zonder kopzorgen op is het tijd om het een en ander schoon te maken en systemd-boot geen 30 seconden te laten wachten.

Oude kernels

Om te beginnen de oude kernels maar verwijderen. Die nemen nu (aardig) wat ruimte in.

Omgebouwde systemen vanaf GRUB

Als je je systeem hebt omgebouwd vanaf een standaard Fedora installatie met GRUB zijn de oude kernels te vinden in /boot/:

De bovenstaande bestanden kunnen allemaal weg, ze zijn vervangen door wat nu in /boot/efi/EFI/Linux/*.efi of /boot/efi/EFI/Fedora/* aanwezig is. Dit kun je doen met het volgende:

sudo rm /boot/vmlinuz* /boot/initramfs* /boot/config*

Let erop: rm vraagt hier bij elk bestand of je dit écht weg wilt gooien. Lees goed welk bestand het om gaat voordat je antwoord.

Omgebouwde system vanaf een vorige installatie/configuratie van systemd-boot

Als je je systeem al eerder had omgebouwd naar systemd-boot dan hoef je voor nu eigelijk niets meer op te ruimen. De oude installatie had de kernels en dergelijke al op de nieuwe plaats in /boot/efi/EFI geplaatst, en het herinstalleren van de kernels hierboven heeft deze keurig overschreven.

systemd-boot configuratie van 30 seconden wachten ongedaan maken

Als laatste de “test” configuratie ongedaan maken die ervoor zorgde dat systemd-boot 30 seconden lang een keuzemenu met kernel(s) liet zien. 30 sceonden is wel érg lang. Het menu helemaal verbergen raad ik zelf niet aan, maar dat is je eigen keuze.

Ik raad aan om dit om te bouwe van 30 seonden naar 5 seconden. Dat kan met de volgende one-liner:

sudo sed -i 's/timeout 30/timeout 5/g' /boot/efi/loader/loader.conf