Objectif 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
.
Alternativement, 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é.
RPM 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
RPM 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%]
Si 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.
Si 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.
0 commentaire