Misfu, le site des cours Informatique/Bureautique/Mathematiques


 

Gestion des packages et applications sous Linux (Rpm, Urpmi et Rpmdrake)


Introduction


Le format RPM (RedHat Package Manager), a été, comme son nom l'indique, créé à l'origine pour la distribution RedHat. Depuis, de nombreuses distributions l'ont adopté et l'utilisent ; on peut citer par exemple Mandriva ou SuSe. D'autres formats de packages dans le monde Linux sont DEB (pour Debian) et TGZ (pour Slackware).


Il existe de nombreux utilitaires tels que Kpackage, GnoRPM, Midnight Commander etc.. qui permettent d'installer et de gérer les packages RPM. L'installation depuis la ligne de commande reste toutefois la solution la plus rapide et la plus efficace pour ce travail.

Hormis le format TGZ, tous les autres formats élaborés (RPM, DEB, etc...) permettent une installation/désinstallation facile et propre.

La plus grande partie des commandes décrites peuvent être exécutée par un utilisateur lambda. Toutefois les commandes qui installent, mettent à jour ou suppriment des paquetages nécessitent des droits d'administrateur (root).

Les noms de paquetages sont très longs et donc très pénibles à orthographier correctement. Linux offre toutefois des aides à la frappe :

  • lorsque vous installez un RPM, ou travaillez sur un RPM non encore installé, utilisez la complétion de ligne de commande en tapant les premières lettres du nom du fichier RPM puis la touche TAB. Si la correspondance reste équivoque, Linux vous donnera les possibilités trouvées, retapera votre ligne et vous laissera ajouter quelques lettres pour lever l'indétermination.

  • lorsque vous travaillez sur un RPM qui est déjà installé, la commande rpm s'adresse à la base de données des paquetages installés, qui consigne les noms courts en plus des noms de fichiers complets. L'indication du numéro de version n'est donc en général pas nécessaire (sauf si le même package est installé 2 fois avec 2 versions différentes).


Les commandes usuelles


Pour installer un nouveau paquetage :


[bcassoc@misfu bcassoc]$ rpm -ivh mon_package.rpm

Attention, si vous installez un paquetage par cette méthode et qu'il existe déjà sur votre système dans une version inférieure, vous risquez d'avoir des problèmes pour le désinstaller (voir plus bas).


Les options h et v ne sont pas obligatoires, -i est suffisant pour faire une installation. L'option h provoque l'affichage d'une barre de progression (ça fait très pro sur l'écran !) et v rend l'installation verbeuse (affiche beaucoup d'informations), ce qui fournit des messages plus explicites en cas d'erreur.


Pour procéder à la mise à jour d'un paquetage :


[bcassoc@ramses bcassoc]$ rpm -Uvh mon_package.rpm

Avec un 'U' comme 'Upgrade' (mise à jour en anglais).

Attention, ceci ne s'applique pas pour mettre à jour un noyau.


Pour supprimer un paquetage :


[bcassoc@ramses bcassoc]# rpm -e mon_package [bcassoc@ramses bcassoc]# rpm -e mon_package-version

Le 'e' correspond à 'erase' (effacer en anglais).

La syntaxe complète (avec numéro de version) permet de distinguer deux versions d'un même paquetage qui auraient été installées ensemble.


Pour faire des requêtes sur les paquetages :


[bcassoc@ramses bcassoc]# rpm -qa

Affiche la liste de tous les paquetages déjà installés.

L'option « q » signifie « query » et l'option« a » signifie 'all'.


Trouver un paquet déjà installé et dont on ne se souvient que d'une partie du nom.


[bcassoc@ramses bcassoc]# rpm -qa | grep mon_package

Ainsi par exemple rpm -qa | grep 'util' vous donne la liste de tous les RPM installés tels que util-linux, nautilus, bind_utils etc.. Attention la syntaxe est sensible à la distinction majuscules / minuscules !

Note : Les dernières versions du programme rpm (versions postérieures à 4.0.2) permettent une syntaxe du genre :


# rpm -qa ker*


pour avoir l'affichage de tous les packages commençant par « ker ».


Trouver la liste des fichiers contenus dans un paquetage mon_package qui est déjà installé.


[bcassoc@ramses bcassoc]# rpm -ql mon_package

L'option 'l' signifie 'list'.


Obtenir des informations relatives à un paquetage


[bcassoc@ramses bcassoc]# rpm -qi mon_package

L'option 'i' signifie 'information'.


Cette commande donne les informations relatives à ce paquetage, une brève description de ce que fait le paquetage, des dépendances qui doivent être satisfaites, etc.


[bcassoc@ramses bcassoc]# rpm -qpi mon_package

L'option 'p' signifie 'package'.


L'objectif poursuivi est le même que ci-dessus mais cette fois la commande s'applique à un RPM qui n'est pas encore installé.


Nota : l'option p s'applique aussi à d'autres syntaxes, par exemple rpm -qpl mon_package pour avoir la liste des fichiers d'un paquetage non encore installé.


Retrouver le paquetage d'origine d'un fichier


[bcassoc@ramses bcassoc]$ rpm -qf chemin_absolu/mon_fichier

Il peut se produire que vous vous trouviez en face d'un fichier dont vous vous demandez quel est le paquetage qui a bien pu installer ce fichier. Pas de panique ! Là aussi la commande RPM peut vous être d'une aide précieuse. Ici le 'f' signifie 'file' ou fichier en anglais.


[bcassoc@ramses bcassoc]$ rpm -i --test mon_package

Effectue simplement une vérification sans installer le paquetage mon_package. Permet essentiellement de vérifier si l'installation pourrait se dérouler sans encombre ou alors si des dépendances non satisfaites risquent de faire avorter l'installation.


Si rpm ne veut pas désinstaller le paquetage mon_package, faire :


[bcassoc@ramses bcassoc]$ rpm -qa | grep mon_package

Affiche la liste des paquetages donc le nom contient mon_package, par exemple :


mon_package-1.1 mon_package-1.2 [bcassoc@ramses bcassoc]# rpm -e mon_package-1.1

Désinstalle le paquetage désigné par son nom et son numéro de version.


Utilisation de urpmi


Présentation

urpmi est un utilitaire Mandriva de gestion de package, situé au-dessus de rpm. C'est un script perl qui permet d'aller chercher un package sur un média (CDROM, zip mais aussi site ftp, http) et de l'installer.


Son intérêt principal : il gère les dépendances (qui n'a jamais eu le fameux message d'erreur 'package xyz needs libmachintruc', avec évidemment aucun package libmachintruc en vue), ainsi que la localisation des packages. Le programme rpmdrake est une sur-couche graphique de urpmi.


Cet outil fonctionne à partir d'un ensemble de source de packages, dénommés médias, dont il indexe le contenu lui-même pour les médias locaux, ou à partir d'index pré-générés pour les médias distants.
Une base de donneés est utilisée par urpmi pour savoir quels packages sont sur quel média. Typiquement, après une installation standard (à partir des CD), chacun des CD utilisés est alors enregistré, et quand vous faites un urpmi nom_paquet (soit directement, soit via rpmdrake), on vous demande bien gentillement d'insérer le CD x, et le fameux package est automatiquement installé.

Mais si vous n'avez pas le CD sous la main ? Et si vous voulez profiter d'autres packages, provenant des contributions, de cooker, ou de tout autre source ? Et bien, il suffit de configurer urpmi pour utiliser le miroir local linux.univ-reunion.fr.

Naturellement, pour installer quoi que se soit, il est nécessaire d'avoir le média s'il s'agit d'un CD ou une connexion internet s'il s'agit d'un miroir ftp ou http.



Utilisation de urpmi

Examinons un cas 'typique': en essayant d'installer une nouvelle application, il manque des packages nécessaires à son bon fonctionnement (et donc à son installation !). Comment s'en sortir si par malheur nous n'avons plus nos CDs de Mandriva ? Même si nous avons nos CDs, allons nous fouiller dans ceux-ci pour trouver le(s) package(s) manquant ?

Heureusement, non ! Pour cela, la solution est l'utilitaire urpmi, avec la syntaxe suivante :


$ urpmi mon_package


S'il est disponible dans un des médias alors il va être copié sur votre disque dur puis installé (il faudra insérer le média dans le lecteur s'il s'agit d'un CD). Si plusieurs packages dans différents médias ont la chaîne 'mon_package' alors une liste vous est proposée (par exemple 'mon_package-0.2.1.rpm' et 'libmon_package-0.2.1.rpm' 'mon_package-0.2.1-devel.rpm' ...


À vous de relancer urpmi avec le nom complet (sans ambiguité) du package que vous souhaitez installer. S'il manque des packages (problème de dépendances) alors ils seront aussi récupérés puis installés.


Il existe d'autres fonctions tout aussi utiles. Souvent un fichier va manquer (la fameuse 'libfoobar-1.2.0') qui ne correspond pas directement à un nom de package. Notons tout de même que la politique de nomenclature des librairies initiée depuis la Mandriva permet d'éviter ce genre de casse-tête et aussi d'avoir plusieurs versions différentes d'une même librairie.


Il est possible de lancer une requète dans la base de donnée de urpmi pour retrouver ce fichier :


$ urpmf mon_beau_fichier


S'il est disponible alors le nom du package qui le contient sera donné.


Il est possible de donner une sous-chaine (par exemple 'mon') et on obtiendra (par exemple !):


$ urpmi mon

...

xgammon:/usr/share/icons/xgammon.xpm

rocksndiamonds:/usr/share/games/rocksndiamonds/levels/Contributions/rnd_pavel_machek/003.level.


Le mot avant les deux points correspond au nom du package. Ensuite, on trouve le chemin complet du fichier qui contient la chaine recherchée.

À vous de sélectionner ce qui vous intéresse réellement puis de lancer urpmi avec le nom complet.


Attention : Lorsque l'on veut utiliser urpmi pour installer un package se trouvant sur un cdrom, il faut tenir compte de deux points importants :


- le cdrom devra être monté au préalable. En général supermount s'en charge pour vous dès qu'une tentative d'accès est faite alors qu'il y a un cdrom dans le lecteur. Si supermount n'est pas installé sur la machine ou s'il ne marche, il faudra monter explicitement le cdrom par la commande mount.


- Il est vivement recommandé de ne pas changer de répertoire pour se positionner dans l'un des sous-répertoires du cdrom sinon la commande échouera si elle a besoin d'un autre cdrom pour mener à bien l'installation demandée. En effet tant que l'on se trouve sur l'un des sous-répertoires du cdrom, le média est considéré comme occupé et le système refuse d'éjecter le cdrom.


Comment tenir son système à jour : en admettant que vous avez plein de sources (y compris des sources pour les update) ? En tapant la commande :


# urpmi --auto-select


Va parcourir TOUTES les sources à la recherche des packages plus récents et les installer ainsi que leur dépendances.


Configuration de urpmi


D'abord, on va ré-initialiser urpmi, de façon à éviter des conflits :

  • éliminer ou (mieux) commenter les entrées du fichier de configuration /etc/urpmi/urpmi.cfg

  • effacer la base de donnée actuelles, formées des fichiers contenus dans /var/lib/urpmi

Ensuite, on va ajouter les nouveaux médias et régénérer la base. Ceci se fait via la commande urpmi.addmedia . Le nom est strictement informatif, mais l'URL dépend du type de média utilisé.

Dans le cas du mirroir, on peut configurer un accès par FTP ou NFS.

Le premier est censé être plus efficace en terme de transfert, mais ne peut être indexé par urpmi, ce qui n'autorise que les répertoires possédant un index pré-généré (mandriva et cooker seulement). Les deux méthodes sont décrites successivement.

Accès FTP

La commande à utiliser est de la forme urpmi.addmedia ftp://www.votre site.com/....>

Accès NFS

Il faut d'abord monter la partition NFS, et si possible automatiquement au boot de façon à ce qu'elle soit toujours disponible. Une bonne façon de faire est de créer un répertoire /mnt/nfs/linux, et d'insérer la ligne suivante dans /etc/fstab :

linux:/var/ftp/pub/linux /mnt/nfs/linux nfs defaults 0 0


Il faut également activer le service netfs au démarrage, car les systèmes de fichiers indiqués dans ce fichier sont montés normalement avant l'activation du réseau, et les systèmes distants ne sont alors pas disponibles : chkconfig --add netfs.

Une fois ceci fait, on peut utiliser urpmi.addmedia avec une syntaxe de la forme urpmi.addmedia http://www.votresite.com/...

  • # urpmi.addmedia mandrake http://www.misfu.com/modules/upload/upload/CODE>

  • # urpmi.addmedia contribs http://www.misfu.com/modules/upload/upload/CODE>

Cas d'un cdrom


Pour scanner les RPMs d'un cdrom pour insérer son contenu dans la base de données de urpmi, on utilise la syntaxe suivante :


# urpmi.addmedia removable://


est un nom que l'utilisateur choisit d'attribuer à son cdrom pour le distinguer des autres cdroms qu'il pourrait avoir besoin de gérer aussi par la même commande. Il est recommandé de prendre un mot du genre «mdkxxcd_inst1»

est la localisation du répertoire rpm sur votre machine lorsque votre média est monté.


Attention : urpmi.addmedia est une commande qui peut prendre des dizaines de minutes à s'exécuter.


Administration


Dans le cas de média dont le contenu change fréquemment, et si par exemple urpmi essaie d'installer le package nom_paquet et ne trouve pas le package nom_paquet1mdk auquel il s'attendait, il suffit de mettre à jour le média correspondant : urpmi.update nom_du_média.

Dans le cas de gulus, cela donnera :


# urpmi.update gulus


Introduction à rpmdrake


- Tout d'abord rpmdrake (se lance via drakconf ou à la main rpmdrake &) gère simultanément des RPMS de différentes (répertoire, CDrom, site FTP).


Si l'on veut installer un RPM, il propose automatiquement (comme Dselect) d'installer les RPMs qui manquent, si du moins ils sont dans sa base de donnée. Si on préfère, on peut aussi utiliser la commande en ligne urpmi pour faire cela.


- rpmdrake dispose de fonctions recherche pour rechercher les contenant tel ou tel fichier qui sont dans sa base de données, ou meme une simple chaîne de caractères.


- Au préalable, il faut enregistrer dans la base de donnée toutes le s de RPMs. Pour les CDs utilisés à l'installation, cela est fait automatiquement. Pour d'autres de RPMs, on peut faire cela en utilisant rmpdrake directement ou alors en revenant à la ligne de commande grâce à urpmi.addmedia. Exemple: on scanne les RPMS d'un CD en tapant:


$ urpmi.addmedia NomduCD removable_cdrom_2:///mnt/cdrom/Mandriva/RPMS


ou, dans le menu configuration de rpmdrake, ajouter un emplacement de . Ensuite on utilise la commande rechercher. Les deux flèches permettent de basculer de la liste des installés à la liste de tous les RPMs disponibles.


- Enfin, urpmi peut être utilisé pour donner l'autorisation à d'autres utilisateurs que d'installer des RPMs. Extension à manier avec précaution car cela affaiblit la sécurité du système.


Par l'équipe technique A.N.F.A