[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ A ] [ suivant ]


Guide du nouveau responsable Debian
Chapitre 3 - Modifier les sources


Normalement, les programmes s'installent d'eux-mêmes dans les sous-répertoires /usr/local. Mais les paquets Debian ne doivent pas utiliser ce répertoire, car il est réservé à l'usage privé de l'administrateur système (ou de l'utilisateur). Cela signifie que vous devez examiner le système de création de votre programme, en général en commençant par le Makefile. C'est le script que make(1) utilisera pour automatiser la création du programme. Pour plus de détails sur les Makefile, regardez fichier « rules », Section 4.4.

Notez que si votre programme utilise GNU automake(1) et/ou autoconf(1), ce qui signifie que les sources incluent des fichiers Makefile.am et/ou Makefile.in, respectivement, vous devrez modifier ces fichiers, parce que chaque appel d'automake va écraser les Makefile.in avec des informations générées à partir des Makefile.am, et que chaque appel de ./configure fera de même avec les fichiers Makefile, avec des données des Makefile.in. Éditer les fichiers Makefile.am requiert des connaissances sur automake, que vous pouvez apprendre dans la section info d'automake, alors qu'éditer les fichiers Makefile.in est globalement identique à l'édition de fichiers Makefile, si ce n'est qu'il faut faire attention à toutes les variables, à savoir toute chaîne entourée de « @ », comme par exemple @CFLAGS@ ou @LN_S@, qui sont remplacées par des valeurs réelles à chaque appel de ./configure. Veuillez lire /usr/share/doc/autotools-dev/README.Debian.gz avant de commencer.

Notez qu'il n'y a pas la place ici pour entrer dans tous les détails sur les modifications, mais voici quelques-uns des problèmes qui reviennent souvent.


3.1 Installer dans un sous-répertoire

La plupart des programmes ont une certaine manière de s'installer dans la structure de répertoires de votre système, de sorte que leurs exécutables sont inclus dans votre $PATH, et que vous trouvez leurs documentation et pages de manuel aux places habituelles. Cependant, si vous faisiez cela, le programme serait installé au milieu de tout ce qui est déjà sur votre système. Les outils de création de paquet auraient plus de difficultés pour décider ce qui appartient ou non à votre paquet.

Dès lors, vous devez faire autre chose : installer le programme dans un sous-répertoire temporaire à partir duquel les outils du responsable vont construire un paquet .deb fonctionnel. Tout ce qui est contenu dans ce répertoire sera installé sur le système de l'utilisateur quand il installe votre paquet, la seule différence est que dpkg installera les fichiers dans le répertoire racine.

Ce répertoire temporaire est d'ordinaire créé sous votre répertoire debian/ dans l'arbre des sources décompressées. Il est normalement nommé debian/nom_du_paquet.

Gardez à l'esprit que bien que vous deviez faire en sorte que le programme s'installe sous debian/nom_du_paquet, il doit continuer à s'exécuter correctement quand il est installé sous le répertoire racine, c'est-à-dire quand il est installé à partir du paquet .deb. Aussi vous ne devez pas laisser le système de création coder en dur dans les fichiers du paquet des chaînes de caractères comme /home/me/deb/gentoo-0.9.12/usr/share/gentoo.

Avec des programmes utilisant GNU autoconf, cela est relativement facile. La plupart de ces programmes ont des fichiers makefile et sont par défaut configurés de manière à permettre l'installation dans un répertoire quelconque, en gardant à l'esprit que /usr (par exemple) est le préfixe standard. Quand il détecte que votre programme utilise autoconf, dh_make va mettre en place des commandes pour le faire automatiquement, et vous pouvez tout aussi bien passer à la section suivante. Mais avec d'autres programmes, vous devrez plus que probablement examiner et éditer les fichiers Makefile.

Voici les parties concernées du Makefile de gentoo :

       # Where to put binary on 'make install'?
       BIN     = /usr/local/bin
     
       # Where to put icons on 'make install'?
       ICONS   = /usr/local/share/gentoo

Nous voyons que les fichiers sont configurés pour s'installer sous /usr/local/. Changez ces chemins en :

       # Where to put binary on 'make install'?
       BIN     = $(DESTDIR)/usr/bin
     
       # Where to put icons on 'make install'?
       ICONS   = $(DESTDIR)/usr/share/gentoo

Mais pourquoi dans ce répertoire, et pas dans un autre ? Parce que Debian n'installe jamais de fichiers sous /usr/local — cet arbre est réservé à l'usage de l'administrateur système. Sur un système Debian, de tels fichiers doivent plutôt aller sous /usr.

Les positions exactes des exécutables, icônes, documentation, etc., sont spécifiées dans le standard de la hiérarchie de fichiers (voir /usr/share/doc/debian-policy/fhs/). Je vous recommande de le consulter et de lire les sections relatives à votre paquet.

Dès lors, nous devrions installer l'exécutable sous /usr/bin plutôt que /usr/local/bin, la page de manuel sous /usr/share/man/man1 plutôt que sous /usr/local/man/man1, etc. Notez qu'il n'y a pas de page de manuel mentionnée dans le fichier Makefile, mais comme la Charte Debian requiert que chaque programme en ait une, nous en créerons une plus tard et l'installerons sous /usr/share/man/man1.

Certains programmes n'utilisent pas les variables des fichiers Makefile pour définir des chemins comme ceux-ci. Cela signifie que vous pouvez avoir à éditer des fichiers sources C réels pour les faire utiliser les positions correctes. Mais où et que chercher ? Vous pouvez trouver où en lançant :

       grep -nr -e 'usr/local/lib' --include='*.[c|h]' .

Grep va récursivement parcourir l'arbre des sources et vous dire le nom des fichiers et le numéro des lignes où il trouve une occurrence.

Éditez ces fichiers et à ces lignes, remplacez /usr/local/* par /usr/* — et c'est à peu près tout. Soyez attentif à ne pas casser le reste du code !

Après quoi, vous devriez trouver la cible d'installation (cherchez une ligne qui commence avec « install: », d'ordinaire cela fonctionne) et renommez toutes les références aux répertoires autres que ceux définis au début du Makefile. Auparavant, la cible d'installation de gentoo disait :

       install:        gentoo
                       install ./gentoo $(BIN)
                       install icons/* $(ICONS)
                       install gentoorc-example $(HOME)/.gentoorc

Après votre modification elle dit :

       install:        gentoo-target
                       install -d $(BIN) $(ICONS) $(DESTDIR)/etc
                       install ./gentoo $(BIN)
                       install -m644 icons/* $(ICONS)
                       install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc

Vous aurez sûrement remarqué qu'il y a maintenant une commande install -d avant les autres commandes dans la règle. Le fichier Makefile originel ne l'avait pas parce qu'habituellement /usr/local/bin et les autres répertoires existent déjà sur le système dans lequel « make install » est exécuté. Cependant, comme nous installerons dans nos propres répertoires vides (ou même non existants), nous aurons à créer chacun de ces répertoires.

Nous pouvons ajouter d'autres choses à la fin de la règle, comme l'installation de la documentation additionnelle que l'auteur amont oublie parfois :

                       install -d $(DESTDIR)/usr/share/doc/gentoo/html
                       cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html

Le lecteur attentif notera que j'ai changé « gentoo » en « gentoo-target » dans la ligne « install: ». C'est ce qu'on appelle une correction de bogue sans rapport :-).

Chaque fois que vous faites des modifications qui ne sont pas spécifiquement liées à Debian, envoyez-les au responsable amont pour qu'elles puissent être incluses dans la version suivante du programme et que tout le monde puisse en bénéficier. Souvenez-vous aussi de ne pas rendre vos corrections spécifiques à Debian ou Linux (ou même Unix !) avant de les envoyer — faites-les portables. Cela rendra vos corrections beaucoup plus faciles à appliquer.

Remarquez que vous ne devez pas envoyer les fichiers debian/* en amont.


3.2 Bibliothèques différentes

Il y a souvent un problème courant : des bibliothèques sont souvent différentes d'une plate-forme à l'autre. Par exemple, Makefile peut contenir une référence à une bibliothèque qui n'existe pas sur les systèmes Debian. Dans ce cas, nous devons la changer en une bibliothèque qui existe dans Debian, et qui sert à la même chose.

Ainsi, s'il y a une ligne dans le Makefile (ou Makefile.in) de votre programme qui dit quelque chose comme ceci (et votre programme ne compile pas) :

       LIBS = -lcurses -lquelquechose -lautrechose

Changez-la en ceci, et cela marchera probablement :

       LIBS = -lncurses -lquelquechose -lautrechose

(L'auteur réalise que ceci n'est pas le meilleur exemple dans la mesure où notre paquet libncurses est maintenant livré avec un lien symbolique libcurses.o, mais il n'en a pas trouvé de meilleur. Les suggestions sont les bienvenues).


[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ A ] [ suivant ]


Guide du nouveau responsable Debian

version 1.2.3, 18 janvier 2005.

Josip Rodin joy-mg@debian.org

Mohammed Adnène Trojette adn+deb@diwi.org
et les membres de la liste debian-l10n-french@lists.debian.org
Frédéric Dumont (ancien traducteur) frederic.dumont@easynet.be