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?