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:
grub
mokutil
En er is software geïnstalleerd die op een GRUB installatie ontbreekt, namelijk:
sdubby
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:
- Verwijder
grub2
,grubby
enshim
- Installeer
systemd-ukify
- Plaats het volgende in
/etc/kernel/install.conf
layout=uki
initrd_generator=dracut
uki_generator=ukify
- Plaats het volgende in
/etc/dracut.conf.d/rescue.conf
:
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:
- Installeer
systemd-ukify
- Verwijder alle bestanden uit
/etc/kernel/install.d/
- Verwijder alle bestanden uit
/etc/dracut.conf.d/
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.
- Plaats het volgende in
/etc/kernel/install.conf
:
layout=uki
initrd_generator=dracut
uki_generator=ukify
- Plaats het volgende in
/etc/dracut.conf.d/rescue.conf
:
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/
:
/boot/vmlinuz*
zijn de kernels zelf/boot/initramfs*
zijn de inital ram disks die erbij horen/boot/config*
zijn de kernel configuratie bestanden diednf
gebruikt/aangemaakt heeft tijdens het installeren van elke kernel
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