Paketmanagement unter Linux erklärt – apt, dnf, Repos und Signaturen

Paketmanagement unter Linux verstehen: apt und dnf im Vergleich, Repositories einrichten, GPG-Signaturen prüfen, Pakete suchen, installieren, aktualisieren und sicher entfernen.

10 min Lesezeit

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:

  1. Hat das Paket eine gültige Signatur?
  2. Stimmt die Signatur mit dem bekannten Schlüssel des Repositories überein?
  3. 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 xyz installieren 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-update bevor du installierst
  • GPG-Signaturen werden automatisch geprüft – lass das System diese Arbeit machen
  • Drittanbieter-Repos kritisch evaluieren: offiziell, HTTPS, signiert?
  • apt purge (nicht nur remove) für sauberes Entfernen mit Konfigurationsdateien
  • apt autoremove regelmäßig ausführen für ein aufgeräumtes System
  • dnf hat mit der History und Rollback-Funktion einen deutlichen Vorteil gegenüber apt

War dieser Artikel hilfreich?