Recherche de site Web

Les notions essentielles de la gestion des paquets Ubuntu et Debian


Introduction

La gestion des paquets est l'une des fonctionnalités fondamentales d'un système Linux. Le format des paquets et les outils de gestion des paquets diffèrent selon les distributions, mais la plupart des distributions utilisent l'un des deux ensembles d'outils principaux.

Pour les distributions basées sur Red Hat Enterprise Linux (comme RHEL lui-même et Rocky Linux), le format de paquet RPM et les outils de paquetage comme rpm et yum sont courants. L'autre grande famille, utilisée par Debian, Ubuntu et les distributions associées, utilise le format de paquet .deb et des outils comme apt et dpkg.

Ces dernières années, il y a eu davantage de gestionnaires de paquets auxiliaires conçus pour fonctionner parallèlement aux outils principaux apt et dpkg : par exemple, snap offre plus de portabilité et de sandboxing, et Homebrew, porté depuis macOS, fournit des outils en ligne de commande qui peuvent être installés par des utilisateurs individuels afin d'éviter les conflits avec les paquets du système.

Dans ce guide, vous apprendrez certains des outils de gestion de paquets les plus courants que les administrateurs système utilisent sur les systèmes Debian et Ubuntu. Cela peut être utilisé comme référence rapide lorsque vous avez besoin de savoir comment accomplir une tâche de gestion de paquets sur ces systèmes.

Prérequis

  • Un serveur Ubuntu 20.04 ou Debian et un utilisateur non root avec des privilèges sudo. Vous pouvez en savoir plus sur la façon de configurer un utilisateur avec ces privilèges dans notre guide Configuration initiale du serveur avec Ubuntu 20.04.

Étape 1 - Aperçu des outils de gestion des paquets Debian

L'écosystème Debian/Ubuntu utilise un certain nombre d'outils de gestion de paquets différents afin de gérer les logiciels sur le système.

La plupart de ces outils sont interdépendants et fonctionnent sur les mêmes bases de données de paquets. Certains de ces outils tentent de fournir des interfaces de haut niveau au système de gestion de paquets, tandis que d'autres utilitaires se concentrent sur la fourniture de fonctionnalités de bas niveau.

apte

La commande apt est probablement le membre le plus utilisé de la suite d'outils de gestion de paquets apt. Son objectif principal est d'interagir avec les dépôts distants maintenus par l'équipe de gestion des paquets de la distribution et d'effectuer des actions sur les paquets disponibles.

La suite apt fonctionne en général en récupérant des informations à partir de dépôts distants dans un cache maintenu sur le système local. La commande apt est utilisée pour actualiser le cache local. Elle est également utilisée pour modifier l'état des paquets, c'est-à-dire installer ou supprimer un paquet du système.

En général, apt sera utilisé pour mettre à jour le cache local et pour apporter des modifications au système en cours d'exécution.

Remarque : Dans les versions antérieures d'Ubuntu, la commande principale apt était connue sous le nom de apt-get. Elle a été simplifiée, mais vous pouvez toujours l'utiliser avec apt-get par habitude ou pour des raisons de compatibilité avec les versions précédentes.

apt-cache

Un autre membre important de la suite apt est apt-cache. Cet outil utilise le cache local pour interroger des informations sur les paquets disponibles et leurs propriétés.

Par exemple, chaque fois que vous souhaitez rechercher un paquet spécifique ou un outil qui effectuera une fonction donnée, apt-cache est un bon point de départ. Il peut également être informatif sur la version exacte du paquet qui sera ciblée par une procédure. Les informations sur les dépendances et les dépendances inverses sont un autre domaine où apt-cache est utile.

dpkg

Alors que les outils précédents étaient axés sur la gestion des paquets maintenus dans les dépôts, la commande dpkg peut également être utilisée pour agir sur des paquets .deb individuels. L'outil dpkg est en fait responsable de la majeure partie du travail en coulisses des commandes ci-dessus ; apt fournit un entretien supplémentaire tandis que dpkg interagit avec les paquets eux-mêmes.

Contrairement aux commandes apt, dpkg n’a pas la capacité de résoudre automatiquement les dépendances. Sa principale fonctionnalité est la capacité de travailler directement avec les paquets .deb, et sa capacité à analyser un paquet et à en savoir plus sur sa structure. Bien qu’il puisse recueillir certaines informations sur les paquets installés sur le système, vous ne devriez pas l’utiliser comme gestionnaire de paquets principal. À l’étape suivante, vous apprendrez les meilleures pratiques pour la mise à jour des paquets.

Étape 2 - Mise à jour du cache des paquets et du système

Les outils de gestion de paquets Debian et Ubuntu aident à maintenir la liste des paquets disponibles de votre système à jour. Ils offrent également différentes méthodes pour mettre à jour les paquets que vous avez actuellement installés sur votre serveur.

Mise à jour du cache des paquets locaux

Les dépôts distants sur lesquels vos outils de gestion de paquets se basent pour obtenir des informations sur les paquets sont mis à jour en permanence. Cependant, la plupart des outils de gestion de paquets Linux sont conçus, pour des raisons historiques, pour fonctionner directement avec un cache local de ces informations. Ce cache doit être actualisé périodiquement.

Il est généralement conseillé de mettre à jour votre cache de paquets local à chaque session avant d'exécuter d'autres commandes de paquets. Cela garantira que vous travaillez avec les informations les plus récentes sur les logiciels disponibles. Certaines commandes d'installation échoueront si vous utilisez des informations de paquets obsolètes.

Pour mettre à jour le cache local, utilisez la commande apt avec le sous-commande update :

sudo apt update

Cela téléchargera une liste mise à jour des paquets disponibles dans les dépôts que vous suivez.

Mise à jour des paquets

La commande apt distingue entre deux procédures de mise à jour différentes. La première procédure de mise à jour (couverte dans cette section) peut être utilisée pour mettre à niveau tous les composants qui ne nécessitent pas la suppression de composants. Pour savoir comment mettre à jour et permettre à apt de supprimer et d'échanger des composants si nécessaire, voir la section ci-dessous.

Cela peut être très important lorsque vous ne voulez supprimer aucun des paquets installés sous aucune circonstance. Cependant, certaines mises à jour impliquent le remplacement de composants système ou la suppression de fichiers en conflit. Cette procédure ignorera toute mise à jour nécessitant la suppression de paquets :

sudo apt upgrade

La deuxième procédure mettra à jour tous les paquets, y compris ceux qui nécessitent la suppression de paquets. Cela est souvent nécessaire car les dépendances des paquets changent.

En général, les paquets supprimés seront remplacés par des équivalents fonctionnels pendant la procédure de mise à niveau, donc cela est généralement sûr. Cependant, il est conseillé de surveiller les paquets à supprimer, au cas où certains composants essentiels seraient marqués pour suppression. Pour effectuer cette action, tapez :

sudo apt full-upgrade

Cela mettra à jour tous les paquets sur votre système. Dans l'étape suivante, vous apprendrez à télécharger et installer de nouveaux paquets.

Étape 3 - Téléchargement et installation des packages

Rechercher des forfaits

La première étape lors du téléchargement et de l'installation de paquets est souvent de rechercher dans les dépôts de votre distribution les paquets que vous recherchez.

La recherche de paquets est une opération qui cible le cache de paquets pour obtenir des informations. Pour ce faire, utilisez apt-cache search. Gardez à l'esprit que vous devez vous assurer que votre cache local est à jour en utilisant sudo apt update avant de rechercher des paquets :

apt-cache search package

Puisque cette procédure ne fait que rechercher des informations, elle ne nécessite pas les privilèges sudo. Toute recherche effectuée examinera les noms des paquets, ainsi que les descriptions complètes des paquets.

Par exemple, si vous recherchez htop, vous verrez des résultats comme ceux-ci :

apt-cache search htop
aha - ANSI color to HTML converter
htop - interactive processes viewer
libauthen-oath-perl - Perl module for OATH One Time Passwords

Comme vous pouvez le voir, vous avez un paquet nommé htop, mais vous pouvez également voir deux autres programmes, dont chacun mentionne htop dans le champ de description complète du paquet (la description à côté de la sortie n'est qu'un résumé court).

Installer un paquet depuis les dépôts

Pour installer un paquet depuis les dépôts, ainsi que toutes les dépendances nécessaires, vous pouvez utiliser la commande apt avec l'argument install.

Les arguments de cette commande doivent être le nom du paquet ou les noms tels qu'ils sont étiquetés dans le dépôt :

sudo apt install package

Vous pouvez installer plusieurs packages à la fois, séparés par un espace :

sudo apt install package1 package2

Si le paquet que vous avez demandé nécessite des dépendances supplémentaires, celles-ci seront affichées dans la sortie standard et il vous sera demandé de confirmer la procédure. Cela ressemblera à quelque chose comme ceci :

sudo apt install apache2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  apache2-data
Suggested packages:
  apache2-doc apache2-suexec-pristine apache2-suexec-custom
  apache2-utils
The following NEW packages will be installed:
  apache2 apache2-data
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 236 kB of archives.
After this operation, 1,163 kB of additional disk space will be used.
Do you want to continue [Y/n]?

Comme vous pouvez le voir, même si notre cible d'installation était le paquet apache2, le paquet apache2-data est nécessaire en tant que dépendance. Dans ce cas, vous pouvez continuer en appuyant sur Entrée ou « Y », ou annuler en tapant « n ».

Installer une version spécifique d'un paquet depuis les dépôts

Si vous devez installer une version spécifique d'un paquet, vous pouvez indiquer la version que vous souhaitez cibler avec =, comme ceci :

sudo apt install package=version

La version dans ce cas doit correspondre à l'un des numéros de version de paquet disponibles dans le dépôt. Cela signifie utiliser le schéma de versionnage employé par votre distribution. Vous pouvez trouver les versions disponibles en utilisant apt-cache policy package :

apt-cache policy nginx
nginx:
  Installed: (none)
  Candidate: 1.18.0-0ubuntu1.2
  Version table:
     1.18.0-0ubuntu1.2 500
        500 http://mirrors.linux-console.net/ubuntu focal-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages
     1.17.10-0ubuntu1 500
        500 http://mirrors.linux-console.net/ubuntu focal/main amd64 Packages

Reconfigurer les packages

De nombreux paquets incluent des scripts de configuration post-installation qui sont exécutés automatiquement après la fin de l'installation. Ceux-ci comportent souvent des invites pour que l'administrateur fasse des choix de configuration.

Si vous devez passer par ces étapes de configuration (ainsi que d'autres) ultérieurement, vous pouvez utiliser la commande dpkg-reconfigure. Cette commande examine le paquet qui lui est passé et relance toutes les commandes post-configuration incluses dans la spécification du paquet :

sudo dpkg-reconfigure package

Cela vous donnera accès aux mêmes invites (et souvent plus) que vous avez rencontrées lors de l'installation.

Effectuer un essai des actions du package

Souvent, vous voudrez voir les effets secondaires d'une procédure avant de vous engager réellement à exécuter la commande. apt vous permet d'ajouter l'option -s pour « simuler » une procédure.

Par exemple, pour voir ce qui serait fait si vous choisissez d'installer un paquet, vous pouvez taper :

apt install -s package

Cela vous permettra de voir toutes les dépendances et les modifications apportées à votre système si vous supprimez l’option -s. Un avantage de cela est que vous pouvez voir les résultats d’un processus qui nécessiterait normalement des privilèges root, sans utiliser sudo.

Par exemple, si vous voulez évaluer ce qui serait installé avec le paquet apache2, vous pouvez taper :

apt install -s apache2
NOTE: This is only a simulation!
      apt needs root privileges for real execution.
      Keep also in mind that locking is deactivated,
      so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  apache2-data
Suggested packages:
  apache2-doc apache2-suexec-pristine apache2-suexec-custom
  apache2-utils
The following NEW packages will be installed:
  apache2 apache2-data
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all])
Inst apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])
Conf apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all])
Conf apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])

Vous obtenez toutes les informations sur les packages et les versions qui seraient installés, sans avoir à effectuer le processus réel.

Cela fonctionne également avec d'autres procédures, comme effectuer des mises à niveau du système :

apt -s dist-upgrade

Par défaut, apt demandera à l'utilisateur une confirmation pour de nombreux processus. Cela inclut les installations nécessitant des dépendances supplémentaires et les mises à niveau de paquets.

Pour contourner ces mises à niveau et accepter par défaut n'importe laquelle de ces invites, vous pouvez passer le drapeau -y lors de l'exécution de ces opérations :

sudo apt install -y package

Cela installera le paquet et toutes les dépendances sans demander d'autres actions à l'utilisateur. Cela peut également être utilisé pour les procédures de mise à niveau :

sudo apt dist-upgrade -y

Réparer les dépendances et les paquets cassés

Il y a des moments où une installation peut ne pas se terminer avec succès en raison de dépendances ou d'autres problèmes. Un scénario courant où cela peut se produire est lors de l'installation d'un paquet .deb avec dpkg, qui ne résout pas les dépendances.

La commande apt peut tenter de résoudre cette situation en lui passant la commande -f.

sudo apt install -f

Cela recherchera toutes les dépendances qui ne sont pas satisfaites et tentera de les installer pour corriger l'arborescence des dépendances. Si votre installation a signalé un problème de dépendance, cela devrait être votre première étape pour tenter de le résoudre. Si vous n'êtes pas en mesure de résoudre un problème de cette manière, et que vous avez installé un paquet tiers, vous devriez le supprimer et chercher une version plus récente qui est mieux maintenue.

Télécharger le paquet depuis les dépôts

Il existe des cas principaux où il peut être utile de télécharger un paquet depuis les dépôts sans l'installer réellement. Vous pouvez le faire en exécutant apt avec l'argument download.

Parce que cela consiste seulement à télécharger un fichier et n'affecte pas le système réel, aucun privilège sudo n'est requis :

apt download package

Cela téléchargera le(s) paquet(s) spécifié(s) dans le répertoire courant.

Installer un paquet .deb

Bien que la plupart des distributions recommandent d'installer des logiciels depuis leurs dépôts maintenus, certains fournisseurs fournissent des fichiers bruts .deb que vous pouvez installer sur votre système.

Pour ce faire, vous utilisez dpkg. dpkg est principalement utilisé pour travailler avec des paquets individuels. Il n'essaie pas d'effectuer des installations depuis le dépôt, et recherche plutôt des paquets .deb dans le répertoire courant, ou dans le chemin fourni :

sudo dpkg --install debfile.deb

Il est important de noter que l'outil dpkg n'implémente aucun traitement des dépendances. Cela signifie que si des dépendances ne sont pas satisfaites, l'installation échouera. Cependant, il marque les dépendances nécessaires, donc si toutes les dépendances sont disponibles dans les dépôts, vous pouvez les satisfaire en tapant ceci ensuite :

sudo apt install -f

Cela installera toutes les dépendances non satisfaites, y compris celles marquées par dpkg. Dans l'étape suivante, vous apprendrez à supprimer certains des paquets que vous avez installés.

Étape 4 - Suppression des packages et des fichiers

Cette section expliquera comment désinstaller des paquets et nettoyer les fichiers qui peuvent rester après les opérations sur les paquets.

Désinstaller un paquet

Pour supprimer un paquet installé, vous utilisez apt remove. Cela supprimera la plupart des fichiers que le paquet a installés sur le système, avec une exception notable.

Cette commande laisse les fichiers de configuration en place afin que votre configuration reste disponible si vous devez réinstaller l'application ultérieurement. C'est utile car cela signifie que tous les fichiers de configuration que vous avez personnalisés ne seront pas supprimés si vous vous débarrassez accidentellement d'un paquet.

Pour compléter cette opération, vous devez fournir le nom du paquet que vous souhaitez désinstaller :

sudo apt remove package

Le paquet sera désinstallé à l'exception de vos fichiers de configuration.

Désinstaller un paquet et tous les fichiers de configuration associés

Si vous souhaitez supprimer un package et tous les fichiers associés de votre système, y compris les fichiers de configuration, vous pouvez utiliser apt purge.

Contrairement à la commande remove mentionnée ci-dessus, la commande purge supprime tout. Cela est utile si vous ne souhaitez pas conserver les fichiers de configuration ou si vous rencontrez des problèmes et souhaitez repartir de zéro.

Gardez à l'esprit qu'une fois vos fichiers de configuration supprimés, vous ne pourrez pas les récupérer :

sudo apt purge package

Maintenant, si vous avez besoin de réinstaller ce paquet, la configuration par défaut sera utilisée.

Supprimez toutes les dépendances automatiques qui ne sont plus nécessaires

Lors de la suppression de paquets de votre système avec apt remove ou apt purge, le paquet cible sera supprimé. Cependant, toutes les dépendances qui ont été installées automatiquement pour satisfaire les exigences d'installation resteront.

Afin de supprimer automatiquement tous les paquets qui ont été installés comme dépendances et qui ne sont plus nécessaires à aucun paquet, vous pouvez utiliser la commande autoremove :

sudo apt autoremove

Si vous souhaitez supprimer tous les fichiers de configuration associés aux dépendances qui sont en cours de suppression, vous devrez ajouter l'option --purge à la commande autoremove. Cela permettra également de nettoyer les fichiers de configuration, tout comme le fait la commande purge pour une suppression ciblée :

sudo apt --purge autoremove

Nettoyer les fichiers de packages obsolètes

Au fur et à mesure que des paquets sont ajoutés et retirés des dépôts par les mainteneurs de paquets d'une distribution, certains paquets deviendront obsolètes.

L'outil apt peut supprimer tous les fichiers de packages sur le système local qui sont associés à des packages qui ne sont plus disponibles dans les dépôts en utilisant la commande autoclean.

Cela libérera de l'espace sur votre serveur et supprimera tous les paquets potentiellement obsolètes de votre cache local.

sudo apt autoclean

Dans l'étape suivante, vous apprendrez d'autres façons d'interroger des packages sans nécessairement les installer.

Étape 5 - Obtenir des informations sur les paquets

Chaque paquet contient une grande quantité de métadonnées qui peuvent être accessibles à l'aide des outils de gestion de paquets. Cette section démontrera quelques façons courantes d'obtenir des informations sur les paquets disponibles et installés.

Pour afficher des informations détaillées sur un paquet dans les dépôts de votre distribution, vous pouvez utiliser apt-cache show. La cible de cette commande est le nom d'un paquet dans le dépôt :

apt-cache show nginx

Cela affichera des informations sur tous les candidats à l'installation pour le paquet en question. Chaque candidat aura des informations sur ses dépendances, sa version, son architecture, ses conflits, le nom réel du fichier du paquet, la taille du paquet et de l'installation, ainsi qu'une description détaillée, entre autres choses.

Package: nginx
Architecture: all
Version: 1.18.0-0ubuntu1.2
Priority: optional
Section: web
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Nginx Maintainers <pkg-nginx-maintainers@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 44
Depends: nginx-core (<< 1.18.0-0ubuntu1.2.1~) | nginx-full (<< 1.18.0-0ubuntu1.2.1~) | nginx-light (<< 1.18.0-0ubuntu1.2.1~) | nginx-extras (<< 1.18.0-0ubuntu1.2.1~), nginx-core (>= 1.18.0-0ubuntu1.2) | nginx-full (>= 1.18.0-0ubuntu1.2) | nginx-light (>= 1.18.0-0ubuntu1.2) | nginx-extras (>= 1.18.0-0ubuntu1.2)
Filename: pool/main/n/nginx/nginx_1.18.0-0ubuntu1.2_all.deb
…

Pour afficher des informations supplémentaires sur chacun des candidats, y compris une liste complète des dépendances inverses (une liste des paquets qui dépendent du paquet interrogé), utilisez plutôt la commande showpkg. Cela inclura des informations sur la relation de ce paquet avec d'autres paquets :

apt-cache showpkg package

Afficher les informations sur un paquet .deb

Pour afficher les détails d'un fichier .deb, vous pouvez utiliser l'option --info avec la commande dpkg. La cible de cette commande doit être le chemin vers un fichier .deb :

dpkg --info debfile.deb

Cela vous montrera certaines métadonnées sur le paquet en question. Cela inclut le nom et la version du paquet, l'architecture pour laquelle il a été construit, la taille et les dépendances requises, une description et les conflits.

Pour lister spécifiquement les dépendances (les paquets dont ce paquet dépend) et les dépendances inverses (les paquets qui dépendent de ce paquet), vous pouvez utiliser l'utilitaire apt-cache.

Pour les informations de dépendance conventionnelles, vous pouvez utiliser la sous-commande depends :

apt-cache depends nginx
nginx
 |Depends: nginx-core
 |Depends: nginx-full
 |Depends: nginx-light
  Depends: nginx-extras
 |Depends: nginx-core
 |Depends: nginx-full
 |Depends: nginx-light
  Depends: nginx-extras

Cela affichera des informations sur chaque paquet qui est listé comme une dépendance stricte, une suggestion, une recommandation ou un conflit.

Si vous avez besoin de savoir quels paquets dépendent d'un certain paquet, vous pouvez passer ce paquet à apt-cache rdepends :

apt-cache rdepends package

Afficher les versions des packages installés et disponibles

Souvent, il existe plusieurs versions d'un paquet dans les dépôts, avec un seul paquet par défaut. Pour voir les versions disponibles d'un paquet, vous pouvez utiliser apt-cache policy :

apt-cache policy package

Cela vous montrera quelle version est installée (le cas échéant), le paquet qui sera installé par défaut si vous ne spécifiez pas de version avec la commande d'installation, et un tableau des versions du paquet, complet avec le poids qui indique la priorité de chaque version.

Cela peut être utilisé pour déterminer quelle version sera installée et quelles alternatives sont disponibles. Comme cela liste également les dépôts où chaque version se trouve, cela peut être utilisé pour déterminer si des dépôts supplémentaires remplacent les paquets des dépôts par défaut.

Afficher les packages installés avec dpkg -l

Pour afficher les packages installés sur votre système, vous avez plusieurs options distinctes, qui varient en format et en niveau de détail de la sortie.

La première méthode consiste à utiliser soit la commande dpkg, soit la commande dpkg-query avec l'option -l. La sortie de ces deux commandes est identique. Sans arguments, elle fournit une liste de tous les paquets installés ou partiellement installés sur le système. La sortie ressemblera à ceci :

dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                        Version                                 Architecture Description
+++-===========================================-=======================================-============-=====================================================================================================================
ii  account-plugin-generic-oauth                0.10bzr13.03.26-0ubuntu1.1              amd64        GNOME Control Center account plugin for single signon - generic OAuth
ii  accountsservice                             0.6.34-0ubuntu6                         amd64        query and manipulate user account information
ii  acl                                         2.2.52-1                                amd64        Access control list utilities
ii  acpi-support                                0.142                                   amd64        scripts for handling many ACPI events
ii  acpid                                       1:2.0.18-1ubuntu2                       amd64        Advanced Configuration and Power Interface event daemon
. . .

La sortie continue pour chaque paquet sur le système. En haut de la sortie, vous pouvez voir les significations des trois premiers caractères de chaque ligne. Le premier caractère indique l'état souhaité du paquet. Il peut être :

  • u : Inconnu
  • i : Installé
  • r : Supprimé
  • p : Purgé
  • h : Version conservée

Le deuxième caractère indique le statut réel du colis tel que connu par le système d'emballage. Ceux-ci peuvent être :

  • n : Non installé
  • i : Installé
  • c : Des fichiers de configuration sont présents, mais l'application est désinstallée.
  • u : Décompressé. Les fichiers sont décompressés, mais pas encore configurés.
  • f : Le package est à moitié installé, ce qui signifie qu'il y a eu un échec à mi-chemin d'une installation qui a interrompu l'opération.
  • w : Le paquet attend un déclencheur d'un autre paquet
  • p : Le paquet a été déclenché par un autre paquet.

Le troisième caractère, qui sera un espace vide pour la plupart des packages, n'a qu'une seule autre option possible :

  • r : Cela indique qu'une réinstallation est nécessaire. Cela signifie généralement que le paquet est cassé et dans un état non fonctionnel.

Le reste des colonnes contient le nom du paquet, la version, l'architecture et une description.

Afficher les états d'installation des packages filtrés

Si vous ajoutez un motif de recherche après le motif -l, dpkg listera tous les paquets (qu'ils soient installés ou non) qui contiennent ce motif. Par exemple, vous pouvez rechercher des bibliothèques de traitement YAML ici :

dpkg -l libyaml*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name            Version      Architecture Description
+++-===============-============-============-===================================
ii  libyaml-0-2:amd 0.1.4-2ubunt amd64        Fast YAML 1.1 parser and emitter li
ii  libyaml-dev:amd 0.1.4-2ubunt amd64        Fast YAML 1.1 parser and emitter li
un  libyaml-perl    <none>                    (no description available)
un  libyaml-syck-pe <none>                    (no description available)
ii  libyaml-tiny-pe 1.51-2       all          Perl module for reading and writing

Comme vous pouvez le voir dans la première colonne, les troisième et quatrième résultats ne sont pas installés. Cela vous donne tous les paquets qui correspondent au modèle, ainsi que leurs états actuels et souhaités.

Une autre façon d'afficher les paquets installés sur votre système est avec dpkg -get-selections.

Cela fournit une liste de tous les paquets installés ou supprimés mais non purgés :

dpkg --get-selections

Pour différencier ces deux états, vous pouvez envoyer la sortie de dpkg vers awk afin de filtrer par état. Pour voir uniquement les paquets installés, tapez :

dpkg --get-selections | awk '$2 ~ /^install/'

Pour obtenir une liste des paquets supprimés dont les fichiers de configuration n'ont pas été purgés, vous pouvez plutôt taper :

dpkg --get-selections | awk '$2 !~ /^install/'

Vous pourriez également vouloir en savoir plus sur le passage de la sortie des commandes via awk,

Rechercher les packages installés

Pour rechercher un paquet spécifique dans votre base de paquets installés, vous pouvez ajouter une chaîne de filtre de paquet après l'option --get-selections. Cela prend en charge la correspondance avec des caractères génériques. Encore une fois, cela affichera tous les paquets qui sont installés ou qui ont encore des fichiers de configuration sur le système :

dpkg --get-selections libz*

Vous pouvez, une fois de plus, filtrer en utilisant les expressions awk de la section précédente.

Lister les fichiers installés par un paquet

Pour savoir quels fichiers sont pris en charge par un paquet, vous pouvez utiliser l'option -L avec la commande dpkg :

dpkg -L package

Cela imprimera le chemin absolu de chaque fichier contrôlé par le paquet. Cela n'inclura pas les fichiers de configuration générés par les processus à l'intérieur du paquet.

Pour savoir quel paquet est responsable d’un certain fichier dans votre système de fichiers, vous pouvez passer le chemin absolu à la commande dpkg avec l’option -S.

Cela affichera le paquet qui a installé le fichier en question :

dpkg -S /path/to/file

Gardez à l'esprit que tous les fichiers déplacés en place par les scripts post-installation ne peuvent pas être liés au paquet avec cette technique.

Trouver quel paquet fournit un fichier sans l'installer

En utilisant dpkg, vous pouvez savoir quel paquet possède un fichier en utilisant l'option -S. Cependant, il y a des moments où vous pourriez avoir besoin de savoir quel paquet fournit un fichier ou une commande, même si vous n'avez pas le paquet associé installé.

Pour ce faire, vous devrez installer un utilitaire appelé apt-file. Celui-ci maintient sa propre base de données d'informations, qui inclut le chemin d'installation de chaque fichier contrôlé par un paquet dans la base de données.

Installez le paquet apt-file comme d'habitude :

sudo apt update

sudo apt install apt-file

Maintenant, mettez à jour la base de données de l’outil et recherchez un fichier en tapant :

sudo apt-file update

sudo apt-file search /path/to/file

Cela ne fonctionnera que pour les emplacements de fichiers installés directement par un paquet. Tout fichier créé via des scripts post-installation ne peut pas être interrogé. Dans l'étape suivante, vous apprendrez comment importer et exporter des listes de paquets installés.

Étape 6 - Transférer les listes de paquets entre les systèmes

Bien souvent, vous pouvez avoir besoin de sauvegarder la liste des paquets installés sur un système et de l'utiliser pour installer un ensemble identique de paquets sur un autre système. Cela est également utile à des fins de sauvegarde. Cette section montrera comment exporter et importer des listes de paquets.

Si vous avez besoin de reproduire l'ensemble des paquets installés sur un système vers un autre, vous devrez d'abord exporter votre liste de paquets.

Vous pouvez exporter la liste des paquets installés vers un fichier en redirigeant la sortie de dpkg --get-selections vers un fichier texte :

dpkg --get-selections > ~/packagelist.txt

Vous pourriez également vouloir en savoir plus sur la redirection de l'entrée et de la sortie.

Cette liste peut ensuite être copiée sur la deuxième machine et importée.

Vous devrez peut-être également sauvegarder vos listes de sources et votre liste de clés de confiance. Vous pouvez sauvegarder vos sources en créant un nouveau répertoire et en les copiant depuis la configuration système dans /etc/apt/ :

mkdir ~/sources

cp -R /etc/apt/sources.list* ~/sources

Toutes les clés que vous avez ajoutées afin d’installer des paquets à partir de dépôts tiers peuvent être exportées en utilisant apt-key exportall :

apt-key exportall > ~/trusted_keys.txt

Vous pouvez maintenant transférer le fichier packagelist.txt, le répertoire sources et le fichier trusted_keys.txt vers un autre ordinateur pour les importer.

Importer la liste des packages

Si vous avez créé une liste de paquets en utilisant dpkg --get-selections comme démontré ci-dessus, vous pouvez également importer les paquets sur un autre ordinateur en utilisant la commande dpkg.

Tout d'abord, vous devez ajouter les clés de confiance et mettre en œuvre les listes de sources que vous avez copiées depuis le premier environnement. En supposant que toutes les données que vous avez sauvegardées ont été copiées dans le répertoire personnel du nouvel ordinateur, vous pourriez taper :

sudo apt-key add ~/trusted_keys.txt

sudo cp -R ~sources/* /etc/apt/

Ensuite, effacez l'état de tous les paquets non essentiels sur le nouvel ordinateur. Cela garantira que vous appliquez les modifications sur une base propre. Cela doit être fait avec le compte root ou des privilèges sudo :

sudo dpkg --clear-selections

Cela marquera tous les paquets non essentiels pour la désinstallation. Vous devriez mettre à jour la liste des paquets locaux afin que votre installation ait des enregistrements de tous les logiciels que vous prévoyez d'installer. La procédure réelle d'installation et de mise à niveau sera gérée par un outil appelé dselect.

Vous devez vous assurer que l'outil dselect est installé. Cet outil maintient sa propre base de données, vous devez donc également la mettre à jour avant de pouvoir continuer :

sudo apt update

sudo apt install dselect

sudo dselect update

Ensuite, vous pouvez appliquer la liste de paquets sur la liste actuelle pour configurer quels paquets doivent être conservés ou téléchargés :

sudo dpkg --set-selections < packagelist.txt

Cela définit les états corrects des paquets. Pour appliquer les modifications, exécutez apt dselect-upgrade :

sudo apt dselect-upgrade

Cela téléchargera et installera tous les paquets nécessaires. Cela supprimera également tous les paquets marqués pour la désélection. À la fin, votre liste de paquets devrait correspondre à celle de l'ordinateur précédent, bien que les fichiers de configuration devront encore être copiés ou modifiés. Vous pouvez vouloir utiliser un outil comme etckeeper pour migrer les fichiers de configuration du répertoire /etc.

Dans l'étape suivante et finale, vous apprendrez à travailler avec des dépôts de paquets tiers.

Étape 7 - Ajouter des dépôts et des PPA

Bien que l'ensemble par défaut de dépôts fourni par la plupart des distributions soit généralement le plus facile à maintenir, il y a des moments où des sources supplémentaires peuvent être utiles. Dans cette section, vous apprendrez comment configurer vos outils de gestion de paquets pour consulter des sources supplémentaires.

Une alternative aux dépôts traditionnels sur Ubuntu sont les PPA, ou personnels dépôts de paquets. D'autres variantes de Linux utilisent généralement des concepts différents, mais similaires, de dépôts tiers. Habituellement, les PPA ont un périmètre plus restreint que les dépôts et contiennent des ensembles d'applications ciblés maintenus par le propriétaire du PPA.

Ajouter des PPA à votre système vous permet de gérer les paquets qu'ils contiennent avec vos outils de gestion de paquets habituels. Cela peut être utilisé pour fournir des paquets plus à jour qui ne sont pas inclus dans les dépôts de la distribution. Faites attention à n'ajouter que des PPA en qui vous avez confiance, car vous permettrez à un mainteneur non standard de créer des paquets pour votre système.

Pour ajouter un PPA, vous pouvez utiliser la commande add-apt-repository. La cible doit inclure l'étiquette ppa:, suivie du nom du propriétaire du PPA sur Launchpad, d'un slash, et du nom du PPA :

sudo add-apt-repository ppa:owner_name/ppa_name

Il se peut que l'on vous demande d'accepter la clé du packager. Par la suite, le PPA sera ajouté à votre système, vous permettant d'installer les paquets avec les commandes normales apt. Avant de rechercher ou d'installer des paquets, assurez-vous de mettre à jour votre cache local avec les informations concernant votre nouveau PPA :

sudo apt update

Vous pouvez également éditer directement la configuration de votre dépôt. Vous pouvez soit éditer le fichier /etc/apt/sources.list, soit placer une nouvelle liste dans le répertoire /etc/apt/sources.list.d. Si vous optez pour cette dernière option, le nom de fichier que vous créez doit se terminer par .list :

sudo nano /etc/apt/sources.list.d/new_repo.list

À l'intérieur du fichier, vous pouvez ajouter l'emplacement du nouveau dépôt en utilisant le format suivant :

deb_or_deb-src url_of_repo release_code_name_or_suite component_names

Les différentes parties de la spécification du dépôt sont :

  • deb ou deb-src : Cela identifie le type de dépôt. Les dépôts conventionnels sont marqués avec deb, tandis que les dépôts de sources commencent par deb-src.
  • url : L'URL principale du dépôt. Il s'agit de l'emplacement où le dépôt peut être trouvé.
  • nom de code ou suite de version : Il s'agit généralement du nom de code de la version de votre distribution, mais cela peut être n'importe quel nom utilisé pour identifier un ensemble spécifique de paquets créé pour votre version de la distribution.
  • noms des composants : Les étiquettes pour la sélection des packages que vous souhaitez avoir disponibles. Il s'agit souvent d'une distinction fournie par le mainteneur du dépôt pour exprimer quelque chose sur la fiabilité ou les restrictions de licence du logiciel qu'il contient.

Vous pouvez ajouter ces lignes dans le fichier. La plupart des dépôts contiendront des informations sur le format exact qui doit être utilisé. Sur certaines autres distributions Linux, vous pouvez ajouter des sources de dépôt supplémentaires en installant réellement des paquets qui ne contiennent qu'un fichier de configuration pour ce dépôt - ce qui est cohérent avec la manière dont les gestionnaires de paquets sont conçus pour fonctionner.

Conclusion

La gestion des paquets est peut-être l'aspect le plus important de l'administration d'un système Linux. Il existe de nombreuses autres opérations de gestion des paquets que vous pouvez effectuer, mais ce tutoriel a fourni une base des fondamentaux d'Ubuntu, dont beaucoup peuvent être généralisés à d'autres distributions avec de petites modifications.

Ensuite, vous voudrez peut-être en savoir plus sur la gestion des paquets sur d'autres plateformes.