Kernel kompilieren Vorgang Fedora

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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.

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