Kernel kompilieren Vorgang Fedora
Benötigte Pakete
- dnf groupinstall "Development Tools"
- dnf install bc dwarves rsync kmod zstd elfutils-libelf-devel ncurses-devel openssl-devel
bc und dwarves fehlen in den Entwicklungswerkzeugen und werden vom Bau gebraucht.
Vorbereitungen
- sudo -i
- cd /usr/src
Quellcode herunterladen
Aktuelle longterm-Versionen stehen auf https://www.kernel.org/ – zurzeit die Reihen 6.18, 6.12, 6.6 und 6.1.
- wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.18.38.tar.xz
- tar -xJf linux-6.18*.tar.xz
- cd linux-6.18*/
Alte Konfiguration übernehmen
- cp /boot/config-$(uname -r) .config
- make olddefconfig
Die Rocky-Besonderheiten abschalten
Die Konfiguration von Rocky verweist auf Zertifikatsdateien, die nur im RHEL-Paketbau existieren. Ohne diese Änderung bricht der Bau ab:
- scripts/config --set-str SYSTEM_TRUSTED_KEYS ""
- scripts/config --set-str MODULE_SIG_KEY ""
Debug-Informationen abschalten – das ist der Unterschied zwischen rund 50 und rund 3 GByte Platzbedarf. DEBUG_INFO gehört zu einer Auswahlgruppe, in der genau ein Eintrag aktiv ist; der bisherige muss deshalb ausdrücklich mit deaktiviert werden:
- scripts/config --disable DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
- scripts/config --enable DEBUG_INFO_NONE
- make olddefconfig
Kontrolle – es darf nur CONFIG_DEBUG_INFO_NONE=y übrig bleiben:
- grep -E 'DEBUG_INFO' .config | grep -v '^#'
Einen eigenen Namen vergeben
- scripts/config --set-str LOCALVERSION "-xinux"
Kernel konfigurieren
- make menuconfig
Kernel und Module übersetzen
- make -j$(nproc)
Installieren
- make modules_install install
Rocky legt die Bootmenü-Einträge einzeln unter /boot/loader/entries/ ab. make install erzeugt sie zusammen mit der Initramfs selbst; ein Aufruf von grub2-mkconfig ist dafür nicht nötig.
Kontrolle:
- ls -l /boot/vmlinuz-* /boot/initramfs-*
- ls -l /boot/loader/entries/
Fehlt die Initramfs, von Hand nachziehen:
- dracut --force /boot/initramfs-6.18.38-xinux.img 6.18.38-xinux
SELinux-Kontexte der neuen Dateien richtigstellen:
- restorecon -Rv /boot /lib/modules/6.18.38-xinux
Neu starten und prüfen
- reboot
- uname -r
6.18.38-xinux
Startet der neue Kernel nicht, wählt man im Bootmenü den alten Eintrag. Der bisherige Kernel bleibt vollständig erhalten.
Wieder entfernen
- rm -rf /lib/modules/6.18.38-xinux
- rm -f /boot/vmlinuz-6.18.38-xinux /boot/initramfs-6.18.38-xinux.img /boot/System.map-6.18.38-xinux /boot/config-6.18.38-xinux
- rm -f /boot/loader/entries/*6.18.38-xinux*
Nur einen Kernel entfernen, unter dem man nicht gerade läuft – vorher mit uname -r prüfen.
Troubleshooting
- Fehler mit certs/rhel.pem oder ähnlichem
Die Zertifikatsoptionen wurden nicht geleert:
- scripts/config --set-str SYSTEM_TRUSTED_KEYS ""
- scripts/config --set-str MODULE_SIG_KEY ""
- Die Platte läuft voll
- grep -E 'DEBUG_INFO' .config | grep -v '^#'
Steht dort CONFIG_DEBUG_INFO=y, ist noch ein anderer Eintrag der Auswahlgruppe aktiv:
- scripts/config --disable DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
- scripts/config --enable DEBUG_INFO_NONE
- make olddefconfig
- Der neue Kernel startet nicht
Ist Secure Boot aktiv, lehnt die Firmware einen selbstgebauten, unsignierten Kernel ab. Prüfen:
- mokutil --sb-state