Créer un paquet Debian

Jaldhar Vyas

Frédéric Dumont


Table des matières
Note du traducteur
1. Introduction et premiers pas
2. Création du paquet
2.1. control
2.2. Makefile
2.3. rules
2.4. dirs
2.5. copyright
2.6. README.debian
2.7. changelog
2.8. conffiles
2.9. *.ex
3. Construction
4. Pour plus d'informations
Quelques livres d'introduction sur la programmation sous Linux/Unix
Liste des tableaux
2-1. Section des pages de manuel

Note du traducteur

Ceci est la version française de "Making a Debian Package". La version originale peut être trouvée à http://www.braincells.com/debian/make_package/. L'auteur orginal, Jaldhar Vyas peut être joint à jaldhar@debian.org et le traducteur, Frédéric Dumont, à frederic.dumont@gate71.be


Chapitre 1. Introduction et premiers pas

Ce qui fait de Debian une distribution de si haut niveau est, entre autre, son système de paquet. Bien qu'il y aie une grande quantité de logiciels disponibles au format Debian, il est parfois nécessaire d'installer des logiciels qui ne le sont pas. Vous vous êtes peut-être demandé comment faire vos propres paquets, et vous pensez que c'est difficile. J'ai moi-même (NdT : c'est l'auteur qui parle, pas moi) commencé à travailler avec les paquets Debian, et j'ai été plaisamment surpris de la facilité de la tâche. Vous devez avoir quelques connaissances sur la programmation Unix, mais vous ne devez pas être un gourou.

C'est la seconde version (NdT : et la première version française) de cet article. Rien ne reste fixe très longtemps dans le monde Debian, aussi ai-je fait certains changements importants pour rester à jour. J'ai également inclus certains conseils repris des mailing-lists des Utilisateurs et Développeurs Debian, ou suggérés par les lecteurs.

Avant de commencer, vous aurez besoin d'installer et de configurer les paquets suivants. Je suppose que vous utilisez Hamm, la distribution "instable" de Debian. Dans ce contexte, "instable" signifie "en cours de développement". Hamm deviendra la prochaine version (2.0) de Debian.

Les paquets suivants sont disponibles dans la section devel de la distribution.

binutils

Les programmes de ce paquet sont utilisés pour assembler et lier les fichiers objets -- les trucs dont sont faits les programmes.

gcc

C'est le compilateur C de GNU. La plupart des programmes pour Linux sont écrits en C.

libc6-dev

Ce sont les librairies C et les fichiers d'entête dont gcc a besoin pour créer les fichiers objets. Au moment ou j'écris, Debian est en transition entre libc5 et libc6. Tous les nouveaux paquets devraient être créés en utilisant libc6. Pour des instructions sur la façon de passer à libc6, lisez le mini-HOWTO de Scott Ellis.

libg++272

Les librairies C++. fakeroot en a besoin.

make

En général, la création d'un programme se fait en plusieurs étapes. Plutôt que de taper encore et encore les mêmes commandes, vous pouvez utiliser make pour automatiser le processus.

fakeroot

Comme le nom le suggère, ce programme simule le statut de root nécessaire pour une partie de la création. Bien qu'en cours de développement, fakeroot est utilisable. Auparavant, il fallait un accès root ou un programme comme sudo, mais ceci est plus facile et devrait être plus sûr.

Le paquet suivant est dans la section interpreters de la distribution

cpp

Le pré-processeur C.

Les paquets suivants sont dans la section utils de la distribution.

cpio

C'est un archiveur comme tar ou zip. Requis par dpkg-dev.

file

Ce programme bien utile détermine le type d'un fichier. Requis par dpkg-dev.

debmake

C'est un ensemble de plus haut niveau pour la création de paquets Debian. Vous n'en avez pas vraiment besoin, mais je le recommande. Il rend le processus nettement plus simple, surtout pour les débutants. Nous utiliserons debmake pour créer notre exemple de paquet.

dpkg-dev

Ce paquet contient les outils nécessaire pour créer les archives Debian. Il contient également les manuels du Programmeur Debian et de Programmation de dpkg (NdT : vérifier la traduction française du titre, en supposant que cette traduction existe).

devscript

Ce paquet est un compagnon de debmake et contient des scripts utiles pour la création et la maintenance des paquets.

patch

patch prend un fichier contenant la liste des différences produites par le programme diff, et l'applique à un original, produisant la version patchée.

Les paquets suivants sont dans la section doc de la distribution.

debian-policy

Il s'agit de la source d'information définitive concernant la création de paquet Debian. Si vous constatez la moindre différence entre le manuel des normes et cet article, le manuel des normes est la référence.

developers-reference

Des informations pour les personnes désirant devenir des développeurs Debian officiels.

Vous aurez aussi besoin du paquet de cryptage pgp, pour signer votre paquet. Ceci est particulièrement important si vous désirez distribuer votre paquet à d'autres personnes. Cependant, à cause d'une loi américaine, vous ne pouvez pas le télécharger depuis le miroir ftp Debian le plus proche. Par contre, le site ftp contient à la racine un fichier nomme README.non-us qui vous dira comment obtenir une copie de pgp.

Cette description que j'ai donnée ci-dessus ne sert que d'introduction à ce que chaque paquet fait. Avant de continuer, consultez attentivement la documentation de chaque programme. Cela semble lourd a priori, mais plus tard vous serez content de l'avoir fait.


Chapitre 2. Création du paquet

Maintenant que vous avez installé les bons paquets et lu la documentation, vous êtes prêt à commencer. Comme exemple, nous allons créer un paquet Debian pour empire. Il s'agit d'un jeu de stratégie où vous créez un empire.

La première chose à faire est de télécharger le paquet original. Sunsite est le plus grand miroir Linux que je connaisse, aussi ai-je cherché dans mon miroir sunsite local et l'ai trouvé ici .

Il y a deux types de paquets que vous pouvez faire, source et binaire. Un paquet source contient le code que vous pouvez compiler en un programme. Un paquet binaire contient juste le programme fini. Si vous désirez contribuer un paquet à la distribution Debian officielle, il doit venir avec des sources librement utilisables. Consultez le Contrat social de Debian (NdT : le lire pour trouver la traduction exacte des Guidelines...) pour les détails exacts. Empire est disponible en source donc on pourra faire des paquets source et binaire.

debmake veut que les sources soient dans un répertoire nommé <nom_paquet>-<numéro_version>, aussi créons un répertoire empire-1.1 et décompressons le fichier .tgz dedans (j'ai eu le numéro de version du fichier lsm qui vient avec chaque programme chargé sur sunsite).

      $ mkdir empire-1.1
      $ mv empire.tar.gz empire-1.1
      $ cd empire-1.1
      $ tar -xvzf empire.tar.gz
    
et si tout va bien
	$ rm empire.tar.gz
      

Quand vous lancez deb-make, certaines informations sont utilisées. L'une d'entre elles est votre adresse email qui sera inclue dans le paquet de sorte que les gens peuvent vous contacter si ils ont des problèmes. Si vous voulez utiliser une autre adresse que l'adresse actuelle, mettez la dans la variable d'environnement EMAIL avant de lancer deb-make, comme ceci :

	$ export EMAIL=jaldhar@debian.org
      

Il vous sera demandé le genre de paquet que vous voulez générer.

single

Choisissez ceci pour créer un paquet unique.

multiple

Choisissez ceci pour créer plusieurs .deb à partir d'un seul ensemble de code source. L'un des intérêts est de diviser un paquet très gros en plus petites pièces de sorte que les utilisateurs peuvent choisir ce qu'ils installent.

library

Choisissez ceci pour créer au moins deux .deb, l'un avec la librairie dans /usr/lib, l'autre,<nom_lib>-dev_<version_lib>.deb, avec la documentation et les fichiers entêtes.

Maintenant, lançons deb-make et choisissons l'option single.

	$ deb-make
      

Quand deb-make a fini, si vous tapez cd .., vous constatez qu'un nouveau répertoire a été créé, nommé empire-1.1.orig, qui contient le code source original et qui ne sera par la suite plus modifié. Le répertoire empire-1.1 existe toujours. C'est là que seront fait les changements. Il y a un nouveau répertoire nommé debian. Examinez-le.

	$ cd empire-1.1/debian
      

Il y a plusieurs fichiers dans ce répertoire. Nous allons les éditer pour configurer le comportement du paquet.


2.1. control

Ce fichier contient les valeurs que dpkg et dselect utilisent pour gérer le paquet. Voici ce que deb-make a créé pour nous :

	  1  Source: empire
	  2  Section: unknown
	  3  Priority: extra
	  4  Maintainer: Jaldhar H. Vyas <jaldhar@debian.org>
	  5  Standards-Version: 2.3.0.0
	  6 
	  7  Package: empire
	  8  Architecture: any
	  9  Depends: ${shlibs:Depends}
	  10 Description: Missing
	  11  Missing
	
(j'ai ajouté les numéros de lignes)

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

La ligne 2 est la section du paquet. Changeons la en games.

La ligne 3 indique à quel point il est important que l'utilisateur installe ce paquet. Comme, hélas, notre jeu n'est vraiment pas important, nous pouvons le laisser en extra. La section et la priorité sont en fait uniquement utilisés par dselect quand il trie les paquets et sélectionne par défaut. Lisez le manuel des normes pour des indications sur les valeurs à mettre.

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

La ligne 5 est la version du standard des Normes Debian que ce paquet suit.

Les lignes 7-11 concernent le paquet binaire.

La ligne 7 est le nom du paquet binaire.

La ligne 8 décrit l'architecture CPU pour laquelle ce paquet a été compilé. Nous pouvons y laisser n'importe quoi car dpkg-gencontrol(1) y mettra la valeur appropriée.

La ligne 9 montre un des grands points forts du système de paquet Debian. Les paquets peuvent être liés aux autres d'une manière ou d'une autre. Outre les Depends, les autres relations sont Recommands, Suggests, Pre-depends, Conflicts, Provides et Replaces. Voici ce qu'ils signifient :

Depends

dpkg et dselect n'installeront votre paquet que si le paquet duquel il dépend est installé. Utilisez cette relation si votre programme ne tourne que si un autre paquet est présent.

Recommends

dselect n'installera votre paquet que si le paquet recommandé est installé. dpkg vous laissera l'installer sans restriction. Utilisez ceci pour les paquets qui ne sont pas vraiment nécessaires, mais qui sont souvent utilisés avec votre programme.

Suggests

quand un utilisateur installe votre programme, dselect lui demandera s'il doit installer les paquets suggérés. dpkg ne s'en soucie pas. Utilisez ceci pour les paquets qui fonctionnent bien avec votre programme, mais qui ne sont pas nécessaires.

Pre-depends

Cette relation est plus forte que Depends. dpkg et dselect n'installeront votre programme que si les paquets dont il pré-dépend sont installés et correctement configurés. N'utilisez ceci que rarement, et toujours après en avoir discuté sur la mailing-list debian-devel.

Conflicts

ni dpkg ni dselect n'installeront votre programme à moins que chaque paquet avec lequel il est en conflit n'ait été retiré.

Provides

Pour certains types de paquets, lorsque de multiples versions sont disponibles, des noms virtuels ont été définis. La liste complète est dans usr/doc/debian-policy/virtual-package-names-list.text.gz. Utilisez ceci si votre programme fourni un paquet virtuel.

Replaces

Utilisez ceci quand votre programme remplace un autre paquet. dpkg et dselect retirerons le paquet remplacé avant d'installer le votre.

Ces champs ont une même syntaxe. C'est une liste de noms de paquets séparés par des virgules. Les noms de paquets peuvent être aussi une liste de noms alternatifs de paquets, séparés par une barre verticale |. Le champs peut être restreint à des versions particulières pour chaque nom de paquet. On l'indique entre parenthèses après chaque nom de paquet. Les parenthèses contiennent l'une des relations suivantes, suivie par un numéro de version : <<, <=, =, >=, >>. Les relations signifient, dans l'ordre, strictement plus vieux, plus vieux ou égal, égal, plus récent ou égal, strictement plus récent. La dernière capacité que je veux vous montrer est $(shlibs:Depends). Ce champs sera automatiquement rempli par debmake avec les noms de toutes les librairies partagées (DLLs) telles que libc6, utilisées par le programme, de sorte que vous n'avez pas à les indiquer vous-même. Une fois ceci dit, vous pouvez laisser la ligne 9 telle quelle, car Empire ne dépend d'aucun autre paquet.

La ligne 10 est la description courte. La plupart des gens ont des écrans texte de 80 caractères de long, aussi cela ne devrait pas dépasser les 50 caractères. Changeons le en "an empire-building strategy game".

La ligne 11 est la description longue. Ce devrait être un paragraphe qui donne plus de détail sur le paquet. La première colonne de chaque ligne doit être vide. Il ne doit pas y avoir de ligne vide. Mettez un . dans la deuxième colonne pour simuler une ligne vide.

Voici la nouvelle version du fichier de contrôle :

	  1   Source: empire
	  2   Section: games
	  3   Priority: extra
	  4   Maintainer: Jaldhar H. Vyas <jaldhar@debian.org>
	  5   Standards-Version: 2.3.0.0
	  6   
	  7   Package: empire
	  8   Architecture: any
	  9   Depends: ${shlibs:Depends}
	  10  Description: an empire-building strategy game
	  11   A solitaire empire game (sometimes called 'VMS Empire'), colorized and
	  11a  speed tuned and with a save-interval option.
	  11b  .
	  11c  In this game a player has to try to build and defend an empire.
	


2.2. Makefile

Quittons un instant le répertoire debian et remontons d'un répertoire pour examiner le fichier Makefile de Empire. C'est le fichier que make(1) utilisera pour générer le programme automatiquement.

	  1  # %W% %G% %U% - (c) Copyright 1987, 1988 Chuck Simmons
	  2  
	  3  #
	  4  # Copyright (C) 1987, 1988 Chuck Simmons
	  5  #
	  6  # See the file COPYING, distributed with empire, for restriction
	  7  # and warranty information.
	  8  
	  9  # Change the line below for your system. If you are on a Sun or Vax,
	  10 # you may want BSD.
	  11 
	  12 SYS = BSD
	  13 #SYS = SYSV
	  14 
	  15 # Use -g to compile the program for debugging.
	  16 
	  17 DEBUG = -g -DDEBUG
	  18 #DEBUG = -O
	  19 
	  20 # Use -p to profile the program.
	  21 #PROFILE = -p -DPROFILE
	  22 PROFILE =
	  23 
	  24 # Define all necessary libraries. 'curses' is necessary. 'termcap'
	  25 # is needed on BSD systems.
	  26 LIBS = -ldcurses
	  27 #LIBS = -lcurses -ltermcap
	  28 
	  29 # You shouldn't have to modify anything below this line.
	  30 
	  31 CFLAGS = $(DEBUG) $(PROFILE) -D$(SYS)
	  32 INS = /etc/install
	  33 
	  34 FILES = \
	  35     attack.c \
	  36     compmove.c \
	  37     data.c \
	  38     display.c \
	  39     edit.c \
	  40     empire.c \
	  41     game.c \
	  42     main.c \
	  43     map.c \
	  44     math.c \
	  45     object.c \
	  46     term.c \
	  47     usermove.c \
	  48     util.c
	  49 
	  50 HEADERS = empire.h extern.h
	  51 
	  52 OFILES = \
	  53     attack.o \
	  54     compmove.o \
	  55     data.o \
	  56     display.o \
	  57     edit.o \
	  58     empire.o \
	  59     game.o \
	  60     main.o \
	  61     map.o \
	  62     math.o \
	  63     object.o \
	  64     term.o \
	  65     usermove.o \
	  66     util.o
	  67 
	  68 all: empire
	  69 
	  70 empire: $(OFILES)
	  71     $(CC) $(PROFILE) -o empire $(OFILES) $(LIBS)
	  72 
	  73 TAGS: $(HEADERS) $(FILES)
	  74     etags $(HEADERS) $(FILES)
	  75 
	  76 lint: $(FILES)
	  77     lint -u -D$(SYS) $(FILES) -lcurses
	  78 
	  79 clean:
	  80     rm -f *.o TAGS
	  81 
	  82 clobber: clean
	  83     rm -f empire empire.tar*
	  84 
	  85 install: empire
	  86     $(INS) -o -f /usr/local/games empire
	  87 
	  88 installman: empire.6
	  89     $(INS) -f /usr/local/man/man6 empire.6
	  90 
	  91 SOURCES = READ.ME empire.6 COPYING Makefile BUGS $(FILES) $(HEADERS) MANIFEST empire.lsm
	  92 
	  93 empire.tar: $(SOURCES)
	  94     tar -cvf empire.tar $(SOURCES)
	  95 empire.tar.gz: empire.tar
	  96     gzip empire.tar
	  97 
	  98 empire.shar: $(SOURCES)
	  99     shar $(SOURCES) >empire.shar
	

Avec de la chance, vous aurez dans votre paquet un joli makefile bien créé, et vous n'aurez rien d'autre à faire. Mais mon expérience est que vous avez toujours quelques modifications à apporter pour qu'il fonctionne correctement. Il n'y a pas la place nécessaire pour expliquer les détails concernant la correction des makefiles, mais voici quelques problèmes que vous pouvez rencontrer.

Regardez les lignes 12 et 13. Il existe au moins deux variantes principales de Unix, System V et BSD. Linux comporte des éléments des deux, mais en général vous choisirez System V. Aussi nous commentons la ligne 12 et remettons la ligne 13. Nous ne voulons pas des options de débugages.

	  12 #SYS = BSD
	  13 SYS = SYSV
	
	  17 #DEBUG = -g -DDEBUG
	  18 DEBUG = -O
	

Le plus important problème est d'oublier que les lignes dans les buts telles que les lignes 35-48 doivent être indentées avec une tabulation. Pas des espaces. Souvent, quand vous coupez-collez les tabulations sont remplacées par des espaces, et vous aurez d'étranges messages d'erreur.

Les librairies sont souvent différentes d'une plateforme à l'autre. La ligne 26 fait référence à dcurses, qui n'existe pas sous Debian. Nous devons donc utiliser ncurses.

	  26 LIBS = -lncurses
	  27 #LIBS = -lcurses -ltermcap
	

Un autre problème est la localisation des exécutables. Par exemple, la ligne 32 place install(1) dans /etc/. Sous Debian, ce programme est dans /usr/bin, aussi nous devons éditer cette ligne.

	  32  INS = /usr/bin/install
	

Debian a des normes strictes quant à l'endroit où les programmes doivent être installés. Ceci est spécifié dans /usr/doc/debian-policy/fsstnd. Pour suivre ces normes, nous devons installer l'exécutable dans /usr/games plutôt que dans /usr/local/games, et la page de manuel dans /usr/man/man6 plutôt que dans /usr/local/man/man6. Il va y avoir un autre problème. Le programme install de Debian a d'autres options que celui du système de l'auteur de Empire. En bref, -o désigne le propriétaire, -g le groupe, et -m les permissions pour chaque fichier. Le manuel des normes spécifie ce que chacun devrait être. Sur les exécutables, nous utilisons -s pour retirer les informations de débugage. Cela les rendra plus petits de sorte qu'ils utiliseront moins de place disque et moins de mémoire. Consultez la page de manuel d'install pour plus de renseignements.

Nous changeons les lignes 85-89 comme suit (les raisons pour préfixer les chemins par debian/tmp seront décrites plus bas).

	  85 install: empire
	  86     $(INS) -o root -g root -m 0755 -s empire debian/tmp/usr/games/empire
	  87 
	  88 installman: empire.6
	  89     $(INS) -o root -g root -m 0644 empire.6 debian/tmp/usr/man/man6/empire.6
	

Beaucoup de makefiles auront une macro nommée DESTDIR qui spécifie le répertoire d'installation. Si elle existe, vous devriez la mettre à debian/tmp.

Si vous être vraiment malchanceux, vous aurez à modifier le source lui-même. Quand vous faites ce genre de modification, faites-le de manière non-destructrice, de sorte que quelqu'un ayant une autre plateforme n'ait pas à défaire vos changements. Encadrez-les avec quelque chose du genre :

	  #ifdef DEBIAN...#endif
	
pour les isoler. Si vous faites des modifications, envoyez-les à l'auteur original ou au responsable de sorte qu'elles soient en standard dans la version suivante.


2.3. rules

Maintenant, nous revenons dans le répertoire debian et jetons un oeil aux règles que dpkg-dev utilise pour créer vraiment le paquet. Voici ce que debmake nous donne comme fichier de règles par défaut :

	  1  #!/usr/bin/make -f
	  2  # Made with the aid of debmake, by Christoph Lameter,
	  3  # based on the sample debian/rules file for GNU hello by Ian Jackson.
	  4 
	  5  package=empire
	  6
	  7  build:
	  8     $(checkdir)
	  9     
	  10    make CFLAGS="-O2 -g -Wall"
	  11 
	  12    touch build
	  13
	  14 clean:
	  15    $(checkdir)
	  16    -rm -f build
	  17    -make clean
	  18    -rm -f `find . -name "*~"`
	  19    -rm -rf debian/tmp debian/files* core debian/substvars
	  20
	  21 binary-indep:    checkroot build
	  22    $(checkdir)
	  23 # There are no architecture-independent files to be uploaded
	  24 # generated by this package. If there were any they would be
	  25 # made here.
	  26 
	  27 binary-arch:    checkroot build
	  28    $(checkdir)
	  29    -rm -rf debian/tmp
	  30    install -d debian/tmp
	  31    cd debian/tmp && install -d `cat ../dirs`
	  32    make install DESTDIR=`pwd`/debian/tmp
	  33 # Must have debmake installed for this to work. Otherwise please copy
	  34 # /usr/bin/debstd into the debian directory and change debstd to debian/debstd
	  35    debstd BUGS 
	  36    dpkg-gencontrol
	  37    chown -R root.root debian/tmp
	  38    chmod -R go=rX debian/tmp
	  39    dpkg --build debian/tmp ..
	  40 
	  41 define checkdir
	  42    test -f debian/rules
	  43 endef
	  44 
	  45 # Below here is fairly generic really
	  46 
	  47 binary:        binary-indep binary-arch
	  48 
	  49 checkroot:
	  50    $(checkdir)
	  51    test root = "`whoami`"
	  52
	  53 .PHONY: binary binary-arch binary-indep clean checkroot
	

Vous vous êtes probablement familiarisé avec des lignes comme la ligne une, de part les scripts shell ou perl. Cela signifie que le fichier sera exécuté par make. La ligne 10 déclenche le fichier makefile de l'application. La partie CFLAGS de cette ligne indique des options de compilation par défaut, au cas ou le makefile de l'application n'en aurait pas. Nous n'avons pas de soucis à nous faire pour cela (voir la ligne 31 du makefile d'Empire), aussi nous pouvons l'effacer :

	  10    make
	

On y arrive rarement du premier coup, aussi les lignes 14-20 nettoient les crasses inutiles laissées par les essais ratés.

Les lignes 27-40 sont le coeur du fichier rules. Un répertoire nommé tmp est créé dans le répertoire debian (si il existe déjà, il sera effacé pour reprendre dans un état initial). Le paquet sera assemblé ici. C'est pour cela que dans le makefile d'Empire, nous avons spécifié debian/tmp comme répertoire racine. Dans la ligne 31 sont créés les répertoires dans lesquels nous allons effectuer l'installation. Ils sont pris dans le fichier dirs dont nous parlerons plus bas. La ligne 32 lance le but install du fichier makefile d'Empire. La ligne 35 lance debstd(1) qui vient avec debmake. debstd est une boite noire qui va modifier votre paquet pour qui soit conforme aux normes Debian. Si vous voulez des détails, lisez la page de manuel, ou regardez les sources (c'est juste un script shell), et je vous encourage à le faire. Mais l'avantage de la boite noire, c'est que vous n'avez pas à savoir ce qu'elle fait, vous pouvez supposer qu'elle le fait correctement. Quand les normes Debian changeront, ce sera transparent pour vous. Installez juste une version mise à jour de debmake qui supportent les nouvelles normes, recompilez et vous serez conforme (pour la plupart des normes. Toutes les modifications des normes ne peuvent pas être aisément gérées automatiquement, aussi est-il payant de comprendre le problème en profondeur avant de se fier à un bout de code.) La ligne 36 lance dpkg-gencontrol qui va créer le fichier de contrôle du paquet. Voyez deb(5) pour des détails sur le format de paquet Debian. Enfin, la ligne 39 crée le paquet proprement dit.

Les lignes 41 et suivantes sont juste des macros utilisées par le fichier rules et vous n'avez pas à vous en soucier.

Ce qu'il faut savoir du fichier rules créé par debmake est qu'il est juste une suggestion. Il fonctionne pour des paquets simples, mais pour des paquets plus compliqués, n'hésitez à y faire des ajouts ou des retraits pour vos besoin.


2.5. copyright

Ce fichier contient les informations concernant les droits de copie du paquet. Voici ce que debmake crée par défaut :

	  1 This package was debianized by Jaldhar H. Vyas jaldhar@debian.org on
	  2 Thu, 11 Sep 1997 22:49:54 -0400.
	  3 
	  4 It was downloaded from <fill in ftp site>
	  5 
	  6 Copyright:
	  7 
	  8 <Must follow here>
	

Les choses importantes à inclure dans ce fichier sont l'endroit où vous avez trouvé ce paquet, et la licence de copie. Si la licence est l'une des licences bien connue de logiciel libre, comme GNU, BSD ou Artistic, vous n'avez pas à inclure le texte entier, vous pouvez juste faire référence au fichier adéquat dans /usr/doc/copyright. Empire est sous licence GPL, aussi nous changeons le fichier en :

	  1  This package was debianized by Jaldhar H. Vyas jaldhar@debian.org on
	  2  Thu, 11 Sep 1997 22:49:54 -0400.
	  3  
	  4  It was downloaded from http://www.cdrom.com/pub/linux/sunsite/games/strategy
	  5  
	  6  Copyright: (c) 1987, 1988 Chuck Simmons
	  7  
	  8  This program is free software; you can redistribute it and/or modify
	  8a it under the terms of the GNU General Public License as published by
	  8b the Free Software Foundation; either version 2, or (at your option)
	  8c any later version.
	  8d  
	  8e This program is distributed in the hope that it will be useful,
	  8f but WITHOUT ANY WARRANTY; without even the implied warranty of
	  8g MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	  8h GNU General Public License for more details.
	  8i  
	  8j You should have received a copy of the GNU General Public License
	  8k along with Debian system; see the file /usr/doc/copyright/GPL. If not,
	  8l write to the Free Software Foundation, Inc., 59 Temple Place - Suite
	  8m 330, Boston, MA 02111-1307, USA.
	


2.7. changelog

Au fur et à mesure que vous travaillerez, le comportement de votre paquet va changer, de nouvelles capacités seront ajoutées, et des erreurs seront corrigées. Les personnes qui téléchargent votre paquet peuvent consulter ce fichier et voir ce qui a changé. Voici ce à quoi ressemble le changelog par défaut que crée debmake :

	  1  empire (1.1-1) unstable; urgency=low
	  2  
	  3  * Initial Release.
	  4  
	  5  -- Jaldhar H. Vyas <jaldhar@debian.org> Thu, 11 Sep 1997 22:49:54 -0400
	  6  
	  7  Local variables:
	  8  mode: debian-changelog
	  9  add-log-mailing-address: "jaldhar@debian.org"
	  10 End:
	

La ligne 1 est le nom du paquet, sa version, sa distribution et son urgence. Le numéro de version ici est ce qui sera utilisé comme numéro de version du paquet. Ne bidouillez pas cette ligne. Les lignes de 3 à 5 sont une entrée d'archive. Nous pouvons y ajouter des éléments avec le programme dch(1) qui vient avec le paquet devscript (c'est un alias pour debchange. Vous pouvez l'invoquez avec un nom ou l'autre, cela ne fait aucune différence). Les lignes 7 à 10 sont des informations de mode pour Emacs(?). Ajoutons une ligne à changelog. Si le commentaire est court, vous pouvez l'ajouter directement à la ligne de commande de dch :

	  $ dch This is my first Debian package
	

Vous pouvez aussi lancer dch seul. Cela démarrera votre éditeur par défaut, qui est, par ordre de préférence, le programme défini par la variable d'environnement $VISUAL, le programme défini par la variable d'environnement $EDITOR, joe(1) ou ae(1). Quand l'éditeur a démarré, vous pouvez entrer votre commentaire. Quelque soit la méthode employée, voici ce à quoi vous devez arriver :

	  1  empire (1.1-1) unstable; urgency=low
	  2
	  2a * This is my first debian package.
	  3  * Initial Release.
	  4  
	  5  -- Jaldhar H. Vyas <jaldhar@debian.org> Thu, 11 Sep 1997 22:49:54 -0400
	  6  
	  7  Local variables:
	  8  mode: debian-changelog
	  9  add-log-mailing-address: "jaldhar@debian.org"
	  10 End:
	

Quand vous distribuez une nouvelle version, vous devez incrémenter le numéro de version. Vous le faites avec la commande :

	  $ dch -n This is my first debian package.
	

Si, pour une raison quelconque, vous voulez incrémenter le numéro de version par plus que 1, par 15 par exemple, vous utilisez cette commande :

	  $ dch -v 15 This is my first debian package.
	

Nous supposerons que vous voulez juste incrémenter le numéro de version par 1. Voici ce à quoi ressemble changelog maintenant :

	  1  empire (1.1-2) unstable; urgency=low
	  2  
	  2a * This is my first debian package
	  2b
	  2c  -- Jaldhar H. Vyas <jaldhar@debian.org> Sun, 14 Sep 1997 12:04:44 -0500
	  2d  
	  2e  empire (1.1-1) unstable; urgency=low
	  2f  
	  3  * Initial Release.
	  4  
	  5  -- Jaldhar H. Vyas <jaldhar@debian.org> Thu, 11 Sep 1997 22:49:54 -0400
	  6  
	  7  Local variables:
	  8  mode: debian-changelog
	  9  add-log-mailing-address: "jaldhar@debian.org"
	  10 End:
	


2.9. *.ex

Certains paquets doivent faire plus que de simplement installer des fichiers. Par exemple, un serveur peut avoir besoin d'insérer une ligne dans /etc/inetd.conf. Les fichiers en suffixe .ex sont des exemples de la manière d'ajouter ce genre de support à votre paquet. Pour en utiliser un, éditez et retirez le suffixe .ex . Voici une brève description de ce que fait chaque fichier.

crontab.ex

Ceci ajoute une ligne au fichier /etc/crontab pour exécuter un programme de manière régulière. Les normes actuelles spécifient qu'un paquet ne devrait pas toucher à /etc/crontab, aussi si vous pensez qu'il y a une bonne raison de le faire, discutez-en d'abord sur les mailing lists. Si vous renommez ce fichier en cron.daily, il sera ajouté dans /etc/cron.daily/ et exécuté tous les jours. Pareillement, si vous le renommez cron.weekly il sera ajouté dans /etc/cron.weekly/, et pour cron.monthly il sera ajouté dans /etc/cron.monthly/. Comme les noms le suggèrent (pour peu qu'on parle un brin anglais, NdT), ils sont exécutés respectivement toutes les semaines et tous les mois. Lisez les pages de manuel de crontab(1) et crontab(5) pour plus de détails. Les normes précisent que ces fichiers doivent être des scripts, et qu'ils doivent être enregistrés comme conffiles. Empire n'en a pas besoin, aussi nous l'effacerons.

diversion.ex

Quelque chose à voir avec un détournement, peut-être ? Empire n'en a pas besoin, nous l'effaçons (NdT : il s'agit du mécanisme utilisé sous Debian pour permettre d'avoir plusieurs programmes aux capacités similaires tout en enregistrant un programme par défaut.)

inetd.conf.ex

Ceci ajoute une ligne dans /etc/inetd.conf pour exécuter un démon. Lisez les pages de manuel pour inetd.conf(1) pour des détails sur le format. Empire n'en a pas besoin, aussi nous l'effaçons.

info.ex

Éditez ce fichier pour fournir de la documentation au format GNU info. Empire n'en a pas besoin, aussi nous l'effaçons.

init.d.ex

Ceci est un script par défaut pour /etc/init.d/. Si votre programme doit être lancé au moment du démarrage et stoppé à l'arrêt de l'ordinateur, ou lorsque le niveau d'exécution (runlevel) change , éditez le script pour faire les actions nécessaires. Empire n'en a pas besoin, aussi nous l'effaçons.

manpage.1.ex

Votre programme devrait avoir une page de manuel. S'il n'en a pas, voici un patron que vous pouvez remplir. Lisez les pages de manuel de man(7) pour une description rapide de la façon de créer une page de manuel. Soyez sûr de donner à ce fichier le nom du programme avec l'extension correspondant à la section du manuel dans laquelle il devrait aller. Voici une liste :

La page de manuel de Empire devrait être nommée empire.6. Comme il y a déjà une page de manuel empire.6, nous pouvons effacer cet exemple.

menu.ex

Les utilisateurs de X Windows ont un gestionnaire de fenêtres avec des menus qui peuvent être configurés pour lancer des programmes. S'ils ont installés le paquet Debian menu, un ensemble de menus pour chaque programme sur le système sera créé pour eux. Ce n'est pas requis par les normes Debian, mais vos utilisateurs apprécieront. Nous pouvons ajouter Empire aux menus en éditant ce fichier. Voici ce que debmake crée par défaut :

		text Apps/Misc empire none "empire Description" /usr/bin/empire
	      

Le premier champ indique le type d'interface requise par le programme (text ou X11). Le champ suivant est le nom de menu et de sous-menu dans lequel l'entrée devrait apparaître. La liste de sections actuelles est dans /usr/doc/menu/README. Le troisième est le nom du menu. Le quatrième est l'icône du programme, ou rien s'il n'y en a pas. Le cinquième est le texte qui apparaîtra au menu. Le sixième est la commande qui lance le programme.

Remplacez l'entrée du menu par :

		text Games/Strategy empire none "Build an empire" /usr/bin/empire
	      

watch.ex

Vous pouvez utiliser ce fichier en plus des programmes uscan(1) et uupdate(1) du paquet devscript pour surveiller le site duquel vous avez eu les sources originelles. Lisez les pages de manuel pour plus de détail. Voici ce que debmake crée par défaut :

		1 # Example watch control file for uscan
		2 # Rename this file to "watch" and then you can run the "uscan" command
		3 # to check for upstream updates and more.
		4 # Site          Directory              Pattern            Version    Script
		5 sunsite.unc.edu /pub/Linux/Incoming    empire-*.tar.gz    debian     uupdate
	      

Changez le en :

		5 www.cdrom.com /pub/Linux/sunsite/games/strategy empire-*.tar.gz debian uupdate
	      


Chapitre 3. Construction

Nous sommes enfin prêt pour la création du paquet.

Allez dans le répertoire principale d'Empire et lancez build

	$ cd ..
	$ build
      

Si vous avez fait des erreurs et que build échoue, et que vous essayez encore, vous pouvez rencontrer un petit problème. La deuxième fois que vous lancez build, vous pouvez avoir un message d'erreur comme ceci :

	dpkg-source: unrepresentable changes to source
      

Cette erreur apparaît quand le paquet n'a pas été correctement nettoyé. Soyez sûr que le but clean du makefile de l'application retire tous les fichiers inutiles. Si nous relisons le makefile d'Empire, nous voyons que clean n'efface pas l'exécutable empire. clobber le fait à la place (lignes 79-84). Aussi nous changeons la ligne 17 du fichier rules en :

	17    -make clobber
      

Quand build a fini avec succès, remontez d'un répertoire :

	$ cd ..
      

Vous verrez quatre nouveaux fichiers

empire_1.1-2_i386.deb

est le paquet Debian complet. Vous pouvez utiliser dpkg ou dselect pour l'installer ou le retirer comme n'importe quel autre paquet.

empire_1.1-2_i386.changes

Au fur et à mesure que vous travaillez sur un paquet, son comportement va changer et de nouvelles capacités seront ajoutées. Les personnes qui téléchargent votre paquet peuvent regarder ce fichier et voir ce qui a changé. Le fichier est généré à partir de empire-1.1/debian/changelog. Il contient aussi la liste des fichiers du paquet. Les longues chaînes de caractères sont les sommes MD5 du fichier. Une personne qui télécharge vos fichiers peut les tester avec le programme md5sum (voir la page de manuel) et si les numéros ne correspondent pas, elle saura que le fichier est corrompu ou modifié.

empire_1.1.orig.tar.gz

Ceci est le source original empaqueté de sorte que si quelqu'un veut recréer votre paquet depuis le début, il peut.

empire_1.1-2.dsc

Ceci est un résumé du contenu du code source. Ce fichier est généré à partir du fichier empire-1.1/debian/control.

Et voilà. Vous êtes maintenant l'heureux créateur d'une nouvelle archive Debian. Il reste encore beaucoup de travail à faire avant d'être totalement conforme aux normes Debian (voyez le Manuel des Normes pour plus de détails). Avec un peu de chance, cette introduction vous aura montré que le processus complet n'est pas aussi dur que beaucoup le pensent.


Chapitre 4. Pour plus d'informations

Quelques livres d'introduction sur la programmation sous Linux/Unix

Beginning Linux Programming , Matthew et Stones , 1996 , Wrox Press , 1874416680 .

Programming With GNU Software , Loukides et Oram , O'Reilly & Associates , 1996 , 1-56592-112-7 .

The Unix Programming Environment , Kernighan et Pike , Prentice-Hall Inc. , 1984 , 0-13-937681-x .