A.2. Utilisation de RPM

RPM has five basic modes of operation (excluding package building): installing, uninstalling, upgrading, querying, and verifying. This section contains an overview of each mode. For complete details and options, try rpm --help or see rpm(8). Also, see Section A.5, « Ressources supplémentaires » for more information on RPM.

A.2.1. Installation et mise à niveau des paquets

Les paquets RPM ont des noms de fichier de la forme suivante :
package_name-version-release-operating_system-CPU_architecture.rpm
Ainsi, le nom de fichier tree-1.6.0-10.el7.x86_64.rpm inclut le nom de paquet (tree), la version (1.6.0), la distribution (10), la version majeure de système d'exploitation (el7) et l'architecture de CPU (x86_64).

Important

Lorsque vous installez un paquet, veillez à ce qu'il soit compatible avec votre système d'exploitation et avec l'architecture de processeur. Ceci peut être normalement déterminé en vérifiant le nom du paquet. Par exemple, le nom de fichier d'un paquet RPM compilé pour les architectures d'ordinateurs AMD64/Intel 64 se termine par x86_64.rpm.
L'option -U (ou --upgrade) possède deux fonctions, elle peut être utilisée pour :
  • mettre un programme existant à jour sur le sytème d'une nouvelle version, ou
  • installer un paquet si une ancienne version n'est pas encore installée.
La commande rpm -U package.rpm est soit capable, soit de mettre à niveau ou d'installer, selon la présence d'une ancienne version de package.rpm sur le système.
Assumons que le paquet tree-1.6.0-10.el7.x86_64.rpm soit dans le répertoire actif, connectez-vous en tant qu'utilisateur root et tapez la commande suivante à l'invite du shell pour mettre à niveau ou installer le paquet tree :
~]# rpm -Uvh tree-1.6.0-10.el7.x86_64.rpm
Les options -v et -h (qui sont combinées à -U) amènent le rpm à afficher des sorties plus détaillées et une jauge de progression utilisant des signes de hachage. Si la mise à niveau ou l'installation réussissent, la sortie suivante s'affichera :
Preparing...                 ################################# [100%]
Updating / installing...
   1:tree-1.6.0-10.el7       ################################# [100%]

Avertissement

Le rpmfournit deux options différentes pour installer les paquets : l'option -U, qui est historiquement utilisée pour les mise à niveau (de l'anglais upgrade), et l'option -i, qui est historiquement utilisée pour les installations (de l'anglais install). Comme l'option -U inclut à la fois les fonctions d'installation et de mise à niveau, l'utilisation de la commande rpm -Uvh pour tous les paquets, exceptés les paquets de noyau, est conseillée.
Vous devez toujours utiliser l'option -i pour installer un nouveau paquet de noyau au lieu de le mettre à niveau. C'est parce que l'option -U de mise à jour d'un paquet de noyau supprime le paquet de noyau précédent (plus ancien), ce qui pourrait rendre le système incapable de démarrer s'il y a un problème avec le nouveau noyau. Par conséquent, utiliser la commande rpm -i kernel_package pour installer un nouveau noyau sans avoir à remplacer tous les paquets de noyau plus anciens. Pour plus d'informations sur l'installation des paquets de noyau, voir Chapitre 25, Mettre à niveau le noyau manuellement.
La signature d'un paquet est vérifiée automatiquement lors de l'installation ou de la mise à niveau d'un paquet. La signature confirme que le paquet a été signé par un utilisateur autorisé. Si la vérification de la signature échoue, un message d'erreur apparaîtra à l'écran :
Si vous ne possédez pas la clé qui convient intallée pour vérifier la signature, le message contiendra le mot NOKEY:
warning: tree-1.6.0-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 431d51: NOKEY
Voir Section A.3.2, « Vérification des signatures de paquets » pour obtenir plus d'informations sur la vérification des signatures de paquets.

A.2.1.1. Remplacer les paquets déjà installés

Si un paquet de même nom et version est déjà installé, la sortie suivante s'affichera :
Preparing...                ########################################### [100%]
        package tree-1.6.0-10.el7.x86_64 is already installed
Pour installer le paquet quand même, utiliser l'option --replacepkgs, qui indique au RPM d'ignorer l'erreur :
~]# rpm -Uvh --replacepkgs tree-1.6.0-10.el7.x86_64.rpm
Cette option est utile si les fichers du paquet installés sont été supprimés ou si vous souhaitez que les fichiers de configuration d'origine soient installés.
Si vous souhaitez une mise à niveau d'une ancienne version d'un paquet (c'est à dire, si une nouvelle version du paquet est déjà installée), le RPM vous informe qu'une nouvelle version est déjà installée. Pour forcer le RPM à appliquer un passage à une version antérieure, utiliser l'option --oldpackage :
rpm -Uvh --oldpackage older_package.rpm

A.2.1.2. Résolution des conflits de fichiers

Si vous essayez d'installer un paquet qui contient un fichier qui a déjà été installé par un autre paquet, un message de conflit s'affiche. Pour que le RPM ignore cette erreur, utilisez l'option --replacefiles :
rpm -Uvh --replacefiles package.rpm

A.2.1.3. Résoudre les dépendances manquantes

Les paquets RPM dépendent parfois d'autres packages, ce qui veut dire qu'ils sont dépendants de la bonne installation d'autres paquets. Si vous essayez d'installer un paquet possédant une dépendance non résolue, un message de dépendance ayant échoué s'affichera.
Cherchez le ou les paquet(s) suggérés dans le media d'installation Red Hat Enterprise Linux ou dans l'un des miroirs Red Hat Enterprise Linux actifs, et ajoutez-le à la commande d'installation. Pour déterminer quel paquet contient le fichier requis, utilisez l'option --whatprovides :
rpm -q --whatprovides "required_file"
Si le paquet qui contient required_file est dans la base de données RPM, le nom du paquet s'affichera.

Avertissement

Bien que vous puissiez forcer RPM à installer un paquet ayant une dépendance non résolue (à l'aide de l'option --nodeps), ce n'est pas recommandé et cela entraînera généralement la suspension du logiciel installé. L'installation de paquets avec l'option --nodeps peut provoquer des troubles de comportements d'applications et des interruptions inattendues. Cela peut également provoquer des problèmes graves de gestion de paquets ou de défaillance du système. Pour ces raisons, tenez compte des avertissements à propos des dépendances manquantes. Le gestionnaire de paquets Yum effectue la résolution de dépendance automatique et récupère les dépendances de référentiels en ligne.

A.2.1.4. Préservation des changements dans les fichiers de configuration

Comme RPM procède à des mises à niveau intelligentes de paquets ayant des fichiers de configuration, vous verrez sans doute apparaître le message suivant :
sauvegarder /etc/configuration_file.conf en tant que /etc/configuration_file.conf.rpmsave
Ce message signifie que les modifications apportées au fichier de configuration ne peuvent pas être en compatibilité ascendante avec le nouveau fichier de configuration du paquet, donc RPM a dû enregistrer votre fichier d'origine et en a installé un nouveau. Vous devriez étudier les différences entre les fichiers pour les deux configurations et les résoudre dès que possible pour que votre système continue de fonctionner correctement.
Sinon RPM peut enregistrer le nouveau fichier de configuration du package comme, par exemple, configuration_file.conf.rpmnew et laisser le fichier de configuration que vous venez de modifier intact. Il vous reste à résoudre tous les conflits entre votre fichier de configuration modifié et le nouveau, en procédant normalement à la fusion des modifications de l'ancien dans le nouveau, à l'aide du programme diff, par exemple.

A.2.2. Désinstaller les paquets

La désinstallation d'un paquetage est aussi simple que son installation. Entrez simplement la commande suivante en tant qu'utilisateur root à l'invite du shell :
rpm -e package

Note

Notez que la commande s'attend uniquement au nom du paquet, et non pas au nom de fichier du paquet d'origine. Si vous essayez de désinstaller un package à l'aide de la commande rpm-e et que vous fournissez le nom complet du fichier d'origine, vous recevez une erreur de nom de paquet.
Vous pouvez rencontrer des erreurs de dépendance lors de la désinstallation d'un paquet si un autre paquet installé dépend de celui que vous voulez supprimer. Par exemple :
~]# rpm -e ghostscript
error: Failed dependencies:
        ghostscript is needed by (installed) ghostscript-cups-9.07-16.el7.x86_64
        ghostscript is needed by (installed) foomatic-4.0.9-6.el7.x86_64
        libgs.so.9()(64bit) is needed by (installed) libspectre-0.2.7-4.el7.x86_64
        libijs-0.35.so()(64bit) is needed by (installed) gutenprint-5.2.9-15.el7.x86_64
        libijs-0.35.so()(64bit) is needed by (installed) cups-filters-1.0.35-15.el7.x86_64

Avertissement

Bien que vous puissiez forcer le rpm à désinstaller un package dont les dépendances ne sont pas résolues (à l'aide de l'option --nodeps), ce n'est pas recommandé. La suppression de paquets avec l'option --nodeps peut provoquer des problèmes de comportement ou des interruptions inattendues de la part des paquets dont les dépendances sont retirées. Il peut également provoquer des problèmes graves de gestion de paquets, voire de défaillance du système. Pour ces raisons, tenez compte des avertissements de dépendances ayant échoué.

A.2.3. Rafraîchissement de paquets

Le rafraîchissement est similaire à la mise à niveau, sauf que seuls les paquets installés sont mis à niveau. Tapez la commande suivante à une invite du shell en tant qu'utilisateur root :
rpm -Fvh package.rpm
L'option -F (ou --freshen) compare les versions des paquets nommés sur la ligne de commande par rapport aux versions des paquets qui sont déjà installés sur le système. Lorsqu'une nouvelle version d'un paquet déjà installé est traitée par l'option --freshen, elle est mis à niveau à une version plus récente. Cependant, l'option --freshen n'installe pas un paquet si aucun paquet précédemment installée du même nom existe déjà. Cela diffère de la mise à niveau régulière, car une mise à jour installe tous les paquets spécifiés indépendamment de savoir si oui ou non les anciennes versions des paquets sont déjà installées.
Comment rafraîchir des travaux de paquets simples ou de groupes de paquets. Par exemple, l'action rafraîchir peut aider si vous téléchargez un grand nombre de paquets différents, et que vous souhaitez uniquement mettre à jour les paquets déjà installés sur le système. Dans ce cas, exécutez la commande suivante avec l'expression globale *.rpm :
~]# rpm -Fvh *.rpm
RPM met automatiquement à niveau les paquets déjà installés uniquement.

A.2.4. Recherche de paquets

La base de données de RPM stocke des informations sur tous les paquets RPM installés sur votre système. C'est stocké dans le répertoire /var/lib/rpm/ et est utilisé pour beaucoup de choses, y compris pour savoir quels paquets sont installés, quelle est la version de chaque paquet, et pour le calcul des modifications apportées aux fichiers en paquets depuis leur installation. Pour interroger cette base de données, utilisez la commande rpm avec l'option -q (ou --query) :
rpm -q package_name
Cette commande affiche le nom du paquet, sa version et le numéro de publication du paquet installé package_name. Exemple :
~]$ rpm -q tree
tree-1.6.0-10.el7.x86_64
See the Package Selection Options subheading in the rpm(8) manual page for a list of options that can be used to further refine or qualify your query. Use options listed below the Package Query Options subheading to specify what information to display about the queried packages.

A.2.5. Vérification des paquets

Vérifier un paquet revient à comparer les informations des fichiers sur le système installé à partir d'un paquet ayant les mêmes informations que celles du paquet d'origine. Entre autres paramètres, vérifier un paquet compare la taille du fichier, MD5 sum, les permissions, le type, le propriétaire et le groupe de chaque fichier
Utiliser la commande rpm avec l'option -V (or --verify) pour vérifier les paquets. Par exemple :
~]$ rpm -V tree
See the Package Selection Options subheading in the rpm(8) manual page for a list of options that can be used to further refine or qualify your query. Use options listed below the Verify Options subheading to specify what characteristics to verify in the queried packages.
Si tout est vérifié correctement, il n'y aura aucune sortie. S'il y a des différences, elles s'afficheront. La sortie consiste en lignes qui ressemblent à ceci :
~]# rpm -V abrt
S.5....T.  c /etc/abrt/abrt.conf
.M.......    /var/spool/abrt-upload
Le format de sortie de string consiste en neuf caractères suivis par un marqueur d'attribut en option et du nom du fichier traité.
Les neuf premiers caractères sont les résultats de tests effectués sur le fichier. Chaque test est une comparaison d'un attribut du fichier par rapport à la valeur de l'attribut tel qu'il est enregistré dans la base de données RPM. Un point unique (.) signifie que le test a pu être passé, et le caractère point d'interrogation (?) signifie que le test ne peut pas être effectué. Le tableau suivant répertorie les symboles qui indiquent certaines incohérences :

Tableau A.1. Symboles de vérification RPM

SymboleDescription
Sla taille des fichiers diffère
Mle mode diffère (inclut les permissions et le type de fichier)
5digest (anciennement MD5 sum) diffère
Dnon correspondance du numéro de version mineur/majeur de la machine
LreadLink(2) path mismatch
Uappartenance utilisateur diffère
Gappartenance groupe diffère
Tmtime diffère
Ples capacités diffèrent
Le marqueur d'attribut, si présent, décrit le but du fichier donné. Le tableau suivant dresse une liste des marqueurs d'attributs disponibles :

Tableau A.2. Symboles de vérification RPM

MarqueursDescription
cfichier de configuration
dfichier de documentation
lfichier de licence
rfichier readme
Si vous voyez un résultat affiché, essayez de déterminer s'il est préférable de supprimer, de réinstaller le paquet, ou de résoudre le problème autrement.