Recherche de site Web

Comment interroger les informations des paquets avec le gestionnaire de paquets rpm


RPM est l’acronyme récursif de RPM Package Manager : c’est le gestionnaire de paquets de bas niveau par défaut dans certaines des distributions Linux les plus célèbres et les plus utilisées, telles que Fedora, Red Hat Enterprise Linux, CentOS, OpenSUSE et leurs dérivés. Le logiciel, comme vous pouvez vous y attendre, est gratuit et open source ; Lorsqu’il est invoqué avec l’option -q, il peut être utilisé pour interroger des paquets afin de récupérer des informations spécifiques, telles que des dépendances, des recommandations, des fichiers, etc. Dans ce tutoriel, nous apprenons à effectuer de telles requêtes.

Dans ce tutoriel, vous allez apprendre :

  • Comment exécuter rpm en mode « requête »
  • Comment obtenir des informations générales sur un forfait
  • Comment lire le journal des modifications d’un paquet
  • Comment lister les fichiers fournis par un package
  • Comment lister les scripts utilisés par un paquet
  • Comment répertorier les dépendances et les recommandations d’un package
  • Comment lister les paquets rendus obsolètes par un rpm

Comment interroger les informations des paquets avec le gestionnaire de paquets rpm

Configuration logicielle requise et conventions utilisées

Appel de rpm en mode requête

Le gestionnaire de paquets rpm peut être utilisé pour modifier l’état du système, puisqu’il peut être utilisé pour installer, mettre à jour et supprimer des paquets (lorsqu’il est invoqué avec les options -i, -U et e, respectivement), ou il peut fonctionner en mode « requête », sans avoir besoin de privilèges administratifs, lorsqu’il est lancé avec l’option -q, qui est la version abrégée de --query.

Si un paquet est déjà installé sur notre système, tout ce que nous avons à faire est de le mentionner par son nom ; Si ce n’est pas le cas, et que nous voulons interroger un fichier .rpm téléchargé, par exemple, nous devons utiliser l’option -p (--package), et fournir le chemin du fichier comme argument. Voyons quelques exemples pratiques de la façon de récupérer des informations sur un paquet.

Obtenir des informations générales sur un forfait

L’une des choses de base que nous pouvons vouloir faire lorsque nous traitons un paquet rpm est d’afficher des informations générales à ce sujet. Pour accomplir cette tâche, tout ce que nous avons à faire est d’utiliser l’option -i (ou --info) lors de l’appel de rpm en mode requête. Pour les besoins de cet exemple, nous allons travailler avec le paquet « gimp », qui est déjà installé dans le système. Dans ce cas, nous exécuterions :

rpm -qi gimp

Immédiatement après avoir appelé la commande, nous recevons un résultat similaire à ce qui suit, qui comprend des informations, telles que la description du logiciel, sa version, son architecture, la date d’installation, la taille, etc.

Name        : gimp
Epoch       : 2
Version     : 2.10.24
Release     : 1.fc34
Architecture: x86_64
Install Date: Mon 21 Jun 2021 11:26:33 AM CEST
Group       : Unspecified
Size        : 109267268
License     : GPLv3+ and GPLv3
Signature   : RSA/SHA256, Sat 03 Apr 2021 02:00:02 AM CEST, Key ID 1161ae6945719a39
Source RPM  : gimp-2.10.24-1.fc34.src.rpm
Build Date  : Sat 03 Apr 2021 01:13:55 AM CEST
Build Host  : buildhw-x86-11.iad2.fedoraproject.org
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://www.gimp.org/
Bug URL     : https://bugz.fedoraproject.org/gimp
Summary     : GNU Image Manipulation Program
Description :
GIMP (GNU Image Manipulation Program) is a powerful image composition and
editing program, which can be extremely useful for creating logos and other
graphics for web pages. GIMP has many of the tools and filters you would expect
to find in similar commercial offerings, and some interesting extras as well.
GIMP provides a large image manipulation toolbox, including channel operations
and layers, effects, sub-pixel imaging and anti-aliasing, and conversions, all
with multi-level undo.

Lecture du journal des modifications d’un paquet

Comme nous le savons, un changelog est un journal dans lequel toutes les modifications apportées à un projet sont signalées et classées chronologiquement. Si ce que nous voulons faire est de lire le journal des modifications d’un paquet rpm, nous devons appeler le gestionnaire de paquets rpm en mode requête et utiliser l’option --changelog. Voyons un exemple :

rpm -q --changelog gimp

Voici la sortie (tronquée) de la commande ci-dessus sur la dernière version de Fedora (34) :

[...]
 Thu Jan 09 2020 Josef Ridky <jridky@redhat.com> - 2:2.10.14-3
- Demodularizing of gimp (#1772469)

* Mon Nov 18 2019 Kalev Lember <klember@redhat.com> - 2:2.10.14-2
- Rebuild for libmypaint 1.4.0

* Mon Nov 04 2019 Kalev Lember <klember@redhat.com> - 2:2.10.14-1
- Update to 2.10.14

* Tue Aug 20 2019 Josef Ridky <jridky@redhat.com> - 2:2.10.12-3
- Fix default configuration for font folders (#1706653)

* Wed Jul 31 2019 Josef Ridky <jridky@redhat.com> - 2:2.10.12-2
- Fix issue with reading SVG files (#1715882)

* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2:2.10.12-1.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild

* Thu Jun 13 2019 Kalev Lember <klember@redhat.com> - 2:2.10.12-1
- Update to 2.10.12

* Thu Apr 11 2019 Richard Shaw <hobbes1069@gmail.com> - 2:2.10.10-2
- Rebuild for OpenEXR 2.3.0.

* Mon Apr 08 2019 Josef Ridky <jridky@redhat.com> - 2:2.10.10-1
- New upstream release 2.10.10 (#1697119)

Liste de tous les fichiers fournis par un package

Lorsque nous installons un paquet sur notre système, une série de fichiers est copiée aux endroits appropriés, comme prévu par son mainteneur. Si nous voulons lister les fichiers fournis par un paquet déjà installé sur notre système, nous pouvons invoquer le gestionnaire de paquets rpm
en mode requête avec l’option -l (abréviation de --list) :

rpm -ql gimp

Comme nous l’avons dit précédemment, si nous voulons interroger un paquet avant de l’installer, nous devons plutôt ajouter l’option -p et fournir le chemin du paquet en argument :

rpm -qlp /path/to/package.rpm

La commande ci-dessus produira le résultat suivant :

/etc/gimp
/etc/gimp/2.0
/etc/gimp/2.0/controllerrc
/etc/gimp/2.0/gimprc
/etc/gimp/2.0/gtkrc
/etc/gimp/2.0/menurc
/etc/gimp/2.0/sessionrc
/etc/gimp/2.0/templaterc
/etc/gimp/2.0/toolrc
/etc/gimp/2.0/unitrc
/usr/bin/gimp
/usr/bin/gimp-2.10
/usr/bin/gimp-console
/usr/bin/gimp-console-2.10
/usr/bin/gimp-test-clipboard-2.0
[...]

Liste des scripts utilisés par un paquet

Certains packages .rpm utilisent une série de scripts ou « scriptlets » qui sont exécutés dans le cadre du processus d’installation ou de suppression. Si nous voulons y jeter un coup d’œil, nous pouvons le faire en invoquant rpm en mode requête avec l’option --scripts
. Pour les besoins de cet exemple, nous allons vérifier les scripts inclus dans le paquet systemd :

rpm -q --scripts systemd

Ci-dessous, nous pouvons voir la sortie (tronquée) de la commande ci-dessus, lorsqu’elle est lancée sur Fedora 34. Comme vous pouvez le voir, avant les scripts eux-mêmes, nous pouvons remarquer que le contexte dans lequel ils sont utilisés est également signalé (par exemple « preinstall » ou « postinstall ») :

preinstall scriptlet (using /bin/sh):
getent group cdrom &>/dev/null || groupadd -r -g 11 cdrom &>/dev/null || :
getent group utmp &>/dev/null || groupadd -r -g 22 utmp &>/dev/null || :
getent group tape &>/dev/null || groupadd -r -g 33 tape &>/dev/null || :
getent group dialout &>/dev/null || groupadd -r -g 18 dialout &>/dev/null || :
getent group input &>/dev/null || groupadd -r input &>/dev/null || :
getent group kvm &>/dev/null || groupadd -r -g 36 kvm &>/dev/null || :
getent group render &>/dev/null || groupadd -r render &>/dev/null || :
getent group systemd-journal &>/dev/null || groupadd -r -g 190 systemd-journal 2>&1 || :
[...]

Une autre option similaire est --triggers qui est utilisé pour afficher les scripts de déclenchement contenus dans un paquet. Que sont les scripts de déclenchement ? Il s’agit essentiellement de scripts qui sont exécutés (déclenchés) lorsque le statut d’un autre package
change :

rpm -q --triggers systemd

Avec la commande ci-dessus, nous pouvons visualiser les scripts de déclenchement contenus dans le paquet systemd :

triggerun scriptlet (using /bin/sh) -- systemd < 246.1-1
This is for upgrades from previous versions before systemd-resolved became the default.
systemctl --no-reload preset systemd-resolved.service &>/dev/null || :

if systemctl -q is-enabled systemd-resolved.service &>/dev/null; then
  systemctl -q is-enabled NetworkManager.service 2>/dev/null && \
  ! test -L /etc/resolv.conf 2>/dev/null && \
  ! mountpoint /etc/resolv.conf &>/dev/null && \
  grep -q 'Generated by NetworkManager' /etc/resolv.conf 2>/dev/null && \
  echo -e '/etc/resolv.conf was generated by NetworkManager.\nRemoving it to let systemd-resolved manage this file.' && \
  mv -v /etc/resolv.conf /etc/resolv.conf.orig-with-nm && \
  ln -sv ../run/systemd/resolve/stub-resolv.conf /etc/resolv.conf 2>/dev/null || :

  systemctl start systemd-resolved.service &>/dev/null || :
fi
triggerpostun scriptlet (using /bin/sh) -- systemd < 247.3-2
This is for upgrades from previous versions before oomd-defaults is available.
We use %triggerpostun here because rpm doesn't allow a second %triggerun with
a different package version.
systemctl --no-reload preset systemd-oomd.service &>/dev/null || :

Liste des dépendances et recommandations d’un paquet

Une autre tâche courante que nous pouvons vouloir effectuer est de trouver les dépendances d’un paquet rpm. L’option qui nous permet d’accomplir la tâche est -R (abréviation de --requires). Pour vérifier les dépendances du paquet « gimp », par exemple, nous exécuterions la commande suivante :

rpm -qR gimp

Une fois que nous avons exécuté la commande, la liste des dépendances logicielles sera signalée à l’écran :

/usr/bin/python2
babl(x86-64) >= 0.1.78
config(gimp) = 2:2.10.24-1.fc34
fontconfig >= 2.12.4
freetype >= 2.1.7
gegl04(x86-64) >= 0.4.30
gimp-libs(x86-64) = 2:2.10.24-1.fc34
glib2 >= 2.56.2
gtk2 >= 2.24.32
hicolor-icon-theme
[...]

Si, au lieu de l’option --R, nous utilisons --recommend, nous pouvons obtenir une liste des logiciels qui ne sont pas strictement nécessaires au paquet que nous interrogeons, mais qui sont recommandés par celui-ci :

rpm -q --recommends gimp

Liste des paquets rendus obsolètes par un rpm

De la même manière que les exemples ci-dessus, nous pouvons voir quels paquets sont rendus obsolètes par le paquet que nous interrogeons. Tout ce que nous avons à faire est d’utiliser l’option --obsoletes :

rpm -q --obsoletes gimp

Voici le résultat de la commande dans l’exemple :

gimp < 2:2.10.24-1.fc34
gimp-help-browser < 2:2.10.24-1.fc34
gimp-unstable < 2:2.10

Conclusions

Rpm est un gestionnaire de paquets très puissant : dans ce tutoriel nous avons vu comment l’exécuter en mode « requête ». Nous avons vu comment obtenir des informations générales sur un paquet, telles que sa version et son architecture, comment lire un journal des modifications d’un paquet, comment lister tous les fichiers qui seront installés par un paquet, comment jeter un coup d’œil aux « scriptlets » qui sont utilisés dans le cadre de la gestion des paquets et comment obtenir une liste des dépendances et des recommandations d’un paquet.

Articles connexes: