Comprendre la gestion des paquets Linux : APT vs. YUM vs. DNF

Une comparaison pratique d'APT, YUM et DNF pour installer, mettre à jour, supprimer et résoudre les problèmes des paquets Linux.

Comprendre la gestion des paquets Linux : APT vs. YUM vs. DNF

Si vous passez d'Ubuntu, Debian, Fedora, Rocky Linux, AlmaLinux ou RHEL, la gestion des paquets est l'un des premiers domaines où la mémoire musculaire fait défaut. La tâche est la même partout : installer des logiciels, appliquer des mises à jour de sécurité, supprimer ce dont vous n'avez plus besoin et maintenir la cohérence des dépendances. Les commandes et les emplacements des fichiers sont suffisamment différents pour que copier le mauvais manuel puisse faire perdre du temps ou endommager un hôte.

APT, YUM et DNF ne sont pas des outils concurrents que vous choisissez normalement sur une même machine. Ils appartiennent à différentes familles de distributions. APT est l'outil de haut niveau habituel sur les systèmes basés sur Debian. YUM était l'outil de haut niveau de longue date sur les anciens systèmes basés sur Red Hat. DNF est le remplacement moderne sur les systèmes actuels Fedora, RHEL 8 et plus récents, CentOS Stream, Rocky Linux et AlmaLinux.

Qu'est-ce qu'un gestionnaire de paquets ?

Au cœur, un gestionnaire de paquets est un ensemble d'outils logiciels qui automatisent le processus d'installation, de mise à niveau, de configuration et de suppression des paquets logiciels d'un système d'exploitation. Au lieu de compiler des logiciels à partir du code source ou de gérer manuellement les dépendances, un gestionnaire de paquets interagit avec des dépôts de logiciels pour récupérer des binaires pré-compilés et gérer automatiquement tous les prérequis nécessaires.

Les fonctions clés d'un gestionnaire de paquets incluent :

  • Résolution des dépendances : Identifie et installe automatiquement toutes les bibliothèques requises et autres paquets logiciels dont une application particulière a besoin pour fonctionner.
  • Dépôts de logiciels : Gère les connexions aux serveurs distants (dépôts) où les paquets sont stockés, garantissant l'accès à une large gamme de logiciels.
  • Mises à niveau du système : Facilite la mise à jour de paquets individuels ou de l'ensemble du système d'exploitation, garantissant l'application des correctifs de sécurité et des nouvelles fonctionnalités.
  • Intégrité des paquets : Vérifie l'authenticité et l'intégrité des paquets à l'aide de signatures numériques pour empêcher toute falsification.
  • Suppression propre : Garantit que lorsque des logiciels sont désinstallés, tous leurs fichiers associés et dépendances sont supprimés proprement, évitant l'encombrement du système.

Les distributions Linux utilisent généralement l'un des deux principaux formats de paquets : .deb pour les systèmes basés sur Debian et .rpm pour les systèmes basés sur Red Hat. APT gère les paquets .deb, tandis que YUM et DNF gèrent les paquets .rpm.

APT (Advanced Package Tool)

APT est l'utilitaire en ligne de commande pour gérer les paquets .deb principalement trouvés sur Debian et ses dérivés, tels qu'Ubuntu, Linux Mint, Pop!_OS et bien d'autres. Il est réputé pour sa résolution robuste des dépendances et un vaste écosystème de logiciels.

Concepts de base

  • dpkg : Alors que apt est l'outil de haut niveau, dpkg est l'outil de bas niveau sous-jacent qui installe, supprime et gère réellement les paquets .deb individuels. APT agit comme une interface frontale pour dpkg, gérant les dépôts et les dépendances.
  • sources.list : Le fichier /etc/apt/sources.list (et les fichiers dans /etc/apt/sources.list.d/) définit les emplacements des dépôts de logiciels qu'APT utilise pour trouver des paquets. Ceux-ci peuvent être des dépôts officiels, des PPA (Personal Package Archives) tiers ou des sources locales.
  • Structure des paquets : Les paquets sont distribués sous forme de fichiers .deb, qui sont essentiellement des archives contenant le logiciel compilé, les fichiers de configuration et les métadonnées.

Commandes APT courantes

Historiquement, apt-get était la commande principale, mais la commande apt (introduite autour de Debian 8 / Ubuntu 16.04) offre une interface plus conviviale en combinant les fonctionnalités les plus courantes de apt-get et apt-cache.

Tâche Commande apt Description
Mettre à jour les listes de paquets sudo apt update Actualise la liste des paquets disponibles et leurs versions depuis les dépôts.
Mettre à niveau les paquets installés sudo apt upgrade Met à niveau tous les paquets installés vers leurs versions les plus récentes. Ne supprime pas les paquets.
Mise à niveau complète du système sudo apt full-upgrade Met à niveau tous les paquets installés, en supprimant les anciens si nécessaire pour résoudre les dépendances.
Installer un paquet sudo apt install <nom_du_paquet> Installe un paquet spécifié et ses dépendances.
Supprimer un paquet sudo apt remove <nom_du_paquet> Supprime un paquet mais conserve ses fichiers de configuration.
Purger un paquet sudo apt purge <nom_du_paquet> Supprime un paquet et ses fichiers de configuration.
Rechercher un paquet apt search <mot_clé> Recherche des paquets correspondant à un mot-clé.
Afficher les détails d'un paquet apt show <nom_du_paquet> Affiche des informations détaillées sur un paquet.
Nettoyer les anciens paquets sudo apt autoremove Supprime les paquets de dépendances installés automatiquement qui ne sont plus nécessaires.

Exemples

# Mettre à jour les listes de paquets
sudo apt update

# Installer le serveur web 'nginx'
sudo apt install nginx

# Mettre à niveau tous les paquets installés
sudo apt upgrade

# Supprimer 'nginx' et ses fichiers de configuration
sudo apt purge nginx

Avantages d'APT

  • Gestion fiable des dépendances : APT explique bien ce qu'il prévoit d'installer, de mettre à niveau, de conserver ou de supprimer avant de modifier le système.
  • Grand écosystème de dépôts : Les dépôts Debian et Ubuntu couvrent une large gamme de logiciels serveur et de bureau.
  • Comportement prévisible du serveur : Les versions stables de Debian et Ubuntu LTS privilégient généralement les versions de paquets testées plutôt que la dernière version en amont.

Inconvénients d'APT

  • Versions logicielles plus récentes : Parfois, les paquets dans les dépôts officiels peuvent ne pas être les toutes dernières versions en raison de l'accent mis sur la stabilité et les tests approfondis.

YUM (Yellowdog Updater, Modified)

YUM était le gestionnaire de paquets principal pour Red Hat Enterprise Linux (RHEL) et ses dérivés comme CentOS, Fedora (jusqu'à récemment) et Scientific Linux. Il fonctionne sur les paquets .rpm (Red Hat Package Manager).

Concepts de base

  • rpm : Similaire à dpkg, rpm est l'outil de gestion de paquets de bas niveau pour les fichiers .rpm. YUM agit comme une interface frontale de plus haut niveau.
  • Fichiers .repo : Les configurations de dépôt sont généralement définies dans des fichiers .repo situés dans /etc/yum.repos.d/. Ces fichiers spécifient l'URL de base, les clés GPG et d'autres métadonnées pour chaque dépôt.
  • Structure des paquets : Les logiciels sont distribués sous forme de fichiers .rpm, contenant des binaires, des bibliothèques et des métadonnées.

Commandes YUM courantes

Tâche Commande yum Description
Vérifier les mises à jour sudo yum check-update Vérifie les mises à jour disponibles sans les installer.
Mettre à jour tous les paquets sudo yum update Met à jour tous les paquets installés.
Installer un paquet sudo yum install <nom_du_paquet> Installe un paquet spécifié et ses dépendances.
Supprimer un paquet sudo yum remove <nom_du_paquet> Supprime un paquet.
Rechercher un paquet yum search <mot_clé> Recherche des paquets correspondant à un mot-clé.
Afficher les détails d'un paquet yum info <nom_du_paquet> Affiche des informations détaillées sur un paquet.
Nettoyer les fichiers en cache sudo yum clean all Nettoie les métadonnées et paquets de dépôt en cache.

Exemples

# Vérifier les mises à jour disponibles
sudo yum check-update

# Installer le serveur web 'httpd' (Apache)
sudo yum install httpd

# Mettre à jour tous les paquets installés
sudo yum update

# Supprimer 'httpd'
sudo yum remove httpd

Avantages de YUM

  • Comportement d'entreprise mature : YUM est encore courant sur les anciens systèmes RHEL et CentOS, vous le verrez donc dans les manuels hérités.
  • Historique des transactions : yum history peut montrer les installations, mises à jour et suppressions précédentes. Dans certains cas, vous pouvez annuler ou revenir en arrière sur une transaction, mais vous devez tester cela attentivement car les fichiers de configuration, l'état du service et les données externes ne sont pas magiquement restaurés.

Inconvénients de YUM

  • Performances : Peut parfois être plus lent par rapport aux gestionnaires de paquets modernes comme DNF, surtout avec de grands dépôts ou des arbres de dépendances complexes.
  • En cours de remplacement : Dans les systèmes plus récents basés sur RHEL (RHEL 8+), DNF a remplacé YUM comme gestionnaire de paquets par défaut, bien que yum fonctionne souvent encore comme un alias pour dnf.

DNF (Dandified YUM)

DNF est le gestionnaire de paquets de nouvelle génération pour les distributions basées sur Red Hat, succédant à YUM. Il est le gestionnaire par défaut sur Fedora (depuis la version 18), RHEL 8+, CentOS Stream, AlmaLinux et Rocky Linux. DNF corrige de nombreuses lacunes de YUM, offrant des performances améliorées et une meilleure résolution des dépendances.

Concepts de base

  • libsolv : DNF utilise libsolv pour la résolution des dépendances, qui est hautement optimisé et offre des performances significativement meilleures que l'ancien solveur de YUM.
  • Modularité : Une fonctionnalité clé dans RHEL 8+ et Fedora, la modularité permet à différentes versions ou flux d'un paquet logiciel (par exemple, Python 3.6 vs. Python 3.8) d'être disponibles simultanément, et les utilisateurs peuvent choisir lequel installer.
  • Compatibilité : DNF maintient une interface en ligne de commande largement compatible avec YUM, facilitant la transition pour les utilisateurs.

Commandes DNF courantes

De nombreuses commandes DNF sont identiques ou très similaires aux commandes YUM.

Tâche Commande dnf Description
Vérifier les mises à jour sudo dnf check-update Vérifie les mises à jour disponibles sans les installer.
Mettre à jour tous les paquets sudo dnf update Met à jour tous les paquets installés.
Installer un paquet sudo dnf install <nom_du_paquet> Installe un paquet spécifié et ses dépendances.
Supprimer un paquet sudo dnf remove <nom_du_paquet> Supprime un paquet.
Rechercher un paquet dnf search <mot_clé> Recherche des paquets correspondant à un mot-clé.
Afficher les détails d'un paquet dnf info <nom_du_paquet> Affiche des informations détaillées sur un paquet.
Nettoyer les fichiers en cache sudo dnf clean all Nettoie les métadonnées et paquets de dépôt en cache.
Lister les modules disponibles dnf module list Liste les flux de modules logiciels disponibles.
Activer un module sudo dnf module enable <module> Active un flux de module spécifique.

Exemples

# Vérifier les mises à jour disponibles
sudo dnf check-update

# Installer la base de données 'mariadb-server'
sudo dnf install mariadb-server

# Mettre à jour tous les paquets installés
sudo dnf update

# Lister les flux de modules Node.js disponibles
dnf module list nodejs

# Activer le flux de module Node.js 16 (si disponible)
sudo dnf module enable nodejs:16

# Supprimer 'mariadb-server'
sudo dnf remove mariadb-server

Avantages de DNF

  • Résolution améliorée des dépendances : DNF utilise libsolv, qui gère généralement les choix de dépendances complexes plus rapidement et plus clairement que l'ancien comportement de YUM.
  • Sortie et API plus propres : DNF est plus facile à scripter que l'ancien YUM dans de nombreux flux de travail administratifs.
  • Modularité : Offre une flexibilité pour installer différentes versions de logiciels au sein du même système.
  • Conception moderne : Construit avec une API claire pour les extensions et un code plus propre.

Inconvénients de DNF

  • Technologie plus récente : Bien que stable, certaines fonctionnalités, notamment liées à la modularité, peuvent nécessiter une courbe d'apprentissage légèrement plus raide pour les nouveaux utilisateurs.

Différences clés et cas d'utilisation

La distinction fondamentale entre APT et YUM/DNF réside dans la famille de distributions qu'ils servent et le format de paquet qu'ils gèrent.

Fonctionnalité APT (Debian/Ubuntu) YUM/DNF (RHEL/Fedora)
Format de paquet .deb (Paquet Debian) .rpm (Paquet Red Hat)
Outil sous-jacent dpkg rpm
Fichiers de configuration /etc/apt/sources.list /etc/yum.repos.d/*.repo
Distributions principales Debian, Ubuntu, Mint, Pop!_OS RHEL, Fedora, CentOS, AlmaLinux, Rocky Linux
Solveur de dépendances Interne (robuste, bien testé) YUM : Interne (plus lent) ; DNF : libsolv (plus rapide, moderne)
Évolution apt-get -> apt yum -> dnf
Modularité Pas intégrée directement (PPA pour la flexibilité) DNF offre des flux module pour plusieurs versions
  • APT est idéal pour les utilisateurs et administrateurs qui privilégient une stabilité à toute épreuve, un vaste support communautaire et un vaste dépôt de logiciels. C'est l'outil de prédilection pour les systèmes basés sur Debian, qui sont populaires à la fois pour les serveurs et les postes de travail.
  • YUM a bien rempli son rôle dans les environnements d'entreprise pendant des années, fournissant une méthode stable et éprouvée pour gérer les logiciels. Bien qu'encore présent comme alias, son utilisation directe est progressivement abandonnée.
  • DNF est la norme moderne pour les systèmes basés sur Red Hat. C'est le choix pour ceux qui utilisent des RHEL, Fedora ou leurs dérivés contemporains, offrant des performances, une résolution avancée des dépendances et des fonctionnalités comme la modularité, ce qui le rend excellent pour les environnements de développement et de production nécessitant des versions logicielles spécifiques.

Meilleures pratiques pour la gestion des paquets

Quel que soit le gestionnaire de paquets que vous utilisez, le respect des meilleures pratiques garantit un système sain et sécurisé :

  • Mises à jour régulières : Exécutez périodiquement sudo apt update && sudo apt upgrade ou sudo dnf update pour appliquer les correctifs de sécurité et les corrections de bugs.
  • Comprendre avant d'installer : Vérifiez toujours ce que fait un paquet et sa réputation avant de l'installer, surtout à partir de dépôts tiers.
  • Vérifier les sources des dépôts : Assurez-vous que tous les dépôts ajoutés sont dignes de confiance pour éviter d'installer des logiciels malveillants ou instables.
  • Nettoyer : Utilisez sudo apt autoremove ou sudo dnf autoremove pour supprimer les dépendances orphelines et libérer de l'espace disque.
  • Examiner apt show ou dnf info : Avant d'installer, utilisez ces commandes pour obtenir des détails sur le paquet, y compris ses dépendances et sa taille.
  • Sauvegarder les systèmes critiques : Avant d'effectuer des mises à niveau majeures (par exemple, apt full-upgrade ou des mises à niveau de distribution), assurez-vous d'avoir une sauvegarde des données et configurations critiques.

Dépannage des problèmes de gestionnaire de paquets

La plupart des échecs de gestionnaire de paquets ne sont pas mystérieux une fois que vous les séparez en trois catégories : métadonnées de dépôt, conflits de dépendances et état de la base de données locale des paquets.

Si APT indique qu'il ne peut pas trouver un paquet, commencez par sudo apt update. APT n'interroge pas chaque dépôt distant à neuf pour chaque installation. Il utilise les métadonnées locales. Si le paquet a été récemment ajouté, ou si la machine n'a pas actualisé ses listes depuis un certain temps, l'installation peut échouer même si le dépôt est correct. Si apt update lui-même échoue, lisez la ligne de dépôt dans l'erreur. Un PPA obsolète, une clé de signature expirée, un miroir cassé ou un nom de code de distribution non pris en charge est souvent le vrai problème.

Sur les systèmes DNF ou YUM, la première action équivalente est généralement :

sudo dnf makecache
sudo dnf repolist

Sur les systèmes plus anciens :

sudo yum makecache
sudo yum repolist

repolist est utile car il confirme si le dépôt est activé ou non. Un paquet peut être disponible depuis EPEL, CodeReady Builder, PowerTools, CRB ou un dépôt fournisseur, mais pas depuis les dépôts de base du système d'exploitation. Dans ce cas, la solution n'est pas de télécharger un RPM aléatoire sur le web. La solution plus propre est d'activer le dépôt correct et de laisser le gestionnaire de paquets gérer les dépendances.

Les conflits de dépendances nécessitent plus d'attention. Si APT propose de supprimer une grande partie du système, arrêtez-vous et lisez la transaction. La même chose s'applique à dnf remove. La suppression d'un paquet peut supprimer des services qui en dépendent. Sur les serveurs, j'aime copier la transaction proposée dans les notes d'incident avant de l'accepter. Cela vous donne un enregistrement de ce qui a changé si un service se casse par la suite.

Pour les installations interrompues, utilisez la commande de réparation native avant d'essayer un nettoyage manuel :

# Debian/Ubuntu
sudo dpkg --configure -a
sudo apt -f install

# Famille Fedora/RHEL
sudo dnf check
sudo dnf history

La suppression manuelle sous /var/lib/dpkg, /var/lib/rpm, /var/cache/apt ou /var/cache/dnf devrait être un dernier recours. Ces répertoires sont l'état du gestionnaire de paquets, pas un encombrement ordinaire.

Aide-mémoire de traduction pratique

Lorsque vous suivez une documentation écrite pour une famille Linux différente, traduisez l'intention, pas seulement la commande.

Tâche Debian/Ubuntu Famille Fedora/RHEL
Actualiser les métadonnées du dépôt sudo apt update sudo dnf makecache
Mettre à niveau les paquets installés sudo apt upgrade sudo dnf upgrade ou sudo dnf update
Installer un paquet sudo apt install nginx sudo dnf install nginx
Supprimer un paquet sudo apt remove nginx sudo dnf remove nginx
Supprimer le paquet et la configuration sudo apt purge nginx Pas d'équivalent exact ; les scripts de paquet peuvent laisser la configuration/les données
Rechercher des paquets apt search nginx dnf search nginx
Afficher les informations du paquet apt show nginx dnf info nginx
Lister les paquets installés apt list --installed dnf list installed
Voir les fichiers du paquet dpkg -L nginx rpm -ql nginx
Trouver le paquet propriétaire d'un fichier dpkg -S /chemin/fichier rpm -qf /chemin/fichier

Cette dernière paire est sous-estimée. Si vous trouvez un binaire ou un fichier de configuration étrange sur un hôte, dpkg -S ou rpm -qf vous indique quel paquet en est propriétaire. Si aucun paquet n'en est propriétaire, le fichier peut avoir été créé par une application, un script de déploiement, un administrateur ou un attaquant. Cela ne prouve rien en soi, mais cela vous donne une meilleure question suivante.

La façon la plus sûre de penser à la gestion des paquets est simple : restez dans l'outil attendu par votre distribution, lisez les transactions avant de les accepter et traitez les dépôts tiers comme des dépendances de production. Une fois que vous savez où se trouvent les fichiers de dépôt et comment inspecter la propriété des paquets, APT, YUM et DNF semblent beaucoup moins comme des mondes différents.