Linux-Mandrake:
Guide de l'utilisateur
et Manuel de référence

MandrakeSoft

 
 
Janvier 2000
http://www.linux-mandrake.com


Suivant : Les utilitaires en ligne de commande
Précédent : Compilation et installation de nouveaux noyaux
Retour

(Retour à la table des matières)

Chapitre 1 : Installation d'un logiciel libre


On me demande souvent comment installer un logiciel libre à partir des sources. Compiler soi-même un logiciel est pourtant très simple, car la plupart des étapes à passer sont les mêmes, quel que 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. Je suppose cependant que le lecteur possède un minimum de connaissances Unix (de type ls ou mkdir).

Ce guide n'est qu'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 demeurées sans réponse. Ce guide est probablement perfectible, j'attends donc avec impatience toute remarque ou correction sur son contenu.

Introduction

Ce qui différencie un logiciel libre d'un logiciel propriétaire, c'est l'accès au code source du logiciel[27]. Cela implique que les logiciels libres sont 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 utiliser le logiciel.

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 bien 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.

Pré-requis

Pour installer un logiciel libre, vous aurez besoin:

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.

Compilation

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, notamment dans le monde Unix). Certains logiciels libres sont écrits dans des langages ne nécessitant pas de compilation (par exemple Perl ou le 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 (http://www.gnu.org/). 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, pour diverses raisons). Afin de faciliter la tâche, ces opérations répétitives sont effectuées par un utilitaire du nom de make.

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é (le langage C par exemple) vers un langage compréhensible par une machine (ou un humain très entraîné, et encore, dans de rares cas). GCC exécutera l'un après l'autre quatre programmes qui se chargeront chacun d'une étape:

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:

Décompactage

Archive tar.gz

La norme[28] pour la compression sous Unix est le format gzip, développé par le projet GNU, et considéré comme un des meilleurs outils de compression généralistes.

gzip est souvent associé à un utilitaire nommé tar. tar est un rescapé des temps préhistoriques où les informaticiens stockaient leurs informations sur des bandes magnétiques. Aujourd'hui, les disquettes et les CD-ROM ont remplacé les bandes magnétiques, mais tar est toujours utilisé pour créer des archives. Il est par exemple possible de concaténer (mettre à la suite les uns des autres) tous les fichiers d'un répertoire dans un seul fichier grâce à tar. Ce fichier peut ensuite être facilement compressé à l'aide de gzip.

C'est pourquoi de nombreux logiciels libres sont disponibles sous la forme d'archives tar, compressées avec gzip. Leur extension est donc .tar.gz (ou encore, sous forme abrégée, .tgz).

Utilisation de GNU Tar

Pour décompresser cette archive, on peut utiliser gzip, puis tar ensuite. Mais la version GNU de tar (tar) permet d'utiliser gzip « à la volée », et ainsi de décompresser une archive de manière transparente, sans nécessiter l'espace disque supplémentaire.

L'utilisation de tar est incantatoire:

tar <options de fichier> <fichier en .tar.gz> [<fichiers>]

L'option <fichiers> est facultative. Dans le cas où elle est omise, le traitement s'effectuera sur toute l'archive. Si vous voulez extraire le contenu d'une archive .tar.gz, alors vous n'avez certainement pas besoin de spécifier cet argument.

Par exemple:

$ tar xvfz guile-1.3.tar.gz
-rw-r--r-- 442/1002      10555 1998-10-20 07:31 guile-1.3/Makefile.in
-rw-rw-rw- 442/1002       6668 1998-10-20 06:59 guile-1.3/README
-rw-rw-rw- 442/1002       2283 1998-02-01 22:05 guile-1.3/AUTHORS
-rw-rw-rw- 442/1002      17989 1997-05-27 00:36 guile-1.3/COPYING
-rw-rw-rw- 442/1002      28545 1998-10-20 07:05 guile-1.3/ChangeLog
-rw-rw-rw- 442/1002       9364 1997-10-25 08:34 guile-1.3/INSTALL
-rw-rw-rw- 442/1002       1223 1998-10-20 06:34 guile-1.3/Makefile.am
-rw-rw-rw- 442/1002      98432 1998-10-20 07:30 guile-1.3/NEWS
-rw-rw-rw- 442/1002       1388 1998-10-20 06:19 guile-1.3/THANKS
-rw-rw-rw- 442/1002       1151 1998-08-16 21:45 guile-1.3/TODO
...

Parmi les options à passer à tar:

bzip2

Un format de compression nommé bzip2 tend en ce moment à remplacer gzip. bzip2 produit des archives de taille plus petite que gzip, mais n'est pas encore une norme de fait. On trouve donc depuis peu des archives à l'extension .tar.bz2.

bzip2 s'utilise de la même manière que gzip par le biais de la commande tar. Il suffit de remplacer la lettre z par la lettre y. Par exemple:

$ tar xvfy toto.tar.bz2

Certaines distributions utilisent (ou ont utilisé) à la place l'option I:

$ tar xvfI toto.tar.bz2

Une autre possibilité (qui semble être plus portable, mais plus longue à taper!):

$ tar --use-compress-program=bzip2 -xvf toto.tar.bz2

Précisions qu'il est nécessaire que bzip2 soit installé et inclus dans la variable 'PATH' avant que vous n'exécutiez tar.

C'est tout simple!

Le plus simple

Maintenant que vous êtes prêt à décompacter l'archive, n'oubliez pas de le faire en tant qu'administrateur (root). En effet, vous allez avoir besoin de faire des manipulations qu'un simple utilisateur ne peut faire, et même si ce n'est pas le cas de toutes ces manipulations, il est plus facile d'agir en tant que root pendant toute la durée de l'opération.

Commencez par vous rendre dans le répertoire /usr/local/src, et copiez l'archive dans ce répertoire. Cela vous permet de retrouver à tout moment l'archive si vous perdez le logiciel installé. Si vous n'avez pas beaucoup d'espace disque, alors sauvegardez l'archive sur disquette après avoir installé le logiciel, ou effacez-la, mais soyez sûr de pouvoir la retrouver sur le réseau à tout moment.

Normalement, le décompactage d'une archive tar devrait créer un nouveau répertoire (détail dont vous pouvez vous être assuré grâce à l'option t). Rendez-vous maintenant dans ce répertoire, vous êtes prêt à continuer.

Le plus sûr

Le système Unix (dont font partie GNU/Linux et FreeBSD) est un système sécurisé. Cela signifie que les utilisateurs normaux ne peuvent pas effectuer des opérations qui mettraient le système en danger (comme par exemple formater un disque), ni altérer les fichiers des autres utilisateurs. Dans la pratique et en particulier, cela immunise aussi le système contre les virus.

En revanche, l'utilisateur root a le droit de tout faire, y compris d'exécuter un programme malicieux (comme un virus). Disposer du code source est une garantie de sécurité face aux virus, mais vous avez tout à fait le droit d'être paranoïaque[29].

L'idée consiste à créer un utilisateur dédié à l'administration (free ou admin par exemple) par le biais de la commande adduser. Ce compte devra avoir le droit d'écrire dans le répertoire /usr/local/src ainsi que dans les répertoires /usr/local/bin, /usr/local/lib et toute l'arborescence de /usr/man (il se peut qu'il ait également besoin de copier des fichiers ailleurs). Pour cela, je vous recommande soit de rendre cet utilisateur propriétaire des répertoires nécessaires, soit de créer un groupe pour lui, et de rendre ces répertoires accessibles en écriture pour ce groupe.

Une fois que ces précautions sont prises, vous pouvez effectuer les manipulations décrites dans la section 72.0.

Configuration

Un intérêt purement technique du fait de disposer des sources est le portage du logiciel. Un logiciel libre développé pour un Unix est utilisable sur tous les Unix existants (libres ou propriétaires), avec cependant quelques modifications. Ceci implique une configuration du logiciel juste avant la compilation.

Il existe plusieurs systèmes de configuration, il va falloir utiliser celui que l'auteur du logiciel a prévu (parfois, plusieurs sont au programme). Généralement, vous pouvez:

Autoconf

Principe

Autoconf permet de configurer correctement un logiciel. Il crée les fichiers nécessaires à la compilation (par exemple, Makefile), et modifie parfois directement les sources (comme par le biais d'un fichier config.h.in).

Le principe d'Autoconf est simple:

Exemple

Un exemple d'utilisation d'Autoconf:

$ ./configure
loading cache ./config.cache
checking for gcc... gcc
checking whether the C compiler (gcc  ) works... yes
checking whether the C compiler (gcc  ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for main in -lX11... yes
checking for main in -lXpm... yes
checking for main in -lguile... yes
checking for main in -lm... yes
checking for main in -lncurses... yes
checking how to run the C preprocessor... gcc -E
checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include
checking for ANSI C header files... yes
checking for unistd.h... yes
checking for working const... yes
updating cache ./config.cache
creating ./config.status
creating lib/Makefile
creating src/Makefile
creating Makefile

Si on veut avoir un peu plus de contrôle sur ce qu'engendre la commande configure, on peut lui passer des options via la ligne de commande ou des variables d'environnement. Exemple:

$ ./configure --with-gcc --prefix=/opt/GNU

ou encore (sous Bash):

$ export CC=`which gcc`
$ export CFLAGS=-O2
$ ./configure --with-gcc

ou:

$ CC=gcc CFLAGS=-O2 ./configure

Et si... cela ne fonctionne pas?

Typiquement, il s'agit d'une erreur de type configure: error: Cannot find library guile (« configure: erreur: je n'arrive pas à trouver la bibliothèque guile ») (cela couvre la plupart des erreurs du script configure).

Clairement, le script configure n'a pas réussi à trouver une bibliothèque (dans notre exemple, la bibliothèque guile). Le principe est que le script configure compile un petit programme de test qui utilise cette bibliothèque. S'il n'arrive pas à le compiler, c'est qu'il n'arrivera pas à compiler le logiciel. D'où une erreur.

Si vous ne comprenez pas le message d'erreur stocké dans le fichier config.log, n'hésitez pas à demander aide et assistance à la communauté du logiciel libre (voir la section 198.0).

De plus, méfiez-vous si configure répond 100% de No ou s'il répond No alors que vous êtes certain qu'une bibliothèque existe (par exemple il serait très étrange qu'il n'existe pas sur votre système au moins une bibliothèque curses). Dans de tels cas, on est probablement en présence d'une variable 'LD_LIBRARY_PATH' mal positionnée!

Imake

Imake permet de configurer un logiciel libre en créant un fichier Makefile à partir de règles simples. Ces règles déterminent quels fichiers ont besoin d'être compilés pour construire le binaire, et Imake engendre le Makefile correspondant. Ces règles sont spécifiées dans un fichier appelé Imakefile.

Là où Imake prend tout son intérêt, c'est qu'il utilise des informations dépendantes du site (de l'architecture de la machine). C'est assez pratique dans le cas d'applications utilisant X Window System. Mais Imake est utilisé dans le cas de nombreuses autres applications.

L'utilisation la plus simple de Imake est de se rendre dans le répertoire principal de l'archive décompactée, et ensuite d'exécuter le script xmkmf, qui fera appel au programme imake:

$ xmkmf -a
imake -DUseInstalled -I/usr/X11R6/lib/X11/config
make Makefiles

Si le site est mal installé, recompiler et installer X11R6!

Scripts shell divers

Lisez le fichier INSTALL ou README pour de plus amples informations. Généralement, il va vous falloir exécuter un fichier de type install.sh ou configure.sh. Après, soit le script d'installation sera silencieux (et déterminera tout seul ce dont il a besoin), soit il vous demandera des informations sur votre système (par exemple, des chemins).

Si vous n'arrivez pas à déterminer le fichier que vous devez exécuter, vous pouvez (sous Bash) taper ./, et ensuite taper deux fois la touche TAB (touche de tabulation). Bash complètera automatiquement par un éventuel fichier exécutable du répertoire (donc, un éventuel script de configuration). Dans le cas où plusieurs fichiers sont exécutables, il vous donnera une liste. Il ne vous reste plus qu'à choisir le bon.

Un cas particulier est l'installation de modules Perl (mais pas seulement). L'installation de tels modules se fait par l'exécution d'un script de configuration lui-même écrit en Perl. La commande à effectuer est généralement:

$ perl Makefile.PL

Autres possibilités

Certaines distributions de logiciels libres sont mal organisées, surtout lors des premières phases de développement (mais l'utilisateur est prévenu!). Elles nécessitent parfois de retoucher « à la main » les fichiers de configuration. Généralement, ces fichiers sont un fichier Makefile (voir la section 126.0) et un fichier config.h (mais ce nom n'est qu'une convention).

Je ne recommande ces manipulations qu'à des utilisateurs sachant ce qu'ils font. C'est un travail qui nécessite des connaissances réelles et une motivation nécessaire pour réussir. Mais c'est en forgeant qu'on devient forgeron.

Compilation

Maintenant que le logiciel est correctement configuré, il ne reste plus qu'à le compiler. C'est une étape qui est généralement très simple à effectuer, et qui ne pose pas de problèmes majeurs.

make

L'outil préféré de la communauté du logiciel libre pour compiler des sources est make. L'intérêt de make est double:

Les actions à exécuter pour arriver à une version compilée des sources sont stockées dans un fichier nommé habituellement Makefile, ou GNUMakefile. En fait, lorsque make est invoqué, il lit ce fichier, s'il existe, dans le répertoire courant. Si ce n'est pas le cas, il est possible de spécifier ce fichier en passant l'option -f à make.

Règles

make fonctionne selon un système de dépendances. C'est-à-dire que pour qu'un binaire soit compilé (« cible »), un certain nombre d'étapes doivent être accomplies (« dépendances »). Par exemple, pour créer le binaire (imaginaire) glloq, on a besoin de compiler les fichiers objets (fichiers intermédiaires de la compilation) main.o et init.o, puis de les lier. Ces fichiers objets sont eux aussi des cibles, dont les dépendances sont les fichiers sources.

Ceci n'est qu'une introduction minimale pour survivre dans le monde impitoyable de make. Si vous voulez en savoir plus, je vous conseille de vous rendre sur le site d'APRIL à l'adresse http://www.april.org/groupes/doc/ pour une documentation un peu plus détaillée sur make. Pour une documentation exhaustive, voir Managing Projects with Make (« La gestion de projets avec make », seconde édition, chez O'Reilly, d'Andrew Oram et Steve Talbott.

C'est parti!

Généralement, l'utilisation de make obéit à plusieurs conventions. Par exemple:

La première étape est de compiler le programme, et donc de taper (exemple fictif):

$ make
gcc -c glloq.c -o glloq.o
gcc -c init.c -o init.o
gcc -c main.c -o main.o
gcc -lgtk -lgdk -lglib -lXext -lX11 -lm glloq.o init.o main.o -o glloq

Parfait, le binaire est compilé correctement. Nous sommes prêts à passer à l'étape suivante, qui est l'installation des fichiers de la distribution (binaires, fichiers de données, etc...). Voir la section 180.0.

Explications

Si vous avez la curiosité de regarder ce qu'il y a dans le fichier Makefile, vous y trouverez des commandes connues (rm, mv, cp, ...), mais aussi des chaînes de caractères étranges, de la forme '$(CFLAGS)'.

Il s'agit de variables, c'est-à-dire de chaînes qui sont fixées généralement au début du fichier Makefile, et qui seront ensuite remplacées par la valeur qui leur a été associée. C'est assez utile pour utiliser plusieurs fois de suite les mêmes options de compilation.

Par exemple, pour afficher la chaîne « toto » à l'écran en tapant un make all:

TEST = toto
all:
        echo $(TEST)

La plupart du temps, les variables suivantes sont définies:

Et si ça ne fonctionne pas?

Pas de panique, cela arrive à tout le monde. Parmi les causes les plus communes:

Installation

Avec make

Maintenant que tout est compilé, il vous reste a copier les fichiers produits dans un endroit adéquat (généralement, dans un des sous-répertoires de /usr/local).

make permet généralement d'assurer ce travail. Une cible spéciale est la cible install. Très logiquement, utiliser make install permet d'installer les fichiers nécessaires.

Généralement, la procédure est décrite dans les fichiers INSTALL ou README. Mais parfois, l'auteur a oublié d'en prévoir une. Dans ce cas, il va falloir tout installer à la main.

Copiez alors:

Et voilà, c'est fini! Félicitations! Vous êtes maintenant fin prêt à recompiler votre système d'exploitation tout entier.

Problèmes

Si vous venez d'installer un programme libre, par exemple GNU tar et si, quand vous l'exécutez, ce n'est pas lui qui est appelé, ou s'il ne fonctionne pas comme quand vous le testiez directement à partir du répertoire src, c'est un problème de PATH, qui trouve le programme dans un répertoire situé avant celui où vous avez installé le nouveau logiciel. Vérifiez en exécutant type -a <programme>.

La solution est de mettre le répertoire d'installation plus haut dans le 'PATH', et/ou de supprimer/renommer les fichiers qui s'exécutent sans qu'on le désire, et/ou de renommer votre nouveau programme (en gtar dans cet exemple), de sorte qu'il n'y ait pas confusion.

Vous pouvez aussi mettre en place un alias, si le shell le permet (par exemple dire que tar, c'est /usr/local/bin/gtar).

Assistance

Documentation

Plusieurs sources de documentation:

Assistance technique

Si vous avez acheté une distribution « officielle » de Linux-Mandrake, vous pouvez demander à l'assistance technique des informations sur votre système. J'imagine que le support technique a autre chose à faire que d'aider tous les utilisateurs à installer des logiciels supplémentaires, mais certains proposent une aide à l'installation de 'x' jours. Peut-être peuvent-ils passer quelque temps sur des problèmes de compilation?

Vous pouvez sinon compter sur l'aide de la communauté du logiciel libre:

Comment trouver des logiciels libres

Pour trouver des logiciels libres, de nombreux pointeurs peuvent vous être utiles:

Remerciements

Copyright

Copyright (c) 1999 Benjamin Drieu, association APRIL (dont le site web est http://www.april.org/[32]).

This document is free documentation; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. (« Ce document est libre, vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation (version 2 ou bien toute autre version ultérieure choisie par vous). »).

This work is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See the GNU General Public License for more details (« Ce programme est distribué car potentiellement utile, mais sans aucune garantie, ni explicite ni implicite, y compris les garanties de commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU pour plus de détails. »).

You will find the GNU General Public License at address http://www.gnu.org/copyleft/gpl.html; you can also get a copy of it by writing to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. (« Vous trouverez la Licence Publique Générale GNU dans votre distribution ou sur le Web à l'adresse http://www.gnu.org/copyleft/gpl.html; vous pouvez aussi l'obtenir en écrivant à la Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, États-Unis. »).


Suivant : Les utilitaires en ligne de commande
Précédent : Compilation et installation de nouveaux noyaux
Retour

Copyright © 2000 MandrakeSoft