dnf (Dandified YUM) ist der Default-Paketmanager der Fedora- und RHEL-Familie. Er löst Abhängigkeiten auf, installiert und entfernt RPM-Pakete, verwaltet Repositories und kann — anders als apt — komplette Transaktionen rückgängig machen. Seit Fedora 22 (2015) hat dnf den älteren yum vollständig abgelöst; ab Fedora 41 wechselt das Ökosystem auf dnf5 mit leicht angepasster Syntax.

Was dnf macht

dnf ist die zentrale Schnittstelle, über die Software auf Fedora, RHEL und ihren Derivaten installiert, aktualisiert und entfernt wird. Es löst Paketabhängigkeiten auf, lädt RPM-Dateien aus den konfigurierten Repositories und überprüft GPG-Signaturen, bevor Pakete auf das System gelangen. Im Hintergrund arbeitet dnf mit der Bibliothek libdnf (in C geschrieben) und nutzt rpm als Low-Level-Werkzeug für die eigentliche Paketinstallation.

dnf ist der Nachfolger von yum (Yellowdog Updater, Modified). yum war jahrelang der Standard-Paketmanager der RHEL-Familie, hatte aber Schwächen bei der Performance und beim Abhängigkeits-Solver. Mit Fedora 22 (2015) wurde dnf zum Default; in RHEL 7 und älter ist yum noch der Standard, ab RHEL 8 ist dnf gesetzt — der Befehl yum existiert dort nur noch als Alias auf dnf.

Distros, die dnf nutzen

Die RHEL-Familie und ihre Community-Derivate teilen sich dnf als gemeinsamen Paketmanager. Damit ist dnf neben apt der zweite große Player im Linux-Ökosystem.

DistributionErste Version mit dnfAnmerkung
Fedora Workstation/Server22 (2015)Treibt die dnf-Entwicklung voran
RHEL8 (2019)Vorher yum, in RHEL 7 noch Standard
CentOS Stream8 (2019)Upstream für RHEL
Rocky Linux8 (2021)Binärkompatibles RHEL-Derivat
AlmaLinux8 (2021)Binärkompatibles RHEL-Derivat
Oracle Linux8 (2019)Mit eigenen Erweiterungen
Amazon Linux2023Vorher yum (Amazon Linux 2)

Alle diese Distributionen nutzen das RPM-Paketformat (.rpm-Dateien) und das gemeinsame Repository-Format. Pakete sind zwischen ihnen oft, aber nicht immer kompatibel — Versionen von Bibliotheken und Build-Optionen können sich unterscheiden.

Wichtige Befehle

dnf folgt dem Schema dnf VERB [OPTIONEN] [PAKET]. Schreibende Befehle benötigen sudo, lesende meist nicht.

BefehlWirkung
dnf install PAKETInstalliert ein oder mehrere Pakete inklusive Abhängigkeiten
dnf remove PAKETEntfernt ein Paket; nicht mehr benötigte Abhängigkeiten werden mit entfernt
dnf update / dnf upgradeAktualisiert alle installierten Pakete (beide Befehle sind identisch)
dnf upgrade --refreshErzwingt vorher ein Repo-Refresh, ignoriert den Cache
dnf search BEGRIFFSucht in Paketnamen und -beschreibungen
dnf info PAKETZeigt Detailinformationen zu einem Paket
dnf list installedListet alle installierten Pakete
dnf list availableListet alle in den Repos verfügbaren Pakete
dnf list upgradesListet anstehende Updates
dnf repolistZeigt aktive Repositories
dnf historyZeigt vergangene Transaktionen
dnf history rollback IDMacht eine Transaktion rückgängig
dnf autoremoveEntfernt verwaiste Abhängigkeiten
dnf downgrade PAKETSetzt ein Paket auf eine ältere Version zurück
dnf mark install PAKETMarkiert ein Paket als manuell installiert (schützt vor autoremove)
dnf group install GRUPPEInstalliert eine vordefinierte Paketgruppe
dnf clean allLeert den Paket- und Metadaten-Cache

Repository-Verwaltung

Repositories sind in Dateien unter /etc/yum.repos.d/ definiert — der Pfad heißt aus historischen Gründen weiterhin yum.repos.d, obwohl dnf darauf zugreift. Jede .repo-Datei beschreibt ein oder mehrere Repos mit Name, URL, GPG-Schlüssel und Aktivierungsstatus.

Bash Beispiel: Inhalt einer .repo-Datei
[fedora]
name=Fedora $releasever - $basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch

Statt diese Dateien manuell zu editieren, nutzt man dnf config-manager aus dem Paket dnf-plugins-core.

Bash Repository hinzufügen
sudo dnf install dnf-plugins-core
sudo dnf config-manager --add-repo https://example.com/repo/example.repo
Bash Repository aktivieren oder deaktivieren
sudo dnf config-manager --enable REPO-ID
sudo dnf config-manager --disable REPO-ID

Das wichtigste Drittanbieter-Repository für die RHEL-Familie ist EPEL (Extra Packages for Enterprise Linux), gepflegt vom Fedora-Projekt. EPEL liefert tausende Pakete, die in den offiziellen RHEL-Repos fehlen — von htop bis zu kompletten Sprach-Stacks.

dnf history

Das Killer-Feature von dnf gegenüber apt: jede Transaktion wird in einer SQLite-Datenbank protokolliert und kann komplett rückgängig gemacht werden. Wer ein Update fährt, das das System bricht, kann mit einem einzigen Befehl in den vorherigen Zustand zurück.

Bash Vergangene Transaktionen anzeigen
dnf history list

Die Ausgabe zeigt eine ID, das Datum, die Aktion (Install, Update, Remove) und die Anzahl betroffener Pakete. Mit der ID lässt sich jede Transaktion im Detail einsehen.

Bash Details einer Transaktion
dnf history info 42

Und der wichtigste Befehl: das vollständige Zurückrollen einer Transaktion.

Bash Transaktion rückgängig machen
sudo dnf history rollback 42

Damit werden alle Paketversionen wieder auf den Stand vor Transaktion 42 gesetzt — vorausgesetzt, die alten RPM-Versionen sind in den Repositories noch verfügbar. Ein vergleichbares Feature gibt es bei apt schlicht nicht.

Module und Streams

Mit RHEL 8 wurde das Konzept der Module eingeführt (Fedora-Modularity). Ein Modul ist eine Sammlung von Paketen, die in mehreren parallelen Streams verfügbar sein können — typischerweise unterschiedliche Major-Versionen einer Software.

Bash Verfügbare Module anzeigen
dnf module list
dnf module list php

So kann man zum Beispiel zwischen PHP 7.4 und PHP 8.0 wählen, ohne die Pakete extern zu beziehen.

Bash Modul-Stream installieren
sudo dnf module install php:8.0

In Fedora Workstation spielen Module heute kaum noch eine Rolle — Fedora bewegt sich davon weg. In RHEL 8/9 und ihren Klonen sind sie aber zentral, gerade auf Servern. Wer ein Paket im Repo nicht findet, sollte prüfen, ob es in einem deaktivierten Modul-Stream steckt.

dnf vs. yum

dnf wurde als yum-Ersatz mit klaren Verbesserungen entwickelt. Die Befehlssyntax ist bewusst kompatibel — yum install … funktioniert auf modernen Systemen weiterhin, ist aber nur ein Alias.

Aspektyumdnf
ImplementierungPython 2, eigener SolverPython 3 mit libdnf (C), libsolv-Solver
PerformanceLangsam bei großen ReposDeutlich schneller
AbhängigkeitsauflösungEigener, oft fehleranfälliger Algorithmuslibsolv (von SUSE), präzise und schnell
Plugin-Systemyum-pluginsdnf-plugins-core, neu strukturiert
Konfiguration/etc/yum.conf/etc/dnf/dnf.conf (Repos weiterhin in /etc/yum.repos.d/)
Module/StreamsNicht unterstütztVoll unterstützt
API-StabilitätWechselhaftStabile Python-API

Praxis-Patterns

System komplett aktualisieren

Bash System-Update
sudo dnf upgrade --refresh

--refresh erzwingt ein Repo-Update, bevor die Pakete aktualisiert werden. Ohne das Flag arbeitet dnf mit dem zwischengespeicherten Metadaten-Stand — der oft wenige Minuten alt sein kann, bei langen Cache-Lifetimes aber auch Stunden. Auf Servern, die regelmäßig auf den neuesten Stand gebracht werden, ist --refresh der sichere Default.

Paket suchen

Bash Suche nach einem Paket
dnf search htop

Durchsucht Paketnamen und Kurzbeschreibungen. Für eine Suche nur in Paketnamen verwendet man dnf search --names. Volltextsuche in den Beschreibungen liefert dnf search all BEGRIFF.

Paket installieren

Bash Installation
sudo dnf install htop

dnf zeigt vor der Installation eine Liste aller Pakete, die mitkommen — Abhängigkeiten und schwache Abhängigkeiten (Recommends). Mit -y lässt sich die Bestätigungsabfrage überspringen, was in Skripten gewünscht, am Terminal aber riskant ist.

Update rückgängig machen

Bash Rollback eines kaputten Updates
dnf history list
sudo dnf history rollback 42

Erst die Transaktions-ID des problematischen Updates ermitteln, dann mit rollback zurück. Voraussetzung: Die alten Paketversionen müssen noch in einem aktiven Repository verfügbar sein. Bei Fedora-Updates innerhalb derselben Release-Version klappt das in den meisten Fällen.

EPEL aktivieren

Bash EPEL für RHEL/Rocky/Alma
sudo dnf install epel-release
sudo dnf upgrade

epel-release ist ein Meta-Paket, das die EPEL-Repository-Konfiguration und den GPG-Schlüssel hinzufügt. Nach der Installation stehen tausende zusätzliche Pakete zur Verfügung. Für Fedora ist EPEL nicht relevant — dort sind die meisten EPEL-Pakete bereits in den Hauptrepos enthalten.

Cleanup

Bash System aufräumen
sudo dnf autoremove
sudo dnf clean all

autoremove entfernt Pakete, die nur als Abhängigkeit installiert wurden und jetzt nicht mehr benötigt werden. clean all leert den heruntergeladenen Paket-Cache (typischerweise unter /var/cache/dnf/) und gibt mehrere hundert Megabyte frei. Praktisch nach größeren Updates oder wenn der Plattenplatz knapp wird.

Häufige Stolperfallen

yum-Befehle funktionieren noch — sind aber deprecated.

Auf modernen Fedora- und RHEL-Systemen ist yum nur noch ein Symlink oder Wrapper auf dnf. Das ist praktisch beim Umstieg, führt aber zu schlechten Angewohnheiten: Tutorials und Skripte aus der RHEL-7-Ära verwenden weiterhin yum, obwohl die Befehle teilweise nicht 1:1 äquivalent sind. Insbesondere yum-config-manager heißt heute dnf config-manager, und einige Plugins existieren nur noch unter dnf-Namen. Bei neuen Skripten konsequent dnf verwenden — und bei alten Skripten prüfen, ob die Aliasse wirklich identisches Verhalten zeigen.

dnf-3 vs. dnf-5 — Fedora 41+ wechselt die Engine.

Mit Fedora 41 wird dnf5 zum Default. Die Neuimplementierung ist deutlich schneller und vollständig in C++ geschrieben, hat aber an einigen Stellen leicht andere Syntax und ein anderes Output-Format. Skripte, die auf dnf-Output mit grep oder awk parsen, brechen unter Umständen. Auch einige Subkommandos und Flags wurden umbenannt oder sind verschwunden. Wer Skripte für gemischte Umgebungen schreibt, sollte sich entweder auf das gemeinsame Subset beschränken oder die dnf-Version per dnf —version abfragen.

Ohne --refresh arbeitet dnf mit gecachten Metadaten.

dnf cached die Repository-Metadaten standardmäßig für mehrere Stunden. Ein dnf upgrade ohne —refresh kann dadurch Pakete auslassen, die erst kürzlich in die Repos gelangt sind. Das ist normalerweise unkritisch, aber bei dringenden Sicherheitsupdates problematisch. Mit dnf upgrade —refresh oder dnf clean expire-cache lässt sich das erzwingen. Auf Servern, die unattended laufen sollen, übernimmt dnf-automatic diese Aufgabe automatisiert.

dnf upgrade und dnf update sind dasselbe — nicht wie bei apt.

Bei apt sind update (Repo-Listen aktualisieren) und upgrade (Pakete aktualisieren) zwei völlig unterschiedliche Befehle. Bei dnf sind update und upgrade hingegen exakte Synonyme — beide aktualisieren installierte Pakete. Das Repo-Refresh passiert bei dnf entweder automatisch (wenn der Cache abgelaufen ist) oder explizit über —refresh. Wer von Debian/Ubuntu kommt, läuft hier regelmäßig in Verwirrung, weil dnf update nicht das tut, was apt update tut.

Modul-Streams können Pakete unsichtbar machen.

Wenn auf RHEL 8/9 ein Paket in dnf search nicht auftaucht, obwohl es offensichtlich existieren müsste, liegt es oft an einem deaktivierten oder nicht eingeschalteten Modul-Stream. dnf module list zeigt alle Module mit ihrem Status. Erst wenn ein Stream aktiviert ist (dnf module enable NAME:STREAM), werden seine Pakete für dnf install sichtbar. Diese zusätzliche Indirektionsebene ist eine der häufigsten Quellen für „dnf sagt, das Paket gibt es nicht” auf Enterprise-Distributionen.

GPG-Key-Probleme bei neuen Repos — und warum --nogpgcheck gefährlich ist.

Beim Hinzufügen eines neuen Repositories prüft dnf die Signatur der Pakete gegen den GPG-Schlüssel des Repos. Schlägt das fehl, bricht die Installation ab. Es ist verlockend, dann einfach —nogpgcheck zu setzen — aber damit verliert man die Garantie, dass die Pakete authentisch und unverändert sind. Der richtige Weg: den GPG-Schlüssel manuell mit rpm —import oder über die gpgkey-Direktive der .repo-Datei vertrauenswürdig importieren. Nur in absoluten Ausnahmefällen (lokales Test-Repo) ist —nogpgcheck akzeptabel.

Group Install nutzt das @-Präfix.

Paketgruppen werden mit dem @-Präfix referenziert: sudo dnf install @virtualization installiert die komplette Virtualisierungs-Gruppe (libvirt, virt-manager, qemu-kvm und Abhängigkeiten). Ohne das @ würde dnf nach einem Paket namens „virtualization” suchen und scheitern. Alternativ funktioniert dnf group install virtualization als Lang-Form. Welche Gruppen verfügbar sind, zeigt dnf group list — auf Servern liefert das einen schnellen Weg, ganze Funktionsbündel mit einem Befehl einzurichten.

Weiterführende Ressourcen

Externe Quellen

/ Weiter

Zurück zu Pakete

Zur Übersicht