Kernel kompilieren Vorgang Fedora: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „*sudo dnf install gcc flex make bison openssl-devel elfutils-libelf-devel *cd /usr/src *wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.4.ta…“) |
|||
| (4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | * | + | =Benötigte Pakete= |
| + | *dnf groupinstall "Development Tools" | ||
| + | *dnf install bc dwarves rsync kmod zstd elfutils-libelf-devel ncurses-devel openssl-devel | ||
| + | |||
| + | <code>bc</code> und <code>dwarves</code> fehlen in den Entwicklungswerkzeugen und werden vom Bau gebraucht. | ||
| + | |||
| + | =Vorbereitungen= | ||
| + | *sudo -i | ||
*cd /usr/src | *cd /usr/src | ||
| − | *wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6. | + | |
| − | *tar - | + | ==Quellcode herunterladen== |
| − | *cd linux-6. | + | 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. <code>DEBUG_INFO</code> 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 <code>CONFIG_DEBUG_INFO_NONE=y</code> ü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 <code>/boot/loader/entries/</code> ab. <code>make install</code> erzeugt sie zusammen mit der Initramfs selbst; ein Aufruf von <code>grub2-mkconfig</code> 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 <code>uname -r</code> 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 <code>CONFIG_DEBUG_INFO=y</code>, 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 | ||
| + | |||
| + | [[Kategorie:Systemanpassung]] | ||
Aktuelle Version vom 24. August 2026, 17:17 Uhr
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