Le journal du Geek

Maintenance de logiciels à l’aide de RPM (Red Hat Package Manager)

RPM est un puissant gestionnaire de logiciels qui peut être utilisé pour construire, installer, interroger, vérifier, mettre à jour et désinstaller des paquets logiciels individuels. Un paquetage RPM se compose d’une archive de fichiers et d’informations sur le paquetage telles que le nom, la version, une description et des informations sur les dépendances à d’autres paquetages RPM.

RPM est plus qu’un outil spécifique à Red Hat. De nombreuses autres distributions modernes, telles qu’Ubuntu et SuSE, utilisent également RPM. Les avantages de l’utilisation de RPM incluent :

  • Simplification de la distribution, de l’installation, de la mise à niveau et de la suppression des logiciels
  • Garantie que :
    • les logiciels prérequis sont installés sur le système.
    • Les versions des logiciels prérequis restent compatibles.
    • Les fichiers de configuration modifiés localement ne sont pas clobés lors de la mise à jour du RPM.
    • Les fichiers de configuration modifiés localement sont enregistrés avec un suffixe « .rpmsave  » si le paquet est supprimé ultérieurement.
  • Permet de certifier que les logiciels installés n’ont pas été altérés, modifiés, corrompus ou changés de quelque manière que ce soit.

RPM conserve les informations sur les paquets installés dans le répertoire « /var/lib/rpm ».

Les composants de l’outil RPM sont :

  • Une base de données personnalisée contenant des informations sur tous les logiciels installés sur le système, collectées à partir des RPM individuels.
  • Un exécutable « /bin/rpm ».
  • Des dépôts accessibles par Internet des paquets RPM disponibles.

Types de paquets RPM

Les paquets RPM sont de deux catégories : source et binaire.

Un RPM source peut toujours être reconnu car le nom de fichier se termine par la chaîne « .src.rpm ». Dans un RPM source se trouvent non seulement les fichiers de code source du programme original, mais aussi des scripts qui permettent de recompiler le code automatiquement, de l’installer automatiquement et de le supprimer automatiquement. Il n’y a pas de fichiers exécutables par l’utilisateur final dans un RPM source. Généralement, seuls les développeurs sont intéressés par un RPM source.

Un RPM binaire contient les composants de l’utilisateur final d’un RPM. Les noms de fichiers RPM binaires identifient l’architecture hôte du contenu. Par exemple, le fichier RPM binaire :

bash-3.1-16.1.x86_64.rpm

Il contient des fichiers utilisables uniquement sur un processeur Intel X86 à architecture 64 bits. D’autres valeurs d’architecture courantes incluent « i386″ pour les hôtes Intel 32 bits. Certains RPM binaires peuvent être installés sur n’importe quelle architecture de CPU car leurs fichiers fonctionneront sur n’importe quel hôte ; un exemple de ces paquets  » .noarch.rpm  » est le RPM  » tzdata  » qui contient des informations sur les fuseaux horaires du monde. Pour mettre à jour votre système avec la dernière version d’un paquet, vous aurez besoin du RPM binaire le plus récent pour celui-ci.

Schéma de nommage des RPM

Chaque paquet RPM est contenu dans un seul fichier. Le nom du fichier comporte plusieurs champs permettant d’identifier complètement le contenu du paquet. Bien que les outils RPM eux-mêmes ne s’appuient pas sur le nom de fichier lui-même, vous devez comprendre la convention de nom de fichier pour vous aider à identifier ou à télécharger le paquet approprié. Voici un exemple de nom de fichier RPM:

bash-3.1-16.1.x86_64.rpm

Ce RPM est destiné à l’interpréteur de commandes BASH (« /bin/bash »). Le nom du fichier est composé de plusieurs parties:

--..rpm

où:

    est le nom du programme ou du paquetage. Le est généralement attribué par l’auteur du programme. Dans notre exemple, les développeurs ont décidé de nommer leur produit « bash » pour des raisons qui leur semblaient amusantes.

  • version] identifie quelle édition du logiciel ce RPM contient. Ce numéro est attribué par l’auteur du programme. L’utilisation de ce numéro permet de déterminer quelle version des sources de l’auteur a été utilisée pour générer le RPM.
  • fournit le numéro d’édition du fichier RPM lui-même et non la version des fichiers sources de l’auteur. Un RPM mis à jour peut être émis pour fournir une version patchée du logiciel original de l’auteur. Le correctif n’a pas besoin de provenir du développeur d’origine, donc le RPM est incrémenté au lieu du .
  • décrit le contenu du RPM et indique si ce fichier contient la source du produit (un « .src.rpm »), des fichiers indépendants de l’architecture (un « .noarch.rpm »), ou des fichiers qui ne peuvent être installés que sur un type d’hôte particulier (un « .sh.rpm » ne fonctionnera que sur un processeur embarqué STRONGHOLD).
Note : Le est contrôlé par l’auteur original et le est contrôlé par celui qui a construit le RPM.

Comprendre les versions de RPM

Les champs RPM et ne sont pas toujours strictement numériques et peuvent contenir d’autres caractères que les chiffres ordinaires. Il est courant de voir à la fois une version « 10 » et une version « 10a » d’un même paquet. Il est parfois délicat de choisir la version la plus récente. Voici comment RPM lui-même compare les numéros de versions et de versions en interne :

1. Retirez le préfixe et le suffixe « ..rpm ». Par exemple, :
« bash-3.1-16.1.x86_64.rpm » devient « 3.1-16.1 » et « bash-3.1-16.5a.1.x86_64.rpm » devient « 3.1-16.5a.1 »

2. Comparez les chaînes restantes caractère par caractère, de gauche à droite, jusqu’à ce qu’un chiffre soit rencontré. Si les caractères diffèrent, celui qui vient après dans la séquence de collationnement est le RPM le plus récent.

3. Lorsqu’un chiffre est rencontré, convertissez toute la séquence de chiffres en un seul nombre binaire. Dans notre exemple, les deux caractères « 16 » sont combinés en une valeur de seize (16). Les valeurs binaires résultantes sont comparées et la valeur la plus élevée correspond au RPM le plus récent. Ainsi, un RPM avec un de « 0010 » est plus récent qu’un avec un de « 9 ».

Les étapes 2 et 3 sont répétées si nécessaire jusqu’à ce qu’une différence apparaisse.

Installation et suppression de fichiers

Note : Habituellement, un seul ou d’un RPM peut être installé à la fois.

Les versions ultérieures sont généralement installées en utilisant la fonction RPM « -U » (mise à jour) au lieu de la fonction RPM « -i ». Les exceptions courantes à la règle d’un seul RPM sont les RPM de noyau. Un système a généralement plusieurs versions de noyaux installées ; RPM a une liste des RPM qui peuvent avoir plusieurs versions installées. Pour supprimer une version lorsque plusieurs sont installées, vous devez spécifier complètement le nom du paquet et la version.

Sur l’architecture x86_64, il est courant d’avoir à la fois les paquets RPM 32 bits « .i386 » et 64 bits « .x86_64 » installés pour supporter les applications 32 bits et 64 bits. Normalement, RPM n’affiche pas l’architecture d’un paquet sur une requête mais vous pouvez l’afficher manuellement.

Installation et suppression

# rpm -i --install (install new RPM; error if already installed)# rpm -U --upgrade (delete existing RPM, if any; install new)# rpm -F --freshen (update RPM only if package already installed)# rpm -e --erase (remove, delete, expunge)

Options communes
Sortie : -v (verbeux – nom du fichier), -h (hachage)
Préconditions : -nodeps, -replacefiles, -force (SOYEZ PRUDENT ICI ! !!)
Relocalisation : -excludepath, -prefix, -relocate, -badreloc, -root
Support des URL : ftp, http

Exemples:

# rpm -ivh binutils-2.11.90.0.8-12.i386.rpm# rpm -Uvh finger-0.17-9-i386.rpm# rpm -Fvh ftp://updates.redhat.com/current/i386/*.rpm# rpm -e diffutils# rpm -e kernel-enterprise-2.4.9-e.12

Instruction : Ne jamais, jamais, utiliser l’option « -U » pour installer un nouveau RPM de noyau. La fonction de mise à jour « -U » supprime d’abord le RPM actuel du système, puis tente d’installer le nouveau RPM. Tout problème empêchant l’installation du nouveau RPM rendra le système non amorçable. Ce n’est pas ce que vous voulez, donc utilisez toujours le commutateur « -i » pour installer un RPM de noyau.

Queries (paquets et/ou informations)

Utiliser une requête pour obtenir des informations sur les paquets installés. Vous pouvez effectuer une requête contre tous les paquets installés, ou un seul paquet installé. Vous pouvez également découvrir quel RPM fournit un fichier particulier.

# rpm -q # rpm -qa (all installed packages)# rpm -q package_name# rpm -qf (filename)# rpm -qp (package filename)

Information
par défaut (nom du paquet)
-i : informations générales
-l : liste de fichiers

Exemples:

# rpm -qa# rpm -q kernel -i (information)# rpm -q kernel -l (files contained in package)# rpm -q kernel --requires (prereqs)# rpm -q kernel --provides (capabilities provided by package)# rpm -q kernel --scripts (scripts run during installation and removal)# rpm -q kernel --changelog (revision history)# rpm -q kernel -queryformat format (rpm --querytags for list of options)

Introduction : Lors de la recherche d’un paquetage RPM particulier lorsque le nom exact n’est pas connu, un pipeline de commandes tel que:

$ rpm -qa | grep foo

est couramment utilisé. Les versions ultérieures de l’outil RPM permettent de le faire succinctement comme:

$ rpm -qa '*foo*'

Questions – Vérification (fichiers)

La base de données RPM contient de nombreux attributs sur chacun des fichiers installés par un RPM. Vous pouvez vérifier l’état actuel du fichier par rapport aux informations cataloguées par RPM lorsque le paquet a été installé.

# rpm -V package_name# rpm -Va (verify all)# rpm -Vf (filename)# rpm -Vp (package filename)

Note : De nombreuses distributions Linux incluent un RPM « prelink » qui tente de réduire le temps nécessaire au démarrage d’une application utilisant une bibliothèque partagée (la plupart des applications utilisent au moins une bibliothèque partagée et potentiellement des dizaines) en ajoutant des informations spéciales directement dans le fichier programme d’une application.

L’ajout de ces informations permet effectivement de démarrer les applications plus rapidement, mais les modifications du fichier invalident la plupart des attributs du fichier dans la base de données RPM, tels que la date de dernière modification du fichier, la taille du fichier et la somme de contrôle MD5 du fichier.

Questions – Vérification (paquets)

# rpm -import /mnt/cdrom/RPM-GPG-KEY# rpm -q gpg-pubkey# rpm --checksig m4-1.4.1-11.i386.rpm

Exemples:

# rpm -qf /path/filename (what package owns filename)# rpm -qf /path/filename -i (what does it do)# rpm -qp m4-1.4.1-11.i386.rpm -l (files in m4)# rpm -qp m4-1.4.1-11.i386.rpm --requires (prereqs needed to install m4)# rpm -q --whatprovides glibc.so (what package provides requisite library)

Réparation de la base de données RPM

L’outil RPM utilise sa propre implémentation de base de données personnalisée pour contenir ses informations. Parfois, cette base de données peut être corrompue ; les symptômes incluent des affirmations selon lesquelles un paquet RPM installé est manquant ; ou les tentatives de mise à jour d’un RPM se bloquent tout simplement. Si votre base de données RPM est bloquée ou corrompue, vous pouvez essayer de la réparer avec ces commandes. Ce processus n’est pas garanti pour fonctionner.

Vous devez être connecté avec le privilège de superutilisateur (alias « root ») pour ces étapes. Les commandes peuvent être copiées et collées directement dans une fenêtre de terminal root.

1. Assurez-vous qu’il n’y a plus de processus RPM en cours d’exécution sur votre système. Utilisez la commande ps pour les identifier. Use the kill command to terminate any « rpm » processes you find; a « kill -9 » may be necessary.

2. Delete the lock files that RPM uses:

# rm -f /var/lib/rpm/__db*

3. If you were experiencing a hanging « rpm » command, try it again. If it works, you are finished. If not, perform Step #1 and #2 again. Then proceed to the next step.

4. Make a backup of your RPM database:

# cd /var/lib# mkdir rpm-backup# rsync -av ./rpm/. ./rpm-backup/.

5. Rebuild your RPM database:

# rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1

6. Retry your failed RPM command.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *