Urpmi et ses amis

Urpmi est le nom du logiciel d'installation des paquets de Mandriva Linux. En gros, c'est un peu l'équivalent du bien connu « apt-get install », sauf que c'est avec le format de paquet RPM. Il a été créé comme surcouche à l'utilitaire rpm, pour être plus facile à utiliser au quotidien (urpm veut dire « user rpm »).
Il fait toutes les tâches complexes comme la résolution des dépendances, le téléchargement des paquets et la mise à jour automatique suivant le numéro de version.

Dans cet article, je vous propose une présentation générale, pour que ceux qui utilisent encore la méthode graphique puisse tester la rapidité d'installation en ligne de commande.
Ensuite, je ferai le tour des options moins connues de cet utilitaire, qui permettent parfois de trouver de bonnes astuces, pour les utilisateurs plus avancés.

Urpmi : User RPM Install ou Utilitaire de Rêve Pour Mon Installation

Pour la suite, je suppose que vous avez déjà lancé une fois l'utilitaire graphique d'installation de logiciel et que les sources de RPMs sont configurées. Si vous avez déjà installé un logiciel graphiquement, c'est bon.

L'installation de logiciel est une modification du système, il faut donc obtenir les droits d'administration, c'est-à-dire avoir une ligne de commande en tant qu'utilisateur root.

Ce n'est pas très compliqué. Il suffit d'ouvrir un terminal (par exemple, konsole ou gnome-terminal, dans le menu Outils) et de taper "su", puis entrée. Ensuite, tapez le mot de passe root (c'est normal qu'il ne s'affiche pas), puis entrée. Note pour plus tard : pour revenir en utilisateur normal, il suffit de taper "exit" et valider.

[root@thinkpad ~]#

Pour tester, nous allons installer un jeu : slune. C'est très simple, il suffit de faire : urpmi slune

[root@thinkpad ~]# urpmi slune
Pour satisfaire les dépendances, les paquetages suivants vont être installés
   Paquetage                      Version      Révision      Arch   
(média « Contrib »)
  editobj                        0.5.7        4mdv2009.1    noarch  
  libcal3d12                     0.11.0       7mdv2009.0    i586    
  libode1                        0.11         1mdv2009.1    i586    
  py2play                        0.1.9        5mdv2009.1    noarch  
  pyogg                          1.3          12mdv2009.1   i586    
  pyopenal                       0.1.6        1mdv2009.1    i586    
  pyvorbis                       1.5          0.a.2mdv2009> i586    
  slune                          1.0.15       2mdv2009.1    noarch  
  soya                           0.14         2mdv2009.1    i586    
un espace additionnel de 30Mo sera utilisé.
8.8Mo de paquets seront récupérés.
Procéder à l'installation des 9 paquetages ? (O/n)

Il suffit de valider, et les paquets sont téléchargés et installés. Aucun besoin de redémarrer, et le lien est déjà dans le menu. Mais que s'est-il passé en détail ?

Urpmi possède des listes des logiciels disponibles (une liste par dépôt), avec des informations comme leur version, leur taille, l'endroit où les télécharger et la liste des paquets dont il a besoin pour fonctionner (par exemple des bibliothèques). Il a également accès à la base de données rpm, qui stocke les informations sur les logiciels installés.

Au moment de l'installation, urpmi regarde si le logiciel est dans les listes, et sélectionne par défaut la version la plus grande. Il regarde ensuite la liste des dépendances, et regardent si elles sont installées/disponibles/à mettre à jour, et il calcule aussi les dépendances des dépendances, etc. Si une dépendance manque, on s'arrête là (on a rien installé) et on rapporte une erreur : on est pas dans un système qui installe tout avant de rendre compte qu'il manque une DLL à l'exécution ;)

Une fois la liste des logiciels à installer connue, urpmi les télécharge (puisqu'il connaît l'endroit où les télécharger) et les installe, dans l'ordre des dépendances.
Pour ne pas multiplier les connexions/déconnexions réseau, urpmi essaye de télécharger plusieurs paquets à la suite (ex : les bibliothèques) pour ensuite les installer à la suite, plutôt que de faire plusieurs fois téléchargement/installation, en coupant la connexion à chaque fois.
Là encore, si un problème arrive et qu'un des paquets ne peut pas être téléchargé, on s'arrête en rapportant une erreur, et on aura simplement installé des dépendances inutiles (pour le moment).

Quand le dernier paquet s'installe, on a la garantie que ses dépendances ont été installées, et qu'il ne devrait rien lui manquer pour fonctionner.
Plus précisément, les dépendances installées sont celles qui sont renseignées dans la liste d'urpmi. Si le programme ne se lance pas en se plaignant du manque d'un fichier .so, c'est probablement que la liste des dépendances du paquet a été mal faite, et c'est un bug à rapporter à l'empaqueteur.

Si on reprends notre exemple, slune a besoin de soya, qui a besoin de libcal3d12. Urpmi télécharge et installe d'abord libcal3d12, puis soya, puis slune. Même si on interrompt le processus pendant l'installation, on obtient toujours un système cohérent (libcal3d12, ou libcal3d12+soya, mais jamais slune sans soya, ou soya sans libcal3d12).

Urpme : User RPM Erase ou Utilitaire Réactif Pour un Ménage Expéditif

Installer c'est bien, mais des fois, on regrette ! C'est pour cela qu'urpmi a son pendant de désinstallation : urpme.
On pourrait penser que son boulot est plus reposant, mais pas du tout ! Lorsqu'on désinstalle un paquet, il faut tout d'abord regarder s'il n'est pas une dépendance d'un autre paquet installé et avertir l'utilisateur qu'il va désinstaller les 2 paquets (puisqu'on ne peut pas garder l'autre paquet si on désinstalle sa dépendance).

[root@thinkpad ~]# urpme soya
Pour satisfaire les dépendances, les 2 paquetages suivants vont être désinstallés (27Mo):
  slune-1.0.15-2mdv2009.1.noarch
   (car soya >= 0.14 est non satisfait)
  soya-0.14-2mdv2009.1.i586
Supprimer 2 paquetages ? (o/N) o
désinstallation de slune-1.0.15-2mdv2009.1.noarch soya-0.14-2mdv2009.1.i586
désinstallation du paquetage slune-1.0.15-2mdv2009.1.noarch
désinstallation du paquetage soya-0.14-2mdv2009.1.i586
writing /var/lib/rpm/installed-through-deps.list

Les paquetages suivants sont désormais orphelins, si vous voulez les désinstaller,
vous pouvez utiliser « urpme --auto-orphans ».
  py2play-0.1.9-5mdv2009.1.noarch
  pyogg-1.3-12mdv2009.1.i586
  libcal3d12-0.11.0-7mdv2009.0.i586
[etc...]

L'utilisation n'est pas plus compliquée qu'urpmi, mais on note que, par défaut, la question pour supprimer les paquets réponds par défaut "Non" (il faut taper "o"), alors que l'installation d'urpmi est par défaut à "Oui". Je pense que c'est parce qu'une installation est toujours réversible (avec urpme), alors qu'une désinstallation n'est pas toujours réversible facilement (paquet plus disponible, téléchargement lent, etc.).

On voit apparaître également la notion de paquets orphelins. C'est simplement les paquets qui ont été installés comme dépendances de paquets qui ont été désinstallés. Dans notre exemple, soya avait besoin de libcal3d12, et on a désinstallé soya. libcal3d12 est maintenant orphelin : on peut le désinstaller puisqu'il n'est nécessaire à aucun autre paquet.

Les paquets orphelins ne sont pas désinstallés automatiquement, parce qu'il arrive qu'un paquet dépende d'un autre, et que les 2 soient utiles à l'utilisateur.
Prenons l'exemple du paquet mplayer et de son interface graphique mplayer-gui. Si on installe mplayer-gui, mplayer va être installé en tant que dépendance. Ceci dit, on peut vouloir utiliser mplayer sans l'interface graphique (oui, c'est possible de lire une video en ligne de commande). Lorsque mplayer-gui est désinstallé, mplayer devient orphelin, mais il n'est pas désinstallé.
C'est également le cas des meta-paquets (paquets task-...) dont la désinstallation crée des orphelins.

Urpmq et Urpmf (Query/Files) : Une Recherche Pour Mieux Quêter et Fignoler

Parfois, il arrive qu'on cherche un paquet dont on connaît une partie du nom, ou qu'on veuille regarder les informations sur un rpm, installé ou non.
Urpmq permet de chercher dans la liste des paquets disponibles, par exemple pour connaître la version d'un paquet disponible.

[root@thinkpad ~]# urpmq slune
slune
[root@thinkpad ~]# urpmq slune --summary
slune : A multiplayer 3D racing and car-crashing game in Python ( 1.0.15-2mdv2009.1 )
[root@thinkpad ~]# urpmq vlc-plugin
Pas de paquetage nommé vlc-plugin
Les paquetages suivants contiennent vlc-plugin : vlc-plugin-a52, vlc-plugin-aa, ...
Vous pouvez utiliser « -a » pour les sélectionner tous

Urpmf fonctionne de la même manière, mais pour rechercher des fichiers. Par exemple, si un programme se plaint de ne pas trouver libvlc.so, il est possible de le trouver dans la liste des paquets installables. Cette opération peut être assez lente, surtout lorsque la liste des fichiers doit être téléchargé (urpmf télécharge les listes seulement si besoin).

[root@thinkpad ~]# urpmf libvlc.so
libvlc-devel:/usr/lib/libvlc.so
libvlc2:/usr/lib/libvlc.so.2
libvlc2:/usr/lib/libvlc.so.2.0.2
libvlc2:/usr/lib/libvlc.so.2
libvlc2:/usr/lib/libvlc.so.2.0.2
libvlc-devel:/usr/lib/libvlc.so

Les autres urpm*, rurpmi et rurpme

Les utilitaires urpmi.addmedia, urpmi.removemedia et urpmi.update permettent de gérer les « médias », c'est-à-dire les dépôts de RPMs. Urpmi peut aller chercher des logiciels par http, ftp, rsync, ssh et système de fichier fixe ou amovible.

Urpmi_rpm-find-leaves est un lien symbolique vers rpm-find-leaves. Il calcule la liste des paquets qui ne sont des dépendances d'aucun autre paquet installé. Cela peut être utile pour faire de la place en enlevant des paquets dont personne ne dépends.

Rurpmi et rurpme sont des versions restreintes d'urpmi et urpme qui sont destinées à être utilisée en sudo. Dans ces versions, certaines options sont désactivées pour ne permettre que les opérations de bases, par exemple pour qu'un utilisateur ne puisse installer que les paquets des dépôts officiels.

Options avancées et astuces

Tous les utilitaires ont des options "-h" ou "--help", ainsi que des pages de man, qui vous permettront d'avoir une liste exhaustive des options disponibles.

Parmi les options d'urpmi, j'utilise régulièrement "--media ackport" qui me permet d'installer un paquet depuis les dépôts de backports (qui est un dépôt avec des paquets plus à jour, mais sans support officiel). J'oublie volontairement le "b" devant "ackport", parce que les dépôts officiels ont un "B" et les dépôts PLF ont un "b", et que je veux les utiliser tous.

Urpmi et urpmq supportent la complétion (avec tab) du nom des RPMs, mais aussi sur le nom des médias.
Malheureusement, la complétion des paquets est super lente. Chez moi, environ 3 secondes entre le [tab] et le résultat. Essayez vous-même, tapez : urpmi vlc[tab]
Pour la complétion sur les medias, ça ne marche pas très bien avec les dépôts qui ont un espace dans leur nom, et c'est justement le cas avec les dépôts Mandriva par défaut (par ex., "Main Updates").

L'option "--parallel" de urpmi/urpme permet de lancer des (dés)installations sur plusieurs machines distantes, à travers ssh.
Il y a aussi "--limit-rate" pour qu'urpmi ne mange pas trop de bande passante.
Une option intéressante à tester, c'est "--wait-lock" qui permet d'attendre que la base de données RPM redevienne disponible, notamment quand une mise à jour est en cours.

Avec urpmq, les options utiles sont "-S" pour afficher le résumé du paquet (summary), "-i" pour afficher toutes les informations d'un paquet, ainsi que "--sources" pour savoir où est-ce que le paquet va être téléchargé.

Urpmi/urpme/urpmq ont aussi les options "-y" qui permet de ne pas chercher seulement le nom exact. Par exemple, "urpmq -y vlc" cherche tous les paquets avec vlc dans leur nom. Pour les (dés)installations multiples, l'option "-a" permet un résultat multiple. Par exemple, "urpmi -a vlc-plugin-" installe tous les plugins vlc.

Et vous, quelles sont les options que vous utilisez le plus ?

Vus : 734
Publié par Olivier Faurax : 21