Paketmanagement unter Linux erklärt – apt, dnf, Repos und Signaturen
Software unter Linux wird nicht aus dem Browser heruntergeladen und manuell installiert – sie kommt aus Paketquellen (Repositories), die der Distributor pflegt. Das Paketmanagement-System prüft Signaturen, löst Abhängigkeiten auf und hält alles konsistent. Wer das versteht, installiert Software schnell, sicher und wartbar.
Dieser Guide erklärt, wie apt (Ubuntu/Debian) und dnf (Fedora/RHEL) funktionieren, wie Repositories aufgebaut sind und wie du Software sicher installierst, aktualisierst und entfernst.
Wie Paketmanagement funktioniert
Der grundlegende Ablauf
Repository (Server)
│
│ 1. apt update / dnf check-update
│ (Paketliste herunterladen)
▼
Lokale Paketliste
│
│ 2. apt install / dnf install
│ (Paket + Abhängigkeiten herunterladen)
▼
Signatur-Prüfung (GPG)
│
│ 3. Installation
▼
Installiertes System
Schlüsselbegriffe
| Begriff | Bedeutung |
|---|---|
| Paket | Komprimiertes Archiv (.deb oder .rpm) mit Software, Metadaten und Installationsskripten |
| Repository | Server mit Paketen, Indizes und Signaturen |
| Abhängigkeit | Andere Pakete, die eine Software zum Laufen braucht |
| GPG-Signatur | Kryptografischer Nachweis, dass das Paket authentisch ist |
| Paketliste | Lokale Datenbank mit verfügbaren Paketen (Cache) |
apt – Paketverwaltung unter Ubuntu/Debian
apt ist das Kommandozeilen-Frontend für den Advanced Package Manager. Es kombiniert die Funktionen von apt-get und apt-cache in einem übersichtlicheren Interface.
Basisoperationen
# Paketlisten aktualisieren (immer zuerst!)
sudo apt update
# Alle installierten Pakete aktualisieren
sudo apt upgrade
# Sicheres Upgrade (entfernt keine Pakete)
sudo apt upgrade
# Vollständiges Upgrade (kann Pakete entfernen/ersetzen)
sudo apt full-upgrade
# Paket installieren
sudo apt install nginx
# Mehrere Pakete gleichzeitig
sudo apt install nginx git curl wget
# Paket entfernen (Konfiguration bleibt)
sudo apt remove nginx
# Paket vollständig entfernen (inkl. Konfiguration)
sudo apt purge nginx
# Nicht mehr benötigte Abhängigkeiten entfernen
sudo apt autoremove
# Heruntergeladene Paketdateien aus Cache löschen
sudo apt autoclean # nur veraltete
sudo apt clean # alle
Pakete suchen und informieren
# Paket suchen
apt search nginx
apt search "web server"
# Informationen zu einem Paket
apt show nginx
# Installierte Version anzeigen
apt list --installed | grep nginx
# Alle installierten Pakete
apt list --installed
# Upgradeable Pakete anzeigen
apt list --upgradable
# Paket-Dateien auflisten (welche Dateien installiert ein Paket?)
dpkg -L nginx
# Welches Paket hat diese Datei installiert?
dpkg -S /usr/sbin/nginx
apt vs. apt-get
| Aufgabe | apt (modern) | apt-get (klassisch) |
|---|---|---|
| Update | apt update |
apt-get update |
| Install | apt install |
apt-get install |
| Remove | apt remove |
apt-get remove |
| Upgrade | apt upgrade |
apt-get upgrade |
apt hat eine schönere Ausgabe mit Fortschrittsbalken und ist für interaktiven Gebrauch gedacht. apt-get ist stabiler für Skripte (Ausgabe ändert sich selten).
dpkg – Das Low-Level-Werkzeug
apt baut auf dpkg auf. Manchmal brauchst du dpkg direkt:
# Einzelne .deb-Datei installieren
sudo dpkg -i paket.deb
# Paket-Infos anzeigen
dpkg -I paket.deb
# Fehlende Abhängigkeiten nach dpkg-Installation beheben
sudo apt install -f
# Alle installierten Pakete mit Versionen
dpkg -l
# Paket-Status prüfen
dpkg -s nginx | grep Status
dnf – Paketverwaltung unter Fedora/RHEL
dnf (Dandified YUM) ist der Paketmanager für Fedora, RHEL, CentOS Stream und Rocky Linux. dnf5 ist seit Fedora 41 der Standard und deutlich schneller als sein Vorgänger.
Basisoperationen
# Paketlisten synchronisieren
sudo dnf check-update
# Alle Pakete aktualisieren
sudo dnf upgrade
# Paket installieren
sudo dnf install nginx
# Mehrere Pakete gleichzeitig
sudo dnf install nginx git curl wget
# Paket entfernen
sudo dnf remove nginx
# Nicht benötigte Abhängigkeiten aufräumen
sudo dnf autoremove
# Cache leeren
sudo dnf clean all
# Cache neu aufbauen
sudo dnf makecache
Pakete suchen und informieren
# Paket suchen (Name und Beschreibung)
dnf search nginx
dnf search "web server"
# Paket-Informationen
dnf info nginx
# Welche Pakete stellen eine Datei bereit?
dnf provides /usr/sbin/nginx
dnf provides "*/nginx"
# Installierte Pakete auflisten
dnf list installed
dnf list installed | grep nginx
# Paketgruppen (Fedora-Spezialität)
dnf grouplist
dnf groupinstall "Development Tools"
# Neueste verfügbare Version anzeigen
dnf list available nginx
dnf vs. apt – Vergleich
| Aufgabe | apt (Debian/Ubuntu) | dnf (Fedora/RHEL) |
|---|---|---|
| Update-Liste | apt update |
dnf check-update |
| Installieren | apt install |
dnf install |
| Entfernen | apt remove |
dnf remove |
| Komplett entfernen | apt purge |
dnf remove + dnf autoremove |
| Suchen | apt search |
dnf search |
| Info anzeigen | apt show |
dnf info |
| Datei → Paket | dpkg -S /pfad |
dnf provides /pfad |
| History | cat /var/log/apt/history.log |
dnf history |
| Rollback | — | dnf history rollback <id> |
DNF-History – Einzigartiges Feature
# Alle Transaktionen anzeigen
dnf history
# Detail einer Transaktion
dnf history info 15
# Transaktion rückgängig machen (!)
sudo dnf history undo 15
# Bis zu einem Zeitpunkt zurückrollen
sudo dnf history rollback 10
Repositories einrichten und verwalten
Ubuntu/Debian – sources.list
# Haupt-Repository-Datei
cat /etc/apt/sources.list
# Moderne Variante (Ubuntu 22.04+): einzelne .sources-Dateien
ls /etc/apt/sources.list.d/
# Format einer Repository-Zeile:
# deb [options] URI suite components
# deb http://archive.ubuntu.com/ubuntu noble main restricted universe multiverse
# ↑Typ ↑URL ↑Codename ↑Komponenten
# Ubuntu-Komponenten:
# main = offiziell unterstützte freie Software
# restricted = unfrei, aber offiziell unterstützt (Treiber)
# universe = Community-gepflegte freie Software
# multiverse = unfreie Software
# Repositories anzeigen
sudo apt policy
grep -r "^deb " /etc/apt/sources.list /etc/apt/sources.list.d/
Fedora/RHEL – .repo-Dateien
# Repositories anzeigen
dnf repolist
dnf repolist --all # auch deaktivierte
# Repository-Dateien
ls /etc/yum.repos.d/
# Einzelnes Repository anzeigen
cat /etc/yum.repos.d/fedora.repo
GPG-Signaturen: Warum sie wichtig sind
Jedes Paket in einem seriösen Repository ist mit einem GPG-Schlüssel signiert. Bevor ein Paket installiert wird, prüft der Paketmanager:
- Hat das Paket eine gültige Signatur?
- Stimmt die Signatur mit dem bekannten Schlüssel des Repositories überein?
- Entspricht der Hash des Pakets dem im Index?
Signatur-Vertrauenskette
Repository-Betreiber
│
│ signiert Paket-Index mit privatem GPG-Schlüssel
▼
Paket-Index + Signatur
│
│ Du fügst öffentlichen Schlüssel einmalig hinzu
▼
apt/dnf prüft Signatur automatisch bei jedem Update/Install
Schlüssel unter Ubuntu/Debian verwalten
# Installierte Schlüssel anzeigen
sudo apt-key list # veraltet
ls /etc/apt/trusted.gpg.d/ # modern
# Moderner Weg: Schlüssel als separate Datei speichern
# (nicht in den globalen trusted.gpg Ring!)
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://example.com/KEY.gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg
sudo chmod 644 /etc/apt/keyrings/example.gpg
# In der sources-Datei auf den Schlüssel verweisen:
echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://repo.example.com stable main" | \
sudo tee /etc/apt/sources.list.d/example.list
Schlüssel unter Fedora/RHEL
# dnf prüft GPG automatisch basierend auf repo-Datei
# gpgcheck=1 und gpgkey= in der .repo-Datei
# Importierte Schlüssel anzeigen
rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n'
# Schlüssel manuell importieren
sudo rpm --import https://repo.example.com/RPM-GPG-KEY-example
Sicherheitsregel: Importiere nie einen GPG-Schlüssel, wenn du die Quelle nicht kennst. Verifiziere Schlüssel-Fingerprints immer über die offizielle Webseite des Projekts – idealerweise über eine sichere Verbindung oder einen anderen Kanal.
Drittanbieter-Repositories sicher einbinden
Manchmal braucht man Software, die nicht in den offiziellen Repos ist (z.B. aktuelle Versionen von Node.js, Docker, PostgreSQL).
Sicherheits-Checkliste für Drittanbieter-Repos
Bevor du ein fremdes Repository einbindest:
- Ist es das offizielle Repository des Projekts? (Nicht ein Spiegel)
- Gibt es eine GPG-Signatur und ein transparentes Schlüsselverwaltungsverfahren?
- Wird HTTPS verwendet?
- Hat das Projekt eine aktive Community und regelmäßige Updates?
- Weißt du, was
sudo apt install xyzinstallieren wird? (apt show xyz)
Beispiel: Docker offiziell einbinden (Ubuntu)
# 1. Abhängigkeiten installieren
sudo apt update
sudo apt install -y ca-certificates curl
# 2. Keyrings-Verzeichnis erstellen
sudo install -m 0755 -d /etc/apt/keyrings
# 3. GPG-Schlüssel herunterladen und installieren
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 4. Repository hinzufügen
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. Installieren
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Repository entfernen
# Ubuntu/Debian: Datei aus sources.list.d löschen
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc
sudo apt update
# Fedora: Repository deaktivieren
sudo dnf config-manager --disable docker-ce-stable
# Repository-Datei löschen
sudo rm /etc/yum.repos.d/docker-ce.repo
PPAs (Ubuntu-spezifisch)
PPAs (Personal Package Archives) auf Launchpad sind Ubuntu-spezifisch. Mit Vorsicht verwenden!
# PPA hinzufügen
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.13
# PPA entfernen
sudo add-apt-repository --remove ppa:deadsnakes/ppa
# Pakete die aus diesem PPA kamen, auf Distro-Version zurücksetzen:
sudo apt install ppa-purge
sudo ppa-purge ppa:deadsnakes/ppa
Pakete suchen und informieren
apt-cache und apt für Suche
# Suche in Name und Beschreibung
apt search "text editor"
# Nur exakten Paketnamen suchen
apt list paketname
# Paket-Details anzeigen
apt show vim
# Was installiert ein Paket?
dpkg -L vim | head -20
# Welches Paket hat eine Datei installiert?
dpkg -S /usr/bin/vim
# Online: packages.ubuntu.com / packages.debian.org
dnf für Suche
# Allgemeine Suche
dnf search vim
# Nur nach Paketnamen
dnf list "vim*"
# Welches Paket liefert einen Befehl?
dnf provides vim
# Alle Pakete eines Projekts
dnf list "python3*"
Abhängigkeiten verstehen
Pakete sind auf andere Pakete angewiesen – das nennt sich Abhängigkeit (Dependency).
# Abhängigkeiten eines Pakets anzeigen (Ubuntu)
apt show nginx | grep "Depends"
# Depends: libpcre3, libssl3, zlib1g, adduser, init-system-helpers
# Vollständiger Abhängigkeitsbaum
apt-rdepends nginx | head -30
# Welche Pakete hängen von diesem ab? (reverse dependencies)
apt rdepends nginx
# Fedora
dnf deplist nginx
dnf repoquery --requires nginx
dnf repoquery --whatrequires nginx
Broken Dependencies beheben
# Ubuntu/Debian: kaputte Abhängigkeiten reparieren
sudo apt install -f # -f = fix-broken
sudo dpkg --configure -a # unterbrochene Installationen abschließen
# Fedora
sudo dnf distro-sync # Paketversionen mit Repos abgleichen
Häufige Probleme und Lösungen
E: Unable to lock the administration directory
# Fehler: Anderer apt-Prozess läuft (z.B. automatisches Update)
sudo fuser /var/lib/dpkg/lock-frontend
# Warten bis der Prozess fertig ist, oder:
# Nur wenn du sicher bist, dass kein apt läuft:
sudo rm /var/lib/apt/lists/lock
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock
sudo dpkg --configure -a
sudo apt update
W: GPG error: ... NO_PUBKEY
# Fehlender GPG-Schlüssel
# W: GPG error: https://repo.example.com stable Release:
# The following signatures couldn't be verified because
# the public key is not available: NO_PUBKEY ABC123DEF456
# Schlüssel importieren (Schlüssel-ID aus Fehlermeldung)
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABC123DEF456
# Moderner Weg: über die offizielle Projektseite den Schlüssel herunterladen
E: Package 'xyz' has no installation candidate
# Paket nicht in aktivierten Repositories
# 1. Repos aktualisieren
sudo apt update
# 2. Richtige Schreibweise?
apt search xyz
# 3. In welchem Repo liegt das Paket?
# Ubuntu: universe/multiverse aktiviert?
sudo add-apt-repository universe
sudo apt update
# 4. Vielleicht anders benannt auf dieser Distribution
Paket auf bestimmte Version pinnen (Ubuntu/Debian)
# Version eines Pakets festhalten (kein Upgrade)
sudo apt-mark hold nginx
# Version wieder freigeben
sudo apt-mark unhold nginx
# Gehaltene Pakete anzeigen
apt-mark showhold
# Bestimmte Version installieren
apt list -a nginx # verfügbare Versionen
sudo apt install nginx=1.28.0-1
dnf: Error: Transaction check error
# Konflikte oder korrupte Pakete
sudo dnf clean all
sudo dnf makecache
sudo dnf distro-sync
# Beschädigte RPM-Datenbank reparieren
sudo rpm --rebuilddb
Fazit
Paketmanagement ist das Herzstück jeder Linux-Distribution. Die wichtigsten Punkte:
- Immer erst
apt update/dnf check-updatebevor du installierst - GPG-Signaturen werden automatisch geprüft – lass das System diese Arbeit machen
- Drittanbieter-Repos kritisch evaluieren: offiziell, HTTPS, signiert?
apt purge(nicht nurremove) für sauberes Entfernen mit Konfigurationsdateienapt autoremoveregelmäßig ausführen für ein aufgeräumtes System- dnf hat mit der History und Rollback-Funktion einen deutlichen Vorteil gegenüber apt