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 ?