Kernel kompilieren Vorgang Fedora: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
*sudo dnf install gcc flex make bison openssl-devel elfutils-libelf-devel
+
=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.4.tar.gz
+
 
*tar -xvzf linux-6.4.tar.gz
+
==Quellcode herunterladen==
*cd linux-6.4
+
Aktuelle longterm-Versionen stehen auf https://www.kernel.org/ – zurzeit die Reihen 6.18, 6.12, 6.6 und 6.1.
== Alte Konfiguration kopieren ==
+
 
* '''cp /boot/config-$(uname -r) .config'''
+
*wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.18.38.tar.xz
* '''yes &quot;&quot; | make oldconfig'''
+
*tar -xJf linux-6.18*.tar.xz
= neuen Kernel konfigurieren =
+
*cd linux-6.18*/
* '''make menuconfig'''
+
 
= Kernel und Module kompilieren =
+
==Alte Konfiguration übernehmen==
* '''-j8''', um 8 Kerne für die Kompilierung zu verwenden (jobs)
+
*cp /boot/config-$(uname -r) .config
* '''make -j8 bzImage modules'''
+
*make olddefconfig
= Kernel und Module installieren =
+
 
* '''make modules_install install'''
+
==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.

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