linux-kernel-advanced kernel compilation installation make vmlinuz

Kernel Compilation & Installation (Artikel 364)

Der operative Prozess der Kernel-Kompilierung. Erfahren Sie alles über das effiziente Bauen des Kernel-Images, die Installation von Modulen und die Integration in den Bootloader.

# Kernel Build: Vom Quellcode zum laufenden System

TL;DR / Management Summary Die Kompilierung des Linux-Kernels ist der “Heavy Lifting” Teil der Systemadministration. Wir nutzen das Tool make, um aus Millionen Zeilen Code das binäre Kernel-Image (vmlinuz) und hunderte externe Module (.ko) zu erzeugen. Ein Senior Admin nutzt die volle Kraft seiner CPU-Kerne durch Parallelisierung (-j) und beherrscht den Installations-Workflow, ohne sein bestehendes System zu gefährden.


# 1. Einführung & Architektur

Die Build-Pipeline.

Der Prozess verläuft in drei großen Schritten:

  1. Kompilierung: Erzeugung des Kernels und der Module.
  2. Installation der Module: Kopieren der .ko Dateien nach /lib/modules/.
  3. Installation des Kernels: Kopieren von vmlinuz nach /boot und Erzeugen des Initramfs.

# Der Build-Prozess (Mermaid)

graph TD
    A[Source Tree + .config] --> B[Command: make -j]
    B --> C[Binary: vmlinux]
    B --> D[Modules: *.ko]
    C --> E[Compression: bzImage]
    E --> F[Installation: /boot/vmlinuz]
    D --> G[Installation: /lib/modules/VERSION/]
    F/G --> H[Update Initramfs]
    H --> I[Update Bootloader GRUB]

# 2. Die Kompilierung

Die CPU glühen lassen.

Nutzen Sie alle verfügbaren Kerne, um die Zeit von Stunden auf Minuten zu verkürzen.

# nproc liefert die Anzahl der Kerne
make -j$(nproc)

Dieser Befehl erzeugt das komprimierte Kernel-Image (meist unter arch/x86/boot/bzImage).


# 3. Installation

Die Dateien an den richtigen Ort bringen.

# Schritt 1: Module installieren

sudo make modules_install
# Dies erstellt den Ordner /lib/modules/$(uname -r)-custom/

# Schritt 2: Kernel installieren

sudo make install
# Dies kopiert den Kernel nach /boot und aktualisiert meist automatisch das Initramfs.

# 4. Day-2 Operations: Bootloader-Integration

Dem System vom neuen Kernel erzählen.

Falls make install den Bootloader nicht automatisch aktualisiert hat:

# Für GRUB

sudo grub-mkconfig -o /boot/grub/grub.cfg # Arch
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/SLES

# Initramfs manuell bauen (falls nötig)

sudo dracut --kver <neue_version> # RHEL/SLES
sudo mkinitcpio -k <neue_version> -g /boot/initramfs-<version>.img # Arch

# 5. Troubleshooting & “War Stories”

Wenn der Build bricht.

# Story 1: “Der Compiler-Abbruch (Missing Headers)”

Symptom: Der Build bricht nach 10 Minuten mit fatal error: openssl/opensslv.h: No such file or directory ab. Ursache: Fehlende Entwickler-Pakete (Header-Dateien) auf dem Host-System. Lösung: Installieren Sie die benötigten -devel oder -dev Pakete (siehe Artikel 362) und starten Sie make erneut. Dank des inkrementellen Builds macht make an der Stelle weiter, an der es abgebrochen ist.

# Story 2: “Das volle /boot Verzeichnis”

Symptom: make install bricht ab mit No space left on device. Ursache: Sie haben bereits 10 verschiedene Kernel-Versionen in /boot, und der neue Kernel (inkl. Initramfs) passt nicht mehr hinein. Lösung: Löschen Sie alte Kernel-Versionen und deren Module: sudo rm /boot/vmlinuz-<alt> und sudo rm -rf /lib/modules/<alt>.


# 6. Fazit & Empfehlung

  • Performance: Nutzen Sie -j. Es ist der wichtigste Hebel für die Build-Zeit.
  • Sicherheit: Benennen Sie Ihren Kernel mit einem Suffix (in menuconfig unter General Setup -> Local version), um ihn klar von den Standard-Kernels der Distribution zu trennen.
  • Integrität: Vergleichen Sie nach der Installation die Version: strings /boot/vmlinuz-<version> | grep "Linux version".

# Anhang: Cheatsheet

Aufgabe Befehl
Bauen (Parallel) make -j$(nproc)
Module installieren sudo make modules_install
Kernel installieren sudo make install
Alles in einem Rutsch make -j8 && sudo make modules_install install
Nur Module bauen make modules
Architektur setzen make ARCH=arm64 ...
Build aufräumen make clean
Alles (inkl. Config) weg make mrproper