Conversie Fedora van GRUB naar systemd-boot: deel 2
In de eerste revisie van deze blog stond een vrij ernstige tikfout (het verwijderen van /boot/efi/EFI/
in zijn geheel). Dat is bij deze opgelost.
In het eerste deel van dit verhaal is de eerste (ruwe) versie van dit proces te zien. Deze eerste stap is inmiddels ongeveer 3 jaar geleden en de techniek is inmiddels een stuk verder.
Het is vanaf nu niet meer nodig om zelf (bash)scripts te schrijven om de kernzaken te regelen. Dat kan met een paar aanpassingen in een configuratiebestand.
Het hele proces komt nu neer op het volgende:
- Software installeren die nodig is voor de conversie
- De configuratie voor
systemd-boot
aanpassen voor de conversie - De plugins voor
systemd-boot
aanpassen voor de conversie - Dracut configureren voor de conversie
- De ESP (EFI System Partition) opschonen
- De al bestaande kernels genereren met
kernel-install
Software installeren die nodig is voor de conversie
In tegenstelling tot de eerste versie van deze conversie is het enige pakket wat nodig is is systemd-ukify
, wat op Fedora vanaf de commandline te installeren is als volgt:
sudo dnf install systemd-ukify
De configuratie voor systemd-boot
aanpassen voor de conversie
In een standaard Fedora installatie is systemd-boot
al geïnstalleerd en doet gedeeltelijk zijn werk, in combinatie met GRUB in een hybride opstelling. Om dit “recht” te trekken moet je de configuratie voor systemd-boot
in /etc/kernel/install.conf
aanpassen. Voeg het volgende toe aan het einde van het bestand:
layout=uki
initrd_generator=dracut
uki_generator=ukify
Als laatste om ervoor te zorgen dat er een nette titel in het bootmenu komt, maak een nieuw bestand /etc/kernel/entry-token
aan met fedora als inhoud:
echo fedora | tee /etc/kernel/entry-token
De plugins voor systemd-boot
aanpassen voor de conversie
In een standaard Fedora installatie voert het systeem bij het installeren van een nieuwe kernel de bestanden uit in /usr/lib/kernel/install.d/
en in /etc/kernel/install.d/
. Die laatste map is standaard leeg, en is er voor lokale aanpassingen.
De standaard bestanden in /usr/lib/kernel/install.d/
zijn bijna allemaal niet nodig of geschikt, dus kies ik ervoor om ze allemaal uit te schakelen om mee te beginnen, en daarna de bestanden die wél nodig zijn weer geschikt te maken.
Voor het allemaal uitschakelen doe ik het volgende:
cd /etc/kernel/install.d/
for f in $(find /usr/lib/kernel/install.d/*.install); do ln -sv /dev/null $(basename $f); done
De bestanden die wél nodig zijn:
50-dracut.install
60-ukify.install
(wat geleverd word doorsystemd-ukify
)90-uki-copy.install
Om deze drie dus weer in te schakelen:
rm /etc/kernel/install.d/{50-dracut,60-ukify,90-uki-copy}.install
Als laatste is er nog één bestand nodig om wat zaken op te schonen bij het updaten van een kernel: /etc/kernel/install.d/95-clean-symvers.install
met het volgende erin:
#!/usr/bin/env bash
COMMAND="${1:?}"
KERNEL_VERSION="${2:?}"
case "$COMMAND" in
remove)
rm -f -- /boot/symvers-$KERNEL_VERSION.xz
;;
esac
exit 0
Maak dit bestand uitvoerbaar, anders word er niks mee gedaan, met sudo chmod +x /etc/kernel/install.d/95-clean-symvers.install
.
Dracut configureren voor de conversie
Dracut zal in principe werken, maar heeft een paar opties die het leven wat makkelijker maken. Maak een nieuw bestand /etc/dracut.conf.d/ukify.conf
aan met de volgende inhoud:
hostonly=yes
kernel_cmdline="$(< /etc/kernel/cmdline)"
do_strip=yes
De ESP (EFI System Partition) opschonen
In een standaard Fedora installatie worden de kernel en initrd bestanden geschreven naar /boot/efi/EFI/(map met je machine id)/
, wat niet de bedoeling is. Dit is opgelost met de configuratieaanpassingen in stap 2, dus kun je de zaken die niet meer nodig zijn in /boot/efi/EFI
weghalen:
MACHINE_ID="$(< /etc/machine-id)"
sudo rm -ri /boot/EFI/
sudo rm -ri /boot/loader/
sudo rm -ri /boot/efi/EFI/$MACHINE_ID/
sudo rm -ri /boot/efi/EFI/loader/entries/*
sudo mkdir /boot/efi/EFI/Linux/
De al bestaande kernels genereren met kernel-install
En als laatste alle al geïnstalleerde kernels (opnieuw) genereren met kernel-install
:
sudo kernel-install -v add-all
Dat was alles. Als alles goed is gegaan heb je nu (maximaal) 3 efi bestanden in de map /boot/efi/EFI/Linux
.