linux-ubuntu-debian package-management apt snap dpkg advanced

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 apt das bequeme Werkzeug für den Alltag ist, ist dpkg die 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 kontroversen snapd umgeht. 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 .deb Dateien, Reparatur von Datenbank-Konflikten.
  • Highlight: dpkg weiß 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.

  1. Versuch 1: sudo apt --fix-broken install
  2. Versuch 2: sudo dpkg --configure -a
  3. 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 apt für 99% der Aufgaben.
  • Nutzen Sie apt-mark hold für geschäftskritische Services.
  • Überwachen Sie den Speicherplatz von /var.
  • Deaktivieren Sie snapd auf 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/*