Product SiteDocumentation Site

15.2. Construire son premier paquet

15.2.1. Métapaquet ou faux paquet

Faux paquet et métapaquet se concrétisent tous deux par un paquet vide qui n'existe que pour les effets de ses informations d'en-têtes sur la chaîne logicielle de gestion des paquets.
Le faux paquet existe pour tromper dpkg et apt en leur faisant croire que le paquet correspondant est installé alors qu'il ne s'agit que d'une coquille vide. Cela aide à satisfaire les dépendances lorsque le logiciel en question a été installé manuellement. Cette méthode fonctionne, mais il faut l'éviter autant que possible ; rien ne garantit en effet que le logiciel installé manuellement constitue un remplaçant parfait du paquet concerné et certains autres paquets, qui en dépendent, pourraient donc ne pas fonctionner.
Le métapaquet existe en tant que collection de paquets par le biais de ses dépendances, que son installation installera donc toutes.
Pour créer ces deux types de paquets, on peut recourir aux programmes equivs-control et equivs-build (du paquet Debian equivs). La commande equivs-control fichier crée un fichier contenant des en-têtes de paquet Debian qu'on modifiera pour indiquer le nom du paquet souhaité, son numéro de version, le nom du mainteneur, ses dépendances, sa description. Tous les autres champs dépourvus de valeur par défaut sont optionnels et peuvent être supprimés. Les champs Copyright, Changelog, Readme et Extra-Files ne sont pas standards pour un paquet Debian. Propres à equivs-build, ils disparaîtront des en-têtes réels du paquet généré.

Exemple 15.2. Fichier d'en-têtes d'un faux paquet libxml-libxml-perl

Section: perl
Priority: optional
Standards-Version: 3.9.6

Package: libxml-libxml-perl
Version: 2.0116-1
Maintainer: Raphael Hertzog <hertzog@debian.org>
Depends: libxml2 (>= 2.7.4)
Architecture: all
Description: Fake package - module manually installed in site_perl
 This is a fake package to let the packaging system
 believe that this Debian package is installed. 
 .
 In fact, the package is not installed since a newer version
 of the module has been manually compiled & installed in the
 site_perl directory.
L'étape suivante consiste à générer le paquet Debian en invoquant la commande equivs-build fichier. Le tour est joué : le paquet est disponible dans le répertoire courant et vous pouvez désormais le manipuler comme tous les autres paquets Debian.

15.2.2. Simple archive de fichiers

Les administrateurs de Falcot SA souhaitent créer un paquet Debian pour déployer facilement un ensemble de documents sur un grand nombre de machines. Après avoir étudié le guide du nouveau mainteneur, l'administrateur en charge de cette tâche se lance dans la création de son premier paquet.
Il commence par créer un répertoire falcot-data-1.0, qui abritera le paquet source qu'il a choisi de réaliser. Ce paquet se nommera donc falcot-data et portera le numéro de version 1.0. L'administrateur place ensuite les fichiers des documents qu'il souhaite distribuer dans un sous-répertoire data. Il invoque la commande dh_make (du paquet dh-make) pour ajouter les fichiers requis par le processus de génération d'un paquet (tous contenus dans un sous-répertoire debian) :
$ cd falcot-data-1.0
$ dh_make --native

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?
 [s/i/m/l/k/n] i

Maintainer name : Raphael Hertzog
Email-Address   : hertzog@debian.org
Date            : Fri, 04 Sep 2015 12:09:39 -0400
Package Name    : falcot-data
Version         : 1.0
License         : gpl3
Type of Package : Independent
Hit <enter> to confirm:
Currently there is no top level Makefile. This may require additional tuning.
Done. Please edit the files in the debian/ subdirectory now. You should also
check that the falcot-data Makefiles install into $DESTDIR and not in / .
$
Le type de paquet indep binary indique que ce paquet source ne générera qu'un seul paquet binaire indépendant de l'architecture (Architecture: all). single binary est le pendant de indep binary pour un seul paquet binaire dépendant de l'architecture (Architecture: any). Nous optons pour le premier choix puisque le paquet abrite des documents et non des programmes binaires : il est donc exploitable sur toutes les architectures.
multiple binary est à employer pour un paquet source générant plusieurs paquets binaires. Le type library est un cas particulier pour les bibliothèques partagées qui doivent suivre des règles de mise en paquet très strictes. Il en est de même pour kernel module et kernel patch, réservés aux paquets contenant des modules noyau.
Le programme dh_make a créé un sous-répertoire debian contenant de nombreux fichiers. Certains sont nécessaires : c'est notamment le cas des fichiers rules, control, changelog et copyright. Les fichiers d'extension .ex sont des fichiers d'exemples qu'on peut modifier et rebaptiser (en supprimant simplement cette extension) si cela s'avère utile. Dans le cas contraire, il convient de les supprimer. Le fichier compat doit être conservé car il est nécessaire au bon fonctionnement des programmes de l'ensemble appelé debhelper, dont les noms commencent par le préfixe dh_ et qui sont employés à diverses étapes de la création de paquet.
Il faut mentionner dans le fichier copyright les auteurs des documents inclus dans le paquet et la licence logicielle associée. En l'occurrence, il s'agit de documents internes dont l'usage est limité à la société Falcot. Le fichier changelog par défaut convient relativement bien, et l'administrateur s'est contenté d'écrire une explication un peu plus longue que Initial release (« version initiale ») et de modifier la distribution unstable en internal. Le fichier control a lui aussi changé : le champ Section a désormais pour valeur misc et les champs Homepage, Vcs-Git et Vcs-Browser ont été supprimés. Le champ Depends a été complété par iceweasel | www-browser pour garantir la présence d'un navigateur web capable de consulter les documents ainsi diffusés.

Exemple 15.3. Le fichier control

Source: falcot-data
Section: misc
Priority: optional
Maintainer: Raphael Hertzog <hertzog@debian.org>
Build-Depends: debhelper (>= 9)
Standards-Version: 3.9.5

Package: falcot-data
Architecture: all
Depends: iceweasel | www-browser, ${misc:Depends}
Description: Documentation interne de Falcot SA
 Ce paquet fournit plusieurs documents décrivant
 la structure interne de Falcot SA. Cela comprend:
  - l'organigramme
  - les contacts pour chaque département
 .
 Ces documents NE DOIVENT PAS sortir de la société.
 Ils sont réservés à un USAGE INTERNE.

Exemple 15.4. Le fichier changelog

falcot-data (1.0) internal; urgency=low

  * Initial Release.
  * Commençons avec peu de documents:
    - la structure interne de la société
    - les contacts de chaque département

 -- Raphael Hertzog <hertzog@debian.org>  Fri, 04 Sep 2015 12:09:39 -0400

Exemple 15.5. Le fichier copyright

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: falcot-data

Files: *
Copyright: 2004-2015 Falcot Corp
License: 
 All rights reserved.
Le fichier rules contient normalement un ensemble de règles employées pour configurer, compiler et installer le logiciel dans un sous-répertoire dédié (portant le nom du paquet binaire généré). Le contenu de ce sous-répertoire est ensuite intégré au paquet Debian comme s'il était la racine du système de fichiers. Dans le cas qui nous concerne, les fichiers seront installés dans le répertoire debian/falcot-data/usr/share/falcot-data/ pour que les documents ainsi diffusés soient disponibles sous /usr/share/falcot-data/ dans le paquet généré. Le fichier rules est de type Makefile avec quelques cibles standardisées (notamment clean et binary, respectivement pour nettoyer et produire le binaire).
Bien que ce fichier soit au cœur du processus, il est fréquent qu'il ne contienne que le strict minimum pour lancer un ensemble standardisé de commandes qui sont fournies par le paquet debhelper. C'est le cas dans le fichier préparé par dh_make. Pour installer nos fichiers, nous allons simplement modifier le comportement de la commande dh_install en créant le fichier debian/falcot-data.install :
data/* usr/share/falcot-data/
À ce stade, il est déjà possible de créer le paquet. Nous allons toutefois y ajouter une dernière touche. Les administrateurs souhaitent que ces documents soient facilement accessibles depuis les menus des bureaux graphiques. Pour cela, ils ajoutent un fichier falcot-data.desktop et l'installent dans /usr/share/applications en ajoutant une deuxième ligne au fichier debian/falcot-data.install.

Exemple 15.6. Le fichier falcot-data.desktop

[Desktop Entry]
Name=Internal Falcot Corp Documentation
Comment=Starts a browser to read the documentation
Name[fr]=Documentation interne Falcot SA
Comment[fr]=Lance un navigateur pour lire la documentation
Exec=x-www-browser /usr/share/falcot-data/index.html
Terminal=false
Type=Application
Categories=Documentation;
Le fichier debian/falcot-data.install mis à jour ressemble donc à ceci :
data/* usr/share/falcot-data/
falcot-data.desktop usr/share/applications/
Le paquet source est prêt ! Il ne reste plus qu'à générer le paquet binaire avec la commande déjà employée pour des recompilations de paquets : on se place dans le répertoire falcot-data-1.0 et on exécute dpkg-buildpackage -us -uc.