Gestion des logiciels ( tar.gz, rpm et urpmi )

linux softwares

Sous Linux la plupart des programmes sont livrés sous formes de packages, qui ne sont plus ou moins que des archives. Il en existe de différentes sortes (.tar.gz, .rpm, .deb), certains étant plus utilisés que d’autres suivant la distribution.

Les tar.gz/tar.bz2

REQUIS :

gcc, make, binutils, nasm, g++ : pour compiler
gunzip, bzip2, tar : pour décompresser l’archive

Ce format de package permet souvent d’avoir les sources d’un programme. C’est aussi le format le plus utilisé pour véhiculer des programmes.
Cependant sur un système à base de rpm comme la Mandrake ou La Red Hat je ne puis que déconseiller VIVEMENT l’utilisation de ces packages. Ces packages ne devront être utilisé que si la version équivalente en rpm n’existe pas.
Si le prog vient de sortir, il est d’usage d’attendre en moyenne une semaine avant qu’une version packagée en rpm ne sorte.

Le meilleur moyen de trouver des tar.gz , tar.bz2 est d’aller sur le site, la homepage du programme/projet. Pour cela on fera une recherche sur http://freshmeat.net ou http://www.linuxapps.com.

Le format d’archivage à proprement parler est le tar. Ensuite cette archive est compressée pour prendre moins de place soit par gunzip ( .gz ) ou bzip2 ( .bz2 ).

Pour utiliser l’application, il faut avant tout compiler les sources. Ne vous inquiétez pas, le processus est automatiser, et si tous ce passe bien, cela se fait sans douleur si les packages requis sont présent ( souvent des -devel qui sont des packages de développement ).

Pour compiler les sources il faut au minimum un compilateur ( gcc ), l’utilitaire make, nasm pour les optimisations mmx et les fichiers includes et de devel que le programme va utiliser. D’habitude ces vérifications se font lorsqu’on exécute le fichier configure. Donc prétez attention à ce qui s’affiche. Comme cela défile très vite concentrez sur le mot no : il est souvent synonyme du fait que quelquechose n’a pas été trouvé.

De plus il est souvent conseillé de décompresser l’archive dans le répertoire /tmp ceci afin de ne pas surcharger son répertoire personnel.

Comment installer un prog avec un tar.gz/tar.bz2 ?

Supposons que l’archive que nous devons décompresser se nomme foo-x.y.tar.gz ou foo-x.y.tar.bz2. Voici les différentes étapes qu’il faut suivre pour installer cette archive.

décompresser l’archive :

$> tar -zxvf foo-x.y.tar.gz<- cas d’un tar.gz (je recommande que gunzip/gzip soit installé)
$> tar -jxvf foo-x.y.tar.bz2<- cas d’un tar.bz2 (je recommande que bzip2 soit installé)
$> cd foo-x.y<- on va dans le répertoire crée lors de la décompression souvent le nom de l’archive

Compiler et installer :

$> ls<- on vérifie le contenu
$> ./configure<- si on aperçoit un fichier configure on le lance, regardez les message d’erreurs possibles
$> make<- on démarre la compilation
$> make install <- on install le prog

Note : si il n’y a pas de configure, il se peut qu’un “make” puis “make install” suffisent, ou alors chercher un fichier “setup” ou “install.sh” et le lancer. Cela se fera en tapant :
$> ./setup   <- lance le fichier setup. Sinon lire le fichier README ou INSTALL et suivre les instruction qui s’y trouvent.

Souvent le binaire du programme s’installe dans /usr/local/bin ( recommandé ). Pour forcer l’installation des différents dans /usr/local comme racine, il suffit de passer le prefix durant le configure :
$> ./configure –prefix=/usr/local

Explications :

Comme on peut le voir on fournit des options à la commandes tar. penchons nous un peu sur ces options :
z = le fichier est un tar.gz, donc il va décompresser en utilisant gunzip ou gzip
j = le fichier est un tar.bz2, donc il va décompresser en utilisant bzip2
x = eXtract = extrait l’archive, souvent cré un repertoire du nom de l’archive et y extrait les fichiers
v = Verbose = afficher message d’erreur si il le faut et ce qui se passe (on voit défiler les fichiers extraits)
f = File = spécifie que l’on va agir sur un fichier (tar a l’origine était fait pour les lecteurs de bandes et non pour les fichiers)

Si vous voulez juste lister le contenu d’une archive, il faut taper :

$>  tar -ztf foo-x.y.tar.gz

Il y a d’autres options (création, …) pour cela un “man tar” dans une console ou #tar dans la barre d’url de konqueror.

Comment convertir des tar.gz en rpm ?

En fait il faut passer par un programme nommé alien. Souvent ce programme est déjà inclus sur les CD de votre distribution. Avec kpackage/gnorpm/rpmdrake ou un urpmi alien” vous devriez être en mesure d’installer ce programme très simplement.
La conversion est relativement aisé. Il suffit de récupérer le .tgz (format slackware) ou le tar.gz (format général) et d’appliquer la commande alien comme suit :

$>  alien –to-rpm package.tar.gz

 

Les RPM

what’s this ?

Devant certaines lacunes du format tar.gz (pas de signature pgp, pas de gestion des dépendances, difficultés pour la maintenance), il a été crée par Red Hat un nouveau format d’archive le rpm (Red Hat Package Manager).
Ce format accroit la sécurité (signature pgp), la facilité d’utilisation et la maintenance. Les noms des rpm respectent un format précis de type nom-version.arch.rpm où :
nom  =  nom du package/prog
version  =  version du package/prog
arch  =  architecture pour lequel est fait le prog/package.
En effet Linux existant sur plusieurs architectures, on peut trouver des packages pour PowerPC ( ppc ), Alpha ( alpha ), Intel qui regroupe Pentium/Athlon et Cie (i386, i586, i686).
ix86 définit le niveau d’optimisation du code. Pour simplifier, nous allons plutôt désigner les rpm en ommetant l’architecture. Cela donnera des noms du genre foo-x.y.rpm au lieu de foo-x.y.i686.rpm.

De plus si vous trouvez des rpm du type foo-x.ymdk.i586.rpm, sachez que ce sont des rpms fait normalement spécialement pour la distribution Mandrake. Je ne saurais trop vous conseillezd’installer ces rpm en priorité si vous êtes sous Mandrake !

Comment vérifier qu’un package est installé ?

Pour utiliser les rpms il faut bien que le prog rpm soit installé. Il est forcément installé de base sur un sys à base de rpm (Red Hat, Mandrake).
Rien de telle qu’une petite vérification :

[will@bastard will] rpm -qa | grep rpm
rpm-python-4.0-33mdk
rpmdrake-1.3-59mdk
rpm-devel-4.0-33mdk
grpmi-8.0-9mdk
rpm-4.0-26mdk<- ce qui nous intéresse
rpmtools-2.3-21mdk
urpmi-1.5-34mdk
gnorpm-0.96-1mdk
rpmlint-0.31-1mdk
rpm-build-4.0-33mdk
gurpmi-0.9-34mdk

Nous venons de voir l’une des premières utilité des rpms : la possibilité de vérifier si un package est installé ou non. En effet à chaque installation d’un rpm, le programme rpm écrit dans une base de données ceci afin d’indiquer que le pros a été installé.

Explications :

q = query = interroge la base de données rpm
a = all = liste tous les packages installés
Pour ne pas tout voir défiler, on utilise la commande grep qui ne va donner que les lignes qui contiennent ce que l’on cherche. Ainsi grep rpm donne toutes les lignes qui contiennent rpm. On utilise un tube ( | ) pour transmettre la sortie du rpm -qa à la commande grep.
Pour chercher si un package est installé :

$> rpm -q package<- si on connait de manière précise le nom du package
$> rpm -qa | grep -i motif<- si on cherche un package dont le nom contient motif

Par exemple :

[will@bastard will]$ rpm -q rpm
rpm-4.0-26mdk

 

Comment installer un rpm ?

$> rpm -Uvh foo-x.y.rpm<- install le rpm

Explications :

U = Upgrade = pour une mise a jour, mais convient aussi pour une install
v = verbose = affiche des infos si nécessaires
h = hash =  montre la progression de l’install du package, ce sont les hash que l’on vois : ######
syntaxe :
rpm -Uvh package.rpm  (mis a jour)
rpm -ivh package.rpm   (installation)

Si jamais l’install d’un rpm échoue, souvent c’est due à un pb de dépendance, c’est à dire que le programme que l’on va installer a besoin de d’autres progs, or rpm ne le trouve pas dans sa base données. Souvent cela signifie que le prog n’est pas installé. Alors au choix on essaie d’installer ce progs à partir des CD d’install. Si il n’est pas dessus, on peut essayer de le télécharger sur internet, et là il y a un site qui fait référence : http://rpmfind.net
Pour une question de rapidité, je conseille d’utiliser les mirroirs français : http://fr.rpmfind.net ou http://fr2.rpmfind.net
Sur une Red Hat une solution serait d’utiliser soit gnorpm (semble gérer à peu près les dépendances) ou kpackages.
Sur Mandrake bien que kpackage et gnorpm soit dispos, on utilisera plutôt rpmdrake et urpmi.

Rpmdrake et urpmi permettent très facilement d’installer des packages et ce à partir de plusieurs sources (ftp, cdrom, local, …). rpmdrake n’est qu’un front-end pour urpmi.
Par défaut le sys a configuré déjà 2 sources qui sont celles des 2 CD d’install (en admettant que vous ayez utilisé les 2 CD d’install). Une autre source qu’il serait intéressant d’installer serait celle de cooker mais ce point est abordé ici.

Il peut arriver qu’un rpm ne veuille pas s’installer car il dit qu’il manque quelquechose, mais que l’on soit sûr de l’avoir installé (cas typique ou la lib est installée à partir de tar.gz ce qui fait que la BD de rpm ne le sait pas). Dans ce cas il faut forcer l’installation. Pour cela on va utiliser les options –force –nodeps.
IL NE FAUT UTILISER CES OPTIONS QUE SI L’ON SAIT CE QUE L’ON FAIT.
Cela donne :

$> rpm -Uvh –force –nodeps foo-x.y.rpm

Explications :

–force  = force l’install et ne tient pas compte de possibles erreurs
–nodeps  = ne tient pas compte des pbs de dépendances

 

Comment désinstaller un package ou un programme ?

C’est très simple avec les rpm.

$> rpm -e foo<- désinstall le package foo-x.y.rpm

e = Erase = effacer/enlever/désinstaller

Note : les options –force –nodeps sont aussi reconnues et utilisables au cas où le package serait indispensable a d’autres et que donc il ne veut pas l’enlever.

On peut aussi utiliser kpackage ou gnorpm et surtout rpmdrake/urpme sous Mandrake.

Comment lister le contenu d’un package installé ?

$> rpm -ql foo

q = query = interroge la BD de rpm
l = list = liste le contenu du package

On peut utiliser grep motif pour chercher un motif précis dans la liste des fichiers : rpm -ql foo | grep motif

 

Comment avoir des infos sur un package déjà installé ?

$> rpm -qi foo

i = info = demande d’informations

 

Comment lister le contenu d’un package non installé ?

$> rpm -qpl foo-x.y.rpm

p = package = précise qu’il faut interroger le package donné en paramètre et non la BD de rpm

 

Comment avoir des infos sur un package non installé ?

$> rpm -qpi foo-x.y.rpm

 

Comment avoir les dépendances d’un package non installé ?

$> rpm -qpR foo-x.y.rpm

Bien sûr il y a pleins d’autres options et de possibilités, et rien de mieux qu’un “man rpm” dans une console ou #rpm dans la barre d’url de konqueror pour avoir plus d’infos.

Comment installer des src.rpm ?

Les src.rpm sont des sources livrés sous formes de rpm. Donc il faut compiler le rpm qui va alors créer un package en .rpm (voire même le packages -devel qui correspond).
Note : il faut le package rpmtools et surtout rpm-build
Pour compiler le src.rpm :

$> rpm –rebuild foo-x.y.src.rpm

Ensuite installer les rpm crées :

$> rpm -Uvh /usr/src/RPM/RPMS/i686/foo-x.y.rpm
$> rpm -Uvh /usr/src/RPM/RPMS/i686/foo-devel-x.y.rpm

Note : L’emplacement où se trouvent les rpm peut varier. Pour vérifier il suffit de regarder les dernières lignes qui s’affiche après la compilation. Vous devriez apercevoir une ligne ressemblant à
Wrote: /usr/src/RPM/RPMS/ix86/foo-x.y.rpm
Les packages en -devel sont les packages de développement. Ils contiennent notamment les headers qui seront utiles pour compiler les programmes faisant appel au prog/librairies concernés.

 

urpmi/urpme/urpmf et rpmdrake

Ce sont les outils spécifiques de la Mandrake dont le but est de nous simplifier la vie. Ils permettent de gérer les packages rpms et leurs dépendances et offrent un moyen puissant de gérer les programmes installés sur son postes de travail.

Rpmdrake

Rpmdrake en lui même n’est qu’un front-end pour urpmi/urpmi. Avec rpmdrake on peut chercher un package précis qui serait dispo soit dans l’une des sources configurées (CD d’install, ftp, NFS, …). Les critères de recherches peuvent être le nom du package, un mot clé dans la description, la source, un fichier, etc …
Il permet d’ajouter des packages en prenant en compte les dépendances et cela avec une jolie interface graphique. Je vous conseille de jeter un oeil sur cette démo de Rpmdrake
Via rpmdrake il est aussi possible de faire les mises à jours de sécurité.

urpmi/urpme

Pour ceux qui aiment la rapidité et l’efficacité ->  urpmi/urpme.

$>  urpmi foo<- permet d’installer des rpm d’une sources en tenant compte des dépendances
$>  urpme foo<-  permet de désinstaller un rpm ainsi que ceux qui en dépendent.

urpmi/urpme acceptent les options suivantes (je donne une sélection des plus intéressantes) :
–auto = installe tous les packages requis sans demander confirmation
–force = installe le package et ceux qui en dépendent même si il peut y avoir des problêmes (écrasement de fichier, pb de dep ? – cas très très rare). Cela revient à répondre par l’affirmative à toutes les questions/confirmations qu’il aurait faire.
–allow-nodeps = Permet à urpmi de continuer l’installation et ce même si une dépendance n’est pas satisfaite ( souvent parce que le package n’a pu être installé ou trouvé )
–X = utilise une interface graphique
–provides = installe le package qui fournit ce qui est préciser ensuite en option. Ainsi pour installer le package du kernel sur les dernières mdk : urpmi –provides kernel va fournir la liste des packages fournissant le noyau
-a = installe tous les packages dont le nom correspond
–auto-select = sélectionne automatiquement les packages pour mettre à jour le système. Personnellement je n’ai jamais tenté cette expérience, je pense qu’il vaut mieux upgrader le système en gardant le control de ce que l’on fait c’est-à-dire le faire petit à petit de manière progressive et réfléchie.
–skip nom_package = Utile lorsque l’on fait une mise à jour globale ( –auto-select ) car il permet de préciser au coup par coup un package qu’il ne faut pas toucher ( à partir de la Mandrake 9.2 ).
–keep = Permet de dire à urpmi de ne pas désinstaller de packages et de ne faire que des mises à jours ( à partir de la Mandrake 9.2 ).
–no-verify-rpm = Permet de dire à urpmi de ne pas vérifier la signature gpg des packages. Utile lorsque vous installer des packages contrib ( à partir de la mdk 9.2 )

Dans /etc/urpmi/skip.list on peut préciser la liste des packages que l’on ne veut pas que urpmi touche.

urpmf

L’autre programme intéressant s’apelle urpmf. Il permet de trouver quel package contient un fichier précis : très utile quand un rpm ne veut pas s’installer car il manque un fichier.
Le fonctionnement est enfantin :

$> urpmf fichier

Il dit alors quel package contient/fournit le fichier. Ensuite il ne reste plus qu’a installer le package avec rpm ou urpmi.
Penchons plus longuement sur les possibilités de recherches qu’offre urpmf au travers des options qu’il accepte :
–summary = donne les packages dont le résumé contient contient le mot passé en argument
–description = donne les packages dont la desciption contient contient le mot passé en argument
Etant donné que la réponse peut être longue, il est conseillé de combiner cette commande avec more en utilisant un tube ( | ), de cette façon vous pourrez consulter tranquille les résultats si ils sont nombreux :

$>  urpmf –summary ftp | more<- on cherche tous les packages ayant un rapport le protocol ftp ( serveur ftp, client ftp) 
$>  urpmf –summary mp3<- tous les packages dont la description contient mp3 et qui sont donc en relation avec le mp3

urpmf –summary et urpmf –description ne sont pas la panacée pour trouver un package sur un sujet précis. Ainsi alors que xmms est le lecteur de mp3 le plus connu sous Linux ( clone de winamp ), il n’apparait pas dans les résultats ! Donc je ne saurais trop conseiller de parcourir la liste des packages dans rpmdrake ou d’aller sur les sites qui recensent les applications sous linux.

Il existe encore pleins d’autres options pour urpmf :
–provides = cherche dans les provides ( i.e les packages qui disent fournir quelquechose )
–requires = cherche dans les requires ( i.e listera les packages en ayant besoin )
–conflicts = cherche tous ceux qui entrent en conflit

urpmq

Pour savoir si vous avez un package (installé ou disponible dans une de vos sources de packages configurées), il suffit d’utiliser urpmq :

$> urpmq -gr package

Pour connaitres les dépendances d’un package :

$> urpmq -d package

Bien sûr on peut combiner avec -g ( affiche le groupe du package ) et -r ( affiche le numéro de version du package ) :

$> urpmq -dgr package

urpmi.addmedia

Cette commande permet d’ajouter des sources pour urpmi/rpmdrake. Les sources sont des emplacements où urpmi/rpmdrake vont aller chercher les rpms. Ces sources peuvent être locales ( disque durs ), amovible ( CDROM/DVD/ZIP/… ), distante ( ftp, rsync, nfs ). On les ajoutes avec urpmi.addmedia et on les enlèves avec … urpmi.removemedia.
On précise donc le nom de la source ( celui-ci doit être unique ( i.e 2 sources ne peuvent porter le même nom ), le protocol ( file pour un répertoire sur un disque local ou NFS, ftp pour un serveur ftp, http pour un serveur web, removable pour les média amovibles à savoir CDROM/ZIP/…
Éventuellement on peut préciser à urpmi.addmedia le fichier hdlist et ce en mettant son chemin relatif par rapport au répertoire qui contient les sources. Ce fichier contient la liste des rpms de la sources, les informations sur les différents packages et les relations de dépendances entre eux. Si le hdlist n’est pas précisé, urpmi.addmedia essaiera d’en faire un.

Imaginons que vous ayez un répertoire où vous ayez stocké des rpms et que vous vouliez qu’ils soient disponible lorsque vous installerez un package avec urpmi/rpmdrake, il vous suffit de taer la commande suivante :

$>  urpmi.addmedia mesrpms file:///path/vers/mes/rpms<- on ajoute une source nommée mesrpms pour laquelle les rpms se trouvent dans le répertoire /path/vers/mes/rpms

Prenons le cas de rpms se trouvant sur un serveur ftp et dont le hdlist est fournit ( il se nomme hdlist.cz et se trouve dans le répertoire précédent celui où se trouvent les rpms ), à ce moment là on fera ceci :

$>  urpmi.addmedia mesrpmsftp ftp://ftp.monserveur.com/path/vers/rpms with ../hdlist.cz

D’autres informations sont disponibles sur le site officiel d’urpmi à savoir http://www.urpmi.org

Note : Pour ajouter des média intéressants pour la Mandrake comme plf ( bcp packages multimédia comme support DVD cryptés, wma, rip de DVD, codecs windows, quicktime ), Texstar ( nouvelles versions de KDE, Gnome backportées de cooker vers la dernières version stable de la distribution ), je vous recommande vivement Easy urpmi qui vous permettra de choisir les mirroirs pour les différentes sources et vous donnera les lignes à taper.

+ Ajoutons une source plf pour mdk 9.1 et ce avec le miroir ftp de club internet :

$> urpmi.addmedia plf ftp://ftp.club-internet.fr/pub/linux/plf/mandrake/9.1 with hdlist.cz

+ Ajoutons une source contrib pour une mdk 9.1 via le site ftp de free.fr ( proxad.net ) :

$> urpmi.addmedia contrib ftp://ftp.proxad.net/pub/Distributions_Linux/Mandrake/9.1/contrib/i586 with ../../i586/Mandrake/base/hdlist2.cz

+ maintenant une source texstar pour la mdk 9.1 sur le miroir de ibiblio.org :

$> urpmi.addmedia texstar ftp://ftp.ibiblio.org/pub/Linux/distributions/contrib/texstar/mandrake/9.1/rpms with hdlist.cz

+ Pour refaire les sources de vos CD d’installations ( utile si vous les avez effacer par inadvertance ou que vous avez eu des CD en plus après coup ). On suppose que le CD1 d’installation est dans /mnt/cdrom :

$> urpmi.addmedia –distrib cd removable://mnt/cdrom/

Ce site est une référence si vous voulez apprendre à utiliser rpmdrake/urpmi : http://www.zebulon.org.uk/urpmi_fr.html