Gentoo Linux: Compile-from-Source Masterclass (Artikel 200)
Tiefgehende Analyse von Gentoo Linux. Erfahren Sie alles über den Paketmanager Portage, die Macht der USE-Flags und warum das Kompilieren aus dem Quellcode die ultimative System-Kontrolle bietet.
# Gentoo Linux: Wenn jede Sekunde Rechenzeit zählt
TL;DR / Management Summary Gentoo ist die Königsklasse der Linux-Distributionen. Hier gibt es keine fertigen Binärpakete. Jedes Programm wird auf dem Zielsystem aus dem Quellcode kompiliert, exakt optimiert für die vorhandene CPU. Das Herzstück ist Portage mit seinen USE-Flags. Ein Senior Admin nutzt Gentoo nicht für Standard-Webserver, sondern für High-Performance-Cluster, spezialisierte Appliances oder wenn maximale Sicherheit durch minimalen Code-Footprint gefordert ist.
# 1. Einführung & Architektur
Alles wird gebaut.
In Gentoo ist der Installationsprozess das eigentliche Produkt. Man baut sich sein System “Stein für Stein” zusammen.
# Die Portage-Logik (Mermaid)
graph TD
A[Admin: emerge <name>] --> B[Portage: Check USE-Flags]
B --> C[Fetch Source Code from Upstream]
C --> D[Apply Patches]
D --> E[Compile: gcc / clang]
E --> F[Optimize for local CPU: -march=native]
F --> G[Install to System]
subgraph "Customization"
B1[/etc/portage/make.conf] --> B
end
# 2. Die Macht der USE-Flags
Software maßschneidern.
USE-Flags sind Variablen, die bestimmen, welche Features in ein Programm einkompiliert werden.
Beispiel: Sie brauchen nginx, aber ohne Mail-Proxy und ohne Image-Filter?
In /etc/portage/package.use/nginx:
www-servers/nginx -mail -http_image_filter
- Vorteil: Kleineres Binary, weniger Abhängigkeiten, weniger Sicherheitslücken.
- Nachteil: Man muss wissen, welche Features man braucht.
# 3. Portage: Das mächtigste Repo-System
Mehr als nur ein Paketmanager.
Portage basiert auf dem Python-Skript emerge. Es verwaltet Abhängigkeiten, Lizenzen und System-Profile.
| Aufgabe | Befehl |
|---|---|
| System Update | emerge --ask --verbose --update --deep --newuse @world |
| Paket suchen | emerge --search <name> |
| Abhängigkeiten prüfen | emerge -pv <name> |
| Aufräumen | emerge --depclean |
# 4. Day-2 Operations: Kernel & Boot
Den Motor selbst tunen.
In Gentoo kompiliert man seinen Kernel meist manuell.
cd /usr/src/linux
make menuconfig # Nur die Treiber wählen, die man hat
make -j$(nproc)
make install
- Ergebnis: Ein Kernel ohne unnötigen Ballast, der in Millisekunden bootet.
# 5. Troubleshooting & “War Stories”
Wenn die Kompilation scheitert.
# Story 1: “Der 24-Stunden Build”
Symptom: Der Admin will chromium oder libreoffice installieren. Der Server ist seit 10 Stunden bei 100% CPU und wird nicht fertig.
Ursache: Riesige Software-Stacks brauchen auf schwächeren CPUs (oder in VMs) Tage zum Kompilieren.
Lösung: Nutzen Sie Binärpakete (binpkg) für diese Monster-Apps oder nutzen Sie einen Build-Cluster (distcc), um die Last auf mehrere Server zu verteilen.
# Story 2: “Circular Dependencies”
Symptom: Portage weigert sich, ein Update durchzuführen, weil Paket A Paket B braucht, das wiederum Paket A braucht (Zirkelschluss).
Ursache: Inkompatible USE-Flag Änderungen bei einem großen Update.
Lösung: Nutzen Sie --oneshot, um ein Paket ohne Abhängigkeitsprüfung temporär zu bauen, oder schalten Sie das auslösende USE-Flag kurzzeitig ab.
# 6. Fazit & Empfehlung
- Wahl: Nutzen Sie Gentoo, wenn Sie die Hardware zu 100% ausreizen müssen oder wenn Sie eine Distribution für eine Appliance bauen (z.B. eine Firewall, die nur exakt 5 Dienste enthält).
- Lerneffekt: Es gibt keinen besseren Weg, die inneren Abläufe von Linux zu lernen, als eine Gentoo-Installation (Stage 3).
- Wartung: Planen Sie Zeit für Updates ein. Ein Gentoo-System monatlich zu patchen, dauert Stunden (CPU-Zeit).
# Anhang: Cheatsheet
| Aufgabe | Gentoo / CLI Befehl |
|---|---|
| Welt-Update | emerge -auDN @world |
| Paket suchen | eix <name> (nach eix-update) |
| USE-Flags einer App | equery uses <name> |
| Zu wem gehört Datei? | equery belongs /pfad/zu/datei |
| Verwaiste Abhängigkeiten | emerge --depclean -p |
| Config Merging | etc-update oder dispatch-conf |
| System Info | emerge --info |