Ernest

Gestion des packages RPM

Dernière modification : 2014-11-01 20:12:59

Le logo de Red Hat

Sommaire


Introduction

Il existe deux outils principaux pour la gestion des paquets rpm : RPM et YUM.

RPM (Red Hat Package Manager) a d'abord été développé par Red Hat pour sa distribution avant de se répandre à d'autres (parmi lesquelles Fedora, Mandriva Linux, Yellow Dog et même openSUSE). Bien que très robuste, RPM n'est pas sans défauts, notamment au niveau de la gestion des dépendances : lorsqu'un paquet dépend d'un autre, pas de problème. Mais si ce deuxième paquet dépend lui-même d'un troisième, la situation devient vite ingérable.

YUM (Yellow Dog Updater Modified) est un front-end qui utilise RPM. Il est parfaitement à même de tracer les dépendances d'un package et de les installer préemptivement. YUM ne fonctionne qu'avec les paquets rpm. Lorsqu'un paquet n'est pas trouvé sur le système local, ils sont rappatriés depuis les dépôts internet.

Dans ce tutoriel, nous allons étudier les fonctions basiques de ces deux programmes. Toutes les manipulations sont effectuées sur une distribution CentOS 6.5

[ sommaire ] | [ home ]


La commande rpm

Installation d'un paquet

Pour commencer, voyons l'installation du paquet nano depuis le disque dur avec la commande rpm -ivh (i = install, v = verbose, h = barre de progression). Après installation, nous vérifions que nano est bien là : de fait, la commande whereis nous montre que l'exécutable est dans /usr/bin.


[root@paranoia]# rpm -ivh nano-2.2.6-1.i386.rpm 
Preparing...                ########################################### [100%]
   1:nano                   ########################################### [100%]
[root@paranoia]# whereis nano
nano: /usr/bin/nano /usr/share/nano /usr/share/man/man1/nano.1.gz

Obtenir des informations sur un paquet

Pour obtenir des informations générales, on utilise la commande rpm -qi paquet (-q pour "query"). Par exemple :


[root@paranoia]# rpm -qi nano
Name        : nano                         Relocations: (not relocatable)
Version     : 2.2.6                             Vendor: (none)
Release     : 1                             Build Date: lun. 22 nov. 2010 06:55:27 UTC
Install Date: sam. 01 nov. 2014 12:55:32 UTC      Build Host: centos.asty.org
Group       : Applications/Editors          Source RPM: nano-2.2.6-1.src.rpm
Size        : 1580053                          License: GPL
Signature   : (none)
URL         : http://www.nano-editor.org/
Summary     : Pico editor clone with enhancements
Description :
GNU nano is a small and friendly text editor.  It aims to emulate the
Pico text editor while also offering a few enhancements.

Pour obtenir la liste des fichiers qui composent le paquet, on fait rpm -q --list paquet. Par exemple :


[root@paranoia]# rpm -q --list  nano
/usr/bin/nano
/usr/bin/rnano
/usr/share/doc/nano-2.2.6
/usr/share/doc/nano-2.2.6/AUTHORS
/usr/share/doc/nano-2.2.6/BUGS
/usr/share/doc/nano-2.2.6/COPYING
/usr/share/doc/nano-2.2.6/ChangeLog
/usr/share/doc/nano-2.2.6/INSTALL

(j'ai volontairement tronqué la liste car elle était longue.)

Nous pouvons aussi demander la liste de toutes les dépendances du paquet avec rpm -qR nano (R pour requirements)

Désinstallation d'un paquet

La désinstallation se fait avec la commande rpm -e.


[root@paranoia]# rpm -e nano
[root@paranoia]# whereis nano
nano: /usr/share/nano

On voit que la commande nano n'est plus sur le système (même si rpm nous a laissé un répertoire vide : /usr/share/nano).

A force d'ajouter, supprimer ou mettre-à-jour des paquets, il arrive que la base de données de RPM soit désorganisée. Pour la reconstruire, utilisez la commande rpm --rebuilddb

Le fichier de configuration de rpm se trouve ici : /usr/lib/rpm/rpmrc.

[ sommaire ] | [ home ]


La commande YUM

Le fichier de configuration de YUM est ici : /etc/yum.conf. Il contient les paramètres les plus basiques de YUM et vous aurez a priori rarement besoin de le modifier.

Les dépôts sont situés dans le répertoire /etc/yum.repos.d :


[root@paranoia  yum.repos.d]# ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-fasttrack.repo  CentOS-Media.repo  CentOS-Vault.repo

Nous avons donc sur notre machine quatre dépôts configurés pour le moment : CentOS-Base.repo, CentOS-Debuginfo.repo, CentOS-fasttrack.repo, CentOS-Media.repo et CentOS-Vault.repo . Chacun de ces fichiers contient les informations nécessaires à l'utilisation de chaque dépôt.

Comme avec APT-GET, la première chose à faire avant d'utiliser YUM est de mettre à jour la base de données. Pour cela, on utilise la commande yum update.

Il est possible de vérifier si des mises à jour sont disponibles sans les installer avec la commande yum check-update.

Enfin, on peut demander à YUM de mettre à jour tous les paquets de la distribution avec la commande yum upgrade.

Admettons que nous voulions installer Apache 2. Pour cela, on commence par chercher ce paquet dans nos dépôts avec la commande yum search apache2 :


[root@paranoia yum.repos.d]# yum search apache2
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
 * base: mirrors.lga7.us.voxel.net
 * extras: mirror.ash.fastserv.com
 * updates: mirror.ash.fastserv.com
Warning: No matches found for: apache2
No Matches found

YUM n'a pas trouvé ce paquet, et pour cause : sur CentOS, il s'appelle "httpd". Il est possible de le trouver en tapant simplement yum search httpd, ce qui va nous retourner plusieurs possibilités dans lesquelles nous pourrons choisir.


[root@paranoia yum.repos.d]# yum search httpd
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
 * base: mirrors.lga7.us.voxel.net
 * extras: mirror.ash.fastserv.com
 * updates: mirror.ash.fastserv.com
==================================== N/S Matched: httpd =====================================
libmicrohttpd-devel.i686 : Development files for libmicrohttpd
libmicrohttpd-devel.x86_64 : Development files for libmicrohttpd
libmicrohttpd-doc.noarch : Documentation for libmicrohttpd
httpd.x86_64 : Apache HTTP Server
httpd-devel.i686 : Development interfaces for the Apache HTTP server
httpd-devel.x86_64 : Development interfaces for the Apache HTTP server
httpd-manual.noarch : Documentation for the Apache HTTP server
httpd-tools.x86_64 : Tools for use with the Apache HTTP Server
libmicrohttpd.i686 : Lightweight library for embedding a webserver in applications
libmicrohttpd.x86_64 : Lightweight library for embedding a webserver in applications
mod_auth_mellon.x86_64 : A SAML 2.0 authentication module for the Apache Httpd Server
mod_dav_svn.x86_64 : Apache httpd module for Subversion server
mod_dnssd.x86_64 : An Apache HTTPD module which adds Zeroconf support

  Name and summary matches only, use "search all" for everything.

Nous devons donc installer httpd.x86_64. Pour cela, on utilise la commande yum install httpd.x86_64 :


[root@paranoia yum.repos.d]# yum install httpd.x86_64

Après confirmation, l'installation s'exécute.

Naturellement, il est tout aussi facile de désinstaller un paquet, avec la commande yum remove httpd.x86_64 :


[root@paranoia yum.repos.d]# yum remove httpd.x86_64

Là encore, après confirmation, la désinstallation s'exécute sans souci. Il est à noter que nous avons utilisé ici le nom complet du package (httpd.x86_64) mais que le nom court (httpd) aurait tout aussi bien fonctionné.

Afin d'obtenir des informations sur un paquet, nous pouvons utiliser la commande yum list paquet ou la commande yum info paquet :


[root@paranoia yum.repos.d]# yum list httpd
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
 * base: mirrors.lga7.us.voxel.net
 * extras: mirror.ash.fastserv.com
 * updates: mirror.ash.fastserv.com
Installed Packages
httpd.x86_64                                  2.2.15-39.el6.centos               @base


[root@paranoia yum.repos.d]# yum info httpd
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
 * base: mirrors.lga7.us.voxel.net
 * extras: mirror.ash.fastserv.com
 * updates: mirror.ash.fastserv.com
Installed Packages
Name        : httpd
Arch        : x86_64
Version     : 2.2.15
Release     : 39.el6.centos
Size        : 2.9 M
Repo        : installed
From repo   : base
Summary     : Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
            : web server.

Comme nous l'avons expliqué, l'avantage majeur de YUM est la gestion des dépendances. Pour voir les dépendances d'un paquet, on utilise la commande yum deplist httpd :


[root@paranoia yum.repos.d]# yum deplist httpd
Loaded plugins: fastestmirror, presto
Finding dependencies: 
Loading mirror speeds from cached hostfile
 * base: mirrors.lga7.us.voxel.net
 * extras: mirror.ash.fastserv.com
 * updates: mirror.ash.fastserv.com
package: httpd.x86_64 2.2.15-39.el6.centos
  dependency: /usr/sbin/useradd
   provider: shadow-utils.x86_64 2:4.1.4.2-19.el6
  dependency: libz.so.1()(64bit)
   provider: zlib.x86_64 1.2.3-29.el6
  dependency: system-logos >= 7.92.1-1

Lorsqu'on a terminé d'utiliser YUM, ce n'est jamais une mauvaise idée de faire un peu de ménage. Pour cela, on utilise la commande yum clean all ce qui peut permettre de récupérer un peu d'espace et optimiser le fonctionnement de YUM..

[ sommaire ] | [ home ]


yumdownloader et rpm2cpio

rpm2cpio

Les paquets rpm contiennent des données sous la forme d'une archive cpio. Le programme rpm2cpio permet d'extraire l'archive cpio du paquet. On l'utilise comme suit : rpm2cpio paquet > outfile.cpio. Cette commande extrait l'archive cpio du paquet et l'écrit dans un fichier qu'on appelle outfile.cpio. Naturellement on pouvait choisir n'importe quel nom.

Le programme peut nous permettre également de voir la liste de fichiers contenus dans l'archive avec la commande : rpm2cpio paquet | cpio -t. On voit que cette fois, nous utilisons rpm2cpio en conjonction avec un programme bien connu du monde unix : cpio.


[root@paranoia]# rpm2cpio httpd-2.2.15-39.el6.centos.x86_64.rpm | cpio -t
./etc/httpd
./etc/httpd/conf
./etc/httpd/conf.d
./etc/httpd/conf.d/README
./etc/httpd/conf.d/welcome.conf
./etc/httpd/conf/httpd.conf
./etc/httpd/conf/magic
./etc/httpd/logs
./etc/httpd/modules
./etc/httpd/run
./etc/logrotate.d/httpd

yumdownloader

Un des avantages de YUM est qu'il va télécharger les paquets à notre place. Mais alors, comment faire pour récupérer ces paquets si l'on veut en avoir une copie locale ? Cela peut être utile pour en examiner le contenu, récupérer des fichiers spécifiques, voire le modifier ou installer le paquet sur une machine qui n'a pas le net.

Imaginons que je souhaite télécharger le paquet rpm d'httpd. La commande est alors yumdownloader httpd


[root@paranoia]# yumdownloader httpd
Loaded plugins: fastestmirror, presto
Determining fastest mirrors
 * base: mirror.ash.fastserv.com
 * extras: mirror.net.cen.ct.gov
 * updates: mirror.symnds.com
base                                                     | 3.7 kB     00:00     
base/primary_db                                          | 4.6 MB     00:00     
extras                                                   | 3.3 kB     00:00     
extras/primary_db                                        |  19 kB     00:00     
updates                                                  | 3.4 kB     00:00     
updates/primary_db                                       | 171 kB     00:00     
httpd-2.2.15-39.el6.centos.x86_64.rpm                    | 825 kB     00:00     
[root@paranoia stephane]# ls
httpd-2.2.15-39.el6.centos.x86_64.rpm

Mais cette manipulation pose un problème : elle ne tient pas compte des dépendances d'httpd. Heureusement, yumdownloader propose une option pour pallier cette lacune : yumdownloader --resolve httpd :


[root@paranoia]# yumdownloader --resolve php
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
 * base: mirror.ash.fastserv.com
 * extras: mirror.net.cen.ct.gov
 * updates: mirror.symnds.com
--> Running transaction check
---> Package php.x86_64 0:5.3.3-40.el6_6 will be installed
--> Processing Dependency: php-common(x86-64) = 5.3.3-40.el6_6 for package: php-5.3.3-40.el6_6.x86_64
--> Processing Dependency: php-cli(x86-64) = 5.3.3-40.el6_6 for package: php-5.3.3-40.el6_6.x86_64
--> Processing Dependency: httpd-mmn = 20051115 for package: php-5.3.3-40.el6_6.x86_64
--> Processing Dependency: httpd for package: php-5.3.3-40.el6_6.x86_64
--> Running transaction check
---> Package httpd.x86_64 0:2.2.15-39.el6.centos will be installed
---> Package php-cli.x86_64 0:5.3.3-40.el6_6 will be installed
---> Package php-common.x86_64 0:5.3.3-40.el6_6 will be installed
--> Finished Dependency Resolution
php-5.3.3-40.el6_6.x86_64.rpm                                                          | 1.1 MB     00:00     
./httpd-2.2.15-39.el6.centos.x86_64.rpm already exists and appears to be complete
php-cli-5.3.3-40.el6_6.x86_64.rpm                                                      | 2.2 MB     00:00     
php-common-5.3.3-40.el6_6.x86_64.rpm                                                   | 527 kB     00:00     
[root@paranoia]# ls
httpd-2.2.15-39.el6.centos.x86_64.rpm  php-cli-5.3.3-40.el6_6.x86_64.rpm
php-5.3.3-40.el6_6.x86_64.rpm          php-common-5.3.3-40.el6_6.x86_64.rpm

On voit ici en faisant un ls que nous avons bel et bien récupéré plusieurs paquets, ce qui permettra, le cas échéant, de réaliser l'installation.

[ sommaire ] | [ home ]


Récapitulatif des commandes utiles

Commande Effets
rpm -ivh paquet Installer le paquet (mode verbeux + barre progression)
rpm -U paquet Mettre à jour le paquet
rpm -qi paquet Obtenir des infos générales sur un paquet
rpm -q --list paquet Obtenir la liste des fichiers installés par le paquet
rpm -qR nano Obtenir la liste des dépendances du paquet
rpm -e paquet Désinstaller le paquet
rpm --rebuilddb Reconstruit la base de données rpm
/usr/lib/rpm/rpmrc Fichier de configuration de rpm
/etc/yum.conf Fichier de conf principal (peu utilisé)
/etc/yum.repos.d Répertoire des dépôts
yum update Mettre à jour la base de données de YUM
yum check-update Vérifie si des m-à-j sont dispos sans les installer
yum upgrade Met à jour tous les paquets du système
yum search paquet Cherche le paquet dans les dépôts
yum install paquet Installe un paquet à partir de son nom
yum remove paquet Désinstalle un paquet
yum list paquet Donne des informations sur le paquet
yum info paquet Donne aussi des informations sur le paquet
yum deplist paquet Voir toutes les dépendances d'un paquet et les sous-dépendances
yum clean all Faire le ménage dans les packages et la base de données
yumdownloader --resolve paquet Télécharge les rpm du paquet et ses dépendances sur le disque
rpm2cpio paquet > outfile.cpio Extrait l'archive cpio du paquet et l'écrit dans outfile.cpio
rpm2cpio paquet | cpio -t Extrait l'archive cpio du paquet et compte le nombre de fichiers qu'elle contient

[ sommaire ] | [ home ]


Liens utiles

[ sommaire ] | [ home ]


Conclusion

Pendant longtemps, avant le développement de YUM pour la distribution Yellowdog, APT-GET a été perçu comme un élément de choix lors du choix de sa distribution. De fait, sa gestion des dépendances et le téléchargement automatisé depuis les dépôts étaient extrêmement pratiques. Et puis YUM est venu combler cette lacune et aujourd'hui, force est de reconnaître que la gestion des dépôts sur les distributions utilisant les paquets rpm est aussi simple à gérer que les paquets deb.

[ sommaire ] | [ home ]