PaquetsObjectif de cet atelier pratique :

  • Installer et gérer des logiciels sur un système Linux de la famille Red Hat avec le gestionnaire de paquets RPM

Système : Rocky Linux 8

Anatomie d’un paquet RPM

Nous avons vu que la distribution de logiciels par le biais d’archives de code source n’était pas très pratique pour les utilisateurs et les administrateurs. Cette manière de faire a donc été remplacée par les systèmes de paquets, parfois aussi appelés paquetages.

En règle générale, un paquet comprend tout ce qui est nécessaire pour faire fonctionner un logiciel :

  • les fichiers binaires pré-compilés
  • les informations de dépendances
  • la documentation en ligne
  • les modèles de fichiers de configuration

Regardons de plus près à quoi ressemblent les paquets logiciels fournis par Rocky Linux. Pour ce faire, nous pouvons utiliser les dépôts en ligne. Rendez-vous sur le dépôt de téléchargement de Rocky Linux :

$ lynx http://dl.rockylinux.org

Suivez successivement les liens pub > rocky > 8.6 > BaseOS > x86_64 > os > Packages.

AstuceAlternativement, ouvrez le gestionnaire des miroirs de téléchargement de Rocky Linux :

$ lynx https://mirrors.rockylinux.org

Sélectionnez d’abord la version (8.6) et l’architecture (x86_64), choisissez un miroir en fonction de votre pays (par exemple mirror.in2p3.fr pour la France) et suivez les liens successifs comme pour le dépôt de téléchargement principal.

Maintenant, cherchez et affichez successivement les paquets suivants :

  • bash
  • kernel
  • openssl
  • postfix

Ne vous tracassez pas si vous trouvez plusieurs versions d’un même paquet. Prenez-en un au hasard dans la liste.

Voici ce que j’obtiens :

  • bash-4.4.20-3.el8.x86_64.rpm
  • kernel-4.18.0-372.13.1.el8_6.x86_64.rpm
  • openssl-1.1.1k-6.el8_5.x86_64.rpm
  • postfix-3.5.8-4.el8.x86_64.rpm

Le nom de chaque paquet fournit une série d’informations :

  • le nom de l’application ou du paquet : bash, kernel, openssl, postfix
  • la version : 4.4.20, 4.18.0, 1.1.1k, 3.5.8
  • le numéro de build : 3, 372.13.1, 6, 4
  • la version de RHEL/Rocky Linux : el8, el8_6, el8_5
  • l’architecture du paquet : x86_64
  • le suffixe .rpm

Le gestionnaire de paquets RPM

Le premier outil que nous utiliserons, c’est l’ancêtre RPM de Red Hat (RPM Package Manager). RPM est un gestionnaire de paquets en ligne de commande capable d’installer, de supprimer et de mettre à jour des paquets. Il permet également d’effectuer des requêtes sur les paquets ou d’en vérifier l’intégrité.

AstuceRPM a été utilisé pour la première fois en 1995 par la société Red Hat pour sa distribution. Par la suite, il a été adopté par d’autres distributions, telles que SUSE, Mandriva ou ALT Linux.

RPM est un outil puissant, qui souffre cependant d’une réputation quelque peu sulfureuse. Au premier abord, son utilisation paraît encombrante et peu flexible. D’ailleurs, les distributions basées sur RPM disposent toutes au moins d’un autre gestionnaire un peu plus maniable :

  • DNF (que nous verrons un peu plus loin) pour Fedora, Red Hat Enterprise Linux et toutes les distributions dérivées comme Rocky Linux
  • Zypper pour SUSE et OpenSUSE

Ces outils ne viennent pas pour autant remplacer RPM. Ils peuvent très bien être utilisés conjointement. C’est d’ailleurs ce que nous ferons par la suite. Les options de RPM sont nombreuses et je ne vous présenterai ici que les commandes les plus usuelles. Considérez-les comme un bagage de départ pour fonctionner au quotidien.

Trouver des paquets RPM

Créez un répertoire ~/RPMS qui servira à récupérer les paquets RPM depuis le dépôt de téléchargement :

$ mkdir -v ~/RPMS
mkdir: created directory ‘/home/microlinux/RPMS’
$ cd ~/RPMS
$ lynx http://dl.rockylinux.org/pub/rocky/8.6/BaseOS/x86_64/os/Packages/

Pour commencer, récupérez les deux paquets suivants :

  • nano-2.9.8-1.el8.x86_64.rpm
  • net-tools-2.0-0.52.20160912git.el8.x86_64.rpm

Installer un paquet RPM

Installez le paquet nano grâce à l’option -i. Songez à utiliser la complétion automatique pour éviter d’avoir à taper le nom à rallonge du paquet avec toutes les informations de version :

$ sudo rpm -i nano-2.9.8-1.el8.x86_64.rpm

Et voilà ! C’est fait. L’éditeur Nano est désormais disponible sur votre machine.

$ man nano
$ nano

Supprimer un paquet RPM

Pour supprimer une application installée, invoquez rpm avec l’option -e. Le simple nom du paquet en argument est suffisant :

$ sudo rpm -e nano

AstuceRPM est assez laconique pour l’installation et la suppression des paquets. Il s’exécute et c’est tout. Contrairement à un système comme Windows, la suppression d’un logiciel sous Linux ne laisse pas de traces sur le système, si ce n’est les données produites avec le logiciel en question. Autrement dit, vous pouvez joyeusement installer et désinstaller autant de programmes que vous voulez, et même autant de fois que vous voulez, cela n’entraînera en aucun cas un quelconque ralentissement du système à moyen ou à long terme.

Mode bavard ou laconique ?

L’installation peut s’effectuer en mode « bavard » :

$ sudo rpm -ivh net-tools-2.0-0.52.20160912git.el8.x86_64.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
  1:net-tools-2.0-0.52.20160912git.el################################# [100%]
  • L’option -v (verbose) rend RPM plus loquace.
  • L’option -h (--hash) se charge de dessiner les barres de progression avec le signe dièse.

Il en va de même pour la suppression d’un paquet :

$ sudo rpm -evh net-tools
Preparing... ################################# [100%]
Cleaning up / removing...
  1:net-tools-2.0-0.52.20160912git.el  ################################# [100%]

J’en profite pour attirer votre attention sur l’option --test, que j’utilise de temps en temps. Elle permet de tester l’installation avant d’installer quoi que ce soit et peut même être invoquée sans les droits d’administrateur :

$ rpm -ivh --test nano-2.9.8-1.el8.x86_64.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]
$ rpm -ivh --test net-tools-2.0-0.52.20160912git.el8.x86_64.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]

Gérer les dépendances entre les paquets RPM

La compilation de tcpdump et de la bibliothèque libpcap depuis le code source nous a sensibilisés pour la gestion des dépendances.

À présent, nous allons tenter d’installer quota, un outil qui permet de surveiller et limiter l’utilisation du disque pour les utilisateurs. Ouvrez le dépôt de téléchargement et récupérez le paquet binaire quota-4.04-14.el8.x86_64.rpm.

Voyons ce que donnerait une tentative d’installation :

$ rpm -ivh --test quota-4.04-14.el8.x86_64.rpm 
error: Failed dependencies:
  quota-nls = 1:4.04-14.el8 is needed by quota-1:4.04-14.el8.x86_64

Je relance Lynx et je refais un tour sur les archives en ligne pour récupérer le paquet quota-nls-4.04-14.el8.noarch.rpm.

Je teste et j’installe quota-nls :

$ rpm -ivh --test quota-nls-4.04-14.el8.noarch.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]
$ sudo rpm -ivh quota-nls-4.04-14.el8.noarch.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
  1:quota-nls-1:4.04-14.el8 ################################# [100%]

Maintenant que la dépendance est satisfaite, je peux installer quota :

$ rpm -ivh --test quota-4.04-14.el8.x86_64.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]
$ sudo rpm -ivh quota-4.04-14.el8.x86_64.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
  1:quota-1:4.04-14.el8  ################################# [100%]

Essayons d’installer une autre application pour nous familiariser avec la gestion des dépendances. Rsync (remote synchronization) est un outil de synchronisation de fichiers. Récupérez la dernière version du paquet rsync-daemon et essayez de l’installer :

$ rpm -ivh --test rsync-daemon-3.1.3-14.el8_6.3.noarch.rpm 
error: Failed dependencies:
  rsync = 3.1.3-14.el8_6.3 is needed by rsync-daemon-3.1.3-14.el8_6.3.noarch

Récupérons le paquet rsync dans sa dernière mouture et installons-le :

$ rpm -ivh --test rsync-3.1.3-14.el8_6.3.x86_64.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]
$ sudo rpm -ivh rsync-3.1.3-14.el8_6.3.x86_64.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
  1:rsync-3.1.3-14.el8_6.3  ################################# [100%]

L’installation de ce paquet a satisfait la dépendance manquante :

$ rpm -ivh --test rsync-daemon-3.1.3-14.el8_6.3.noarch.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]
$ sudo rpm -ivh rsync-daemon-3.1.3-14.el8_6.3.noarch.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
  1:rsync-daemon-3.1.3-14.el8_6.3  ################################# [100%]

Mettre à jour des paquets avec RPM

La mise à jour d’un paquet se fait avec l’option -U comme update. Essayez d’abord avec la dernière version en date du paquet tzdata :

$ rpm -Uvh --test tzdata-2022c-1.el8.noarch.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]
$ sudo rpm -Uvh tzdata-2022c-1.el8.noarch.rpm 
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
   1:tzdata-2022c-1.el8  ################################# [ 50%]
Cleaning up / removing...
   2:tzdata-2022a-1.el8  ################################# [100%]

La mise à jour de paquets avec RPM nous confronte parfois à un problème de dépendances un peu particulier. Concrètement, la tentative d’actualisation du paquet xz échoue parce que ce dernier a manifestement besoin d’une version plus récente de la dépendance xz-libs :

$ rpm -Uvh --test xz-5.2.4-4.el8_6.x86_64.rpm 
error: Failed dependencies:
  xz-libs(x86-64) = 5.2.4-4.el8_6 is needed by xz-5.2.4-4.el8_6.x86_64

Or, si nous essayons de mettre à jour xz-libs, le gestionnaire nous informe qu’il constitue une dépendance pour le paquet xz dans la version installée :

$ rpm -Uvh --test xz-libs-5.2.4-4.el8_6.x86_64.rpm 
error: Failed dependencies:
  xz-libs(x86-64) = 5.2.4-3.el8.1 is needed by (installed) xz-5.2.4-3.el8.1.x86_64

Pour sortir de ce cercle vicieux, on peut effectuer la mise à jour conjointe des deux paquets :

$ rpm -Uvh --test xz-*
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
$ sudo rpm -Uvh --test xz-*
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]

ImportantSi une mise à jour est disponible pour un paquet, c’est qu’elle corrige très probablement un bug ou une faille de sécurité. Vous avez donc tout intérêt à garder votre système à jour.

La suppression des paquets RPM revisitée

Un peu plus haut, nous avons vu brièvement comment supprimer un seul paquet RPM. Pour désinstaller plusieurs programmes à la fois, utilisez simplement une liste d’éléments séparés par des espaces. Là encore, vous pouvez très bien tester le bon déroulement de l’opération avant de vous lancer :

$ rpm -evh --test firewalld parted
Preparing... ################################# [100%]
$ sudo rpm -evh firewalld parted
Preparing... ################################# [100%]
Cleaning up / removing...
   1:firewalld-0.9.3-13.el8  ################################# [ 50%]
   2:parted-3.2-39.el8       ################################# [100%]

Un paquet peut être nécessaire pour le bon fonctionnement d’un autre :

$ rpm -evh --test iptables
error: Failed dependencies:
  iptables = 1.8.4-22.el8 is needed by (installed) 
             iptables-ebtables-1.8.4-22.el8.x86_64

Pour supprimer un paquet sans vérifier les dépendances, on peut éventuellement utiliser l’option --nodeps. En temps normal, il vaut mieux l’éviter, étant donné qu’elle va très certainement casser la cohérence de votre système. Quoi qu’il en soit, utilisez-la en connaissance de cause :

$ sudo rpm -evh --nodeps iptables
Preparing... ################################# [100%]
Cleaning up / removing...
   1:iptables-1.8.4-22.el8  ################################# [100%]

Obtenir des informations sur les paquets RPM installés

Les fonctions de requête de RPM commencent par l’option -q comme query. Ici, je vérifie si le paquet vim-minimal est installé sur mon système :

$ rpm -q vim-minimal
vim-minimal-8.0.1763-16.el8_5.13.x86_64

Maintenant, j’affiche la liste complète des paquets installés :

$ rpm -qa
initscripts-10.00.17-1.el8.x86_64
dracut-network-049-201.git20220131.el8.x86_64
python3-pip-wheel-9.0.3-22.el8.rocky.0.noarch
python3-dbus-1.2.4-15.el8.x86_64
rocky-release-8.6-2.el8.noarch
python3-gobject-base-3.28.3-2.el8.x86_64
setup-2.12.2-6.el8.noarch
grub2-tools-extra-2.02-123.el8.x86_64
basesystem-11-5.el8.noarch
virt-what-1.18-13.el8.x86_64
...

Cette dernière commande résulte en un joyeux défilement de quelques centaines de paquets en vrac. On va donc mettre un peu d’ordre là-dedans. Si vous préférez une liste classée par ordre alphabétique, tapez :

$ rpm -qa | sort
...
which-2.21-17.el8.x86_64
xfsprogs-5.0.0-10.el8.x86_64
xz-5.2.4-3.el8.1.x86_64
xz-libs-5.2.4-3.el8.1.x86_64
yum-4.7.0-8.el8.noarch
zlib-1.2.11-18.el8_5.x86_64

Et, puisque le résultat dépasse de loin la taille d’un écran :

$ rpm -qa | sort | less
acl-2.2.53-1.el8.1.x86_64
audit-3.0.7-2.el8.2.x86_64
audit-libs-3.0.7-2.el8.2.x86_64
authselect-1.2.2-3.el8.x86_64
authselect-libs-1.2.2-3.el8.x86_64
basesystem-11-5.el8.noarch
bash-4.4.20-3.el8.x86_64
...

Pour effectuer une recherche insensible à la casse, avec un nom de paquet partiel :

$ rpm -qa | grep -i grub
grub2-tools-extra-2.02-123.el8.x86_64
grub2-common-2.02-123.el8.noarch
grub2-pc-modules-2.02-123.el8.noarch
grub2-tools-minimal-2.02-123.el8.x86_64
grubby-8.40-42.el8.x86_64
grub2-pc-2.02-123.el8.x86_64
grub2-tools-2.02-123.el8.x86_64

L’option --last affiche la liste de tous les paquets RPM installés par ordre décroissant de date d’installation :

$ rpm -qa --last | less

Pour afficher la liste des cinq derniers paquets installés, vous pourrez donc taper ceci :

$ rpm -qa --last | head -n 5
tzdata-2022c-1.el8.noarch             Sun 18 Sep 2022 11:12:08 AM CEST
rsync-daemon-3.1.3-14.el8_6.3.noarch  Sun 18 Sep 2022 10:58:55 AM CEST
rsync-3.1.3-14.el8_6.3.x86_64         Sun 18 Sep 2022 10:57:14 AM CEST
quota-4.04-14.el8.x86_64              Sun 18 Sep 2022 10:49:14 AM CEST
quota-nls-4.04-14.el8.noarch          Sun 18 Sep 2022 10:47:29 AM CEST

Certaines options nous permettent d’examiner de plus près le contenu proprement dit d’un paquet installé. Pour afficher la liste des fichiers installés par un paquet, par exemple, saisissez la commande suivante :

$ rpm -ql vim-minimal
/etc/virc
/usr/bin/ex
/usr/bin/rvi
/usr/bin/rview
/usr/bin/vi
/usr/bin/view
/usr/lib/.build-id
/usr/lib/.build-id/d2
/usr/lib/.build-id/d2/b9a6f12e5a761b5ec0739be2e106006ca437ea
/usr/share/man/man1/ex.1.gz
/usr/share/man/man1/rvi.1.gz
/usr/share/man/man1/rview.1.gz
/usr/share/man/man1/vi.1.gz
/usr/share/man/man1/view.1.gz
/usr/share/man/man5/virc.5.gz

Pour afficher la liste des fichiers de documentation d’un paquet installé :

$ rpm -qd vim-minimal
/usr/share/man/man1/ex.1.gz
/usr/share/man/man1/rvi.1.gz
/usr/share/man/man1/rview.1.gz
/usr/share/man/man1/vi.1.gz
/usr/share/man/man1/view.1.gz
/usr/share/man/man5/virc.5.gz

Et pour en savoir plus sur les fichiers de configuration d’un paquet installé :

$ rpm -qc openssh-clients
/etc/ssh/ssh_config
/etc/ssh/ssh_config.d/05-redhat.conf

L’option -f indique à quel paquet appartient un fichier :

$ rpm -qf /etc/yum.conf 
yum-4.7.0-8.el8.noarch

Pour afficher les informations générales concernant un paquet :

$ rpm -qi bash
Name        : bash
Version     : 4.4.20
Release     : 3.el8
Architecture: x86_64
...
Packager    : infrastructure@rockylinux.org
Vendor      : Rocky
URL         : https://www.gnu.org/software/bash
Summary     : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.

Ces options de requête sont combinables à souhait, comme le montrent les exemples suivants. Pour afficher les informations à propos d’un fichier ou d’une commande :

$ rpm -qif /etc/virc 
Name        : vim-minimal
Epoch       : 2
Version     : 8.0.1763
Release     : 16.el8_5.13
Architecture: x86_64
...

Pour afficher la liste des fichiers de configuration d’une commande :

$ rpm -qcf /usr/bin/ssh
/etc/ssh/ssh_config
/etc/ssh/ssh_config.d/05-redhat.conf

Et pour en savoir plus sur les fichiers de documentation d’une commande :

$ rpm -qdf /usr/bin/dnf
/usr/share/man/man5/dnf-transaction-json.5.gz
/usr/share/man/man7/dnf.modularity.7.gz
/usr/share/man/man8/dnf.8.gz
/usr/share/man/man8/yum2dnf.8.gz

Obtenir des informations sur les paquets RPM non installés

Les options de requête présentées jusqu’ici ne concernaient que les paquets installés. L’option -p effectue des requêtes sur des paquets RPM non installés. Ainsi, pour afficher la liste des fichiers contenus dans un paquet non installé, on utilisera :

$ rpm -qpl xz-5.2.4-4.el8_6.x86_64.rpm 
/etc/profile.d/colorxzgrep.csh
/etc/profile.d/colorxzgrep.sh
/usr/bin/unxz
/usr/bin/xz
/usr/bin/xzcat
/usr/bin/xzcmp
/usr/bin/xzdec
/usr/bin/xzdiff
/usr/bin/xzegrep
/usr/bin/xzfgrep
/usr/bin/xzgrep
/usr/bin/xzless
/usr/bin/xzmore
...

Là aussi, on pourra limiter les requêtes aux fichiers de configuration (-qpc) ou de documentation (-qpd).

Avantages et inconvénients d’une installation avec RPM

L’installation et la maintenance de paquets binaires avec l’outil RPM présente indéniablement une série d’avantages par rapport à la compilation depuis le code source :

  • L’installation d’un paquet binaire est plus rapide et évite de « spammer » le système avec des fichiers éparpillés un peu partout.
  • La suppression d’un paquet RPM se fait proprement.
  • La mise à jour d’un paquet s’effectue en une simple commande.

Tout cela n’empêche que RPM reste un outil obtus à utiliser au quotidien :

  • Il gère les dépendances, mais il ne vous aide pas à les résoudre. Concrètement, si RPM rouspète parce qu’il lui manque telle et telle dépendance, c’est à vous d’aller dénicher le bon paquet dans la bonne version, ce qui n’est pas toujours évident.
  • Il arrive assez souvent que les dépendances en question refusent de s’installer à leur tour parce qu’elles requerront d’autres dépendances. J’ai évité de vous présenter ce cas de figure en détail. Si vous souhaitez en avoir une vague idée, essayez d’installer le paquet vim-enhanced avec l’outil RPM, en partant d’un système minimal.
  • Le téléchargement et l’installation des mises à jour restent également une procédure laborieuse.

AstuceSi j’ai décidé de vous confronter dans un premier temps à une façon quelque peu archaïque de gérer les logiciels, c’est d’une part pour vous donner une idée un tout petit peu plus concrète de ce qui peut se passer lorsqu’on installe, met à jour et supprime un logiciel. D’autre part, RPM n’est pas complètement tombé en désuétude, loin de là, et tout administrateur système se retrouve tôt ou tard dans des situations où ce gestionnaire de paquets rudimentaire rend de bons et loyaux services.

 

Lire la suite : Utiliser le gestionnaire de paquets DNF


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 

Catégories : Formation

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée.