Linux Kernel kompilieren: Unterschied zwischen den Versionen

Aus Secure Solutions Wiki
Wechseln zu:Navigation, Suche
K
K
Zeile 107: Zeile 107:
 
Installation des Linux Image: <br>
 
Installation des Linux Image: <br>
 
<code>cp -v arch/x86_64/boot/bzImage /boot/vmlinuz-kernelname</code> <br>
 
<code>cp -v arch/x86_64/boot/bzImage /boot/vmlinuz-kernelname</code> <br>
 
+
<br>
 
Erstelle initramfs Konfiguration: <br>
 
Erstelle initramfs Konfiguration: <br>
<code>cp /etc/mkinitcpio.d/linux.preset /etc/mkinitcpio.d/linux-kernelname.preset</code> <br>
+
<code>cp /etc/mkinitcpio.d/linux.preset /etc/mkinitcpio.d/linux-kernelname.preset</code> <br>  
 
+
<br>
Bearbeiten Sie die Einträge von /etc/mkinitcpio.d/linux-kernelname.preset: <br>
+
Bearbeiten Sie die Einträge von /etc/mkinitcpio.d/linux-kernelname.preset und fügen Sie Ihren Kernelnamen hinzu: <br>
 
<code># mkinitcpio preset file for the 'linux' package </code> <br>
 
<code># mkinitcpio preset file for the 'linux' package </code> <br>
 
<code>ALL_config="/etc/mkinitcpio.conf" </code> <br>
 
<code>ALL_config="/etc/mkinitcpio.conf" </code> <br>
Zeile 122: Zeile 122:
 
<code>fallback_image="/boot/initramfs-linux-kernelname-fallback.img" </code> <br>
 
<code>fallback_image="/boot/initramfs-linux-kernelname-fallback.img" </code> <br>
 
<code>fallback_options="-S autodetect"</code> <br>
 
<code>fallback_options="-S autodetect"</code> <br>
 
+
<br>
 
Baue initramfs: <br>
 
Baue initramfs: <br>
 
<code>sudo mkinitcpio -p linux-kernelname</code>
 
<code>sudo mkinitcpio -p linux-kernelname</code>

Version vom 16. Oktober 2020, 11:57 Uhr

In diesem Artikel geht es darum den Linux Kernel selbst zu bauen.

Linux Quelltext besorgen

Als ersten Schritt besorgen wir den Quelltext (auch Sourcecode) von Linux. Diesen findet man bei Kernel.org.
Wir empfehlen den neusten stabilen Kernel zu wählen.

Das Kompilieren vorbereiten

Stellen Sie zunächst sicher, dass Sie die neusten Updates in Ihr System eingespielt haben.

Abhängigkeiten installieren

Debian / Ubuntu

Mit Root Privilegien
apt install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

CentOS / Fedora / RHEL

Mit Root Privilegien
yum groupinstall "Development Tools"
yum install ncurses-devel
yum install qt-devel"
yum install unifdef

Arch

Mit Root Privilegien
pacman -S base-devel

Entpacken

Es sollte ein neues Verzeichnis erstellt werden um den Kernel zu bauen.
mkdir linux

Im nächsten Schritt wird das Linux Tar Archiv (auch Tarball) entpackt.
tar -xvf linux-5.8.15.tar.xz

Abschluss der Vorbereitung

Das Verzeichnis zum Kernelsource wechseln.
cd linux-5.8.15

Um die Vorbereitung zum Kompilieren abzuschließen, sollte mrproper ausgeführt werden.
make mrproper

Linux Konfiguration

Anmerkung: Es ist nicht notwendig für das Konfigurieren und Kompilieren Root Privilegien zu verwenden.

Die Konfiguration des Kernels wird als .config gespeichert.

Eine laufende Konfiguration verwenden

In einigen Fällen ist die derzeit laufende Kernelkonfiguration in /proc/ verfügbar. Um auf /proc/config.gz zugreifen zu können, muss die Option im Kernel aktiv sein:
General Setup -> Kernel .config Support

Laufende Kernelkonfiguration verwenden:
zcat /proc/config.gz > .config

Alternativ kann man sich in /usr/src/ umsehen. Dort sollte ein Verzeichnis namens Linux oder Kernel zu finden sein. In diesem befindet sich eine generische .config Datei.

Eine angepasste Konfiguration erstellen

Nur aktive Module verwenden

Um eine möglichst perfekte Kernel Konfiguration zu erstellen, gehen Sie sicher, dass alle Geräte, die Sie verwenden möchten, zu diesem Zeitpunkt mit Ihrem System verbunden sind! Mittels make localmodconfig ist es möglich, nur die derzeit laufenden Module (auch Treiber) für das Kompilieren zu wählen.

Anmerkung: Localmodconfig reicht nicht aus um einen guten Kernel zu bauen! Betrachten Sie es nur als gute Grundlage für die weitere Konfiguration.

Wenn Sie localmodconfig verwenden, sollten Sie auf jeden Fall folgendes ans Ende Ihrer .config Datei hinzufügen:
# DOS/FAT Filesystems
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"

Oft gibt es Probleme mit dem Dateisystem Fat32, welches sich heutzutage noch immer großer Verbreitung erfreut. Diese Zeilen sollten alle Fat Probleme vermeiden.

Anmerkung: FAT ist das einzige Dateisystem, welches auf Windows, Mac OS X, GNU/Linux und BSD läuft!

Menuconfig

Anmerkung: menuconfig erstellt eine .config Datei, wenn Sie sie noch nicht existiert. Diese kann auch verwendet werden um einen sog. Generic Kernel zu bauen. Dieser ist jedoch nicht besonders auf Ihr System optimiert und enthält viele Module die Sie niemals verwenden werden oder wollen.

Mit menuconfig eine Kernelkonfigurationsdatei bearbeiten/erstellen:
make menuconfig

Linux Kompilieren

Anmerkung: Sie können mit dem Parameter -j weitere Kerne Ihrer CPU zum kompilieren verwenden, um den Vorgang zu beschleunigen. In den meisten Fällen ist die beste Option, die Anzahl Ihrer Kerne + 1. Dies muss jedoch nicht immer die richtige Lösung sein. Beispiel bei einem Quadcore: make -j5

Linux kompilieren (Alle Distributionen)

make

Linux kompilieren (Debian)

Auf Debian kann ein .deb Paket vom Linux Kernel erstellt werden:
make deb-pkg

Linux installieren

Debian

Die gebauten .deb Pakete einspielen:
Navigieren Sie in das Verzeichnis über dem Kernel Source.
cd ..

Anmerkung: Es reicht aus nur das Linux Image zu installieren. Der Rest ist optional.

Installation des Linux Kernel:
sudo dpkg -i linux-image-5.8.15-kernelname_5.8.15-kernelname-1_amd64.deb

Installation der Linux Kernel Headers:
sudo dpkg -i linux-headers-5.8.15-kernelname_5.8.15-kernelname-1_amd64.deb

Installation von libc-dev:
sudo dpkg -i linux-libc-dev-5.8.15-kernelname_5.8.15-kernelname-1_amd64.deb

Installation Linux Kernel Debugging:
sudo dpkg -i linux-image-5.8.15-kernelname-dbg_5.8.15-kernelname-1_amd64.deb

Arch

Installation der Module:
sudo make modules_install

Installation des Linux Image:
cp -v arch/x86_64/boot/bzImage /boot/vmlinuz-kernelname

Erstelle initramfs Konfiguration:
cp /etc/mkinitcpio.d/linux.preset /etc/mkinitcpio.d/linux-kernelname.preset

Bearbeiten Sie die Einträge von /etc/mkinitcpio.d/linux-kernelname.preset und fügen Sie Ihren Kernelnamen hinzu:
# mkinitcpio preset file for the 'linux' package
ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux-kernelname"
PRESETS=('default' 'fallback')
#default_config="/etc/mkinitcpio.conf"
default_image="/boot/initramfs-linux-kernelname.img"
#default_options=""
#fallback_config="/etc/mkinitcpio.conf"
fallback_image="/boot/initramfs-linux-kernelname-fallback.img"
fallback_options="-S autodetect"

Baue initramfs:
sudo mkinitcpio -p linux-kernelname