[ précedent ] [ Copyright ] [ Table des matières ] [ suivant ]

Guide du nouveau responsable Debian
Chapitre 4 Ce qui est requis sous debian/


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.


4.1 fichier « control »

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.

       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>

(J'ai ajouté les numéros de ligne.)

Les lignes de 1 à 5 sont les informations de contrôle pour le paquet source. La ligne 1 est le nom du paquet source.

La ligne 2 est la section de la distribution dans laquelle ce paquet va. Comme vous l'avez constaté, Debian est divisée 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 bibliothèques « 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.

Changeons donc la section en x11.

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.

Comme c'est un paquet de priorité normale, nous le laissons à « optional ».

La ligne 4 est le nom et l'adresse mél du responsable.

La ligne 5 est la version du standard de Règles Debian que ce paquet respecte (deux versions majeures du paquet debian-policy installé).

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

La ligne 7 est le nom du paquet binaire.

La ligne 8 décrit l'architecture CPU pour laquelle le paquet binaire peut être compilé. Vous pouvez le laisser à « any » car dpkg-gencontrol(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 fichier « rules », Section 4.4 comment utiliser la règle « binary-indep » au lieu de « binary-arch » pour construire le paquet.

La ligne 9 montre une des caractéristiques les plus puissantes du système de paquet Debian. Les paquets peuvent être liés entre eux de plusieurs façons. À part « Depends: » les autres champs décrivant ces relations sont « Recommends: », « Suggests: », « Pre-Depends: », « Conflicts: », « Provides: », et « Replaces: ».

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 dpkg(8), dselect(8), apt(8), console-apt(8), gnome-apt(8))

Voici ce que ces champs veulent dire normalement :

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 | (symbole tube). Les champs peuvent être restreints à 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 <<, <=, =, >= et >> pour strictement plus petit, plus petit ou égal, exactement égal, plus grand ou égal et strictement plus grand, respectivement.

La dernière caractéristique que vous devez connaître est « $(shlibs:Depends) ». Ceci sera automatiquement généré par dh_shlibdeps(1) et rempli par dh_gencontrol(1) avec les noms de toutes les bibliothèques 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.

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.

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

À la ligne 12 commence la description longue. 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.

Voici le fichier control mis à jour:

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

(J'ai ajouté les numéros de ligne.)


4.2 fichier 'copyright'

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 :

       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>

(J'ai ajouté les numéros de ligne.)

Les choses importantes à ajouter à ce fichier sont 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 :

       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.

(J'ai ajouté les numéros de ligne.)


4.3 changelog

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.

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

Dh_make en crée un par défaut, voici à quoi il ressemble :

       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:

(J'ai ajouté les numéros de ligne.)

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 en quoique ce soit de plus haut que « low ». :-)

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 amont - il y a un fichier spécial pour cela, créé par les auteurs en amont, 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 dch(1) emacs(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 :

       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

(J'ai ajouté les numéros de ligne.)

Quand vous distribuez une nouvelle révision, vous devez 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 ».

Les nouvelles informations de version sont ajoutées au sommet du fichier changelog. Voici ce à quoi ressemble changelog après :

       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

(J'ai ajouté les numéros de ligne.)

Vous pouvez en apprendre plus sur les nouvelles versions/révisions du paquet plus loin dans Mettre à jour le paquet, Section 6.4.


4.4 fichier « rules »

Maintenant nous devons examiner les règles que dpkg-buildpackage(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.

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. À ce moment, une autre règle intervient. Les lignes vides ainsi que celles qui commencent par un « # » (dièse) sont considérées comme des commentaires et ignorées.

Tout ceci vous semble 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.

Ce qu'il faut savoir à propos du fichier rules créé par dh_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 de le modifier 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.

       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

(J'ai ajouté les numéros de ligne).

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.

Les lignes 12 à 19 décrivent la règle « build » (et sa fille build-stamp) qui exécute le fichier Makefile de l'application pour compiler le programme.

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 les répertoires sources sont 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).

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.

Comme le commentaire le suggère, la règle « binary-indep » aux lignes 41 est utilisée 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.

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.

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 :

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.

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.

Les deux dernières lignes (avec toutes celles qui ne sont pas expliquées ici) sont juste des choses plus ou moins nécessaires, à 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.


[ précedent ] [ Copyright ] [ Table des matières ] [ suivant ]
Guide du nouveau responsable Debian
version 1.0.2, 10 juin 2001.
Josip Rodin jrodin@jagor.srce.hr
Traducteur : Frédéric Dumont frederic.dumont@freeworld.be