Linux Kernel kompilieren: Unterschied zwischen den Versionen
K |
K (→Menuconfig) |
||
Zeile 74: | Zeile 74: | ||
<br> | <br> | ||
Kernelkonfiguration als /proc/config.gz anbieten: <br> | Kernelkonfiguration als /proc/config.gz anbieten: <br> | ||
+ | <code>General Setup -> Kernel .config support</code> <br> | ||
+ | <br> | ||
+ | Kernelkompression wählen: <br> | ||
<code>General Setup -> Kernel .config support</code> <br> | <code>General Setup -> Kernel .config support</code> <br> | ||
<br> | <br> | ||
Festlegen ob auf Größe oder Geschwindigkeit optimiert werden soll: <br> | Festlegen ob auf Größe oder Geschwindigkeit optimiert werden soll: <br> | ||
<code>General Setup -> Compiler optimization level</code> <br> | <code>General Setup -> Compiler optimization level</code> <br> | ||
+ | <br> | ||
+ | Aktivieren Sie den Schutz vor freelist exploit methods: <br> | ||
+ | <code>Harden slab freelist metadata</code> <br> | ||
<br> | <br> | ||
Stellen Sie sicher, dass diese Option '''nicht''' aktiviert ist: <br> | Stellen Sie sicher, dass diese Option '''nicht''' aktiviert ist: <br> | ||
Zeile 89: | Zeile 95: | ||
<code>Security Options -> AppArmor Support</code> <br> | <code>Security Options -> AppArmor Support</code> <br> | ||
<br> | <br> | ||
+ | |||
==Linux Kompilieren== | ==Linux Kompilieren== | ||
<pre style="background-color: lightblue;">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</pre> | <pre style="background-color: lightblue;">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</pre> |
Version vom 16. Oktober 2020, 13:42 Uhr
In diesem Artikel geht es darum den Linux Kernel selbst zu bauen.
Inhaltsverzeichnis
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
sudo dnf install gcc flex make bison openssl-devel elfutils-libelf-devel ncurses-devel qt-devel rpm-build
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 Root Rechte für das Konfigurieren und Kompilieren 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
Den Kernelnamen festlegen:
General Setup -> Local version - append to kernel release
Kernelkonfiguration als /proc/config.gz anbieten:
General Setup -> Kernel .config support
Kernelkompression wählen:
General Setup -> Kernel .config support
Festlegen ob auf Größe oder Geschwindigkeit optimiert werden soll:
General Setup -> Compiler optimization level
Aktivieren Sie den Schutz vor freelist exploit methods:
Harden slab freelist metadata
Stellen Sie sicher, dass diese Option nicht aktiviert ist:
Processor type and features -> Ancient loading interface
Anmerkung: Wir empfehlen den wechsel von SELinux zu AppAmor. Bitte beachten Sie, dass Sie um AppAmor nutzen zu können, dies noch zusätzlich auf Ihrem System installieren und konfigurieren müssen!
Deaktivieren von NSA/SELinux:
Security Options -> NSA SELinux Support
Aktivieren von AppArmor:
Security Options -> AppArmor Support
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 / Ubuntu
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
CentOS / Fedora / RHEL
sudo make install
sudo make modules_install
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
Grub update
Nun ist es an der Zeit dem Bootloader zu sagen, dass es neue Kernel gibt, die er starten kann.
Dafür muss ein Grub Update gemacht werden:
sudo grub-mkconfig -o /boot/grub/grub.cfg