Table des matières
Statut
Cet article a été relu et complété. Le plan est provisoire. Des parties sont incomplètes. Les commentaires sont les bienvenus. Peut-être sera-t-il bon de transférer ici les exemples de la compilation automatisée de l'article sur la gestion des paquets.Intro
Cet article se veut une suite à la partie gestion des paquets logiciels. Il peut être bon aussi de consulter Éléments du système.La compilation des logiciels est parfois nécessaire pour obtenir une version plus récente ou certaines options (optimisation, configuration personnalisée). Typiquement cela est nécessaire pour les logiciels incorporant le support VST via libFST.
La compilation, une fois finie, produira un binaire, et on pourra alors l'installer définitivement sur le système pour l'utiliser. Un plus sera l'obtention de ce binaire sous forme de paquet (.deb ou .rpm) ce qui en rendra la maintenance plus aisée.
Les bases : fichiers source, la compilation
Les programmes sont généralement écrits en C ou en C++ et la succession des instructions constituent le fichier source. Celui-ci est inutilisable tel quel, et demande à être traduit en langage machine à l'aide d'un ensemble d'outils de compilation.On trouve les fichiers sources quand on va sur le site d'un projet informatique comme Ardour 3, où il nous est possible de télécharger l'archive la plus récente. Une fois celle-ci dé-compactée dans un répertoire de travail (généralement /usr/src), il faut s'assurer de certains pré-requis avant de démarrer la compilation.
Les prérequis
Un environnement de compilation fonctionnel
Il vous faut bien sûr qu'un compilateur soit installé et qu'il soit fonctionnel. Cette seule étape peut stopper un débutant qui ne connaît pas le nom des programmes installer. Sous la famille Debian (Ubuntu, 64studio, musix, ...) une commande vous simplifie la vie. Build-essential est en effet un méta-paquet qui se charge d'installer tous les utilitaires nécessaires à la compilation:sudo apt-get install build-essential
Avec les autres distributions, il sera peut-être nécessaire d'installer soit même les différents paquets correspondants (gcc/g++/automake/autotools/etc).. Une liste de ces programmes.
bibliothèques de développement, includes et les headers
Un programme dépend d'autres logiciels pour fonctionner, et cela signifie qu'il faut installer ces programmes, leurs bibliothèques et leurs paquets "dev" (développement).Note: en anglais les bibliothèques se disent libraries, d'où l'extension "-lib" que l'on voit sur beaucoup de dépendances.
Par exemple pour les programmes utilisant jack, il faut au préalable avoir installé jack, libjack et aussi libjack-dev. Ce dernier contient des fichiers headers logés dans /usr/include. Les headers sont des fichiers avec le suffixe .h (ex:AEffect.h, jack.h, glx.h), ils contiennent des déclarations de fonctions.
optionnel: Les sources du noyau
Cette étape ne concerne que la compilation des modules (par exemple les pilotes de cartes graphiques ou audios). Il faut alors regarder sur les dépôts logiciels de sa distribution et installer le paquet "kernel-source" correspondant au noyau (anglais : kernel) utilisé (cat /proc/version
). Il y a aussi parfois un paquet "kernel header".L'installation des sources du noyau, demande une dernière étape. Il faut aller dans
/usr/src
(qui est le répertoire traditionnellement utilisé pour déposer les archives et compiler les logiciels), et vérifier que le répertoire /usr/src/linux
existe. Sous Debian le fait d'installer le paquet source du noyau, ne fait que déposer une archive dans le répertoire en question. Il faut alors décompacter à la main l'archive (ou avec l'utilitaire mc par exemple) et renommer/faire un lien symbolique pour que /usr/src/linux
renvoi aux fichiers sources du noyau que l'on vient d'installer.Les outils et méthodes de compilation
Il existe plusieurs méthodes pour générer un binaire, elles se déroulent selon les mêmes étapes:- Récupération de l'archive source
- Configuration : le système est scanné pour vérifier si un environnement de compilation est présent et fonctionnel. Ensuite, les bibliothèques et leurs fichiers de développement (include et header) sont localisés et testés pour vérifier si leur version est à jour.
- Compilation : l'étape de compilation à proprement parlé.
- Installation : les fichiers obtenus sont copiés dans l’arborescence du système de fichiers et le programme est prêt à être utilisé. En option, il est parfois possible de générer un paquet logiciel.
La méthode "classique" : ./Configure; make; make install
On va l'appeler comme ça car elle est très basique, et ne prend pas toujours en compte l'existence d'un système de gestion de paquets. Cela veut dire que la compilation finie, et lors de l'installation, les fichiers viendront écraser ceux pouvant exister avant, et il n'y aura pas de moyen facile par la suite de se rendre compte quelle version est installée, à moins bien sûr de tenir un compte rendu détaillé. Pour cette raison, il est préférable de garder la variable PREFIX pointant vers/usr/local/
, répertoire spécifiquement dédié aux installations personnalisées. Il faudra juste faire attention qu'une version antérieure du même programme ne se soit pas installée dans /usr/bin
(car sinon la prévalence de /usr sur /usr/local vous jouera des tours).Configure
L'étape du configure consiste à lancer ce script qui est présent à la base du répertoire de l'archive :./configure
On peut personnaliser certaines options. D'abord en obtenir une liste :
./configure -help
Exemple :
./configure PREFIX=/usr
va changer le répertoire d'installation (à présent /usr). À noter que par défaut PREFIX est souvent
/usr/local
.Les erreurs lors de la configuration :
- Outil de compilation non trouvé ou de version trop ancienne. C'est très fréquent sur une nouvelle distribution, il faut installer de nombreux logiciels de compilation qui ne sont pas installés par défaut. Lisez bien les messages d'erreur, repérer le nom du fichier manquant et faite une recherche sur les paquets de votre distribution (voire même sur les noms de fichiers, ex:
dpkg -S nom_du_fichier
). - Bibliothèque manquante : cela peut être soit le paquet binaire simple soit le paquet -dev associé.
Si le script de configuration s'est terminé sans erreur, il est possible alors de lancer la compilation.
La compilation
On lance la compilation en tapant make. Cette commande traite le fichier makefile (ou Makefile) qui a été généré lors de la précédente étape. Celui-ci intègre différentes procédures correspondant à la compilation et aussi à d'autres tâches comme l'installation ou le nettoyage (make clean
) des résidus entre deux essais de compilation.Les erreurs lors de la compilation
En théorie, il ne devrait pas y en avoir puisque la précédente étape est sensée signaler tout manquement possible.
Il se produit cependant parfois différents types de problème:
- incompatibilité avec les nouveaux outils de compilation (par exemple la version gcc 4.0 installée refuse de traiter des instructions du programme qui pourtant passe avec gcc 3.2).
- fonction non trouvée: il arrive que le script de configuration oublie de tester la présence de certains bibliothèques annexes. Il faut alors faire des recherches, cette fois ci avec Google (ou autre moteur de recherche) car il ne s'agit pas d'un fichier contenu sur votre distribution mais d'une fonction en langage C dont il faut découvrir à quelle bibliothèque elle appartient, et installer le paquet-dev correspondant.
- outil manquant: même chose, parfois une commande n'est pas trouvée, et elle est utilisée lors de la compilation. Il faut faire une recherche sur les programmes contenus dans les paquets logiciels et installer celui la contenant.
Installation
Si la compilation s'est bien passée il est possible de passer directement à la dernière étape.make install
Cela va copier tous les fichiers dans l'arborescence, et le programme est prêt à être utilisé. S'il s'agissait d'une bibliothèque, n'oubliez pas de taper ldconfig qui mettra à jour l'état du système.
Si après l'installation votre programme ne se lance pas, vérifiez son emplacement: son chemin est-il compris dans la variable PATH ?
Dernière remarque, les fichiers sont installés et répartis sans que l'on sache trop où (
/usr/share
, /usr/lib/
, /usr/bin
, etc). Dans un mois ou deux, saurez-vous encore que vous aviez installé telle lib ou tel logiciel ? Ici le système de paquet logiciels est nié, l'installation pourrait même écraser des fichiers déjà existants provenant d'un paquet.À noter aussi que cette méthode brute installe d'un coup ce qui est commodément divisé en 2 éléments avec les paquets, à savoir un paquet normal et un paquet "dev".
La méthode classique évoluée avec checkinstall
On va l'appeler ainsi car la seule différence avec les 3 étapes de la méthode classique et que, au lieu d'installer avecmake install
, nous utilisons la commande checkinstall (bien entendu, ceci en super utilisateur). Celle ci va essayer de générer un paquet logiciel (.deb ou .rpm), et l'installer. La différence est que celui-ci apparaîtra dans la liste des paquets installés par votre gestionnaire (ex: synaptic). Il sera plus aisé par la suite de le désinstaller, ou de vérifier quels fichiers sont effectivement installés et leur emplacement.Pour pouvoir utiliser checkinstall, il faut que cet outil soit installé, il doit exister un paquet sur toutes les distributions. Et autre condition d'importance, il faut que les programmeurs aient prévu que vous recourriez à son emploi. Il y a certains projets qui ne le permettent pas et seule la méthode classique fonctionnera alors.
Dans le cas où cela est possible, par exemple avec le séquenceur MusE, une fois la compilation initiée avec make terminée, taper simplement checkinstall avec l'option correspondante à votre système (-D pour Debian, -R Fedora, -S Slackware). L'outil va demander de renseigner le nom du "mainteneur" ou de la version du logiciel, il est en général possible de laisser les champs libres. Une fois terminé ce questionnaire, le paquet généré est automatiquement installé. Prudence donc car avant de lancer checkinstall, il faut vérifier si un paquet antérieur appartenant à la distribution n'est pas déjà installé. Et nous arrivons là à une conclusion définitive sur checkinstall, c'est une amélioration par rapport à la méthode classique car on obtient bien un paquet qui est visible dans la liste des paquets installés (il y a une catégorie checkinstall qui apparaît dans Synaptic), mais l'on constate bien vite qu'aucune information n'apparaît quand aux dépendances. Bref nous avons les mérites de la maintenance facilitée, mais pas les avantages liés à un système de gestion de paquets, vérifiant, par exemple, les conflits avec d'autres paquets. La solution idéale serait alors d'oublier ces méthodes de compilation et d'utiliser la méthode la plus évoluée qui est la génération automatique de paquet que nous verrons en dernière partie.
La méthode SCONS
Cette "méthode" reprend toujours les 3 étapes précédentes mais celles-ci sont encadrées différemment. On utilise la commande scons pour à la fois configurer et compiler le logiciel. À noter que cette méthode est applicable uniquement si les programmeurs ont prévu son emploi, un peu comme checkinstall, il faut alors se référer au fichier README ou INSTALL pour prendre connaissance des détails. Il faut aussi bien sûr installer scons, un paquet doit exister sur votre distribution.Un exemple de cette méthode est donné dans l'article Ardour 2 - compilation ou dans la page d'installation compilation d'hydrogen.
La méthode WAF
Cette nouvelle méthode WAF est utilisée par de nombreux logiciels : Ardour 3 par exemple, et de plus en plus de logiciels ayant trait au consortium LinuxAudio.Cette méthode utilise le même principe des 3 étapes :
Configuration :
./waf configure
Compilation :
./waf
Installation :
sudo ./waf install
Version CVS ou SVN
CVS est un outil permettant aux développeurs de gérer l'évolution du développement conjoint du logiciel en contrôlant les versions de chaque fichier source.La version CVS d'un logiciel fait référence à la toute dernière version, celle-la même qui est encore en train d'être modifiée par les différents programmeurs en charge du projet. Il existe des commandes permettant de se logger au serveur CVS du projet et de télécharger l'ensemble des fichiers sources. Certaines étapes supplémentaires sont nécessaires avant de pouvoir compiler quoi que ce soit, c'est le travail des outils "autobuilds".
SVN est un outil très similaire à CVS.
Génération automatisée des paquets
Comme nous l'avons vu succinctement dans le premier article sur la gestion des paquets, il existe des commandes pour automatiquement construire des paquets binaires totalement compatibles avec sa distribution. À vrai dire c'est comme cela que sont générés les paquets binaires que nous utilisons couramment sur nos distributions. Il faut comprendre aussi que ce travail est réalisé en amont par des personnes travaillant pour ces mêmes distributions ( Debian / Mandriva / Ubuntu ) et sont donc différentes des programmeurs des logiciels.Comme ces derniers ne visent pas une distribution en particulier, quand on télécharge une archive depuis leur site, la méthode de compilation offerte est souvent assez générique, et ne permet donc pas d'obtenir un paquet logiciel totalement intégrable. Il faut donc un travail supplémentaire pour encapsuler ces archives dans des paquets-sources, qui eux seront compilable avec une seule commande.
L'intérêt de pouvoir construire un paquet de la sorte est principalement la personnalisation (ex: passer des options lors de la compilation). Il est peut-être possible de cette façon d'importer un paquet provenant d'une branche instable vers une branche stable (ex: Debian), chose qui ne serait pas possible directement avec le paquet binaire.
On peut même imaginer importer des paquets entre différentes distributions cousines (ex: basées sur Debian, UbuntuStudio, 64Studio, ... ), pourvu que les dépendances soient les mêmes (autrement, il faut éditer le fichier qui encadre la génération du paquet).
debian
Sous Debian, il suffit d'ajouter une référence à un dépôt contenant les fichiers sources dans le fichier "sources.list". Ensuite la commande apt-build s'utilise comme apt-get.apt-build puredata
rpm
(à compléter)gentoo
Sous Gentoo, il n'y a bien-sûr pas d'autres moyens de procéder pour installer un paquet car cette distribution privilégie la compilation (il faut savoir qu'elle n'empêche pas l'usage des paquets binaires mais ce n'est pas la philosophie première, des projets de dépôts binaires existent).emerge puredata
Commentaires
Les développeurs pensent à vous ! Quand vous télécharger des sources-logiciel, vous pouvez lire les fichiers dont les noms sont en majuscules (README, INSTALL, NEWS, ...).Ce sont des fichiers que les développeurs destinent aux humains et ils contiennent plusieurs informations importantes dont les informations d'installation.
Lors de la prochaine mise à jour de cet article :
- ajouter une explication et un exemple de :
ldd jackd (dépendance des librairies)
- pkg-config : cet utilitaire gère les librairies, c'est lui qui dit si elle est présente ou non dans le système. Et si lui même n'est pas là, il ne peut rien dire...
[+]