Das Kompilieren eines eigenen Kernels hat seine Vor- und Nachteile. Neue Linux-Benutzer/Administratoren finden es jedoch schwierig, einen Linux-Kernel zu kompilieren.
Wie ein Linux Kernel im Detail funktioniert, was ein Initial RamDisk macht, lernst du alles in meinen LPIC-2 Bootcamp , LPIC-1 & LPIC-2 Masterclass Kursen auf Udemy oder als Youtube Expert Mitglied.
Disclaimer: Ich empfehle dir, immer ein Backup deiner wichtigsten Daten zu machen
Um einen Kernel zu kompilieren, muss man ein paar Dinge verstehen und dann ein paar Befehle eingeben. Diese Schritt-für-Schritt-Anleitung beschreibt die Kompilierung des Linux-Kernels Version 6.x unter Ubuntu oder Debian Linux. Die folgenden Anleitungen wurden erfolgreich auf RHEL, CentOS 7/8 (und Klonen), Debian, Ubuntu und Fedora getestet. Die Anleitungen sind jedoch für jede andere Linux-Distribution gleich.
So kompilierst und installierst du den Linux-Kernel 6.x
Um den neuesten Linux-Kernel aus den Quellen zu kompilieren und zu installieren, gehst du wie folgt vor:
- Hol dir den neuesten Kernel von kernel.org
- Überprüfe den Kernel
- Entpacke den Kernel-Tarball
- Kopiere die bestehende Linux-Kernel-Konfigurationsdatei
- Kompiliere und baue Linux-Kernel 6.x
- Linux-Kernel und Module (Treiber) installieren
- Grub-Konfiguration aktualisieren
- Das System neu starten
Schritt 1. Hol dir den aktuellen Quellcode des Linux-Kernels
Besuche die offizielle Projektseite und lade den aktuellen Quellcode herunter. Klicke auf den großen gelben Button mit der Aufschrift "Latest Stable Kernel".
Der Dateiname lautet linux-x.y.z.tar.gz, wobei x.y.z die aktuelle Versionsnummer des Linux-Kernels ist. Zum Beispiel steht die Datei linux-6.0-rc2.tar.xz für die Linux-Kernel-Version 6.0-rc2. Verwende den Befehl wget, um den Quellcode des Linux-Kernels herunterzuladen:
wget https://git.kernel.org/torvalds/t/linux-6.0-rc2.tar.gz
Schritt 2. tar.gz-Datei entpacken
Du musst den Quellcode nicht unbedingt in /usr/src entpacken. Du kannst den Quellcode mit dem folgenden tar-Befehl in dein $HOME-Verzeichnis oder ein anderes Verzeichnis entpacken:
tar xvfz linux-6.0-rc2.tar.gz
Hinweis: Normalerweise könnte man jetzt die PGP Signatur vergleichen, da es den jedoch für die beta/rc Versionen nicht gibt, ist dies noch nicht möglich.
Schritt 3. Konfiguriere die Linux-Kernel-Funktionen und -Module
Bevor du mit der Erstellung des Kernels beginnen kannst, musst du die Funktionen des Linux-Kernels konfigurieren. Außerdem musst du angeben, welche Kernelmodule (Treiber) du für dein System benötigst. Diese Aufgabe kann für einen neuen Benutzer überfordernd sein. Ich empfehle dir, die bestehende Konfigurationsdatei mit dem Befehl cp zu kopieren:
cd linux-6*
cp -v /boot/config-$(uname -r) .config
Schritt 4. Installiere die erforderlichen Compiler und andere Tools
Um den Linux-Kernel zu kompilieren, musst du Entwicklungswerkzeuge wie den GCC-Compiler und verwandte Tools installieren.
Auf einem Debian/Ubuntu Linux
Gib den folgenden apt- oder apt-get-Befehl ein, um sie zu installieren:
sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev
Auf einem CentOS/RHEL/Oracle/Fedora Linux
dnf group install "Development Tools"
oder
dnf groupinstall "Development Tools"
Weitere Pakete die benötigt werden:
dnf install ncurses-devel bison flex elfutils-libelf-devel openssl-devel
Schritt 5. Den Kernel konfigurieren
Jetzt kannst du die Kernelkonfiguration starten, indem du einen der folgenden Befehle im Quellcodeverzeichnis eingibst:
- make menuconfig - Textbasierte Farbmenüs, Radiolisten und Dialoge. Diese Option ist auch auf einem Remote-Server nützlich, wenn du den Kernel aus der Ferne kompilieren willst.
- make xconfig - X windows (Qt) basiertes Konfigurationstool, funktioniert am besten unter dem KDE Desktop
- make gconfig - X windows (Gtk) basiertes Konfigurationstool, das am besten unter Gnome Dekstop funktioniert.
Wenn du zum Beispiel den Befehl make menuconfig ausführst, erscheint der folgende Bildschirm:
Du musst je nach Bedarf verschiedene Optionen auswählen. Jede Konfigurationsoption ist mit einer HILFE-Schaltfläche verknüpft, also wähle die Hilfe-Schaltfläche, um Hilfe zu erhalten. Bitte beachte, dass "make menuconfig" optional ist. Ich habe es hier nur zu Demonstrationszwecken verwendet.
Mit dieser Option kannst du bestimmte Funktionen oder Kernel-Treiber aktivieren oder deaktivieren. Es ist leicht möglich, die Unterstützung für einen Gerätetreiber oder eine Option zu entfernen und so einen kaputten Kernel zu bekommen. Wenn zum Beispiel der ext4-Treiber aus der Kernel-Konfigurationsdatei entfernt wird, kann es sein, dass ein System nicht mehr bootet. Im Zweifelsfall solltest du die Unterstützung einfach im Kernel belassen.
Nur bei Ubuntu/Debian - Trusted Keys entfernen
Da wir den Kernel von den Entwicklern des kernel.org beziehen und nicht über die Ubuntu/Debian Repository, müssen wir die Trusted Keys aus der .config Datei entfernen. Alternativ kannst du dies auch über die make menuconfig entfernen.
Nun bearbeiten wir die Datei welche wir in unser Verzeichnis kopiert haben
nano .config
Suche in der Datei nach Folgendem:
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
Entferne die Trusted Keys damit es dann so aussieht:
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
Alternativ kannst du auch über den Menuconfig-Eintrag den Trusted Key entfernen.
Main menu -> Cryptographic API -> Certificates for signature checking -> Provide system-wide ring of trusted keys
Schritt 6. So kompilierst du einen Linux-Kernel
Ich empfehle vor der Kompilierung, wenn du mittels SSH auf einem System angemeldet bist, screen oder tmux zu verwenden. Damit läuft bei einem Verbindungsabbruch der Kompilierung-Vorgang weiter. Beginne mit der Kompilierung und gib ein, um ein komprimiertes Kernel-Image zu erstellen:
screen oder tmux
Wenn du 1 CPU Kern hast:
make
Wenn du mehrere CPU Kerne hast gib die Anzahl an Kernen/Thread an, um die kompilierung zu beschleunigen.
make -j 4
nproc ermittle die Anzahl der Threads oder CPU-Kerne und nutzt das volle Potenzial der CPU.
make -j $(nproc)
Das Kompilieren und Erstellen des Linux-Kernels nimmt viel Zeit (Stunden) in Anspruch. Die Erstellungszeit hängt von den Ressourcen deines Systems ab, z. B. von den verfügbaren CPU-Kernen, RAM und der aktuellen Systemlast. Habe also etwas Geduld.
Installiere die Linux-Kernel-Module
make modules_install
Den Linux-Kernel installieren
Bis jetzt haben wir den Linux-Kernel kompiliert und die Kernel-Module installiert. Nun ist es an der Zeit, den Kernel selbst zu installieren:
make install
Es installiert drei Dateien in das /boot-Verzeichnis und ändert außerdem die Konfigurationsdatei deines Kernels grub:
- initramfs-6.0.img
- System.map-6.0
- vmlinuz-6.0
Schritt 6. Grub-Konfiguration aktualisieren
Du musst die Konfigurationen des Grub 2 Bootloaders ändern. Gib den folgenden Befehl an einer Shell-Eingabeaufforderung entsprechend deiner Linux-Distribution ein:
CentOS/RHEL/Oracle/Scientific und Fedora Linux
grub2-mkconfig -o /boot/grub2/grub.cfg
grubby --set-default /boot/vmlinuz-6.0
Du kannst die Details mit den folgenden Befehlen bestätigen:
grubby --info=ALL | more
grubby --default-index
grubby --default-kernel
Debian/Ubuntu Linux Derivate (optional)
Die folgenden Befehle sind optional, da make install alles für dich erledigt, aber hier nur aus historischen Gründen aufgeführt:
update-initramfs -c -k 6.0.0-rc2
update-grub
So baust und installierst du den neuesten Linux-Kernel aus dem Quellcode.
Der Prozess dauert einige Zeit, aber jetzt hast du einen angepassten Linux-Kernel für dein System. Lass uns das System neu starten und boote mit deinem neuen Kernel.
Gib einfach den Befehl reboot oder shutdown ein:
reboot
Überprüfe die neue Linux-Kernel-Version nach dem Neustart:
uname -r
uname -a
Du hast verschiedene Schritte durchgeführt, um den Linux-Kernel aus dem Quellcode zu erstellen, und der kompilierte Kernel sollte auf deinem System laufen. Ich empfehle dir, immer ein Backup deiner wichtigen Daten zu machen und die Seite kernel.org für weitere Informationen zu besuchen.