Deprecated: Assigning the return value of new by reference is deprecated in /srv/www/u-classroom.net/wiki/inc/parserutils.php on line 208
Deprecated: Assigning the return value of new by reference is deprecated in /srv/www/u-classroom.net/wiki/inc/parserutils.php on line 211
Deprecated: Assigning the return value of new by reference is deprecated in /srv/www/u-classroom.net/wiki/inc/parserutils.php on line 421
Deprecated: Assigning the return value of new by reference is deprecated in /srv/www/u-classroom.net/wiki/inc/parserutils.php on line 594
Deprecated: Function split() is deprecated in /srv/www/u-classroom.net/wiki/inc/auth.php on line 154
Warning: Cannot modify header information - headers already sent by (output started at /srv/www/u-classroom.net/wiki/inc/parserutils.php:208) in /srv/www/u-classroom.net/wiki/inc/auth.php on line 245
Warning: Cannot modify header information - headers already sent by (output started at /srv/www/u-classroom.net/wiki/inc/parserutils.php:208) in /srv/www/u-classroom.net/wiki/inc/actions.php on line 370
Warning: Cannot modify header information - headers already sent by (output started at /srv/www/u-classroom.net/wiki/inc/parserutils.php:208) in /srv/www/u-classroom.net/wiki/inc/actions.php on line 374
====== Installation d'une application à partir des sources ======
Au premier abord, on pourrait se demander quel est l'intérêt de l'installation d'une application à partir des sources alors que l'on peut installer les applications très simplement grâce aux paquets de la distribution que vous utilisez.
Tout d'abord, toutes les applications ne sont pas disponibles dans les dépots des distributions, ou les paquets peuvent ne pas être à jour...
Mais une compilation à partir des sources permet aussi de personnaliser votre installation : vous pouvez souvent activer ou désactiver des options pour améliorer les performances, ajouter des fonctionnalités intéressantes, retirer des fonctionnalités qui ne vous servent à rien; bref, faire du sur mesure.
Cependant, ceci n'est pas sans risques : il n'est pas conseillé (pour le commun des mortels) d'installer à partir des sources des parties clé du système comme le serveur X, les principales bibliothèques, ou des pilotes vitaux pour le système...
Il vaut mieux se contenter de compiler des applications ou des bibliothèques qui ont peu ou pas d'influence sur le reste du système.
Nous allons nous intéresser à la compilation de [[http://irssi.org|Irssi]], un client IRC en console.
===== Premier pas : les sources =====
Les sources sont souvent le seul mode de distribution d'une application par ses développeurs. Lors de chaque mise à jour, ils mettent à disposition du public une archive contenant le code source. Suivant le language utilisé pour développer l'application, vous allez devoir compiler ces sources puis les installer.
Il est souvent utile de consulter la documentation fournie avec les sources, qui explique dans le cas idéal comment les utiliser.
Les sources dont disponibles sur les sites Internet officiels des programmes, évitez de les prendre ailleurs, quelqu'un pourrait les avoir modifiées de façon malveillante.
Enfin, pour la seule et unique fois de votre vie vous allez faire une entorse à cette règle et prendre les sources ici : http://u-classroom.net/files/2009-02-17/sources/irssi-0.8.12.tar.gz. Ceci nous permettra d'être sûr que tout le monde utilise la même version.
Placez cette archive dans un dossier Sources dans votre répertoire personnel et extrayez les. Puis ouvrez un terminal dans le dossier irssi-0.8.12 créé :
cd ~/Sources/irssi-0.8.12
===== Deuxième pas : configurer les sources =====
Note : à part lorsque c'est mentionné, les manipulations sont à faire en tant qu'utilisateur, non en tant qu'administrateur (root pour les intimes).
Avant de lancer une compilation, l'étape de configuration permet d'adapter les sources à votre système, de vérifier que vous avez bien toutes les dépendances, et de régler les options de configuration dont nous avons parlé en introduction.
Les dépendances sont la plupart du temps des bibliothèques que l'application à compiler utilise. Il ne suffit pas d'avoir installé ces bibliothèques, il faut aussi avoir la bonne version et installer les headers de compilation de ces bibliothèques.
Les headers contiennent en quelque sorte la liste des fonctions assurées par la bibliothèque associée et sont utilisées par le compilateur.
S'ils ne sont pas présents l'étape de configuration échouera. Dans Ubuntu et Debian, ces headers sont disponibles dans des paquets dont le nom fini par -dev, dans des paquets -devel sous red hat et similaire.
Un script 'configure' est fourni dans les sources. Il permet entre autre de tester si les dépendances sont bien installées. Il s'exécute de cette manière :
./configure
==== Hard deps ====
Ce script s'arrêtera dès qu'une dépendance nécessaire n'est pas trouvée, en vous donnant un message d'erreur. Ce script est construit grâce aux "autotools" (en particulier "autoconf"), à partir du fichier configure.in (parfois appelé configure.ac, ou configure.in.in, ou encore configure.ac.in). Pour les développeurs, les autotools fournissent un langage de test générique permettant de configurer les sources sur à peu près n'importe quel système (linux, BSD, windows, et une multitude d'unix).
====== FIXME ======
Erreurs possibles :
* can't find gawk
=>
* configure: error: no acceptable C compiler found in $PATH
=> installer un compilateur, gcc ici
* configure: error: C compiler cannot create executables
=> installer libc6-dev (erreur cryptique)
* configure: error: GLIB is required to build irssi.
=> installer libglib2.0-dev
* configure: error: Terminfo/termcap not found - install ncurses-devel package
=> installer libncurses5-dev
* libperl-dev pour le support perl
====== STOP FIXME ======
Une bibliothèque fournit un essemble de fonctions dont le seul but est d'être utilisées par un logiciel (ou une autre bibliothèque). Dans le cas de langages compilés, ces bibliothèques fournissent plusieurs éléments :
* son code compilé, le plus souvent sous forme de bibliothèque partagée (fichier .so). Ce fichier contient du code exécutable, et est lié au logiciel qui l'utilise. C'est le seul fichier nécessaire à l'exécution d'un programme.
* ses fichiers en-tête (mentionnés tout à l'heure). Ce sont des fichiers (avec extension .h ou .hh pour les langages C et C++) lisibles, qui décrivent les fonctions que propose la bibliothèque. Ces fichiers sont nécessaires à la compilation.
* optionellement, des fichiers d'aide à la compilation, qui ne sont donc pas utiles à l'exécution.
Les distributions possèdent en général un système de packaging qui permet d'installer les fichiers nécessaires à l'exécution et ceux nécessaires à la compilation à partir de paquets différents. C'est pourquoi avoir une bibliothèque installée ne suffit en général pas à pouvoir compiler un logiciel utilisant cette bibliothèque.
De manière générale, sur les systèmes debian, les paquets s'appellent lib(X)-dev ; sous red hat, -devel. apt-cache et yum permettent de rechercher ses paquets.
Sous Debian et ses dérivées (comme Ubuntu), vous pouvez utiliser apt-file pour trouver rapidement les paquets.
Installez le paquet apt-file, et lancez cette commande dans un terminal:
sudo apt-file update
Ceci peut prendre plusieurs minutes. Apt-file est plutôt simple d'usage; par exemple, pour trouver tous les paquets qui parlent de ncurses, on utilise :
apt-file search ncurses
Nous sommes intéressés par les paquets -dev, donc on utilise une règle de tri pour avoit moins de résultats :
apt-file search ncurses | grep "dev"
Parmis les quelques candidates potentiels, on trouve celui qui nous intéresse : "libncurses5-dev".
==== Soft deps ====
Le script 'configure' permet également de spécifier certaines options. Les plus courantes sont le préfixe (où seront installés les données) ou le dossier d'installation des fichiers de configuration.
Souvent, les logiciels proposent en plus d'activer ou désactiver certaines options.
Pour obtenir la liste des options disponibles :
./configure --help
Pour notre exemple, nous allons faire une installation standard, et activer la compilation du bot et du garbage collector (nécessite libgc-dev). Nous allons donc utiliser :
./configure --prefix=/usr --sysconfdir=/etc --with-bot --with-gc
===== Troisième pas : compiler les sources =====
La compilation à proprement parler n'est pas systématiquement nécessaire. Certains langages n'en ont pas besoin (python, perl, php...). Pour les langages compilés (tel que le C utilisé par irssi), l'étape de compilation est en général automatisée à l'aide de l'outil 'make'. Cet outil utilise des fichiers 'Makefile' qui permettent de simplement générer les fichiers binaires à partir des sources. Les Makefile sont tout à fait autonomes, mais dans le cas d'irssi et des logiciels utilisant les autotools, ils sont générés par le script ./configure en utilisant des fichiers Makefile.in. Les données de configuration sont transmises aux Makefile afin d'adapter la compilation au système sur lequel elle se passe et aux options que vous avez données.
Une fois la compilation des sources faite, les fichiers sont liés aux bibliothèques dont ils ont besoin. La conséquence directe de ce lien, est que la suppression d'une bibliothèque de votre système a de forte chance d'empêcher le fonctionnement correct du logiciel qui en a besoin. Contrairement à ce qui se passe avec un système de paquets, les dépendances ne sont pas du tout gérées, c'est à vous d'y faire attention. Cependant, vous pouvez tout à fait supprimer les paquets de développement des bibliothèques après compilation (les paquets -dev ou -devel).
Pour compiler irssi, utilisez simplement :
make
===== Enfin : installer les données générées =====
La dernière étape est l'installation de ce qui a été compilé. Ceci est toujours géré par make et les Makefiles. Notez que pour certains logiciel l'étape d'installation n'est pas nécessaire pour que le logiciel fonctionne correctement (souvent de petits projets).
Notre étape de configuration a défini /usr et /etc comme préfixe et dossier de configuration, nous allons devoir utiliser les droits d'administrateur pour l'installation :
sudo make install
ou
su
make install
===== Désinstallation (pour ceux qui ne sont pas tombés amoureux de Irssi, ils ont tort mais bon...) =====
La désinstallation nécessite le dossier des sources, et les sources doivent être configurées avec les mêmes options que lors de l'installation, en particulier l'option --prefix. Si vous avez accidentellement supprimé le dossier des sources, il suffit donc de retélécharger les sources et de les reconfigurer avec les mêmes options que lors de l'installation.
Pour désinstaller Irssi placez vous à la racine du dossier :
cd ~/Sources/irssi-0.8.12
Et utilisez la commande suivante :
sudo make uninstall
Ceci supprimera tous les fichiers qui ont été installés lors de l'étape précédente. Il ne vous reste plus qu'à supprimer le dossier des sources.
===== Compiler depuis une version en développement =====
Si vous prenez les sources sur le système de révisions (SVN, git, bzr, hg ou autre) d'un projet, il y a de grandes chances pour qu'il n'y ait pas de fichier configure à la racine des sources, mais plutôt un fichier autogen.sh. Ceci est lié à l'autilisation des autotools. En effet, un système de build complet peut se résumer à quelques lignes dans un configure.in, et quelques autres dans les Makefile.am (dans chaque dossier). I lest alors nécessaire de 'bootstrapper' le système, et un script autotools.sh est bien souvent là pour le faire pour vous.
Pour irssi vous pouvez utiliser :
svn checkout http://svn.irssi.org/repos/irssi/trunk/
cd trunk
./autogen.sh
Vous pourrez ensuite configurer et compiler le logiciel comme nous l'avons vu.