Product SiteDocumentation Site

15.2. Construire son premier paquet

15.2.1. Méta-paquet ou faux paquet

Faux paquet et méta-paquet 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éta-paquet 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.8.4

Package: libxml-libxml-perl
Version: 1.57-1
Maintainer: Raphael Hertzog <hertzog@debian.org>
Depends: libxml2 (>= 2.6.6)
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 or cdbs?
 [s/i/m/l/k/n/b] i

Maintainer name : Raphael Hertzog
Email-Address   : hertzog@debian.org
Date            : Mon, 11 Apr 2011 15:11:36 +0200
Package Name    : falcot-data
Version         : 1.0
License         : blank
Usind dpatch    : no
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 single binary indique que ce paquet source ne générera qu'un seul paquet binaire dépendant de l'architecture (Architecture: any). indep binary est le pendant de single binary pour un seul paquet binaire indépendant de l'architecture (Architecture: all). Nous optons pour ce dernier 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, réservé aux paquets contenant des modules noyau. cdbs est un système de construction de paquets assez souple mais nécessitant un certain apprentissage.
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é : la 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 (>= 7.0.50~)
Standards-Version: 3.8.4

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>  Mon, 11 Apr 2011 20:46:33 +0200

Exemple 15.5. Le fichier copyright

This work was packaged for Debian by:

    Raphael Hertzog <hertzog@debian.org> on Mon, 11 Apr 2011 20:46:33 +0200

Copyright:

    Copyright (C) 2004-2011 Falcot SA

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 Aide (ou Help) des bureaux graphiques. Ils décident donc de créer une entrée dans le système de menus Debian. Pour cela, ils modifient le fichier debian/menu.ex et l'enregistrent sans l'extension.

Exemple 15.6. Le fichier menu

?package(falcot-data):needs=X11|wm section=Help\
  title="Documentation interne à Falcot SA" \
  command="/usr/bin/x-www-browser /usr/share/falcot-data/index.html"
?package(falcot-data):needs=text section=Help\
  title="Documentation interne à Falcot SA" \
  command="/usr/bin/www-browser /usr/share/falcot-data/index.html"
Le champ needs positionné à X11|wm indique que cette entrée de menu n'a de sens que dans l'interface graphique. Elle sera donc intégrée uniquement dans les menus des applications graphiques (ou X11) et les gestionnaires de fenêtres (wm est en effet l'abréviation de window manager). Le champ section précise l'emplacement de l'entrée dans le menu. Dans notre cas, elle sera intégrée au sous-menu d'aide Help. Le champ title (titre) est le texte que les utilisateurs verront dans le menu. Enfin, le champ command décrit la commande à exécuter lorsqu'un utilisateur sélectionne cet élément de menu.
La deuxième entrée est le pendant de la première, mais adaptée au mode texte d'une console Linux.
La simple création du fichier debian/menu est suffisante pour activer le menu dans le paquet généré car le programme dh_installmenu est automatiquement appelé par dh au cours de la fabrication du paquet.
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.