Guide rapide du gestionnaire de packages DNF

Publié: 2020-06-06

DNF est maintenant le système de gestion de paquets par défaut sur la plupart des distributions Linux basées sur RPM.

DNF télécharge les packages à partir des référentiels, installe, désinstalle et met à jour les packages. Il effectue une résolution automatique des dépendances pour les packages que vous installez, mettez à jour ou supprimez et installe tous les packages nécessaires pour répondre aux exigences de dépendance.

Sur Fedora, c'est le gestionnaire de paquets par défaut depuis Fedora 22. Sur RHEL 8.x, c'est maintenant le gestionnaire de paquets par défaut.

DNF fournit une gestion sécurisée des packages en activant la vérification de la signature GPG sur les packages signés GPG. DNF n'installera aucun package non signé avec la clé correcte pour ce référentiel.

Pour la compatibilité descendante, RHEL 8.x a également une commande YUM, bien qu'il s'agisse d'un lien vers DNF.

Pourquoi DNF ?

DNF ou Dandified YUM est le YUM nouvelle génération. Par rapport à YUM, DNF a une meilleure utilisation de la mémoire, une meilleure gestion des dépendances et la possibilité de fonctionner avec Python 2 et Python 3.

Gestion des colis avec DNF

Vous devez disposer des privilèges de superutilisateur pour utiliser la commande DNF afin d'installer, de mettre à jour ou de supprimer le package. Voici un ensemble de commandes DNF fréquemment utilisées par les administrateurs système.

Recherche d'un colis

Pour rechercher un package installé ou disponible dans tous les référentiels, utilisez

 $ sudo dnf search <em>package_name</em>

Par exemple pour rechercher le package Nmap :

 $ sudo dnf search nmap
 Last metadata expiration check: 0:05:14 ago on Tue 02 Jun 2020 08:38:09 PM UTC. ==================================== Name Exactly Matched: nmap ===================================== nmap.x86_64 : Network exploration tool and security scanner =================================== Name & Summary Matched: nmap ==================================== nmap-ncat.x86_64 : Nmap's Netcat replacement

Forfaits d'inscription

Pour voir une liste de tous les packages installés et disponibles :

 $ sudo dnf list all
 Installed Packages GConf2.x86_64 3.2.6-22.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms NetworkManager.x86_64 1:1.22.8-4.el8 @anaconda NetworkManager-libnm.x86_64 1:1.22.8-4.el8 @anaconda NetworkManager-team.x86_64 1:1.22.8-4.el8 @anaconda NetworkManager-tui.x86_64 1:1.22.8-4.el8 ...

Pour répertorier tous les packages installés :

$ sudo dnf list installed

 Installed Packages NetworkManager.x86_64 1:1.22.8-4.el8 @anaconda NetworkManager-libnm.x86_64 1:1.22.8-4.el8 @anaconda NetworkManager-team.x86_64 1:1.22.8-4.el8 @anaconda NetworkManager-tui.x86_64 1:1.22.8-4.el8 @anaconda PackageKit.x86_64 1.1.12-4.el8 @AppStream PackageKit-glib.x86_64 1.1.12-4.el8 @AppStream WALinuxAgent.noarch 2.2.38-1.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms abattis-cantarell-fonts.noarch 0.0.25-4.el8 @AppStream acl.x86_64 2.2.53-1.el8 @anaconda ...

Pour répertorier tous les packages disponibles :

 $ sudo dnf list available
 Last metadata expiration check: 1:15:10 ago on Tue 02 Jun 2020 05:37:11 PM UTC. Available Packages CUnit.i686 2.1.3-17.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms CUnit.x86_64 2.1.3-17.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms CUnit-devel.i686 2.1.3-17.el8 rhui-codeready-builder-for-rhel-8-x86_64-rhui-rpms CUnit-devel.x86_64 2.1.3-17.el8 rhui-codeready-builder-for-rhel-8-x86_64-rhui-rpms ...

Par exemple, pour lister tous les packages MySQL disponibles :

 $ sudo dnf list available "mysql*"
 Last metadata expiration check: 1:17:04 ago on Tue 02 Jun 2020 05:37:11 PM UTC. Available Packages mysql.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms mysql-common.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms mysql-devel.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms mysql-errmsg.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms mysql-libs.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms mysql-server.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms mysql-test.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms

Affichage des informations sur le paquet

Pour afficher des informations sur un package :

 $ sudo dnf info <em>package_name </em>

Par exemple, pour afficher des informations sur le serveur httpd :

 $ sudo dnf info httpd
 Last metadata expiration check: 0:15:04 ago on Mon 01 Jun 2020 11:23:11 PM UTC. Available Packages Name : httpd Version : 2.4.37 Release : 21.module+el8.2.0+5008+cca404a3 Architecture : x86_64 Size : 1.4 M Source : httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.src.rpm Repository : rhui-rhel-8-for-x86_64-appstream-rhui-rpms Summary : Apache HTTP Server URL : https://httpd.apache.org/ License : ASL 2.0 Description : The Apache HTTP Server is a powerful, efficient, and extensible : web server.

Installation de packages

Installation d'un seul paquet

Pour installer un seul package et toutes ses dépendances non installées :

 $ sudo dnf install package_name

Par exemple, pour installer Nginx :

 $ sudo dnf install nginx
 Dependencies resolved. =========================================================================================== Package Arch Version Repository Size =========================================================================================== Installing: nginx x86_64 1:1.14.1-9.module+el8.0.0+4108+af250afe rhui-rhel-8-for-x86_64-appstream-rhui-rpms 570 k Installing dependencies: gd x86_64 2.2.5-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 144 k jbigkit-libs x86_64 2.1-14.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 55 k ..

Cela installera Nginx et toutes ses exigences de dépendance non installées.

Installation de plusieurs packages

Vous pouvez également installer plusieurs packages en ajoutant des noms de package à cette commande. Par exemple, pour installer Nginx, PHP & MySQL-server, entrez :

 $ sudo dnf install nginx php mysql-server
 Dependencies resolved. =========================================================================================== Package Arch Version Repository Size =========================================================================================== Installing: mysql-server x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms 22 M nginx x86_64 1:1.14.1-9.module+el8.0.0+4108+af250afe rhui-rhel-8-for-x86_64-appstream-rhui-rpms 570 k php x86_64 7.2.24-1.module+el8.2.0+4601+7c76a223 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 1.5 M Installing dependencies: apr x86_64 1.6.3-9.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 125 k apr-util x86_64 1.6.1-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 105 k gd x86_64 2.2.5-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 144 k httpd x86_64 2.4.37-21.module+el8.2.0+5008+cca404a3 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 1.4 M httpd-filesystem noarch 2.4.37-21.module+el8.2.0+5008+cca404a3 ...

Installer un paquet par son nom de fichier binaire

Si vous connaissez le nom du fichier binaire à installer, mais pas le nom du package, même cela suffit pour installer le package concerné.

Par exemple, si vous saisissez :

 $ sudo dnf install /usr/sbin/named
 Last metadata expiration check: 1:21:25 ago on Tue 02 Jun 2020 05:37:11 PM UTC. Dependencies resolved. ===================================================================================================== Package Arch Version Repository Size ===================================================================================================== Installing: bind x86_64 32:9.11.13-5.el8_2 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 2.1 M Transaction Summary ===================================================================================================== Install 1 Package Total download size: 2.1 M Installed size: 4.5 M Is this ok [y/N]:

DNF recherche et trouve le package qui fournit /usr/sbin/ named et vous invite à l'installer.

Trouver quel paquet possède un fichier

Si vous connaissez le nom du fichier et souhaitez trouver quel paquet le fournit (installé ou non), utilisez :

 $ sudo dnf provides <em>file_name</em>

Par exemple, pour trouver quel paquet fournit nommé, le binaire pour le serveur DNS utilise :

 $ sudo dnf provides named
 Last metadata expiration check: 1:27:30 ago on Mon 01 Jun 2020 11:23:11 PM UTC. bind-32:9.11.4-16.P2.el8.x86_64 : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) : server Repo : rhui-rhel-8-for-x86_64-appstream-rhui-rpms Matched from: Filename : /usr/sbin/named

Suppression d'un paquet

Pour supprimer un package :

 sudo dnf remove <em>package_name</em>

Mais attention, DNF n'est pas capable de supprimer un package sans supprimer également les packages qui en dépendent. Pour supprimer le package nmap, utilisez :

 $ sudo dnf remove nmap Dependencies resolved. ===================================================================================================== Package Architecture Version Repository Size ===================================================================================================== Removing: nmap x86_64 2:7.70-5.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 24 M Transaction Summary ===================================================================================================== Remove 1 Package Freed space: 24 M Is this ok [y/N]:

Gestion des groupes de packages

Un groupe de packages est un ensemble de packages étroitement liés et servant un objectif commun. L'installation d'un groupe de packages installe un ensemble de packages, ce qui permet de gagner beaucoup de temps.

Lister tous les groupes de packages

Pour répertorier tous les groupes de packages :

 $ sudo dnf group list
 Available Environment Groups: Server with GUI Server Workstation Custom Operating System Virtualization Host Installed Environment Groups: Minimal Install Installed Groups: Security Tools Container Management Available Groups: Legacy UNIX Compatibility Development Tools Scientific Support .NET Core Development Graphical Administration Tools Headless Management RPM Development Tools Network Servers System Tools Smart Card Support

Lister tous les packages d'un groupe

Pour répertorier tous les packages d'un groupe :

 $ sudo dnf group info <em>package_name</em>

Par exemple, pour afficher les packages du groupe Outils de sécurité :

 $ sudo dnf group info “security tools”
Group: Security Tools Description: Security tools for integrity and trust verification. Default Packages: scap-security-guide Optional Packages: aide hmaccalc openscap openscap-engine-sce openscap-utils scap-security-guide-doc scap-workbench tpm-quote-tools tpm-tools tpm2-tools trousers

Installation d'un groupe de packages

L'installation d'un groupe installera tous les packages d'un groupe. Pour installer un groupe de packages, utilisez :

 sudo dnf group install <em>package_group_name</em>

Par exemple, pour installer le groupe « Network Servers » :

 $ sudo dnf group install “Network Servers”
 Last metadata expiration check: 1:40:14 ago on Wed 03 Jun 2020 05:53:11 PM UTC. Dependencies resolved. =========================================================================================== Package Architecture Version Repository Size =========================================================================================== Installing Groups: Network Servers Transaction Summary =========================================================================================== Is this ok [y/N]:

Suppression d'un groupe de packages

Pour supprimer un groupe de packages :

 sudo dnf remove <em>package_name</em>

Donc, pour supprimer le groupe de packages "Security Tools":

 $ sudo dnf group remove "security tools"
 Dependencies resolved. ===================================================================================================== Package Arch Version Repository Size ===================================================================================================== Removing: scap-security-guide noarch 0.1.48-7.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 182 M Removing unused dependencies: GConf2 x86_64 3.2.6-22.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 6.3 M libxslt x86_64 1.1.32-4.el8 @rhui-rhel-8-for-x86_64-baseos-rhui-rpms 734 k openscap x86_64 1.3.2-6.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 58 M openscap-scanner x86_64 1.3.2-6.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 137 k xml-common noarch 0.6.3-50.el8 @rhui-rhel-8-for-x86_64-baseos-rhui-rpms 78 k Removing Groups: Security Tools Transaction Summary ===================================================================================================== Remove 6 Packages Freed space: 247 M Is this ok [y/N]: 

Mise à jour des packages

Mise à jour de tous les packages

Pour mettre à jour tous les packages et leurs dépendances, vous pouvez utiliser :

 $ sudo dnf upgrade
 Last metadata expiration check: 1:09:31 ago on Tue 02 Jun 2020 08:38:09 PM UTC. Dependencies resolved. Nothing to do. Complete!

Cela installe toutes les mises à jour qui peuvent être installées. La mise à niveau dnf et la mise à jour dnf ont le même effet, mais la mise à niveau dnf est préférée.

Mise à jour d'un seul package

Pour mettre à jour un seul package, exécutez :

 $ sudo dnf upgrade package_name

Par exemple, pour mettre à jour le package Python :

 $ sudo dnf upgrade python

Conclusion

Apprendre DNF peut être gratifiant car c'est souvent le moyen le plus rapide d'effectuer des tâches d'administration système. Si vous souhaitez apprendre RHEL 8, vous pouvez consulter ce cours Udemy.