Club mandriva French


Forum Mandriva Qui utilise Mandriva ? Accueil
Installer Configurer multimedia Systeme internet tutoriels questions ? entreprises emulation jeux


Décompresser et compiler un programme


  • Sous forme d'archive. Il s'agit de fichiers compressés comportant l'extension .tar.gz, .gz ou .tar.bz2
Dans le second cas il s'agit généralement des sources du logiciel. Il vous faut donc compiler le programme sur votre machine afin de rendre son exécution possible.


Décompresser des archives

Les programmes sont la plupart du temps fournis compressés, c'est-à-dire sous un format plus compact permettant de réduire la taille du programme, notamment pour faciliter son téléchargement, c'est le programme GZIP qui permet ce compactage. Plusieurs fichiers peuvent aussi être simplement regroupés en une seule archive pour faciliter leur transport, c'est le rôle du programme TAR. Enfin, les fichiers peuvent être compressés et regroupé en une archive portant l'extension .tar.gz.

Les données compressées existent sous plusieurs formats :

  • Tar : les données sous ce format portent l'extension .tar
    pour décompresser ce type de données il faut taper en ligne de commande :
    tar xvf nom_du_fichier.tar
  • Gzip : les fichiers compressées en Gzip possèdent l'extension .gz
    pour décompresser ces fichiers il faut taper en ligne de commande :
    gunzip nom_du_fichier.gz
  • Bzip2 : les fichiers compressées en Bzip2 possèdent l'extension .bz2
    pour décompresser ces fichiers il faut taper en ligne de commande :
    bzip2 -d nom_du_fichier.bz2
  • Tar/GZip : (on parle généralement de Tarball): les données compressées en TAR et en GZIP portent l'extension .tar.gz
    Elles peuvent être décompressées successivement par les deux moyens énoncés ci-dessus ou à l'aide de la commande :
    tar zxvf nom_du_fichier.tar.gz
  • Tar/BZip2 : les données compressées en Tar et en Bz2 portent l'extension .tar.bz2
    Elles peuvent être décompressées successivement par les deux moyens énoncés ci-dessus ou à l'aide de la commande :
    tar jxvf nom_du_fichier.tar.bz2
  • Compress : les fichiers archivés par le programme Compress portent l'extension .Z, ils peuvent être décompressés par le programme Uncompress.

Compiler le programme

Lorsque le programme est une archive (et non un RPM) il est généralement nécessaire de compiler les sources.

Bien que la compilation se fasse pratiquement toujours de la même façon pour la majorité des applications, il est vivement conseillé de lire le fichier INSTALL ou README pour connaître exactement les commandes nécessaires à la compilation du programme.


Configure
La commande configure. Il s'agit d'un script shell (généralement écrit par Autoconf de GNU) qui s'exécute, recherche les éléments logiciels et effectue même divers essais pour savoir ce qui fonctionne. Il prend ensuite ses instructions dans Makefile.in et construit le fichier Makefile (et éventuellement quelques autres fichiers) qui fonctionnera correctement sur ce système.

Exécutez configure (vous devrez en général saisir ./configure car la plupart des utilisateurs n'ont pas le répertoire en cours dans leur chemin de recherche). Cette commande construit un nouveau fichier Makefile.

Dans un premier temps il faut exécuter la commande :

./configure
Cette commande est un script permettant d'adapter le programme à la machine courante. Les options de configure sont :
  • Pour obtenir de l'aide :
    ./configure --help
  • Pour installer l'application dans un répertoire spécifique :
    ./configure --prefix="repertoire"


Make
Cette commande peut prendre plusieurs minutes/heures selon votre configuration et le logiciel à compiler. En cas de probleme, la compilation s'arretera en vous renvoyant un message d'erreur. Si tout se passe normalement de nombreuses lignes vont être affichées, puis le programme reviendra à la ligne de commande.

make comporte un ensemble de règles intégrées auxquelles il ne vous reste à indiquer que les nouveaux éléments dont make a besoin pour compiler votre utilitaire. Par exemple, si vous saisissez make aimer, make commence par rechercher de nouvelles règles que vous auriez ajoutées. Si vous n'en avez fourni aucune, make effectue une recherche dans ses règles intégrées. L'une de ces dernières indique à make qu'il peut lancer l'éditeur de liens (ld) sur un nom de fichier se terminant par .o pour produire le programme exécutable.

Ainsi, la commande make commence par rechercher un fichier nommé aimer.o. Mais elle ne s'arrête pas là. Même si elle trouve le fichier .o, elle comporte d'autres règles lui demandant de s'assurer que le fichier .o est à jour. En d'autres termes, plus récent que le programme source. D'une façon générale, le programme source sur les systèmes Linux est écrit en langage C et son nom de fichier se termine par .c.

Si la commande make trouve le fichier .c (aimer.c dans notre exemple) ainsi que le fichier .o, elle vérifie leurs horodatages respectifs pour s'assurer que le .o est plus récent. Dans le cas contraire ou si o. n'existe pas, elle utilise une autre règle intégrée pour construire un nouveau .o à partir du .c (à l'aide du compilateur C). Le même type de situation se reproduit pour d'autres langages de programmation. Dans tous les cas, le résultat final est que lorsque make a terminé (partant de l'hypothèse qu'elle peut trouver tous les éléments nécessaires), l'exécutable est construit et à jour.

Saisissez ensuite make. Cette commande construit le programme. Autrement dit, make s'exécute, recherche la première cible dans le fichier Makefile et obéit aux instructions indiquées. Le résultat final attendu est la construction d'un programme exécutable.

Dans un second temps il faut compiler le programme, grâce à la directive
make


Make install
Après avoir compilé l'application, il est possible de l'installer

L'installation de l'application doit s'effectuer en tant que superutilisateur (root)

Maintenant, en tant que root, saisissez make install. Cette commande invoque à nouveau make, qui recherche la cible install dans le Makefile et suit les instructions pour installer le programme.

Pour installer l'application, la syntaxe suivante est généralement utilisée :

make install
En cas d'échec lors de la compilation, il faut nettoyer les fichiers makefile ayant été créés automatiquement lors de la compilation avant de recommencer une nouvelle compilation. Cela se fait grâce à la commande :
make clean
Une fois toutes ces étapes franchies, votre programme devrait être exécutable et se trouver soit dans le répertoire spécifié lors de l'installation, ou bien généralement dans /usr/local/nom_du_programme.


UN EXEMPLE DE COMPILATION DE SOURCES

Rien à faire, vous n'arrivez pas à trouver un seul paquet ou même alien ne vous aide pas pour installer votre programme... il va falloir avoir recours à l'installation du programme à partir du code source...
il se présente généralement sous la forme d'un fichier compressé (.tar.gz ou .tar.bz2).

Cependant, la plupart des nouveaux arrivants sous linux se précipitent sur des programmes très compliqués à installer supposant l'installation préalable d'un grand nombre de paquets dits "de développement" du type toto-dev, toto-devel, ou libtoto, sans compter toutes les dépendances tordues qui sont éventuellement nécessaires
Nous allons ici faire l'installation simple d'un programme ne dépendant que d'un minimum de chose pour prendre en main la procédure d'installation.


PROGRAMMES NECESSAIRES A LA COMPILATION

Pour l'exemple, et voir si on a bien compris la procédure, nous allons installer lynx qui est un navigateur internet en mode console. Comme il s'agit d'un programme relativement simple (mode console), il ne dépend que de peu de choses. Mais puisqu'il s'agit du code source du programme, il nous faudra au moins un compilateur! (qui va "traduire" les lignes de codes vers un exécutable).
Pour lynx, il s'agit de gcc
Pour vérifier que vous l'avez, taper
which gcc

Si vous récupérez quelquechose comme
/usr/bin/gcc
, vous avez bien gcc
Sinon, si vous avez suivi ce qui se fait au dessus, et suivant votre distribution, vous pouvez utiliser
urpmi gcc

LA COMPILATION !

Le but est ici de vous fournir (avec des explications) toutes les étapes nécessaires à la compilation du programme, en partant de l'hypothèse que vous possédez tous les programmes, compilateurs et autres nécessaires.
Commencons par récupérer le code source du programme qui nous intéresse.
lynx.isc.org/release/lynx2.8.5.tar.bz2 pour l'archive au format .tar.bz2
et on la télécharge dans /home/toto/ (si l'utilisateur s'appelle toto => à remplacer par votre nom d'utilisateur! si vous ne le connaissez pas,
ls -l /home
vous fournira une liste d'utilisateurs : a vous de remplacer "toto" par le bon!)
Ensuite, on ouvre une fenetre de terminal, et on se déplace dans /home/toto, en tant qu'utilisateur normal!! (toto, et pas le super utilisateur root)
cd /home/toto

ls -rtl
: vous verrez apparaitre dans la liste (sans doute parmi les dernieres positions, le fichier "lynx2.8.5.tar.bz2". Comme on l'a déja dit, il s'agit d'une archive, comme un .zip ou un .rar : il faut donc en extraire le contenu. Pour cela, on utilise la commande tar (cf www.commentcamarche.net/tutlinux/linrpm.php3)
tar xvfj lynx2.8.5.tar.bz2

vous devez voir défiler des lignes, qui correspondent aux fichiers qui sont extraits de l'archive
.
.
.
lynx2-8-5/test/
lynx2-8-5/test/tabtest.html
lynx2-8-5/test/iso8859-1.html
lynx2-8-5/test/TestComment.html
lynx2-8-5/test/ISO_LATIN1_test.html
lynx2-8-5/test/README.txt
.
.
.

ici, vous voyez que tous ces fichiers ont pour nom un nom qui commence par lynx2-8-5/ : il s'agit du dossier dans lequel sont effectivement extraites les sources.
Déplacons nous vers ce dossier :
cd lynx2-8-5/
et regardons ce qu'il contient :
ls

Nous voyons plein de fichiers, dont les plus important sont : configure?? Makefile?? NON!! README et INSTALLATION bien sur!!
Je vous épargne leur lecture ici, mais pour compiler un programme plus complexe, cela peut s'avérer utile et nécessaire!
Normalement, la premiere étape de la compilation correspond a la configuration grace a ./configure : ici, pour éviter de reinstaller lynx qui est peut etre deja installé, et pour vérifier que ce qu'on va faire fonctionne correctement, nous allons creer un dossier "Install_test" dans lequel nous installerons la version compilée.
mkdir Install_test

et on va configurer en précisant que ce répertoire sera le répertoire où on installera notre nouveau programme grâce à l'option --prefix= dans ./configure :
./configure --prefix=/home/toto/lynx2-8-5/Install_test
(en prenant soin de remplacer "toto" par le bon utilisateur)
le système vérifie alors que le compilateur est présent, d'autes options, ou facon de compiler/installer le programme, mais il vous dit tout! (ce qui s'avère utile lors d'un plantage : on peut alors savoir ce qui manque à la configuration)
Une fois configuré, il faut compiler le programme grâce à make
make

il défile tout un tas de lignes de codes correspondant aux fichiers compilés, aux options de compilation utilisées, etc etc
il reste à installer le programme : pour cela, il faut les privilèges de super utilisateur
su
xxxxxx <-- votre mot de passe "root"

et enfin :
make install

A ce stade, si tout s'est bien passé, votre programme est installé dans /home/toto/lynx2-5-8/Install_test/bin et vous pouvez le lancer par :
/home/toto/lynx2-8-5/Install_test/bin/lynx

votre terminal se colore, et vous arrivez dans un menu un peu bizarre "Lynx source distribution and potpourri". Touche "q" pour quitter : c'est gagné!!! vous avez compilé et installé votre programme! Nous n'apprendrons pas a nous en servir ici...
si vous souhaitez qu'il soit installé sur le systeme et que vous puissiez le lancer en ne tapant que "lynx", il vous faudra tout reprendre en n'utilisant PAS l'option --prefix=

Pour effacer le programme :
cd /home/toto/lynx2-8-5/
make uninstall
make clean


DESINSTALLATION

Pour l'installation par compilation, se pose le probleme de la desinstallation et donc de la mise à jour du logiciel.
  • En effet, deux methodes sont possibles:


- la commande "make uninstall": elle n'est possible que si d'un part, on a conservé le repertoire servant à la compilation (pour reprendre l'exemple précédent, il s'agit du repertoire /home/toto/lynx2-8-5/ ) et d'autre part que la desinstallation soit prévu c'est à dire des regles pour fabriquer la cible "uninstall" (make uninstall").

- supprimer les fichiers générés par l'installation via le "make install": cela devient compliquer dans la mesure ou il faut repérer l'emplacement de ces fichiers générés. C'est alors la seule solution si aucune regle pour le "uninstall" n'a été prévu.
  • Pour palier à cette difficulté, il existe la commande \"checkinstall\".

Son atout est de permettre l'installation d'un logiciel compilé à la maniere d'une installation par paquetage: le logiciel compilé se retrouve alors dans la liste des logiciels dans son gestionnaire de paquetages. D'ailleurs, un paquetage correspondant à notre logiciel compilé, au format de celui de la distribution (*.deb pour les Debian-like ou *.rpm pour les distributions à base de rpm) est alors généré dans le repertoire de compilation.
  • Marche à suivre: il suffit d'opter pour la commande \"checkinstall\" au lieu de la commande \"make install\".

On suit alors la séquence:

./configure -> make -> checkinstall

au lieu de la classique:

./configure -> make -> make install

Il est alors demandé de fournir diverses informations (création ou non de la doc correpondante, commentaires) afin de finaliser la création du paquetage correpondant.

A noter que checkinstall reconnait le format de paquetage à générer dans le cas d'une Ubuntu. En regle generale, pour une Fedora par exemple, il est demandé de préciser le format du paquetage à créer.
  • Il devient alors simple de supprimer un logiciel compilé:
-pour les distrib à base de rpm:
rpm -e paquetage_de_mon-logiciel_compilé

Pour plus de précision voir :
-le site de checkinstall: asic-linux.com.mx/~izto/checkinstall/index.php
-le tutoriel sur trustonme.net: www.trustonme.net/didactels/117.html

ASTUCES - CONSEILS


  • D'un point de vue plus personnel, je vous conseillerais de télécharger et décompresser vous différentes sources de programmes dans un répertoire que vous aurez créé, par exemple dans /usr/src/progperso

mkdir /usr/src/progperso
  • Pour les programmes que vous ne souhaitez que \"tester\" et desinstaller dans la foulée, l'idée du --prefix semble intéressante, mais dans l'ensemble, à éviter sauf cas de force majeure (parfois il est nécessaire d'ajouter --prefix=/usr)
  • Pour vous refaire la main, vous pouvez tenter l'installation de bc, une calculatrice en mode console (encore plus simple a installer que lynx)

- telecharger www.fr.linuxfromscratch.org/view/blfs-5.0-fr/general/bc.html : c'est un tar.gz : l'enregistrer dans votre dossier /usr/src/progperso par ex
cd /usr/src/progperso
tar xvzf bc-1.06.tar.gz
cd bc-1.06
mkdir install_perso
./configure --prefix=/usr/src/progperso/install_perso
make
su
xxxxxx
make install

Puis
exit
/usr/src/progperso/install_perso/bin/bc

exit pour quitter le mode root, la ligne suivante pour lancer votre programme bc

- avec checkinstall:
Si on substitue alors la commande "make install" par "checkinstall", alors on nous demande s'il faut générer la doc correspondante à notre logiciel:
The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]: n

Personnellement, je reponds non, mais cela n'a pas vraiment d'importance dans le fonctionnement de notre logiciel.

Il vient ensuite une demande d'informations pour ce logiciel:
Installing with "make install"...

========================= Installation results ===========================
[...]
======================== Installation succesful ==========================

Copying files to the temporary directory...OK

Striping ELF binaries and libraries...OK

Compressing man pages...OK

Building file list...OK


Please write a description for the package.
End your description with an empty line or EOF.
>>une calculatrice en mode console
>>

Cette description concerne les informations affichées par le gestionnaire de paquetage à propos du paquetage. Là on peut d'indiquer par exemple qu'il s'agit d'un calculatrice en mode console.
On peut d'ailleurs noter que "checkinstall" passe par un "make install" pour génrer notre futur paqueatage.

This package will be built according to these values:

0 - Maintainer: [ root@localhost.localdomain ]
1 - Summary: [ une calculatrice ]
2 - Name: [ bc-1.06 ]
3 - Version: [ 1.06 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ checkinstall ]
7 - Architecture: [ i386 ]
8 - Source location: [ bc-1.06 ]
9 - Alternate source location: [ ]

Enter a number to change any of them or press ENTER to continue:

On peut ensuite modifier l'entete du futur paquetage en verifiant que les informations sont exactes.

*****************************************
* Debian package creation selected ***
*************************************

Building Debian package...OK

Installing Debian package...OK

Erasing temporary files...OK

Deleting temp dir...OK

**********************************************************************

Done. The new package has been installed and saved to
/usr/src/progperso/bcbc-1.06/bc-1.06_1.06-1_i386.deb

You can remove it from your system anytime using:

dpkg -r bc-1.06



**********************************************************************

Dans le cas d'une Debian-like (ici Ubuntu 5.10), on obtient alors le paquetage bc-1.06_1.06-1_i386.deb qui est créé dans le repertoire de compilation.
Et comme indiqué, il suffit d'un "dpkg -r bc-1.06" pour facilement desinstaller notre calculatrice.

A noter que dans le cas, par exemple, de la Fedora, le paquetage n'est pas automatiquement installé. De plus; celui-ci se retrouve lors de sa création dans le repertoire /usr/src/redhat/RPMS/architecture/.