Le guide du nouveau developpeur Debian, mise a jour
Voici la nouvelle version du guide, pour la plus grande joie des petits et des
grands.
--
Frederic Dumont / / (_)__ __ ____ __
frederic.dumont@freeworld.be / /__/ / _ \/ // /\ \/ /
PGP key 0711F125 /____/_/_//_/____/ /_/\_\ forever!!!!!!!
Linux? It's an OS, Jim, but not as we know it.
<!doctype debiandoc system>
<debiandoc>
<book>
<titlepag>
<title>Guide du nouveau responsable Debian</title>
<author>Josip Rodin <email/jrodin@jagor.srce.hr/
</author>
<author>Traducteur : Frédéric Dumont <email/frederic.dumont@freeworld.be/
</author>
<version>version 0.99.1, 25 janvier 2000.</version>
<copyright>
<copyrightsummary>Copyright © 1998, 1999, 2000 Josip Rodin.</copyrightsummary>
<p>Ce document peut être utilisé selon les termes de la Licence publique
générale de GNU version 2 ou suivante.
<p>Ce document a été créé avec ces deux documents comme exemple :
<p>Making a Debian Package (the Debmake Manual), copyright ©
1997 Jaldhar Vyas <email/jaldhar@debian.org/.
<p>The New-Maintainer's Debian Packaging Howto, copyright © 1997
Will Lowe <email/lowe@debian.org/.
</copyright>
</titlepag>
<toc sect>
<chapt id="start">Commencer « de la bonne manière »
<p>Ce document va essayer de décrire à l'utilisateur Debian courant (et au
développeur en devenir) la construction d'un paquet Debian GNU/Linux dans un
langage courant, et complété avec des exemples. Il y a un vieux proverbe
romain, <em>Longum iter est per preaecepta, breve et efficax par
exempla!</em> (C'est long par la règle, court et efficace par l'exemple!).
<p>Une des choses qui font de Debian une distribution de si haut niveau est
son système de paquets. Bien qu'il existe une grande quantité de logiciels
dans le format Debian, parfois vous devrez installer un logiciel qui ne
l'est pas. Vous pouvez vous demander comment faire vos propres paquets et
peut-être pensez vous que c'est une tâche très difficile. Eh bien, si vous
êtes vraiment un débutant sous Linux, c'est dur, mais si vous étiez un
débutant, vous ne seriez pas en train de lire ce document maintenant. :-)
Vous devez en savoir un peu sur la programmation Unix, mais vous n'avez
certainement pas besoin d'être un magicien.
<p>Les nouvelles versions de ce document devraient toujours être disponible
'online' sur <url name="http://www.debian.org/doc/maint-guide"
id="http://www.debian.org/doc/maint-guide/"> et dans le paquet
'maint-guide'.
<sect id="needprogs">Programmes nécessaires au développement.
<p>Avant de commencer quoi que ce soit, vous devriez vous assurer que vous
avez correctement installé certains paquets supplémentaires nécessaires pour
le développement. Notez que la liste ne contient aucun paquet marqué
'essentiel' ou 'requis' - nous supposons que vous avez déjà installé
ceux-ci.
<p>Ce document a été écrit alors que la distribution
2.1 'slink' était la version stable officielle de Debian, et la 2.2
'potato' était en cours de création, donc les paquets nommés ici sont
principalement ceux de 'potato'.
<p>Les paquets suivants sont fournis dans l'installation standard de Debian
2.1, de sorte que vous les avez probablement déjà (ainsi que les paquets
supplémentaires dont ils dépendent). Néanmoins, vous devriez le vérifier avec
`dpkg -s paquet`.
<list>
<item><em>binutils</em> - ces programmes sont utilisés pour assembler et
lier des fichiers objets - les blocs dont sont fait les programmes. (voir
'info binutils')
<item><em>cpp</em> - le préprocesseur C. (voir <manref name="cpp"
section="1">)
<item><em>cpio</em> - c'est un archiveur comme tar ou zip. (voir <manref
name="cpio" section="1">)
<item><em>dpkg-dev</em> - ce paquet contient les outils nécessaires pour
dépaqueter, construire et télécharger les paquets sources Debian. (voir
<manref name="dpkg-source" section="1">)
<item><em>file</em> - ce programme bien pratique peut déterminer la nature
d'un fichier. (voir <manref name="file" section="1">)
<item><em>gcc</em> - Le compilateur C de GNU. La plupart des programmes
Linux sont écrits en C. Cependant, si votre programme est écrit dans un
autre langage de programmation, comme en C++, Fortran ou Pascal, vous
devriez installer g++, g77 ou gpc, respectivement. (voir <manref name="gcc"
section="1">, <manref name="g++" section="1">, <manref name="g77"
section="1">, <manref name="gpc" section="1">)
<item><em>libc6-dev</em> - Les librairies et fichiers d'entête C dont gcc a
besoin pour les lier aux fichiers objets créés. Bien que certains programmes
recommandent ou utilisent encore libc5, on vous recommande d'utiliser la
nouvelle version (libc6). (voir `info libc`)
<item><em>make</em> - d'ordinaire, la création d'un programme prend plusieurs
étapes. Plutôt que d'avoir à taper les mêmes commandes encore et encore,
vous pouvez utiliser ce programme pour automatiser le processus, en
créant des fichiers `Makefile'. Certains programmes utilisent aussi imake et
xmkmf, des programmes utilisés pour générer les fichiers Makefile à partir
d'un ensemble de fonctions macros. Beaucoup de logiciels récents utilisent
des scripts de configurations et des fichiers Makefiles créés à l'aide
d'autoconf et automake, donc vous pourriez avoir besoin de ceux-ci aussi.
(voir `info make`, <manref name="imake" section="1">, <manref name="xmkmf"
section="1">, <manref name="autoconf" section="1">, <manref name="automake"
section="1">)
<item><em>patch</em> - ce programme très utile prend un fichier contenant
une liste de différences (produite par le programme diff) et l'applique au
fichier original, produisant une version mise à jour. (voir <manref
name="patch" section="1">)
<item><em>perl5</em> - Perl est un des langages de script les plus
utilisés sur les systèmes un*x modernes, souvent qualifié de « tronçonneuse
suisse de Unix ». (voir <manref name="perl" section="1">)
</list>
<p>Vous devrez probablement installer vous-même les programmes suivant de la
section `devel' de la distribution :
<list>
<item><em>dh-make</em> et <em>debhelper</em> - dh-make est nécessaire pour
créer le squelette de notre exemple de paquet et il utilise certains outils
de debhelper pour créer les paquets. Ils ne sont pas indispensables pour la
création des paquets, mais ils sont <strong>fortement</strong> recommandés
pour les nouveaux responsables. Ils rendent le processus complet bien plus
facile à démarrer, et à contrôler par après. (voir <manref name="dh_make"
section="1">, <manref name="debhelper" section="1">,
/usr/share/doc/debhelper/README)
<item><em>devscripts</em> - ce paquet contient certains scripts utiles qui
peuvent aider les responsables, mais ils ne sont pas indispensables pour la
création de paquets. (voir /usr/share/doc/devscripts/README.debian.gz)
<item><em>fakeroot</em> - cet utilitaire vous laisse prétendre être root, ce
qui est nécessaire pour certaines parties du processus de construction. (voir
<manref name="fakeroot" section="1">)
<item><em>lintian</em> - c'est le vérificateur de paquet Debian, qui peut
vous indiquer de nombreuses erreurs courantes après que vous ayez construit
le paquet et expliquer les erreurs trouvées. (voir <manref name="lintian"
section="1">, <manref name="diffstat" section="1">,
/usr/share/doc/lintian/lintian.html/index.html) </list>
<p>Enfin, ces paquets <em>très importants</em> sont dans la section doc de
la distribution :
<list>
<item><em>debian-policy</em> - inclut la structure et le contenu de
l'archive, plusieurs considérations sur le design du système d'exploitation,
la Norme de hiérarchie des fichiers, et le plus important (pour vous)
est qu'il décrit les critères que chaque paquet doit vérifier pour être
inclus dans la distribution. (voir
/usr/share/doc/debian-policy/policy.html/index.html)
<item><em>developers-reference</em> - concerne tout ce qui n'est pas
spécifique aux détails techniques de la création de paquets, comme la
structure des archives, comment renommer, rendre orphelin, choisir un
paquet, faire un NMU (une version du paquet non responsable),
comment gérer les bogues, où et quand télécharger, etc. (voir
/usr/share/doc/developers-reference/developers-reference.html/index.html)
<item><em>packaging-manual</em> - décrit les aspects techniques de la
création des paquets binaires et sources Debian. (voir
/usr/share/doc/packaging-manual/packaging.html/index.html)
</list>
<p>Vous avez aussi besoin du paquet de cryptographie, soit PGP (les paquets
pgp-*) ou GPG (le paquet gnupg), pour <em>signer</em> numériquement votre
paquet. Ceci est spécialement important si vous voulez distribuer votre
paquet à d'autres personnes (et vous le ferez si votre paquet est inclus
dans la distribution Debian). Cependant, à cause d'une loi d'exportation
américaine plutôt stupide, vous ne pouvez pas simplement le télécharger de
votre site FTP Debian le plus proche. Cependant, Debian fournit ces paquets
via un site qui n'est pas physiquement situés aux USA, nommé
non-US.debian.org (ftp://non-us.debian.org/debian-non-US/). Votre site FTP
va avoir un fichier nommé README.non-us, qui vous dira comment trouver un
miroir plus proche de ce site.
<p>Les courtes descriptions qui sont données ci-dessus ne servent que
d'introduction à ce que fait chaque paquet. Avant de continuer, veuillez lire
attentivement la documentation de chaque programme, au moins l'usage
standard. Cela peut vous sembler fastidieux maintenant, mais plus tard vous
serez <em>très</em> content de l'avoir fait.
Remarque: <em>debmake</em> est un paquet qui contient certains programmes
qui fonctionnent d'une manière similaire à dh-make, mais son usage
spécifique n'est <strong>pas</strong> couvert dans ce document.
Veuillez lire <url name="the Debmake manual"
id="http://www.debian.org/~jaldhar/"> pour plus d'information.
<sect id="otherinfo">Plus d'information
<p>Vous pouvez faire deux types de paquets : source et binaire. Un paquet
source contient le code que vous pouvez compiler en un programme. Un paquet
binaire contient juste le programme fini. Ne mélangez pas les termes comme
source du programme et le paquet source du programme ! Veuillez lire les
autres manuels si vous avez besoin de plus de détails sur la terminologie.
<p>Debian utilise le terme `responsable' pour la personne qui fait des
paquets, `auteur' pour la personne qui a fait le programme, et `responsable
amont' pour la personne qui maintient le programme actuellement. D'ordinaire
l'auteur et le responsable amont sont une seule et même personne. Si vous
avez écrit un programme, et que vous voulez qu'il soit dans Debian, vous
pouvez remplir une demande pour devenir un responsable.
<p>Après que vous ayez construit votre paquet (ou pendant la création), vous
devrez devenir responsable Debian officiel si vous souhaitez que votre
programme soit dans la prochaine distribution (si le programme est utile,
pourquoi pas ?) Ce processus est expliqué dans la Référence du développeur.
Veuillez le lire.
<chapt id="first">Premiers pas
<p>Puisque la documentation au <url name="Coin des développeurs"
id="http://www.debian.org/devel/"> n'est pas très claire sur où et comment
les nouveaux responsables devraient commencer leur travail, ce document va
expliquer chacune des petites étapes (qui peuvent a priori sembler
insignifiante), et vous aider à créer ce premier paquet, ainsi qu'à gagner
de l'expérience pour construire les versions suivantes de ce paquet ou
d'autres plus tard.
<sect id="choose">Choisir votre programme
<p>Vous avez probablement déjà choisi le paquet que vous voulez construire,
mais voici quelques éléments pour les non-initiés :
<list>
<item>vérifiez si le paquet est déjà dans la distribution. Si vous utilisez
la distribution `stable', peut-être que le mieux est d'aller sur <url
name="la page de recherche"
id="http://www.debian.ord/distrib/packages.html">.
Si vous utilisez une distribution `unstable' <strong>courante</strong>,
vérifiez le avec ces commandes :
<example>
dpkg -s programme
dpkg -l '*programme*'
</example>
</item>
<item>consultez la <url name="page WNPP"
id="http://www.debian.org/doc/prospective-packages.html"> (Travail
nécessaire et paquets futurs) et la liste de discussion debian-devel pour
voir si quelqu'un d'autre construit ce paquet. Si c'est le cas, contactez le
responsable actuel si vous le voulez vraiment. Sinon, trouvez un autre
paquet intéressant que personne ne maintient.
</item>
<item>le programme <strong>doit</strong> avoir une licence, si possible
libre conformément au <url name="Règles de Logiciel Libre Debian"
id="http://www.debian.org/social_contract.html#guidelines">.
S'il n'est pas conforme à l'une de ces règles, il peut malgré tout être
inclus dans les sections `contrib' ou `non-free' de Debian. Si vous n'êtes
pas sûr, demandez sur <email/debian-legal@lists.debian.org/.
</item>
<item>le programme ne devrait <strong>pas</strong> être setuid root, où
encore mieux, il ne devrait pas être quoique ce soit setuid ou setgid.
</item>
<item>le programme ne devrait pas être un démon, ou quelque chose qui va
dans les répertoires */sbin.
</item>
<item>le programme devrait être sous forme de binaire exécutable. N'essayez
pas encore les librairies.
</item>
<item>il devrait être bien documenté, ou au moins compréhensible (par tous).
</item>
<item>vous devriez contacter le(s) auteur(s) du programme pour vérifier
qu'ils sont d'accord pour la création du paquet. Il est important d'être à
même de consulter le(s) auteur(s) à propos du programme en cas de problèmes
spécifiques au programme, aussi n'essayez pas de créer un paquet à partir de
programmes non maintenus.
</item>
<item>enfin, vous devriez savoir qu'il fonctionne, et l'avoir testé pendant
quelques temps.
</item>
</list>
<p>Bien sûr, toutes ces remarques ne sont que des mesures de sécurité, et
ont pour but de vous sauver d'utilisateurs fous de rage si vous faites
une erreur dans un démon setuid... Quand vous aurez plus d'expérience
dans la création des paquets, vous serez capable de faire de tels paquets,
mais même les développeurs les plus expérimentés consultent la liste de
discussion debian-devel en cas de doute. Et là les gens seront contents de
les aider.
<p>Pour plus d'information à ce sujet, consultez la Référence du Développeur.
<sect id="getit">Obtenir le programme et l'essayer.
<p>La première chose à faire est de trouver et de télécharger le paquet
original. Je suppose que vous avez déjà le fichier source que vous avez pris
sur la page web de l'auteur. Les sources pour les logiciels Linux libres
sont d'habitude au format tar/gzip avec l'extension .tar.gz, et contiennent
normalement un sous-répertoire nommé programme-version avec toutes les
sources dedans. Si la source de votre programme est disponible dans une
autre sort d'archive (par exemple, le programme se termine par '.Z' ou
'.zip'), décompressez-le avec les outils adéquats ou demandez sur
debian-mentors si vous n'êtes pas sûr quant à la façon de le décompresser
correctement (indice: utilisez `file archive.extension`).
<p>Comme exemple, je vais utiliser un programme nommé `gentoo', un
gestionnaire de fichiers pour X11 utilisant GTK+. Sachez qu'il y a
déjà un paquet pour ce programme, et qu'il a changé
substantiellement depuis que ce texte a été écrit la
première fois.
<p>Créez un sous-répertoire sous votre répertoire racine nommé
`debian' ou `deb' ou quoi que ce soit d'adéquat (ou le nom du programme,
~/gentoo, ferait l'affaire dans notre cas). Placez l'archive
téléchargée dedans, et décompressez la avec `tar
-xzf gentoo-0.9.12.tar.gz`. Assurez-vous qu'il n'y a pas d'erreurs, même
« sans importance », parce qu'alors il y aura des problèmes pour décompresser
sur les systèmes d'autres personnes, dont les outils de décompressions
pourraient ne pas supporter ces erreurs.
<p>Maintenant vous avez un autre sous-répertoire, nommé 'gentoo-0.9.12'.
Allez dans ce répertoire et lisez <strong>attentivement</strong> la
documentation fournie. Il s'agit d'habitude de fichiers nommés
README*, INSTALL*, *.lsm ou *.html. Dedans vous devez trouver les
instructions pour compiler et installer correctement le programme
(très probablement elles supposent que vous voulez installer dans le
répertoire /usr/local/bin; ce n'est pas le cas, mais on reviendra sur
ce point plus tard in <ref id="destdir">).
<p>La méthode varie d'un programme à l'autre, mais de nombreux programmes
modernes viennent avec un script `configure' qui configure les sources selon
votre système et s'assure que votre système est à même de les compiler.
Après la configuration (avec `./configure`), les programmes sont compilés
avec `make`. Certains d'entre-eux supportent `make check`, pour se tester
eux-mêmes. L'installation dans les répertoires de destination est
généralement obtenue avec `make install`.
<p>Maintenant, essayez de compiler et d'exécuter votre programme, pour vous
assurer qu'il fonctionne correctement et ne casse rien d'autre quand il est
installé ou qu'il tourne.
<p>Sachez aussi que vous pouvez généralement entrer `make uninstall` pour
retirer tous les fichiers installés, et `make clean` (ou mieux, `make
distclean`) pour nettoyer le répertoire de compilation.
<sect id="namever">Les choses à faire avant `dh_make'
<p>Vous devriez commencer la création du paquet avec un répertoire source
complètement propre (originel), ou plus simplement avec les sources
fraîchement décompressées.
<p>Pour que le paquet soit correctement construit, vous devez changer le nom
du programme en minuscule (si ce n'est déjà fait), et vous devriez changer
le répertoire source en <numpaquete>-<version>.
<p>Si le nom du programme consiste en plus d'un mot, réduisez le à un mot,
ou faites une abréviation. Par exemple, le paquet du programme 'John's
little editor for X' serait nommé johnledx, ou jle4x, ou quoi que vous
vouliez, aussi longtemps qu'il reste sous une limite raisonnable, en général
20 caractères.
<p>Vérifiez aussi la version exacte du programme (qui sera inclus
dans la version du paquet). Si ce logiciel n'est pas numéroté
avec un numéro de version comme X.Y.Z, mais avec une date de
distribution, vous pouvez utiliser cette date comme numéro de version, avec
comme préfixe '0.0.' (juste au cas où les responsables amonts décident de
distribuer une jolie version comme 1.0). Donc, si la date est le 19
décembre 1998, vous pouvez utilisez 0.0.19981219 comme chaîne pour la
version. Certains ne seront pas numérotés du tout, auquel cas
vous devriez contacter le responsable amont pour voir si il a une autre
méthode de gestion des révisions.
<sect id="dh_make">Lancer `dh_make'
<p>Vérifiez que vous êtes dans le répertoire du code source du programme, et
lancez ceci :
<p><example>
dh_make -e votre.adresse@de.responsable -f gentoo-0.9.12.tar.gz
</example>
<p>Bien sur, remplacez la chaîne « votre.adresse@de.responsable » avec votre
adresse mél pour l'inclure dans l'entrée changelog et dans d'autres
fichiers, et le nom du fichier par le nom de la source d'archive originale.
Voyez <manref name="dh_make" section="1"> pour plus de détails.
<p>Des informations sont affichées. Il vous demande quelle sorte de
paquet vous voulez créer. Gentoo est un paquet binaire simple - il ne
crée qu'un exécutable, et donc un seul fichier .deb - donc
nous sélectionnons la première option, avec la touche `s',
vérifions l'information sur l'écran et confirmons en pressant
<enter>. En tant que nouveau responsable, vous ne devriez pas
créer des paquets composés, ou des librairies, comme
expliqué plus haut. Ce n'est pas si dur, mais cela requiert un peu
plus de connaissances, donc nous n'en détaillerons pas tout ici.
<p>Notez que vous ne pouvez exécuter dh_make <strong>qu'une fois</strong>,
et qu'il ne se comportera par correctement si vous l'exécutez encore dans le
même répertoire déjà debianisé. Cela signifie aussi que vous devrez utiliser
une autre méthode pour distribuer une nouvelle révision ou une nouvelle
version de votre paquet dans le futur. Lisez plus à ce sujet dans ce texte
dans <ref id="update">
<chapt id="modify">Modifier les sources
<p>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 examinez le
système de création de votre programme, en général en commençant par le
Makefile. C'est le script que <manref name="make" section="1"> utilisera
pour automatiser la création du programme. Pour plus de détails sur les
Makefiles, regardez <ref id="rules">.
<p>Notez que si votre programme utilise GNU <manref name="automake"
section="1"> et/ou <manref name="autoconf" section="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 automake d'info, alors qu'éditer les fichiers
Makefile.in est globalement identique à l'édition de fichiers Makefiles, 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 d'autoconf.
<p>Notez qu'il n'y a pas la place ici pour entrer dans <em>tout</em> les
détails sur les modifications, mais voici quelques-uns des problèmes qui
reviennent souvent.
<sect id="destdir">Installer dans un sous-répertoire
<p>La plupart des programmes ont une certaine manière de s'installer
dans la structure de répertoire 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. Vous devez vous
assurer qu'ils le font correctement, mais vous devez les forcer à
s'installer dans un sous-répertoire temporaire qui sera créé sous votre
répertoire debian/, normalement nommé <tt>debian/tmp</tt>, à 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.
<p>Fondamentalement, vous devez faire en sorte que le programme s'installe
dans debian/tmp, mais se comporte correctement quand il est placé dans le
répertoire racine, i.e. quand il est installé depuis le paquet .deb. Avec
des programmes utilisant GNU autoconf, ceci est relativement facile, parce
que 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 Makefiles.
<p>Voici les parties concernées du Makefile de gentoo :
<p><example>
# Where to put binary on 'make install'?
BIN = /usr/local/bin
# Where to put icons on 'make install'? Note: if you change this,
# gentoo will not find the icons as it starts up. You're going to
# have to alter gentoo's icon path (in the config window, "Paths"
# tab) to get it work.
ICONS = /usr/local/lib/gentoo/
</example>
<p>Avant tout, vous devriez insérer deux nouvelles lignes qui disent :
<p><example>
# Edited for Debian GNU/Linux.
DESTDIR =
</example>
parce que le processus de création en a besoin (ce sera expliqué plus loin,
dans <ref id="rules">).
<p>Ensuite le Makefile mentionne la position de l'exécutable final. Changez
le en ceci :
<p><example>
# Where to put binary on 'make install'?
BIN = $(DESTDIR)/usr/X11R6/bin
</example>
<p>Mais pourquoi dans ce répertoire, et pas dans un autre ? Parce que Debian
a défini quelques règles indiquant où les programmes doivent être installés.
Ceci est spécifié dans le Standard de la Hiérarchie de Fichiers
(/usr/share/doc/debian-policy/fhs). Ainsi, nous devons installer
l'exécutable dans /usr/X11R6/bin, à la place de /usr/local/bin, et la page
de manuel (qui n'existe pas dans notre cas, mais presque tous les programmes
en ont une, aussi nous en ferons une plus tard) dans /usr/share/man/man1 à
la place de /usr/local/man/man1.
<p>Après cela nous avons une situation un peu plus difficile. Si vous
changez une ligne en :
<p><example>
ICONS = $(DESTDIR)/usr/share/gentoo/
</example>
pour être conforme aux règles, vous devrez éditer quelques sources C. Mais
où et que chercher ? Vous pouvez trouver où en lançant :
<p><example>
grep -n usr/local/lib *.[ch]
</example>
(dans chaque sous-répertoire qui contient des fichiers .c et .h). Grep vous
dira le nom du fichier et le numéro de ligne où il trouve une occurrence.
Maintenant éditez ces fichiers et aux lignes indiquées, remplacez
usr/local/lib par usr/share - et voilà. Remplacez juste usr/local/lib avec
votre répertoire, et faites attention de ne pas casser le reste du code, si
vous ne vous y connaissez pas trop en programmation C :-)
<p>Après quoi vous devez trouver la cible d'installation (cherchez une ligne
qui commence avec 'install:') et renommez toutes les références aux
répertoires autres que ceux définis au début du Makefile. Dans notre cas,
c'est déjà fait et simplifie un peu les choses. Auparavant, la cible
d'installation de gentoo disait :
<p><example>
# ----------------------------------------- Installation
# You're going to have to be root to do this!
install: gentoo
install ./gentoo $(BIN)
install icons $(ICONS)
install gentoorc-example $(HOME)/.gentoorc
</example>
<p>Après votre modification elle dit :
<example>
# ----------------------------------------- Installation
# You're going to have to be root to do this!
install: gentoo-target
install -d $(BIN) $(ICONS) $(DESTDIR)/etc
install ./gentoo $(BIN)
install -m644 icons/* $(ICONS)
install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
install -d $(DESTDIR)/usr/share/doc/gentoo/html
cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
</example>
<p>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 :-)
<p>Chaque fois que vous faites des modifications qui ne sont pas
spécifiquement lié à Debian, envoyez les au responsable amont pour qu'elles
puissent être inclue dans la version suivante du programme. Remarquez que
vous ne devez pas envoyer les fichiers debian/* en amont, mais vous devriez
le faire pour tous autre modification. En essayez d'être gentil avec le
responsable amont, en évitant de faire des corrections spécifiques à Debian
ou Linux (ou même Unix).
<sect id="difflibs">Librairies différentes
<p>Il y a souvent un problème commun : des librairies sont souvent
différentes d'une plate-forme à l'autre. Par exemple, Makefile peut contenir
une référence à une librairie qui n'existe pas dans Debian. Dans ce cas,
nous devons la changer en une librairie qui existe dans Debian, et qui sert
à la même chose. La meilleure méthode est de commenter ces lignes parce
qu'elles peuvent fournir des indices à d'autres qui ont le même problème.
<p>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) :
<p><example>
LIBS = -lcurses -lquelquechose -lautrechose
</example>
<p>Changez la en ceci, et cela marchera probablement :
<p><example>
LIBS = -lncurses -lquelquechose -lautrechose
#LIBS = -lcurses -lquelquechose -lautrechose
</example>
<chapt id="dreq">Ce qui est requis sous debian/
<p>Il y a un nouveau sous-répertoire sous le répertoire principal du
programme ('gentoo-0.9.12'), nommé 'debian'. Il
y a un certain nombre de fichiers dans ce répertoire. Nous allons éditer
ceux-ci pour configurer le comportement du paquet. Les plus importants
d'entre eux sont 'control', 'changelog', 'copyright' et 'rules', qui sont
requis pour tous les paquets.
<sect id="control">fichier 'control'
<p>Ce fichier contient plusieurs valeurs que dpkg et dselect vont utiliser
pour gérer le paquet. Voici le fichier control que dh_make crée pour
nous.
<p><example>
1 Source: gentoo
2 Section: unknown
3 Priority: optional
4 Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
5 Standards-Version: 3.0.1
6
7 Package: gentoo
8 Architecture: any
9 Depends: ${shlibs:Depends}
10 Description: <insert up to 60 chars description>
11 <insert long description, indented with spaces>
</example>
(J'ai ajouté les numéros de ligne.)
<p>Les lignes de 1 à 5 sont les informations de contrôle pour le paquet
source. La ligne 1 est le nom du paquet source.
<p>La ligne 2 est la section de la distribution dans laquelle ce paquet
va. Comme vous l'avez constaté, Debian est divisé en sections: main
(logiciels libres), non-free (logiciels pas vraiment libres), et contrib
(logiciels libres qui dépendent de logiciels non libres). Sous celles-ci, il
y a des sous-sections logiques qui décrivent de manière concise les paquets
qui s'y trouvent. Ainsi nous avons `admin' pour les programmes réservés à
l'administrateur, `base' pour les outils de base, `devel' pour les outils de
programmation, `doc' pour la documentation, `libs' pour les librairies,
`mail' pour les lecteurs et les démons de courriel, `net' pour les
applications et démons réseaux, `x11' pour les programmes spécifiques à X11,
et bien d'autres.
<p>Changeons donc la section en x11.
<p>La ligne 3 décrit l'importance pour l'utilisateur d'installer ce paquet.
Les sections et les priorités ne sont utilisés que par dselect quand il trie
les paquets et sélectionne les défauts, et elles peuvent (et seront
probablement) modifiées par nos responsables FTP. Lisez le manuel des normes
pour des informations sur ces valeurs.
<p>Comme c'est un paquet de priorité normale, nous le laissons à optional.
<p>La ligne 4 est le nom et l'adresse mél du responsable.
<p>La ligne 5 est la version du standard de Règles Debian que ce paquet
respecte (deux versions majeurs du paquet debian-policy installé).
<p>Si un compilateur non-standard ou d'autres outils sont nécessaires pour
construire votre paquet, vous devriez ajouter ici une ligne `Build-depends'
et y mettre les paquets requis. Pour plus d'information, lisez le Manuel de
Paquetage (section 8.7) et la documentation du paquet `build-essential'.
<p>La ligne 7 est le nom du paquet binaire.
<p>La ligne 8 décrit l'architecture CPU pour laquelle le paquet binaire peut
être compilé. Vous pouvez le laisser à 'any' car <manref
name="dpkg-gencontrol" section="1"> trouvera la valeur appropriée pour toute
machine sur laquelle ce paquet sera compilé (voir la Référence du
Développeur pour une explication sur ce qu'est le portage de paquet). Si
votre paquet est indépendant d'une architecture (par exemple, un script
shell ou Perl, ou un document), changez cette entrée en 'all' et lisez plus
tard dans <ref id="rules"> comment utiliser la règle `binary-indep' au lieu
de `binary-arch' pour construire le paquet.
<p>La ligne 9 montre une des capacités les plus puissantes de système de
paquet Debian. Les paquets peuvent être liés entre eux de plusieurs
méthodes. A part Depends les autres relations sont Recommends:, Suggests:,
Pre-Depends:, Conflicts:, Provides:, et Replaces:.
<p>Les outils de gestion de paquets comme dpkg, dselect ou APT (et ses
interfaces) se comportent d'ordinaire de la même manière quand ils gèrent
ces relations; sinon, ce sera expliqué.
(voir <manref name="dpkg" section="8">, <manref name="dselect" section="8">,
<manref name="apt" section="8">, <manref name="console-apt" section="8">,
<manref name="gnome-apt" section="8">)
<p>Voici ce qu'elles veulent dire normalement :
<p><list>
<item>Depends:
<p>Le paquet ne sera pas installé à moins que les paquets dont il dépend ne
soient installés. Utilisez le si votre programme ne s'exécutera absolument
pas (ou causera des dégâts sérieux) à mois qu'un paquet particulier ne soit
présent.</item>
<item>Recommends:
<p>dselect n'installera pas votre programme a moins que les paquets qu'il
recommande ne soient installés. Dpkg et APT vous le laisseront faire
cependant. Utilisez le pour les paquets qui ne sont pas vraiment
indispensables mais qui sont typiquement utilisés avec votre
programme.</item>
<item>Suggests:
<p>Quand un utilisateur installe votre programme dselect lui demandera s'il
faut installer les programmes qu'il suggère. Dpkg et APT ne s'en soucient
pas beaucoup. Utilisez le pour les paquets qui marchent bien avec votre
programme mais qui ne sont pas nécessaires.</item>
<item>Pre-Depends:
<p>Ceci est plus fort que Depends. Le paquet ne sera pas installé à moins
que les paquets dont il pré-dépend ne soient installés <em>et correctement
configurés</em>. Utilisez le <strong>très</strong> rarement et seulement
après en avoir discuté sur la liste de discussion debian-devel. Traduisez:
ne l'utilisez pas du tout. :-)</item>
<item>Conflicts:
<p>Le paquet se sera pas installé avant que les paquets
avec lesquels il est en conflit n'aient été retirés.
Utilisez ceci si votre programme ne peut absolument pas être exécuté (ou si
il causera d'énormes problèmes) si un paquet particulier est présent.</item>
<item>Provides:
<p>Quand il y a plusieurs alternatives pour certains types de paquets, des
noms virtuels ont été définis. La liste complète se trouve dans
/usr/share/doc/debian-policy/virtual-package-name-list.text.gz. Utilisez
ceci si votre programme fournit une fonction d'un paquet virtuel
existant.</item>
<item>Replaces:
<p>Utilisez ceci quand votre programme remplace des fichiers d'un autre
paquet, ou remplace complètement un autre paquet (utilisé en conjonction
avec Conflicts:). Les fichiers du paquet nommé seront retirés avant
d'installer le votre.
</item>
</list>
<p>Tous ces champs ont une syntaxe uniforme. Il s'agit d'une liste de
paquets séparés par des virgules. Ces noms de paquets peuvent aussi être une
liste d'alternatives, séparés par des symboles barre verticale <tt>|</tt>
(symbole tuyau). Les champs peuvent être restreints a des versions
particulières de chaque paquet nommé. Ces versions sont listées entre
parenthèses après chaque nom de paquet individuel, et doivent contenir une
relation de la liste suivante suivie par un numéro de version. Les relations
autorisées sont <tt><<</tt>, <tt><=</tt>, <tt>=</tt>,
<tt>>=</tt> et <tt>>></tt> pour strictement plus petit, plus petit
ou égal, exactement égal, plus grand ou égal et strictement plus grand,
respectivement.
<p>La dernière capacité que vous devez connaître est
$(shlibs:Depends). Ceci sera automatiquement généré par <manref
name="dh_shlibdeps" section="1"> et rempli par <manref name="dh_gencontrol"
section="1"> avec les noms de toutes les librairies partagées, comme
libc6 ou xlib6g, que votre programme utilise, de sorte que vous ne devez pas
le spécifier vous-même. Ceci étant dit, nous pouvons
laisser la ligne 9 exactement comme elle est.
<p>La ligne 10 est celle où la liste de suggestions va. Ici on ne met que
`file', parce que gentoo peut utiliser certaines capacités de ce
programme/paquet.
<p>La ligne 11 est la description courte. L'écran de la plupart de gens est
large de 80 colonnes, aussi cela ne devrait pas dépasser les 60 caractères.
Je le change en « A fully GUI configurable GTK+ file manager ».
<p>La ligne 12 est là où la description va. Celle-ci devrait être un
paragraphe qui donne plus de détails sur le paquet. La première colonne de
chaque ligne doit être vide. Il ne peut y avoir de ligne vide, mais vous
pouvez mettre un . (point) dans la colonne 2 pour simuler une ligne vide.
De plus, il ne peut pas y avoir plus d'une ligne vide après la description
longue.
<p>Voici le fichier control mis à jour:
<p><example>
1 Source: gentoo
2 Section: x11
3 Priority: optional
4 Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
5 Standards-Version: 3.0.1
6
7 Package: gentoo
8 Architecture: any
9 Depends: ${shlibs:Depends}
10 Suggests: file
11 Description: A fully GUI configurable GTK+ file manager
12 gentoo is a file manager for Linux written from scratch in pure C. It
13 uses the GTK+ toolkit for all of its interface needs. gentoo provides
14 100% GUI configurability; no need to edit config files by hand and re-
15 start the program. gentoo supports identifying the type of various
16 files (using extension, regular expressions, or the 'file' command),
17 and can display files of different types with different colors and icons.
18 .
19 gentoo borrows some of its look and feel from the classic Amiga file
20 manager "Directory OPUS" (written by Jonathan Potter).
</example>
(J'ai ajouté les numéros de ligne.)
<sect id="copyright">fichier 'copyright'
<p>Ce fichier contient les informations sur les ressources amonts, le
copyright et la licence du paquet. Le format n'est pas dicté par les Normes,
mais son contenu l'est (section 6.5). Dh_make en crée un par défaut, qui
ressemble à ceci :
<p><example>
1 This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
2 Wed, 11 Nov 1998 21:02:14 +0100.
3
4 It was downloaded from <fill in ftp site>
5
6 Upstream Author(s): <put author(s) name and email here>
7
8 Copyright:
9
10 <Must follow here>
</example>
(J'ai ajouté les numéros de ligne.)
<p>Les choses importantes à ajouter à ce fichier est l'endroit où vous avez
trouvé ce paquet, ainsi que le copyright et la licence d'exploitation réelle
(incluez la en entier). Si la licence est une des licences de logiciel
libre populaires comme GNU GPL ou LGPL, BSD ou Artistic, vous pouvez juste
faire référence au fichier approprié dans le répertoire
/usr/share/common-licenses/, qui existe sur chaque système Debian. Gentoo
est disponible sous la Licence Publique Générale de GNU (GPL), donc nous
changeons le fichier en :
<p><example>
1 This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
2 Wed, 11 Nov 1998 21:02:14 +0100.
3
4 It was downloaded from: ftp://ftp.obsession.se/gentoo/
5
6 Upstream Author: Emil Brink <emil@obsession.se>
7
8 This software is copyright (c) 1998-99 by Emil Brink, Obsession
9 Development.
10
11 You are free to distribute this software under the terms of
12 the GNU General Public License.
13 On Debian systems, the complete text of the GNU General Public
14 License can be found in /usr/share/doc/common-licenses/GPL file.
</example>
(J'ai ajouté les numéros de ligne.)
<sect id="changelog">changelog
<p>C'est un fichier requis, qui a un format spécial décrit dans le Manuel de
Création de Paquets (section 3.2.3). Ce format est utilisé par dpkg et
d'autres programmes pour obtenir le numéro de version, de révision, de
distribution et l'urgence de votre paquet.
<p>Pour vous, il est aussi important, puisqu'il est bon de documenter toutes
les modifications que vous avez faites. Cela aidera les gens qui
téléchargent votre paquet si il y a des problèmes non résolus a propos
desquels ils doivent être immédiatement mis au courant. Ce sera sauvé sous
`/usr/share/doc/gentoo/changelog.Debian.gz' dans le paquet binaire.
<p>Dh_make en crée un par défaut, voici à quoi il ressemble :
<p><example>
1 gentoo (0.9.12-1) unstable; urgency=low
2
3 * Initial Release.
4
5 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
6
7 Local variables:
8 mode: debian-changelog
9 End:
</example>
(J'ai ajouté les numéros de ligne.)
<p>La ligne 1 est le nom du paquet, la version, la distribution et
l'urgence. Le nom doit correspondre au nom du paquet source, la distribution
devrait être `unstable' ou `experimental' (pour l'instant), et l'urgence ne
devrait pas être changée à quoique ce soit de plus haut que `low'. :-)
<p>Les lignes 3 à 5 sont l'entrée d'audit, où vous documentez les
modifications faites dans la révision du paquet (pas les modifications
amonts - il y a un fichier spécial pour cela, créé par les auteurs amonts,
installé comme /usr/share/doc/gentoo/changelog.gz). Les nouvelles lignes
doivent être ajoutées juste avant la première ligne qui commence avec une
astérisque ('*'). Vous pouvez le faire avec <manref name="dch" section="1">,
<manref name="emacs" section="1"> (les lignes 7 à 9 sont les informations de
mode pour l'éditeur Emacs), ou tout autre éditeur de texte. Vous aurez
quelque chose comme :
<p><example>
1 gentoo (0.9.12-1) unstable; urgency=low
2
3 * Initial Release.
4 * This is my first Debian package.
5 * Adjusted the Makefile to fix $DESTDIR problems.
6
7 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
8
9 Local variables:
10 mode: debian-changelog
</example>
(J'ai ajouté les numéros de ligne.)
<p>Quand vous distribuez une nouvelle réversion, vous devriez incrémenter le
numéro de version. Vous pouvez le faire avec `dch -i' ou explicitement avec
`dch -v <version>-<révision>` et insérer ensuite les
commentaires avec votre éditeur préféré. Astuce : comment ajouter facilement
la date dans ce format ? Utilisez `822-date` ou `date -R`.
<p>Les nouvelles informations de version sont ajoutées au sommet du fichier
changelog. Voici ce à quoi ressemble changelog après :
<p><example>
1 gentoo (0.9.12-2) unstable; urgency=low
2
3 * Fixed a glitch in the menu file.
4
5 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 22:15:39 +0100
6
7 gentoo (0.9.12-1) unstable; urgency=low
8
9 * Initial Release.
10 * This is my first Debian package.
11 * Adjusted the Makefile to fix $DESTDIR problems.
12
13 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
14
15 Local variables:
16 mode: debian-changelog
</example>
(J'ai ajouté les numéros de ligne.)
<p>Vous pouvez en apprendre plus sur les nouvelles versions/révisions du
paquet plus loin dans <ref id="update">.
<sect id="rules">fichier 'rules'
<p>Maintenant nous devons examiner les règles que <manref
name="dpkg-buildpackage" section="1"> va utiliser pour créer vraiment le
paquet. Ce fichier est en fait un autre Makefile, puisqu'il est exécuté avec
'make -f', mais différent de celui des sources amont.
<p>Chaque fichier 'rules', comme tout autre Makefile, consiste en plusieurs
règles indiquant comment construire les sources. Les règles sont des cibles,
noms de fichiers ou d'actions à exécuter (par exemple, 'build:' ou
'install:'). Les règles que vous voulez exécuter doivent être données comme
argument à la ligne de commande (par exemple, 'rules build' ou 'rules
install'). Après le nom de cible, vous pouvez nommer les dépendances,
programme ou fichier dont la cible dépend. Après cela il peut y avoir un
nombre quelconque de commandes (qui commencent par <tab>!), jusqu'à ce
qu'une ligne vide soit trouvée. A ce moment, une autre règle commence. Les
lignes vides ainsi que celles qui commencent par un `#' (cardinal) sont
considérées comme des commentaires et ignorées.
<p>Vous êtes probablement confus pour l'instant, mais cela va devenir clair
à l'examen du fichier 'rules' que dh_make nous donne par défaut. Vous
devriez avoir lu l'entrée 'make' dans info pour plus d'information.
<p>Ce qu'il faut savoir à propos du fichier rules créé par df_make, est
qu'il s'agit juste d'une suggestion. Il fonctionnera pour des paquets
simples, mais pour ceux qui sont plus compliqués, vous ne devez pas craindre
d'y ajouter ou d'en soustraire pour le faire correspondre à vos besoins.
Les seules choses que vous ne pouvez pas changer sont les noms des règles,
car tous les outils utilisent ces noms comme requis par le manuel du
paquetage.
<p><example>
1 #!/usr/bin/make -f
2 # Made with the aid of dh_make, by Craig Small
3 # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
4 # Some lines taken from debmake, by Christoph Lameter.
5
6 # Uncomment this to turn on verbose mode.
7 #export DH_VERBOSE=1
8
9 # This is the debhelper compatability version to use.
10 export DH_COMPAT=1
11
12 build: build-stamp
13 build-stamp:
14 dh_testdir
15
16 # Add here commands to compile the package.
17 $(MAKE)
18
19 touch build-stamp
20
21 clean:
22 dh_testdir
23 dh_testroot
24 rm -f build-stamp
25
26 # Add here commands to clean up after the build process.
27 -$(MAKE) clean
28
29 dh_clean
30
31 install: build-stamp
32 dh_testdir
33 dh_testroot
34 dh_clean -k
35 dh_installdirs
36
37 # Add here commands to install the package into debian/tmp.
38 $(MAKE) install DESTDIR=`pwd`/debian/tmp
39
40 # Build architecture-independent files here.
41 binary-indep: build install
42 # We have nothing to do by default.
43
44 # Build architecture-dependent files here.
45 binary-arch: build install
46 # dh_testversion
47 dh_testdir
48 dh_testroot
49 # dh_installdebconf
50 dh_installdocs
51 dh_installexamples
52 dh_installmenu
53 # dh_installemacsen
54 # dh_installpam
55 # dh_installinit
56 dh_installcron
57 dh_installmanpages
58 dh_installinfo
59 # dh_undocumented
60 dh_installchangelogs
61 dh_link
62 dh_strip
63 dh_compress
64 dh_fixperms
65 # You may want to make some executables suid here.
66 dh_suidregister
67 # dh_makeshlibs
68 dh_installdeb
69 # dh_perl
70 dh_shlibdeps
71 dh_gencontrol
72 dh_md5sums
73 dh_builddeb
74
75 binary: binary-indep binary-arch
76 .PHONY: build clean binary-indep binary-arch binary install
</example>
(J'ai ajouté les numéros de ligne).
<p>Vous avez probablement l'habitude de la ligne 1 avec les scripts shell et
perl. Cela signifie que ce fichier doit être exécuté par /usr/bin/make.
<p>Les lignes 12 à 19 décrivent la règle 'build' (et sa fille build-stamp)
qui exécutent le fichier Makefile de l'application pour compiler le
programme.
<p>La règle 'clean', spécifiée aux lignes 21-29, efface tous les binaires
inutiles et les trucs générés automatiquement, laissés là par une
construction du paquet. Cette règle doit être opérationnelle tout le temps
(même si la les répertoires sources <em>sont</em> nettoyés.!), donc vous
devriez utiliser les options pour forcer (p.e. pour rm, c'est `-f') ou
pour ignorer la valeur de retour (avec un `-' devant le nom de la commande).
<p>Le processus d'installation, la règle 'install', commence à la ligne 31.
Fondamentalement, elle exécute la rège install du fichier Makefile du
programme, mais installe dans le répertoire `pwd`/debian/tmp - c'est pour
cette raison que nous avons spécifié $(DESTDIR) comme racine de
l'installation dans le Makefile de gentoo.
<p>Comme le commentaire le suggère, la règle 'binary-indep' aux lignes 41
est utilisé pour construire les paquets indépendants de l'architecture.
Comme nous n'en avons pas, rien ne sera fait ici. Si votre paquet est
`Architecture: all', vous devez inclure dans cette règle toutes les
commandes pour construire le paquet, et laisser la règle suivante
(`binary-arch') vide à la place.
<p>Ensuite on trouve la règle 'binary-arch', des lignes 45 à 73, pour
laquelle nous exécutons plusieurs petits utilitaires du paquet debhelper qui
font quelques opérations sur votre paquet pour le rendre conforme aux Normes
Debian.
<p>Les noms commencent par dh_ et la suite indique ce que chaque petit
utilitaire fait vraiment. Tout cela est plutôt explicite, mais voici
quelques explications supplémentaires :
<list>
<item><manref name="dh_testdir" section="1"> vérifie que vous êtes dans le
bon répertoire (i.e. le répertoire racine des sources),
<item><manref name="dh_testroot" section="1"> vérifie que vous avez les
permissions root, nécessaire pour les cibles binaires, et pour le nettoyage,
<item><manref name="dh_installmanpages" section="1"> copie les pages de
manuel qu'il peut trouver dans les répertoires sources (attention, ce n'est
pas un programme intelligent),
<item><manref name="dh_strip" section="1"> retire les entêtes de déboguage
des fichiers exécutables pour les rendre plus petits,
<item><manref name="dh_compress" section="1"> gzipe les pages de manuel et
la documentation plus large que 4 kb,
<item><manref name="dh_installdeb" section="1"> copie les fichiers relatifs
au paquet (p.e. les scripts du responsable) sous le répertoire
debian/tmp/DEBIAN,
<item><manref name="dh_shlibdeps" section="1"> calcule les dépendances
des librairies et des exécutables,
<item><manref name="dh_gencontrol" section="1"> génère et installe
le fichier control,
<item><manref name="dh_md5sums" section="1"> génère les sommes de contrôle
MD5 pour tous les fichiers dans le paquet.
</list>
<p>Pour une information plus complète sur ce que font tous ces scripts dh_*,
et ce que sont leurs options, lisez les pages de manuel. Il y en a
d'autres, potentiellement très utiles, qui ne sont pas mentionnés ici. Si
vous en avez besoin, lisez la documentation de debhelper.
<p>La section binary-arch est celle où vous devriez vraiment commenter les
lignes dont vous n'avez pas besoin. Pour gentoo, je commente les lignes
concernant testversion, emacsen, pam, init, cron, manpages, info,
undocumented, suidregister, makeshlibs, et perl, simplement parce que gentoo
n'en a pas besoin. De plus, à la ligne 60, je dois ajouter 'FIXES', parce
que c'est le nom du fichier des modifications amont.
<p>Les deux dernières lignes (avec toutes celles qui ne sont pas expliquées
ici) sont juste des choses plus ou moins nécessaires, a propos desquelles
vous pouvez lire dans le manuel de make, et dans le manuel de paquetage.
Pour l'instant il n'est pas important d'en savoir plus.
<chapt id="dother">Autres fichiers dans le répertoire debian/
<p>Vous verrez qu'il y a plusieurs autres fichiers dans le sous-répertoire
debian, la plupart d'entres-eux avec le suffixe `.ex', ce qui signifie
qu'ils sont des exemples. Si vous souhaitez ou devez utiliser une de ces
options, examinez-les avec la documentation associée (astuce : le manuel des
normes), renommez-les pour enlever le suffixe `.ex', et modifiez-les ainsi
que le fichier rules si nécessaire. Certains de ces fichiers, les plus
utilisés, sont décrits dans les sections suivantes.
<sect id="readdeb">README.Debian
<p>D'autres détails ou différences entre le paquet original et votre
version debianisée devraient être inclus ici. Voici ce que dh_make crée par
défaut :
<example>
gentoo for Debian
----------------------
<possible notes regarding this package - if none, delete this file>
Josip Rodin <jrodin@jagor.srce.hr>, Wed, 11 Nov 1998 21:02:14 +0100
</example>
<p>Nous n'avons rien en particulier à mettre ici - il est permis d'effacer
le fichier.
<sect id="conffiles">conffiles
<p>L'une des choses les plus irritantes a propos des logiciels est que vous
passez beaucoup de temps et d'efforts pour configurer un programme pour voir
une mise à jour détruire tous vos changements. Debian résout ce problème en
marquant les fichiers de configuration de sorte que quand vous mettez à jour
un paquet, il vous sera demandé si vous voulez gardez votre vieille
configuration ou pas. Vous faites ceci en entrant le chemin complet de
chaque fichier de configuration (en général sous /etc), un par ligne dans un
fichier nommé conffiles.
<p>Gentoo a un fichier de configuration, /etc/gentoorc, et nous le mettons
dans `conffiles'. Il n'est pas nécessaire d'avoir ce fichier si
votre programme n'a pas de fichier de configuration.
<sect id="dirs">dirs
<p>Ce fichier spécifie les répertoires dont nous avons besoin mais que la
procédure d'installation normale (make install) ne crée pas.
<p>Par défaut, il ressemble à ceci :
<p><example>
usr/bin
usr/sbin
</example>
<p>Remarquez que le préfixe slash n'est pas inclus. Nous devrions normalement
le changer comme ceci :
<p><example>
usr/X11R6/bin
usr/X11R6/man/man1
</example>
mais ces répertoires sont déjà créés dans Makefile, donc nous n'avons pas
besoin de ce fichier, et pouvons l'effacer.
<sect id="manpage">manpage.1.ex
<p>Les fichiers finissant en *.ex sont des exemples pour savoir comment
ajouter ce genre de support dans le paquet. Pour utiliser l'un d'entre
eux, éditez le et retirez l'extension .ex. Si vous ne voulez pas
l'utiliser, effacez-le.
<p>Votre programme devrait avoir une page de manuel. S'il n'en a pas, ceci
est un squelette que vous pouvez remplir. Lisez la page de manuel de <manref
name="man" section="7"> pour une brève description de la création d'une page
de manuel. Faites attention de donner à ce fichier le nom du programme et
l'extension de la section dans laquelle il doit aller. Voici une courte
liste :
<p><example>
Section | Description | Notes
1 Commandes utilisateur Commandes ou scripts exécutables.
2 Appel système Fonctions fournies par le noyau.
3 Appel librairie Fonctions des librairies système.
4 Fichiers spéciaux D'ordinaire trouvés dans /dev.
5 Formats de fichiers Par ex. le format /etc/password.
6 Jeux Ou d'autres programmes frivoles.
7 Paquets de macros Comme les macros de man.
8 Administration système Des programmes d'habitude exécutées par root.
9 Routines noyau Appels non standards et routines internes.
</example>
<p>Donc, la page de manuel de gentoo devrait être appelée gentoo.1, ou
gentoo.1x parce que c'est un programme X11. Il n'y avait pas de page de
manuel gentoo.1 dans les sources original, donc j'en ai écrit un à partir de
l'exemple et de la documentation amont.
<sect id="menu">menu.ex
<p>Les utilisateurs de X Window ont un gestionnaire de fenêtres avec un
menu qui peut être configuré. S'ils ont installés le paquet 'menu' de Debian,
un ensemble de menu pour chaque programme sur le système sera créé
pour eux. Ceci n'est pas requis pas le règlement Debian, mais les
utilisateurs apprécieront certainement. Nous pouvons ajouter Gentoo aux
menus en éditant ce fichier. Voici le défaut que dh_make crée :
<p><example>
?package(gentoo):needs=X11|text|vc|wm section=Apps/see-menu-manual\
title="gentoo" command="/usr/bin/gentoo"
</example>
<p>Le premier champs spécifie le genre d'interface dont le programme a
besoin (i.e. text ou X11). Le suivant est le menu et le sous-menu dans
lesquels l'entrée devrait apparaître. La liste courante des sections se
trouve dans /usr/share/doc/debian-policy/menu-policy.html/ch2.html#s2.1. Le
troisième est le nom du programme. Le quatrième est l'icône pour le
programme ou rien s'il n'en n'a pas. Le cinquième est le texte réelle qui
apparaîtra dans le menu. Le sixième est la commande qui lance le programme.
<p>Maintenant nous changeons l'entrée menu en ceci :
<p><example>
?package(gentoo):needs=X11 section=Apps/Misc \
title="Gentoo" command="/usr/X11R6/bin/gentoo"
</example>
<p>Voir <manref name="menufile" section="5">, <manref name="update-menus" section="1">
et /usr/share/doc/debian-policy/menu-policy.html/ pour plus d'information.
<sect id="watch">watch.ex
<p>Vous pouvez utiliser ce fichier en plus des programmes <manref name="uscan"
section="1"> et de <manref name="uupdate" section="1"> (dans le paquet
devscripts) pour surveiller le site duquel vous avez obtenu les sources.
Voici ce que j'y ai mis :
<p><example>
# watch control file for uscan
# Site Directory Pattern Version Script
ftp.obsession.se /gentoo gentoo-(.*)\.tar\.gz debian uupdate
</example>
<p>Astuce: connectez-vous à Internet, et essayez d'exécuter 'uscan' dans le
répertoire du programme une fois que vous avez créer ce fichier. Et lisez
les pages de manuel.
<sect id="doc-base">ex.doc-base
<p>Si votre paquet a de la documentation sous format HTML ou autre (à
l'exclusion des pages de manuel et des documents info), vous devriez
utiliser le fichier `doc-base' pour l'enregistrer, de sorte que
l'utilisateur puisse le trouver avec par exemple <manref name="dhelp"
section="1"> ou <manref name="dwww" section="1">.
<p>Voici ce à quoi le fichier doc-base de gentoo ressemble :
<p><example>
Document: gentoo
Title: Gentoo Manual
Author: Emil Brink
Abstract: This manual describes what Gentoo is, and how it can be used.
Section: Apps/Tools
Format: HTML
Index: /usr/share/doc/gentoo/html/index.html
Files: /usr/share/doc/gentoo/html/*.html
</example>
<p>Pour plus d'information sur le format de ce fichier, voir <manref
name="install-docs" section="1"> et le manual de doc-base, dans
/usr/doc/doc-base/doc-base.html/index.html.
<sect id="maintscripts">postinst.ex, preinst.ex, postrm.ex, prerm.ex
<p>Ces fichiers sont nommés scripts de responsable. Ils sont placés dans la
zone de contrôle du paquet et sont exécutés par dpkg lorsque votre paquet
est installé, mis à jour ou supprimé.
<p>Pour l'instant, vous devriez éviter les scripts de responsable si vous le
pouvez parce qu'ils ont tendance à être complexes. Pour plus d'information
regardez dans le Manuel de Création de Paquets, et examinez les fichiers
d'exemples fournis par dh_make.
<p>Nous sommes maintenant prêt pour construire le paquet.
<chapt id="final">Étapes finales
<sect id="build">Construire le paquet
<p>Allez dans le répertoire principal du programme et lancez ceci :
<p><example>
dpkg-buildpackage -rfakeroot
</example>
<p>Ceci fera tout pour vous, vous avez juste à entrer votre clé secrète
PGP, deux fois. Une fois que c'est fait, vous verrez cinq fichiers dans le
répertoire ~/debian :
<p><list>
<item><em>gentoo_0.9.12-1_i386.deb</em>
<p>Ceci est le paquet binaire complété. Vous pouvez utiliser dpkg ou dselect
pour l'installer ou le retirer juste comme tout autre paquet.
<item><em>gentoo_0.9.12.orig.tar.gz</em>
<p>Ceci est le code source original rassemblé de sorte que si quelqu'un
d'autre veut recréer votre paquet depuis le début, il le peut. Ou si il
n'utilise pas le système de paquet Debian, mais a besoin de télécharger
le code source et de le compiler.
<item><em>gentoo_0.9.12-1.dsc</em>
<p>Ceci est un résumé du contenu du code source. Ce fichier est généré à
partir du fichier gentoo-0.9.12/debian/control, et est utilisé pour
décompresser les sources avec <manref name="dpkg-source" section="1">. Ceci
est un fichier signé avec PGP, de sorte que les gens peuvent être sûrs
qu'il s'agit bien du votre.
<item><em>gentoo_0.9.12-1.diff.gz</em>
<p>Ce fichier compressé contient chacune des additions que vous avez faites
au code source original, sous une forme connue comme « différence unifiée ».
Il est crée et utilisé par <manref name="dpkg-source" section="1">.
<item><em>gentoo_0.9.12-1_i386.changes</em>
<p>Ce fichier contient toutes les modifications faites dans la révision
courante du paquet, et est utilisé par les programmes de maintenance des
archives FTP Debian pour y installer les paquets binaires et sources. Il
est partiellement généré à partir du fichier gentoo-0.9.12/debian/changelog
et du fichier .dsc.
<p>Au fur et à mesure que vous travaillez sur le paquet, son comportement va
changer et de nouvelles capacités seront ajoutées. Les gens qui téléchargent
votre paquet peuvent lire ce fichier et voir ce qui a changé. Les longues
chaînes de chiffres sont des sommes MD5 pour les fichiers mentionnés. Les
personnes téléchargeant vos fichiers peuvent les tester avec <manref
name="md5sum" section="1"> et si les fichiers ne correspondent pas, ils
sauront que le fichier a été corrompu ou qu'il a été piraté. Ce fichier est
signé avec PGP, de sorte que les gens peuvent être encore plus sûrs qu'il
s'agit bien du votre.
</list>
<p>Avec un paquet large, vous ne voudrez sans doute pas reconstruire depuis
le début chaque fois que vous faites une petite modification. Pour tester,
vous pouvez faire un fichier .deb sans reconstruire les sources amonts comme
ceci :
<p><example>
fakeroot debian/rules binary
</example>
<p>Assurez-vous juste que votre règle `install' n'a *pas* de fille
`install-stamp' (c'est en standard aujourd'hui), pour garantir que `dh_clean
-k' est exécuté chaque fois. Et une fois que vous en avez fini avec vos
réglages, n'oubliez pas de reconstruire en suivant la procédure correcte,
pour pouvoir télécharger correctement.
<sect id="checkit">Contrôler les erreurs du paquet
<p>Lancez <manref name="lintian" section="1"> sur votre fichier .changes; ce
programme va examiner un grand nombre d'erreurs de paquetage courantes. La
commande est :
<p><example>
lintian -i gentoo_0.9.12-1_i386.changes
</example>
<p>Bien sûr, remplacez le nom de fichier par celui du fichier de changements
généré pour votre paquet. S'il s'avère qu'il y a des erreurs (les lignes
commençant avec E:), lisez l'explication (les lignes N:), corrigez les
erreurs, et reconstruisez comme décrit dans <ref id="build">. S'il y a des
lignes qui commencent avec W:, il s'agit de mises en garde, donc vous pouvez
être sûr que votre paquet est bon (mais il nécessite certainement des
modifications mineures).
<p>Remarquez que vous pouvez reconstruire le paquet avec dpkg-buildpackage
et lancer lintian en une seule commande <manref name="debuild" section="1">.
<p>Regardez dans votre paquet en utilisant un gestionnaire de fichiers comme
<manref name="mc" section="1"> ou décompressez-le dans une place temporaire
en utilisant <manref name="dpkg-deb" section="1">. Cherchez avant tout les
fichiers inutiles à la fois dans les paquets binaire et source, au cas où
les choses se seraient mal passées et que des crasses n'auraient pas été
nettoyées. Astuce: `zgrep ^+++ ../gentoo_0.9.12-1.diff.gz` vous donnera la
liste de vos modifications/additions au fichiers sources, et `dpkg-deb -c
gentoo_0.9.12-1_i386.deb` la liste des fichiers dans le paquet.
<p>Installez le paquet pour le tester vous-même, par exemple en utilisant
<manref name="debi" section="1"> en tant que root. Essayez de l'installer
sur d'autres machines que la votre et vérifier attentivement chaque
avertissement ou erreur à l'installation ou en exécutant le programme.
<p>Plus tard, quand vous construisez une nouvelle version, vous devriez
faire les choses suivantes pour assurer une mise à jour de base de votre
paquet :
<list>
<item>mettez à jour à partir de la version précédente (et à partir de la
version de la dernière distribution Debian),
<item>revenez à la version précédente.
<item>installez le paquet comme un nouveau paquet (i.e., sans version
précédente d'installée),
<item>retirez le, réinstallez le à nouveau, et puis purgez le.
</list>
<sect id="upload">Envoyer votre paquet
<p>Maintenant que vous avez testé votre nouveau paquet en détail, vous
devez télécharger ces fichiers à master.debian.org, en utilisant <manref
name="dupload" section="1">. D'abord vous devez créer le fichier de
configuration d'upload, ~/.dupload.conf. Mettez-y quelque chose comme ceci :
<p><example>
package config;
$default_host = "master";
$cfg{master}{"method"} = "scpb";
$cfg{master}{"login"} = "joy";
$cfg{master}{"visibleuser"} = "jrodin";
$cfg{master}{"visiblename"} = "jagor.srce.hr";
$cfg{master}{"fullname"} = "Josip Rodin";
$cfg{non-us}{"method"} = "scpb";
$cfg{non-us}{"login"} = "joy";
$cfg{non-us}{"visibleuser"} = "jrodin";
$cfg{non-us}{"visiblename"} = "jagor.srce.hr";
$cfg{non-us}{"fullname"} = "Josip Rodin";
1;
</example>
<p>Bien sur, remplacez mes informations personnelles par les votre, et lisez
la page de manuel <manref name="dupload.conf" section="5"> pour comprendre
ce que chacune de ces options signifie.
<p>Puis connectez vous à votre fournisseur Internet et lancez cette
commande :
<p><example>
dupload --to master gentoo_0.9.12-1_i386.changes
</example>
<p>Dupload vérifie que les sommes md5 des fichiers sont identiques à celles
du fichier .changes, pour qu'il puisse vous avertir de reconstruire comme
décrit dans <ref id="build"> et qu'il charge le fichier correctement.
<p>Dupload vous demandera pour votre mot de passe sur master.debian.org,
téléchargera vos paquets, et donnera une annonce courte de votre
téléchargement sur <email/debian-devel-changes@lists.debian.org/ si
nécessaire.
<p>Si vous vivez en Europe, vous pouvez utiliser d'autres queues de
téléchargement à la place de master. Pour des détails lisez <manref
name="dupload.conf" section="5"> et la Référence du Développeur.
<sect id="update">Mettre à jour le paquet
<p>Disons qu'un rapport de bogue a été rempli pour votre paquet, #54321, et
qu'il décrit un problème que vous pouvez résoudre. Pour créer une nouvelle
révision du paquet, vous devez:
<list>
<item>Corriger le problème dans le paquet source, bien sûr.
<item>Ajouter une nouvelle révision dans le fichier changelog Debian, avec
`dch -i', et inclure une courte description du bug et de la solution,
suivie par ceci : 'Closes: #54321'. De cette manière, le rapport de bogue
sera automatiquement fermé par le logiciel de maintenance des archives au
moment ou votre paquet sera accepté dans l'archive Debian.
<item>Recommencez ce que vous aviez fait dans <ref id="build">, <ref
id="checkit">, et <ref id="upload">. La différence est que cette fois,
l'archive des sources originales ne sera pas inclue, car elle n'a pas été
changée et est déjà dans l'archive Debian.
</list>
<p>Considérons maintenant une autre situation, légèrement plus compliquée -
une nouvelle version amont est disponible, et bien sûr vous voulez en faire
un paquet. Vous devez donc :
<list>
<item>télécharger les sources et mettre l'archive source (par exemple nommée
`gentoo-0.9.13.tar.gz') dans le répertoire au dessus des anciennes sources
(par exemple ~/debian/).
<item>Entrez dans le répertoire source ancien, et lancez:
<example>
uupdate -u gentoo-0.9.13.tar.gz
</example>
Bien sûr, remplacez le nom de fichier par celui de l'archive source de votre
programme. <manref name="uupdate" section="1"> va correctement renommer
cette archive, essayer d'appliquer les modifications de votre précédent
fichier .diff.gz, et mettre à jour le nouveau fichier debian/changelog.
<item>Allez dans le répertoire `../gentoo-0.9.13', l'arbre des sources du
nouveau paquet, et recommencez ce que vous aviez fait dans <ref id="build">,
<ref id="checkit"> et <ref id="upload">.
</list>
<p>Remarquez que si vous configurez `debian/watch' comme indiqué dans <ref
id="watch">, vous pouvez lancer <manref name="uscan" section="1"> pour
automagiquement chercher les nouvelles sources, les télécharger et exécuter
uupdate dessus.
<sect id="whereishelp">Où demander de l'aide
<p>Avant de vous décider à poser une question dans un lieu public, s.v.p.
RTFM. Ceci inclut la documentation sous /usr/share/doc/dpkg,
/usr/share/doc/debian, /usr/share/doc/debhelper et les pages de
manuel/d'info pour tous les programmes mentionnés dans cet article. Quand
vous recevez un rapport de bogue (oui, un rapport de bogue réel!) vous
saurez qu'il est temps de plonger dans <url name="Système de Suivi de Bogues
Debian" id="http://www.debian.org/Bugs/"> et lisez la documentation là, pour
être à même de gérer les rapports efficacement.
<p>En joignant la liste de discussion Debian Mentors à
<email/debian-mentors@lists.debian.org/ vous pouvez joindre des développeurs
Debian expérimentés qui vous aideront avec les questions que vous pouvez
avoir. Vous pouvez vous y inscrire en envoyant un courriel à
<email/debian-mentors-request@lists.debian.org/ avec le mot 'subscribe' dans
le sujet du message.
<p>Si vous avez encore des questions, posez les sur la liste de discussion
Debian Developers à <email/debian-devel@lists.debian.org/. Vous pouvez vous y
inscrire en envoyant un courriel à
<email/debian-devel-request@lists.debian.org/ avec le mot 'subscribe' dans
le sujet du message. Si vous êtes déjà un développeur Debian, vous devriez y
être inscrit de toute manière.
<p>Même si tout marche bien, il est temps de commencer à prier. Pourquoi ?
Parce que dans quelques heures (ou jours) les utilisateurs du monde entier
vont commencer à utiliser votre paquet, et si vous avec fait des erreurs
critiques vous serez bombardé par les courriels d'utilisateurs Debian
furieux... Je plaisante. :-)
<p>Relaxez-vous et soyez prêt pour les rapports de bogues, parce qu'il y aura
beaucoup plus de travail à faire avant qu'il soit parfaitement conforme
aux règles Debian (une fois encore, lisez la <em>documentation réelle</em>
pour les détails). Bonne chance !
</book>
</debiandoc>
Reply to: