Recherche de site Web

Utilisation des dépendances de paquets sous Red Hat Linux


Objectif

Notre objectif est de nous habituer aux outils disponibles pour trouver des informations sur les dépendances des paquets sur un système basé sur RPM.

Système d’exploitation et versions logicielles

  • Système d’exploitation: Red Hat Enterprise Linux 7.5
  • Logiciel : rpm 4.11, miam 3.4.3

Exigences

Accès privilégié au système.

Difficulté

FACILE

Conventions

  • # – nécessite que les commandes Linux données soient exécutées avec les privilèges root, soit directement en tant qu’utilisateur root, soit en utilisant la commande sudo
  • $ – commandes linux données à exécuter en tant qu’utilisateur régulier non privilégié

Introduction

RPM, qui signifie Red Hat Package Manager, est un gestionnaire de packages bien connu et mature utilisé par toutes les distributions de types Red Hat, ainsi que par SuSE. Avec RPM, l’empaqueteur peut définir des relations entre les paquets, et même avec des versions de paquets - par exemple, un serveur Apache Tomcat a besoin d’un environnement Java approprié pour pouvoir fonctionner.

D’autre part, pour installer un environnement Java, vous n’avez pas besoin d’un serveur Tomcat - vous pouvez décider d’exécuter une autre application basée sur Java, peut-être une écrite par vous-même et démarrée à la main lorsque nécessaire pour faire son travail. En d’autres termes, le serveur Tomcat dépend de Java.

RPM peut faciliter la vie d’un administrateur système en présentant ces dépendances - et les outils reposant sur RPM tels que l’utilitaire rpm ou yum peuvent résoudre automatiquement ces dépendances et installer tous les packages supplémentaires nécessaires au bon fonctionnement d’un nouveau composant.

Collecte d’informations

Pour connaître la liste des paquets dont dépend foo.bar paquet, il suffit d’exécuter :

yum deplist foo.bar

Et pour trouver la liste des paquets qui nécessitent (dépendent de) le paquet foo.bar :

rpm -q --whatrequires foo.bar

Un exemple concret avec un package générique : bash. Voyons quels packages ont besoin du package bash :

yum deplist bash

package: bash.x86_64 4.2.46-30.el7
  dependency: libc.so.6()(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.11)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.14)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.15)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.3)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.3.4)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.4)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.8)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libdl.so.2()(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libdl.so.2(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libtinfo.so.5()(64bit)
   provider: ncurses-libs.x86_64 5.9-14.20130511.el7_4
  dependency: rtld(GNU_HASH)
   provider: glibc.x86_64 2.17-222.el7
   provider: glibc.i686 2.17-222.el7

Du point de vue du package, bash est un package très générique et, comme vu ci-dessus, dépend de quelques packages de base. Mais si nous aimerions installer quelque chose de beaucoup plus dépendant, par exemple, l’émulateur de terminal KDE konzole sur un Red Hat Linux avec un gestionnaire de bureau Gnome, nous pouvons obtenir plus d’une page de liste de dépendances. Et avec konzole, le cas est encore plus compliqué, car il repose sur les paquets QT et KDE, donc pour l’installer, vous devrez installer tout l’environnement KDE à côté de Gnome (ce que vous pouvez certainement faire) pour fournir tout ce dont konzole a besoin.

Pour avoir plus d’informations sur les paquets qui seront installés, consultez la liste fournie par yum avant de commencer l’installation :

yum install konsole

Resolving Dependencies
--> Running transaction check
---> Package konsole.x86_64 0:4.10.5-4.el7 will be installed
--> Processing Dependency: konsole-part = [...]

Dans le cas d’un système Red Hat avec Gnome, cela peut prendre un certain temps pour résoudre les dépendances d’une application KDE pour la première fois, et une fois cela terminé, yum présentera le seul paquet que nous avons demandé, avec une petite taille agréable. Suivi de plus d’une centaine de packages installés pour les dépendances :

[...]
--> Running transaction check
---> Package boost-system.x86_64 0:1.53.0-27.el7 will be installed
---> Package boost-thread.x86_64 0:1.53.0-27.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================================================
 Package                                Arch             Version                           Repository                    Size
==============================================================================================================================
Installing:
 konsole                                x86_64           4.10.5-4.el7                      rhel-7-server-rpms            78 k
Installing for dependencies:
 OpenEXR-libs
[...]

Et dans le résumé, nous pouvons voir que l’installation utilisera beaucoup plus d’espace sur le disque à la fin, puis la taille du paquet dont nous avons besoin :

[...]
Transaction Summary
==============================================================================================================================
Install  1 Package (+120 Dependent packages)

Total download size: 108 M
Installed size: 307 M

C’est beaucoup, mais nous avons obtenu des informations utiles sur l’espace qui sera utilisé. Ceci est particulièrement utile si nous installons plusieurs packages en une seule transaction.

Bien que dans ce cas, la transaction soit inutile, l’objectif des dépendances est en fin de compte d’économiser des ressources : si quelqu’un implémente une fonctionnalité dans son code, et qui peut être appelée sur le système, le développeur suivant n’aura peut-être pas besoin d’implémenter à nouveau la même fonctionnalité, mais d’utiliser l’implémentation déjà existante. Pour l’exemple de konzole, si vous souhaitez installer akregator la prochaine fois, le système aura déjà résolu de nombreuses dépendances, car le paquet kdepim contenant akregator s’appuie également sur qt, kdelibs, etc.

Nous pouvons utiliser l’utilitaire rpm pour obtenir l’information dans l’autre sens : listons les paquets installés qui nécessitent le paquet bash :

rpm -q --whatrequires bash
dracut-033-535.el7.x86_64
initscripts-9.49.41-1.el7.x86_64
autofs-5.0.7-83.el7.x86_64
lvm2-2.02.177-4.el7.x86_64
rsyslog-8.24.0-16.el7.x86_64

Nettoyage des colis inutiles

Si nous maintenons nos systèmes à jour et que nous modifions ou étendons leurs rôles, des paquets « indésirables » apparaîtront inévitablement. Dans le sens du package, junk signifie des packages plus nécessaires et/ou obsolètes. Pour suivre l’exemple ci-dessus, nous n’avons plus besoin d’akregator, car nous avons déplacé le « service » de gestion des RSS vers un hypothétique concentrateur RSS central au sein de notre système, donc après avoir migré nos flux vers l’endroit central, nous désinstallons l’application locale de gestion des RSS. Cela ne supprimera pas tous les paquets KDE, car beaucoup d’autres paquets peuvent en dépendre. Mais si ce n’est pas le cas, ces paquets sont inutiles et consommeront des ressources, y compris des temps de mise à jour plus longs, car yum par défaut mettra à jour aveuglément tout ce qu’il trouve de nouveaux paquets/errata pour.

Dépenser des ressources pour mettre à niveau quelques packages inutiles sur un ordinateur portable avec une connexion haut débit et un SSD peut ne pas sembler être un problème, mais imaginez un centre de données avec des centaines ou des milliers d’ordinateurs, et vous voyez l’image. C’est généralement une bonne idée de garder tous les systèmes simples, et la gestion des ressources n’est qu’un point. Plus un système est complexe, plus il est sujet aux erreurs. Plus de composants signifie plus de bugs possibles.

Pour avoir une vue d’ensemble des paquets inutiles installés sur le système, nous pouvons utiliser yum et package-cleanup de la même manière que sur CentOS, ou une autre fonctionnalité de yum, autoremove :

yum autoremove

Les packages que ces outils marquent comme inutiles ne sont pas identiques.

Lors de l’utilisation de l’un de ces outils, il est conseillé de revérifier ce que yum va enlever, et éventuellement de tester ce que le nettoyage entraînera sur des machines d’essai avec un contenu d’emballage identique avant de nettoyer les systèmes de production.

Ces outils sont en effet astucieux, mais pas omniscients : par exemple, il n’y aura pas d’entrée dans la base de données rpm à propos d’une application PHP personnalisée fonctionnant sur un serveur web qui appelle cups pour imprimer les commandes entrantes sur une imprimante connectée au serveur. C’est-à-dire qu’il peut y avoir une entrée si l’application est empaquetée avec les bonnes dépendances incluses, et installée correctement avec rpm ou yum - mais cela demande des efforts, et tous les services doivent être empaquetés de la même manière si vous voulez vous sentir en sécurité avec les nettoyages automatiques basés sur yum.

Résolution des problèmes de dépendance

En particulier dans les grands environnements, il peut y avoir des problèmes de dépendance lors de l’installation ou de la mise à niveau des systèmes.

La capture d’écran ci-dessous montre un problème simple :

Résolution des dépendances avec rpm

Dans l’écran du terminal ci-dessus, nous essayons d’installer le paquet nrpe, le client nécessaire pour surveiller de nombreux aspects du système avec Nagios. Nous avons téléchargé le client pour la distribution, mais rpm et yum échouent avec la même erreur : le paquet nrpe nécessite (dépend de) le paquet nagios-common. Dans cet exemple, nous pouvons obtenir le paquet nécessaire à partir de la même source, et lors de l’installation des deux, l’utilitaire rpm voit que la dépendance sur laquelle nous avons échoué précédemment sera satisfaite à la fin de la transaction et installe les deux paquets, en quittant silencieusement avec succès.

Conclusion

Yum et rpm sont des outils essentiels lorsque vous travaillez avec des distributions à l’aide du gestionnaire de paquets RPM. En connaissant l’ensemble des outils, il est beaucoup plus facile et généralement plus sûr de résoudre, d’installer, de mettre à niveau et de modifier des tâches sur l’environnement logiciel d’un système donné.

Articles connexes: