Conversie van GRUB naar systemd-boot

Geschreven op en voor het laatst bijgewerkt op

Inhoudsopgave

Inleiding

Deze handleiding gaat over het configureren van je systeem om de conversie van GRUB naar systemd-boot te kunnen doen, en de conversie zelf.

Software verwijderbaar maken

Voordat je de conversie zelf kunt doen moet het systeem eerst voorbereid worden. Er moet namelijk wat software verwijderd worden, maar dat is iets wat standaard onmogelijk is omdat de software in kwestie gemarkeerd is als beschermd door het systeem.

Dit is heel begrijpelijk, want je wilt niet dat iets belangrijks als je bootloader gedeïnstalleerd wordt door een gebruiker (per ongeluk).

Om deze bescherming ongedaan te maken doe je het volgende in de terminal:

sudo rm -i /etc/dnf/protected.d/grub2-efi-ia32.conf /etc/dnf/protected.d/grub2-efi-x64.conf /etc/dnf/protected.d/grub2-pc.conf /etc/dnf/protected.d/grub2-tools-minimal.conf /etc/dnf/protected.d/shim.conf

Software verwijderen

Nu de software die verwijderd moet worden ook echt verwijderd kan worden is het tijd om dat dan ook te doen. Voer daarvoor het volgende uit in de terminal:

sudo dnf remove grub2-efi-ia32 grub2-efi-ia32-cdboot grub2-efi-ia32-modules grub2-efi-x64 grub2-efi-x64-cdboot grub2-efi-x64-modules grub2-common grub2-pc grub2-pc-modules grub2-tools grub2-tools-efi grub2-tools-extra grub2-tools-minimal shim mactel-boot

Software installeren

De volgende stap is het installeren van software die nodig is ter vervanging van de software die je net verwijderd hebt. Doe dat door het volgende uit te voeren in de terminal:

sudo dnf install systemd-boot-unsigned systemd-ukify sdubby

Om er zeker van te zijn dat deze software (later) niet (per ongeluk) verwijderd word is het een erg goed idee om deze als beschermd te markeren. Doe dat door het volgende uit te voeren in de terminal:

sudo echo systemd-boot-unsigned > /etc/dnf/protected.d/systemd-boot-unsigned.conf
sudo echo systemd-ukify > /etc/dnf/protected.d/systemd-ukify.conf
sudo echo sdubby > /etc/dnf/protected.d/sdubby.conf

Omdat er nu nieuwe configuratiebestanden zijn aangemaakt in /etc/dnf/protected.d/ moeten deze worden gemarkeerd als (systeem)configuratiebestand(en). Doe dat door het volgende uit te voeren in de terminal:

sudo restorecon -RvF /etc/dnf/protected.d/*.conf

Opruimen van oude (configuratie)bestanden

Een standaard installatie van Fedora Linux (met GRUB) heeft een standaard inrichting van mappen en bestanden in /boot om ervoor te zorgen dat het systeem kan starten.

Veel van deze bestanden en mappen zijn niet meer nodig. Om op te ruimen wat niet meer nodig is voer je het volgende uit in de terminal:

sudo rm -i -r /boot/*

LET OP: je machine na het uitvoeren van deze commando’s niet herstarten!

Aanmaken configuratiebestand(en) in /boot

Het volgende wat nodig is is het aanmaken van het configuratiebestand wat systemd-boot gaat gebruiken nadat dit geïnstalleerd is.

Voordat dit bestand gemaakt kan worden moet eerst de map worden aangemaakt waar dit in moet komen. Doe doe dat door het volgende uit te voeren in je terminal:

sudo mkdir -p /boot/efi/loader/

En om dan het bestand aan te maken met instellingen doe je het volgende in je terminal:

sudo cat > /boot/efi/loader/loader.conf <<EOF
timeout 30
auto-firmware no
console-mode keep
secure-boot-enroll manual
EOF

Kernel configuratie

Hierna moet de bestaande kernel configuratie worden aangepast zodat het werkt en blijft werken met systemd-boot. Dit klinkt serieuzer dan het is.

Kernel naam

Om te beginnen met iets cosmetisch. Met deze stap zal het systeem de namen van kernelbestanden makkelijker maken, wat in het menu ook weer een stukje helderheid schept.

Het configuratiebestand /etc/kernel/entry-token word hiervoor gebruikt. Standaard bestaat dit niet, dus om dit aan te maken én er gelijk “fedora” in te schrijven doe je het volgende in je terminal:

sudo echo fedora > /etc/kernel/entry-token

Optie(s) toevoegen aan /etc/kernel/install.conf

Voeg hierna de volgende 3 opties toe aan het al bestaande configuratiebestand /etc/kernel/install.conf. Doe dat door het volgende te doen in de terminal:

echo layout=uki | sudo tee -a /etc/kernel/install.conf
echo initrd_generator=dracut | sudo tee -a /etc/kernel/install.conf
echo uki_generator=ukify | sudo tee -a /etc/kernel/install.conf

Plugins uitschakelen die niet (meer) nodig zijn

Het systeem om updates te installeren heeft een aantal plugins die na deze conversie niet meer nodig zijn. Om deze uit te schakelen doe je het volgende in de terminal:

for CONF in $(find /usr/lib/kernel/install.d/*.install -type f); do
	sudo ln -s -v /dev/null /etc/kernel/install.d/$(basename $CONF)
done

Dit schakelt alle geïnstalleerde plugins uit. Er zijn er drie die wél nodig zijn, om deze in te schakelen doe je het volgende in de terminal:

sudo rm -i /etc/kernel/install.d/50-dracut.install
sudo rm -i /etc/kernel/install.d/60-ukify.install
sudo rm -i /etc/kernel/install.d/90-uki-copy.install

En het is ook nodig om zelf een plugin te schrijven om oude kernels op te ruimen als er nieuwe geïnstalleerd worden tijdens systeemupdates. Om de plugin aan te maken doe het volgende in de terminal:

sudo touch /etc/kernel/install.d/95-cleanup.install

En plaats in dat bestand het volgende:

#!/usr/bin/env bash

COMMAND="${1:?}"
KERNEL_VERSION="${2:?}"
UKI_DIR=$(bootctl -p)/EFI/Linux
ENTRY_TOKEN=$(< /etc/kernel/entry-token)
LOG_LABEL=kernel-cleanup

case "$COMMAND" in
	remove)
		if [[ -f "$UKI_DIR/$ENTRY_TOKEN-$KERNEL_VERSION.efi" ]]; then
			systemd-cat -t "$LOG_LABEL" -- echo "Removing $ENTRY_TOKEN-$KERNEL_VERSION.efi from $UKI_DIR"
			exec rm -r "$UKI_DIR/$ENTRY_TOKEN-$KERNEL_VERSION.efi"
		fi
		
		if [[ -f "/boot/symvers-$KERNEL_VERSION.xz" ]]; then
			systemd-cat -t "$LOG_LABEL" -- echo  "Removing symvers for $ENTRY_TOKEN-$KERNEL_VERSION"
			exec rm -r "/boot/symvers-$KERNEL_VERSION.xz"
		fi
	;;
esac

exit 0

Sla dit op en maak de plugin daarna uitvoerbaar door het volgende te doen in de terminal:

sudo chmod +x /etc/kernel/install.d/95-cleanup.install

Markeer daarna alle gewijzigde of nieuwe bestanden in /etc/kernel als (systeem)configuratiebestanden zodat Fedora Linux ze kan gebruiken door het volgende te doen in de terminal:

sudo restorecon -RvF /etc/kernel/

Configuratie dracut

Het volgende onderdeel is dracut. Dit wordt gebruikt om kernels te maken. De configuratie van dracut is (gelukkig) niet uitgebreid en is maar één enkel (configuratie)bestand.

Maak het benodigde configuratiebestand (/etc/dracut.conf.d/10-ukify.conf) aan door het volgende te doen in de terminal:

sudo touch /etc/dracut.conf.d/10-ukify.conf

En plaats dan het volgende erin:

show_modules=no
hostonly=yes
kernel_cmdline="$(< /etc/kernel/cmdline)"
do_strip=yes
agressive_strip=yes
compress="/usr/bin/zstd -6 -T0"

Markeer het daarna als (systeem)configuratiebestand door het volgende te doen in de terminal:

sudo restorecon -RvF /etc/dracut.conf.d/10-ukify.conf

Herschrijven van /etc/kernel/cmdline

Standaard komt Fedora Linux met een configuratibestand /etc/kernel/cmdline wat gebruikt word om opties mee te geven aan (nieuwe) kernels.

De conversie van GRUB naar systemd-boot speelt hierin een rol, waardoor het erg verstandig is om dit bestand te herschrijven. Voordat je dat doet is het nog verstandiger om het al bestaande bestand te backuppen. Doe dat door het volgende in de terminal te doen:

sudo cp -v /etc/kernel/cmdline /etc/kernel/cmdline.old

En doe dan het volgende in de terminal om een nieuwe versie aan te maken en te vullen:

DEVICE=$(findmnt -n -o SOURCE -v /)
PARTUUID=$(blkid $DEVICE -o value -s PARTUUID)
SUBVOLID=$(findmnt -n -o $OPTIONS / | grep -E "subvolid=([0-9]*)" -o | cut -d "=" -f2)
echo "ro rhgb quiet root=PARTUUID=$PARTUUID rootflags=subvolid=$SUBVOLID" > /etc/kernel/cmdline

Genereren (nieuwe) kernel image(s)

Hierna is het tijd om de (nieuwe) kernel(s) te laten maken. Dat is te doen met een enkel commando in de terminal:

sudo kernel-install add-all

Installeren systemd-boot

En tenslotte is het tijd om systemd-boot zelf te installeren. Om dat te doen doe je het volgende in de terminal:

sudo bootctl install

Klaar!

Na het succesvol installeren van bootctl heb je de conversie van GRUB naar systemd-boot met success gedaan. Om er écht zeker van te zijn is het verstandig nu je computer te herstarten. Als je gewoon weer Fedora Linux krijgt is de conversie goed gegaan.

Zo niet, je hebt een recente backup van je bestanden, toch?