Introduction
Dans cet atelier, vous allez découvrir les fondamentaux de la gestion des paquets logiciels sur les distributions Linux basées sur RPM en utilisant le puissant utilitaire en ligne de commande rpm. Vous acquerrez une expérience concrète des tâches essentielles de gestion de paquets, notamment la recherche d'informations détaillées, la vérification de l'intégrité des paquets installés et l'inspection du contenu des fichiers RPM.
Tout au long des étapes, vous utiliserez des commandes rpm spécifiques pour identifier à quel paquet appartient un fichier, lister les dépendances et les fichiers de configuration, et vérifier les dépendances inverses. Vous apprendrez également à simuler une suppression de paquet en toute sécurité pour en comprendre l'impact, ainsi qu'à examiner le contenu d'un fichier de paquet RPM avant son installation à l'aide d'outils tels que rpm2cpio et cpio.
Interroger les informations de base d'un paquet avec rpm -qi et rpm -qf
Dans cette étape, vous apprendrez à interroger les informations sur les paquets installés à l'aide du Red Hat Package Manager (rpm). rpm est un utilitaire en ligne de commande incontournable pour gérer les logiciels sur les distributions Linux comme CentOS, Fedora et RHEL. Nous nous concentrerons sur deux options de requête fondamentales : -qi pour obtenir des informations détaillées sur un paquet et -qf pour savoir à quel paquet appartient un fichier spécifique.
Tout d'abord, inspectons les détails d'un paquet déjà installé sur votre système. Le shell bash est un composant central du système, ce qui en fait un exemple parfait. L'option -q signifie "query" (interroger) et l'option i signifie "information".
Exécutez la commande suivante dans votre terminal pour obtenir des informations sur le paquet bash :
rpm -qi bash
Vous verrez une sortie détaillée listant divers attributs du paquet. Le résultat ressemblera à ceci (les numéros de version et les dates peuvent varier) :
Name : bash
Version : 4.4.20
Release : 5.el8
Architecture: x86_64
Install Date: <some_date>
Group : System Environment/Shells
Size : 4989189
License : GPLv3+
Signature : RSA/SHA256, <some_date_and_time>, Key ID <some_key_id>
Source RPM : bash-4.4.20-5.el8.src.rpm
Build Date : <some_date>
Build Host : <some_build_host>
Relocations : (not relocatable)
Vendor : CentOS
URL : http://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.
Cette sortie fournit une mine d'informations, y compris la version du paquet, un résumé de sa fonction et une description plus détaillée.
Maintenant, imaginez que vous ayez un fichier sur votre système, comme l'exécutable bash situé dans /usr/bin/bash, et que vous vouliez savoir quel paquet l'a installé. C'est une tâche courante lors de l'audit d'un système ou d'un dépannage. Pour cela, vous pouvez utiliser les options -qf, où f signifie "file" (fichier).
Lancez la commande suivante pour découvrir quel paquet possède le fichier /usr/bin/bash :
rpm -qf /usr/bin/bash
La commande renverra le nom complet du paquet qui fournit ce fichier :
bash-5.1.8-9.el9.x86_64
Comme vous pouvez le voir, le système identifie correctement que /usr/bin/bash provient du paquet bash, ce qui correspond aux informations trouvées précédemment. Vous pouvez même combiner ces options pour obtenir directement des informations sur le paquet propriétaire d'un fichier en exécutant rpm -qif /usr/bin/bash.
Lister les dépendances et les fichiers de configuration avec rpm -qR et rpm -qc
Dans cette étape, vous continuerez à explorer rpm en apprenant à lister les dépendances d'un paquet et ses fichiers de configuration associés. Comprendre les dépendances est crucial car la plupart des logiciels s'appuient sur d'autres paquets pour fonctionner correctement. Savoir où se trouvent les fichiers de configuration est essentiel pour l'administration et la personnalisation du système.
Commençons par découvrir de quels autres paquets ou capacités le paquet bash a besoin. Nous utilisons l'option -qR (ou --requires) pour cela. Le R signifie "requires" (requiert).
Exécutez la commande suivante pour voir les dépendances de bash :
rpm -qR bash
La sortie sera une liste de paquets et de capacités système dont bash dépend. Cette liste peut être assez longue.
/bin/sh
config(bash) = 4.4.20-5.el8
filesystem >= 3
glibc
info
libc.so.6(GLIBC_2.17)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.28)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
...
rtld(GNU_HASH)
Ce résultat montre que bash nécessite le paquet glibc (qui fournit la bibliothèque C libc.so.6), le paquet filesystem et d'autres composants de bas niveau.
Ensuite, trouvons les fichiers de configuration qui ont été installés avec le paquet bash. C'est utile lorsque vous devez modifier le comportement par défaut du shell pour les nouveaux utilisateurs. L'option -qc est utilisée à cet effet, où c signifie "configfiles".
Lancez cette commande pour lister les fichiers de configuration de bash :
rpm -qc bash
La sortie affichera les chemins complets vers les fichiers de configuration :
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
Ces fichiers dans /etc/skel sont des modèles copiés dans le répertoire personnel d'un nouvel utilisateur lors de la création de son compte.
Vous pouvez également combiner des options pour trouver les fichiers de configuration liés à une commande spécifique. Par exemple, pour voir les fichiers de configuration utilisés par la commande passwd, vous pouvez utiliser -qcf. Cela indique à rpm de trouver d'abord le paquet correspondant au fichier (-f /usr/bin/passwd), puis de lister ses fichiers de configuration (-c).
rpm -qcf /usr/bin/passwd
Cette commande révèle les fichiers de configuration associés à l'utilitaire passwd :
/etc/pam.d/passwd
C'est un moyen puissant d'identifier rapidement les fichiers que vous pourriez avoir besoin de modifier pour changer le comportement d'une commande.
Vérifier l'intégrité des paquets et les modifications de fichiers avec rpm -V
Dans cette étape, vous apprendrez à vérifier l'intégrité d'un paquet installé à l'aide de rpm -V (ou rpm --verify). Cette commande est un outil de sécurité et de dépannage essentiel. Elle compare les fichiers installés par un paquet aux informations stockées dans la base de données RPM, telles que la taille des fichiers, les permissions et les sommes de contrôle (checksums). Cela vous permet de détecter toute modification non autorisée ou accidentelle des fichiers système.
Tout d'abord, assurons-nous que quelques paquets utilitaires, lsscsi et at, sont installés sur le système. Nous les utiliserons pour nos tests de vérification.
sudo dnf install -y lsscsi at
Maintenant, vérifions le paquet lsscsi. Comme nous venons de l'installer et que nous n'avons effectué aucune modification, il devrait réussir le test de vérification. Une vérification réussie ne produit aucune sortie.
rpm -V lsscsi
Comme prévu, l'invite de commande revient sans message, indiquant que tous les fichiers du paquet lsscsi sont dans leur état d'origine.
Ensuite, modifions intentionnellement un fichier de configuration pour voir comment rpm -V signale le changement. Nous allons ajouter une ligne au fichier /etc/at.deny, qui appartient au paquet at. Ce fichier contrôle quels utilisateurs ne sont pas autorisés à utiliser la commande at.
echo "labex" | sudo tee -a /etc/at.deny
Maintenant que nous avons modifié un fichier, vérifions à nouveau le paquet at.
sudo rpm -V at
Cette fois, la commande produit une sortie, indiquant qu'un changement a été détecté :
S.5....T. c /etc/at.deny
Analysons cette sortie :
S: La taille du fichier (Size) a changé.5: La somme de contrôle MD5 a changé.T: L'heure de modification (Time) a changé.c: Indique qu'il s'agit d'un fichier de configuration./etc/at.deny: Le chemin du fichier modifié.
Chaque position de caractère dans la chaîne de 8 caractères S.5....T. représente un test différent. Un . signifie que le test a réussi. Cette sortie montre clairement que le fichier de configuration /etc/at.deny a été altéré depuis son installation.
Vous pouvez également vérifier directement le paquet qui possède un fichier spécifique en utilisant les options -qVf.
sudo rpm -qVf /etc/at.deny
Cette commande produira le même résultat, car elle identifie d'abord le paquet possédant /etc/at.deny (at), puis le vérifie.
Vérifier les dépendances inverses et simuler la suppression d'un paquet avec rpm -e --test
Dans cette étape, vous apprendrez à vérifier les dépendances inverses et à simuler en toute sécurité la suppression d'un paquet. Alors que la commande rpm -qR montre ce dont un paquet a besoin (ses dépendances), rpm -q --whatrequires montre quels autres paquets ont besoin de lui (ses dépendances inverses). Il est extrêmement important de le savoir avant de supprimer un paquet, car vous pourriez casser d'autres parties du système.
Pour vérifier en toute sécurité les conséquences de la suppression d'un paquet, vous pouvez utiliser la commande rpm -e --test. L'option -e signifie "erase" (effacer), et l'option --test indique à RPM d'effectuer une simulation sans réellement supprimer de fichiers.
Commençons par examiner un paquet système central dont dépendent de nombreux autres paquets. Le paquet glibc fournit la bibliothèque GNU C, fondamentale pour presque tous les programmes sur un système Linux. Vérifions quels paquets nécessitent glibc.
rpm -q --whatrequires glibc
La sortie affichera plusieurs paquets dépendant de glibc :
glibc-common-2.34-168.el9_6.19.x86_64
glibc-langpack-en-2.34-168.el9_6.19.x86_64
libstdc++-11.5.0-5.el9_5.x86_64
glibc-headers-2.34-168.el9_6.19.x86_64
pam-1.5.1-23.el9.x86_64
glibc-devel-2.34-168.el9_6.19.x86_64
nscd-2.34-168.el9_6.19.x86_64
Comme vous pouvez le voir, de nombreux paquets système critiques dépendent de glibc. Voyons maintenant ce qui se passe si nous essayons de supprimer glibc. Nous utiliserons l'option --test pour nous assurer de ne pas le supprimer réellement, ce qui rendrait le système inutilisable.
sudo rpm -e --test glibc
Comme tant de paquets ont besoin de glibc, RPM signalera des erreurs de dépendance et empêchera la suppression. La sortie affichera une longue liste d'échecs de dépendances :
error: Failed dependencies:
glibc = 2.34-168.el9_6.19 is needed by (installed) glibc-common-2.34-168.el9_6.19.x86_64
glibc = 2.34-168.el9_6.19 is needed by (installed) glibc-langpack-en-2.34-168.el9_6.19.x86_64
glibc >= 2.34 is needed by (installed) libstdc++-11.5.0-5.el9_5.x86_64
... (erreurs de dépendances supplémentaires)
Regardons maintenant un paquet avec moins de dépendances. Le paquet lsscsi que nous avons installé précédemment est un utilitaire avec moins de dépendances inverses. Vérifions ce qui le requiert :
rpm -q --whatrequires lsscsi
Vous devriez voir un message indiquant qu'aucun paquet ne nécessite lsscsi :
no package requires lsscsi
Puisqu'aucun paquet ne dépend de lsscsi, nous pouvons simuler sa suppression en toute sécurité :
sudo rpm -e --test lsscsi
Cette commande devrait se terminer sans erreur, indiquant que la suppression de lsscsi ne casserait aucun autre paquet sur le système.
Cela démontre comment vous pouvez prédire l'impact de la suppression d'un paquet et éviter d'endommager votre système en vérifiant d'abord les dépendances inverses.
Inspecter le contenu d'un paquet RPM avec rpm2cpio et cpio
Dans cette étape, vous apprendrez une technique puissante pour inspecter le contenu d'un fichier de paquet RPM sans l'installer. C'est utile pour vérifier les fichiers qu'un paquet contient avant l'installation ou pour extraire un seul fichier d'un paquet afin de restaurer un fichier corrompu ou supprimé. Ce processus implique deux commandes : rpm2cpio, qui convertit un fichier RPM en une archive cpio, et cpio, qui peut ensuite lister ou extraire les fichiers de cette archive.
Tout d'abord, vous avez besoin d'un fichier .rpm réel à inspecter. Téléchargeons le fichier du paquet bash dans votre répertoire actuel (~/project) à l'aide du gestionnaire de paquets dnf. La sous-commande download récupère le fichier du paquet sans l'installer.
sudo dnf download bash
Vous verrez une sortie indiquant que le fichier a été téléchargé avec succès. Le nom du fichier inclura la version et l'architecture.
Last metadata expiration check: ...
bash-<version>.<arch>.rpm
Maintenant, utilisez la commande ls pour confirmer que le fichier .rpm est présent dans votre répertoire ~/project :
ls bash-*.rpm
Une fois le fichier RPM prêt, vous pouvez utiliser les commandes rpm2cpio et cpio ensemble pour lister son contenu. La commande rpm2cpio lit le fichier RPM et envoie une archive cpio vers la sortie standard. Nous redirigeons ensuite (|) cette sortie vers la commande cpio, qui lit l'archive depuis son entrée standard. L'option -t pour cpio lui demande de lister la table des matières.
rpm2cpio bash-*.rpm | cpio -t
Cela produira une longue liste de tous les fichiers et répertoires contenus dans le paquet bash. Le résultat ressemblera à ceci :
.
./etc
./etc/skel
./etc/skel/.bash_logout
./etc/skel/.bash_profile
./etc/skel/.bashrc
./usr
./usr/bin
./usr/bin/bash
./usr/bin/sh
./usr/share
./usr/share/doc
...
Cette technique vous donne une vue complète de la charge utile d'un paquet, vous permettant de voir exactement ce qui sera placé sur votre système si vous décidiez de l'installer.
Résumé
Dans cet atelier, vous avez appris à gérer et à interroger des paquets logiciels à l'aide de l'utilitaire RPM dans un environnement Linux. Vous avez commencé par récupérer des informations détaillées sur les paquets installés avec rpm -qi et par identifier le paquet d'origine d'un fichier spécifique avec rpm -qf. Vous vous êtes également exercé à lister les dépendances d'un paquet avec rpm -qR et à localiser ses fichiers de configuration avec rpm -qc, offrant ainsi une vue d'ensemble de l'intégration d'un paquet dans le système.
En vous appuyant sur ces compétences de requête, vous avez appris à vérifier l'intégrité des fichiers d'un paquet installé à l'aide de rpm -V pour détecter d'éventuelles modifications. Vous avez également exploré comment vérifier les dépendances inverses et simuler la suppression d'un paquet avec rpm -e --test pour anticiper l'impact potentiel sans modifier le système. Enfin, vous avez acquis la capacité d'inspecter le contenu d'un fichier de paquet RPM avant son installation en utilisant rpm2cpio et cpio pour extraire et lister son contenu.



