Installation d'un logiciel libre

APRIL (Association pour la Promotion et la Recherche en Informatique Libre)

On me demande souvent comment installer un logiciel libre à partir de sources. Compiler soit même un logiciel est pourtant très simple car la plupart des étapes à passer sont les mêmes quelque soit le logiciel à installer.

Le but de ce document est de guider pas à pas le débutant, en essayant d'éviter l'écueil de l'incantatoire, et en lui expliquant sommairement la signification de chacune des manipulations. J'assume cependant que le lecteur ait un minimum de connaissances Unix (de type ls ou mkdir).

Ce guide reste un guide, et pas un manuel de référence. C'est pourquoi un certain nombre de pointeurs sont fournis à la fin afin de répondre aux questions sans réponse. Ce guide est toujours en version béta, j'attend donc avec impatience toute remarque ou correction sur son contenu.


Table des matières
1. Introduction
1.1. Pré-requis
1.2. Compilation
1.2.1. Principe
1.2.2. Les quatre phases de la compilation
1.3. Structure d'une distribution
2. Décompactage
2.1. Archive tar.gz
2.2. Utilisation de GNU Tar
2.3. bzip2
2.4. Just do it !
2.4.1. Le plus simple
2.4.2. Le plus sûr
3. Configuration
3.1. Autoconf
3.1.1. Principe
3.1.2. Exemple
3.1.3. Et si... ça ne marche pas ?
3.2. Imake
3.3. Scripts shells divers
3.4. Autres alternatives
4. Compilation
4.1. Make
4.2. Règles
4.3. Go, go, go !!!
4.4. Explications
4.5. Et si ça ne fonctionne pas ?
5. Installation
5.1. Avec make
5.2. Problèmes
6. Support
6.1. Documentation
6.2. Support technique
6.3. Comment trouver des logiciels libres
7. Remerciements
8. Copyright

1. Introduction

Ce qui différencie un logiciel libre d'un logiciel propriétaire est l'accès aux sources du logiciel.[1] Ce qui implique que les logiciels libres soient généralement distribués sous forme d'archives de fichiers sources. C'est assez déroutant pour le débutant, car l'utilisateur du logiciel doit compiler lui-même les sources du logiciel avant de pouvoir l'utiliser.

Aujourd'hui, il existe des versions pré-compilées de la plupart des logiciels libres existants. L'utilisateur pressé n'a plus qu'à installer le binaire. Cependant, certains logiciels ne sont pas distribués sous cette forme, ou les versions les plus récentes ne sont pas encore distribuées sous cette forme. De plus, si vous utilisez un couple système d'exploitation / architecture exotique, beaucoup de logiciels libres ne seront pas déja précompilés pour vous. Par ailleurs, compiler soi même ses logiciels permet de ne conserver que les options intéressantes ou d'étendre les fonctionnalités du logiciel en appliquant des extensions afin d'obtenir un logiciel répondant parfaitement à ses besoins.

Notons que je ne traiterais pas dans cette documentation de l'installation d'un logiciel à partir de binaires, ce qui devrait être détaillé dans la documentation de votre système d'exploitation (packages .deb, .rpm, ou tarballs de BSD ou de la distribution Slackware).

1.1. Pré-requis

Pour installer un logiciel libre, vous aurez besoin :

  • d'un ordinateur allumé pourvu d'un système d'exploitation,

  • d'un peu d'espace disque,

  • d'un compilateur (généralement C), d'un programme d'archivage (tar),

  • d'une connaissance généraliste du système d'exploitation que vous utilisez,

  • de quoi manger (dans les mauvais cas, ça peut durer longtemps). Un vrai informaticien mange des sandwiches grecs, pas de Mac Donalds,

  • de quoi boire (pour les mêmes raisons). Un vrai informaticien boit du Jolt Cola (pour la caféine), mais à défaut, du Coca suffira,

  • du numéro de téléphone de votre copain bidouilleur qui recompile son noyau toutes les semaines,

  • mais surtout de patience (beaucoup).

Compiler un logiciel libre ne présente généralement pas trop de problèmes, mais si vous n'êtes pas habitué, la moindre anicroche peut vous plonger dans la confusion. Le but de ce document est justement de vous montrer comment vous sortir de ce genre de situation.

1.2. Compilation

1.2.1. Principe

Pour passer d'une forme source à une forme binaire, il est nécessaire d'effectuer une compilation. Cette compilation est généralement effectuée sur des programmes écrits en langage C ou C++ (qui sont les plus répandus dans la communauté du logiciel libre). Certains logiciels libres sont écrits dans des langages ne nécessitant pas de compilation (par exemple Perl ou shell), mais ils ont quand même besoin d'être configurés.

La compilation C est assurée très logiquement par un compilateur qui est généralement gcc, le compilateur libre écrit par le projet GNU. La compilation d'un logiciel entier est une tâche complexe, qui passe par la compilation successive de multiples fichiers sources (il est plus facile pour le programmeur d'isoler les différentes parties de son travail dans des fichiers distincts). Afin de faciliter la tâche, ces opérations répétitives sont effectuées par un utilitaire du nom de make.

1.2.2. Les quatre phases de la compilation

Pour bien comprendre le mécanisme de la compilation (et donc être à même de résoudre des problèmes éventuels), il faut savoir qu'elle s'effectue en quatres phases. Il s'agit d'une conversion progressive (en quatre étapes) d'un texte écrit dans un langage compréhensible par un humain entraîné (langage C par exemple) vers un langage compréhensible par une machine (ou un humain très entraîné). gcc exécutera l'un après l'autre quatre programmes qui se chargeront chacun d'une étape :

  1. cpp: la première étape consiste à remplacer des directives (préprocesseurs) par des instructions C. Typiquement, il s'agit d'insérer un fichier d'en-tête (#include) ou de définir une macro fonction (#define). À la fin de cette phase, un code purement C est généré.

  2. cc1 : cette étape consiste à convertir du C en assembleur. L'assembleur généré est dépendant de l'architecture cible.

  3. as : cette étape consiste à générer du code objet (binaire) à partir d'assembleur. À la fin de cette phase, un fichier se terminant par .o est généré.

  4. ld : cette dernière étape (linkage) assemble (lie) tous les fichiers objets (.o) et les bibliothèques associées, et génère un exécutable.

1.3. Structure d'une distribution

Une distribution de logiciel libre correctement structurée est généralement organisée d'une manière bien précise :

  • un fichier INSTALL, qui décrit la procédure d'installation du logiciel,

  • un fichier README qui contient toutes les informations générales relatives au programme (courte description, auteur, adresse où le télécharger, documentation relative, pointeurs utiles, ...). Si le fichier INSTALL est absent, le fichier README contient généralement une procédure succincte d'installation,

  • un fichier COPYING qui contient la licence ou décrit les conditions de distribution du logiciel. Parfois, un fichier LICENCE est rencontré a la place,

  • un fichier CONTRIB ou CREDITS qui contient une liste de personnes ayant un rapport avec le logiciel (participation active, remarques pertinentes, logiciel tiers, etc.).

  • un fichier CHANGES (ou plus rarement NEWS), qui contient les nouveautés de la version actuelle par rapport à la version précédente,

  • un fichier Makefile (voir la section Make), qui permet de compiler le logiciel (c'est un fichier nécessaire à make). Souvent, ce fichier n'existe pas encore et sera généré lors du processus de configuration,

  • assez souvent un fichier configure ou Imakefile, qui permettra de générer un nouveau fichier Makefile,

  • un répertoire contenant les sources, qui sera généralement celui où le binaire sera stocké une fois la compilation finie. Son nom est généralement src,

  • un répertoire contenant la documentation relative au programme (généralement au format man ou Texinfo), dont le nom est généralement doc,

  • éventuellement un répertoire contenant des données propres au logiciel (typiquement des fichiers de configuration, des exemples de données produites, ou des fichiers de ressources).

Notes

[1]

Ce n'est pas tout à fait vrai car certains logiciels propriétaires fournissent aussi leur code source. Mais à la différence d'un logiciel libre, l'utilisateur final n'a pas le droit de l'utiliser de la manière qu'il désire.