Créer un paquet Debian simple

C'est bien beau d'écrire du code source, mais développer un logiciel comprend également la création d'aide au déploiement de l'application. Une de ces aides (et ce n'est pas la seule), est de créer un ou plusieurs paquets. Nous prendrons ici le cas d'un paquet Debian simplisme.

Le projet d'exemple

Afin de n'avoir aucun problème d'architecture, nous prendrons un exemple vraiment très simple : l'empaquetage de plusieurs images. La création d'un paquet pour quelques photos semble un peu disproportionnée, mais c'est uniquement dans un but pédagogique. Avant de commencer à lire de vrais livres on a tous appris l'alphabet et déchiffrés de simples mots qui, sortis de leur contexte, n'ont strictement aucun intérêt en eux même ; ici c'est pareil.
Regardons donc ce qui compose notre projet :

-> ls -1
christmas_lights_01.jpg
COPYING
mouette.jpg
passage_pommeraye_noel.jpg
tramway.jpg

Nous avons donc 4 images au format jpeg ainsi qu'un fichier texte contenant la licence de ces images (cc by-sa).

Notre environnement de travail

Logiciels à installer

Afin de suivre ce tutoriel, vous devez installer les paquets suivants :

sudo apt-get install dh-make debhelper devscripts fakeroot build-essential lintian pbuilder gnupg quilt cdbs

Pour ubuntu on ajoutera un paquet supplémentaire :

sudo apt-get install ubuntu-dev-tools

Identification

Afin que les différents outils puissent savoir qui a créé le paquet, nous allons exporter deux variables d’environnement. Dans votre fichier ~/.bashrc définissez les variables suivantes avec votre email et votre nom complet :

export DEBEMAIL="your.email@example.com"
export DEBFULLNAME="John Doe"

Afin que ce soit pris en compte, on recharge la configuration :

-> source ~/.bashrc

Répertoire de travail

Notre dossier contenant le projet doit avoir un nom du type <nom>-<version>. Ainsi, nous utiliserons cool-pictures-1.0 (notez que le nom ne peux comporter que des lettres minuscules sans accents et des tirets-haut). Afin de ne pas nous embêter, ce dossier est ici placé dans /tmp/debian-tutorial, mais vous pouvez travailler là où bon vous semble.

Création du paquet

Avant de créer le paquet, il nous faut en faire une archive suivant un le format <name>_<version>.orig.tar.gz (attention au tiret haut qui devient tiret-bas) :

-> cd /tmp/debian-tutorial
-> tar -czvf cool-pictures_1.0.orig.tar.gz cool-pictures-1.0/

Maintenant que nous avons notre archive :

-> cd cool-pictures-1.0/
-> dh_make

À la question sur le type de paquet, on répond s (pour "single binary"). On valide ensuite. Suite à cette commande, un répertoire debian/ est créé avec un bon nombre de fichiers. Pour le moment, les fichiers intéressants à éditer sont control et copyright. Assurez-vous qu'ils contiennent les bonnes informations, ajoutez vos descriptions etc. Dans le fichier control, pensez à mettre "Architecture: all". All indique que l'on est pas du tout dépendant de l'architecture alors que any implique une dépendance.
Afin que nos fichiers soient installés, nous allons éditer (ou créer) le fichier install dans le répertoire debian :

christmas_lights_01.jpg usr/share/cool-pictures
COPYING usr/share/cool-pictures
mouette.jpg usr/share/cool-pictures
passage_pommeraye_noel.jpg usr/share/cool-pictures
tramway.jpg usr/share/cool-pictures

La syntaxe est simple, on a l'emplacement du fichier par rapport au répertoire de fabrication du paquet, suivi d'un espace, puis du répertoire de destination par rapport au répertoire d'installation par défaut.
Créons maintenant le paquet lui même :

-> dpkg-buildpackage

Notre paquet, avec d'autres fichiers, a été créé dans le répertoire parent. Nous pouvons vérifier que tout soit bon :

-> dpkg-deb --info cool-pictures_1.0-1_all.deb 
 new debian package, version 2.0.
 size 11643426 bytes: control archive= 734 bytes.
     388 bytes,    11 lines      control              
     603 bytes,     8 lines      md5sums              
 Package: cool-pictures
 Version: 1.0-1
 Architecture: all
 Maintainer: Rodolphe Breard <me@example.com>
 Installed-Size: 11492
 Section: unknown
 Priority: extra
 Homepage: <http://www.flickr.com/photos/breard_r/>
 Description: Just a bunch of cool pictures.
  This is a set of cool pictures from various places.
  Thoses pics were shot with a Canon EOS 1000D and edited using GIMP.
-> dpkg-deb -c cool-pictures_1.0-1_all.deb 
drwxr-xr-x root/root         0 2011-12-01 14:35 ./
drwxr-xr-x root/root         0 2011-12-01 14:35 ./usr/
drwxr-xr-x root/root         0 2011-12-01 14:35 ./usr/share/
drwxr-xr-x root/root         0 2011-12-01 14:35 ./usr/share/doc/
drwxr-xr-x root/root         0 2011-12-01 14:35 ./usr/share/doc/cool-pictures/
-rw-r--r-- root/root       184 2011-12-01 12:58 ./usr/share/doc/cool-pictures/changelog.Debian.gz
-rw-r--r-- root/root       205 2011-12-01 12:58 ./usr/share/doc/cool-pictures/README.Debian
-rw-r--r-- root/root      1608 2011-12-01 13:16 ./usr/share/doc/cool-pictures/copyright
drwxr-xr-x root/root         0 2011-12-01 14:35 ./usr/share/cool-pictures/
-rw-r--r-- root/root       285 2011-12-01 12:08 ./usr/share/cool-pictures/COPYING
-rw-r--r-- root/root   2630319 2011-12-01 12:04 ./usr/share/cool-pictures/christmas_lights_01.jpg
-rw-r--r-- root/root   4571080 2011-12-01 12:04 ./usr/share/cool-pictures/passage_pommeraye_noel.jpg
-rw-r--r-- root/root   1831163 2011-12-01 12:05 ./usr/share/cool-pictures/tramway.jpg
-rw-r--r-- root/root   2681583 2011-12-01 12:04 ./usr/share/cool-pictures/mouette.jpg

Pour aller plus loin