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.
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 majeurs 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 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:.
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 qu'elles veulent dire normalement :
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.
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.
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.
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 et correctement configurés. Utilisez le très rarement et seulement après en avoir discuté sur la liste de discussion debian-devel. Traduisez: ne l'utilisez pas du tout. :-)
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.
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.
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.
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 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 <<, <=, =, >= et >> pour strictement plus petit, plus petit ou égal, exactement égal, plus grand ou égal et strictement plus grand, respectivement.
La dernière capacité 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 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.
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.)
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 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 :
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.)
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 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.
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 à 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 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 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é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`.
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.
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 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.
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écutent 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 la 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é 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 :
dh_testdir(1)
vérifie que vous êtes dans le bon répertoire (i.e.
le répertoire racine des sources),
dh_testroot(1)
vérifie que vous avez les permissions root,
nécessaire pour les cibles binaires, et pour le nettoyage,
dh_installmanpages(1)
copie les pages de manuel qu'il peut trouver
dans les répertoires sources (attention, ce n'est pas un programme
intelligent),
dh_strip(1)
retire les entêtes de déboguage des fichiers
exécutables pour les rendre plus petits,
dh_compress(1)
gzipe les pages de manuel et la documentation plus
large que 4 kb,
dh_installdeb(1)
copie les fichiers relatifs au paquet (p.e. les
scripts du responsable) sous le répertoire debian/tmp/DEBIAN,
dh_shlibdeps(1)
calcule les dépendances des bibliothèques et des
exécutables,
dh_gencontrol(1)
génère et installe le fichier control,
dh_md5sums(1)
génère les sommes de contrôle MD5 pour tous les
fichiers dans le paquet.
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, 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.
jrodin@jagor.srce.hr
frederic.dumont@freeworld.be