Package Manager Advanced – APT, Snapd & Dpkg (Artikel 006)
Tiefgehender Einblick in das Paketmanagement unter Debian/Ubuntu. Vergleich zwischen APT und Dpkg, Umgang mit Snaps im Enterprise-Umfeld und fortgeschrittenes Troubleshooting.
# Package Manager Deep Dive: Hinter den Kulissen von APT, Dpkg & Snaps
TL;DR / Management Summary Während
aptdas bequeme Werkzeug für den Alltag ist, istdpkgdie rohe Engine darunter. Im Enterprise-Umfeld müssen Admins verstehen, wie man Pakete manuell repariert, Versionen sperrt (Holds) und wie man mit Ubuntus modernem, aber oft kontroversensnapdumgeht. Ein sauberer Paket-Status ist die Grundvoraussetzung für automatisierte Updates und stabile Server.
# 1. Einführung & Architektur
Der Paket-Stack.
Das Paketmanagement ist in Schichten aufgebaut. apt löst Abhängigkeiten auf und lädt Dateien, während dpkg die eigentliche Installation auf dem Dateisystem durchführt.
# Architektur-Übersicht (Mermaid)
graph TD
A[User Interface: apt / apt-get] --> B[Dependency Solver]
B --> C[Package Cache /var/cache/apt/archives]
C --> D[Backend Engine: dpkg]
D --> E[Package Database /var/lib/dpkg/status]
D --> F[Filesystem /etc, /usr, /bin]
subgraph "Separate Ecosystem"
G[snapd] --> H[Snap Store]
H --> I[Mounted SquashFS Images]
end
# 2. APT vs. Dpkg: Wann was nutzen?
Das Skalpell vs. der Hammer.
# APT (Advanced Package Tool)
- Wann? Standard-Operationen (Install, Upgrade, Search).
- Highlight: Erkennt Abhängigkeiten automatisch und lädt sie aus dem Internet.
# Dpkg (Debian Package)
- Wann? Installation lokaler
.debDateien, Reparatur von Datenbank-Konflikten. - Highlight:
dpkgweiß nichts über Repositories. Es arbeitet nur mit dem, was es hat.
Wichtiger Befehl: Paketinhalte auflisten
# Wo liegen die Dateien von 'nginx'?
dpkg -L nginx
# Zu welchem Paket gehört /usr/bin/python3?
dpkg -S /usr/bin/python3
# 3. Advanced APT: Holds & Cleaning
Kontrolle über Upgrades behalten.
# APT Holds (Pakete einfrieren)
Manchmal darf ein Paket (z.B. eine Datenbank) nicht aktualisiert werden, da die neue Version Inkompatibilitäten aufweist.
# Paket sperren
sudo apt-mark hold postgresql-14
# Liste aller gesperrten Pakete
apt-mark showhold
# Sperre aufheben
sudo apt-mark unhold postgresql-14
# Aufräumen (Disk Space Management)
Auf Servern mit kleinen Root-Partitionen läuft /var/cache/apt/ gerne voll.
# Entfernt alte Pakete, die nicht mehr heruntergeladen werden können
sudo apt autoclean
# Entfernt alle heruntergeladenen .deb Dateien (sicher!)
sudo apt clean
# Entfernt unnötige Abhängigkeiten (Orphans)
sudo apt autoremove --purge
# 4. Snapd im Enterprise-Einsatz
Segen oder Fluch?
Ubuntu forciert Snaps (containerisierte Apps).
- Vorteile: Isolation (SquashFS), einfache Rollbacks, automatische Updates.
- Nachteile: Großer Disk-Footprint, langsameres Startup, keine Integration in
apt.
Für CLI-Tools wie certbot oder kubectl sind Snaps hervorragend. Für Datenbanken oder Webserver empfehlen wir im Enterprise-Umfeld weiterhin klassische apt Pakete oder Docker.
Snap-Management für Admins:
# Updates unterdrücken (Refresh-Window setzen)
snap set system refresh.hold="$(date --date='+30 days' +%Y-%m-%dT%H:%M:%S%:z)"
# Alte Snap-Versionen löschen (Platz sparen)
snap set system refresh.retain=2
# 5. Day-2 Operations: Fehlerbehebung
Wenn die Datenbank klemmt.
# Fehler: “Sub-process /usr/bin/dpkg returned an error code (1)”
Dies passiert meist durch fehlerhafte Post-Installation Skripte.
- Versuch 1:
sudo apt --fix-broken install - Versuch 2:
sudo dpkg --configure -a - Versuch 3 (Brute Force): Manuelle Bearbeitung von
/var/lib/dpkg/info/<paketname>.postinst(Exit 0 am Anfang einfügen).
# Fehler: “Could not get lock /var/lib/dpkg/lock-frontend”
Ein anderer Prozess (z.B. ein automatisches Update) blockiert APT.
# Wer blockiert?
lsof /var/lib/dpkg/lock-frontend
# NIEMALS einfach löschen, wenn der Prozess noch läuft!
# Wenn sicher ist, dass kein Update läuft:
sudo rm /var/lib/dpkg/lock-frontend
# 6. Troubleshooting & “War Stories”
Praxiserfahrung.
# Story 1: “Der volle Boot-Sektor”
Symptom: apt upgrade schlägt fehl mit “No space left on device” in /boot.
Ursache: Debian/Ubuntu sammeln alte Kernel-Images an.
Lösung: apt autoremove löscht alte Kernel. Falls /boot so voll ist, dass apt gar nicht mehr startet, muss man manuell mit dpkg --purge linux-image-X.X.X ran.
# Story 2: “Versions-Mix (Franken-Debian)”
Symptom: Unlösbare Abhängigkeiten nach manuellem Download von .deb Dateien aus verschiedenen Debian-Versionen.
Ursache: Vermischung von Stable, Testing und Drittanbieter-Repos.
Lösung: Nutzen Sie apt-cache policy, um zu sehen, woher die Konflikte kommen. Priorisieren Sie Repositories via Pinning (siehe Artikel 005).
# 7. Fazit & Empfehlung
- Nutzen Sie
aptfür 99% der Aufgaben. - Nutzen Sie
apt-mark holdfür geschäftskritische Services. - Überwachen Sie den Speicherplatz von
/var. - Deaktivieren Sie
snapdauf Servern, wenn Sie es nicht explizit brauchen, um Komplexität zu reduzieren.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Paket suchen | apt search <name> |
| Dateiliste eines Pakets | dpkg -L <name> |
| Defektes Paket re-installieren | apt install --reinstall <name> |
| Alle installierten Pakete listen | dpkg --get-selections |
| Snap Cache leeren | rm -rf /var/lib/snapd/cache/* |