Ubuntu logo

Packaging Guide

6. L’empaquetage de nouveaux logiciels

Bien qu’il existe des milliers de paquets dans l’archive d’Ubuntu, il y en reste encore beaucoup que personne n’a pu obtenir jusqu’à maintenant. S’il existe une nouvelle et passionnante partie de logiciel pour laquelle vous sentez le besoin d’une exposition plus large, peut-être voudriez-vous vous essayer à la création d’un paquet pour Ubuntu ou d’un PPA. Ce guide vous mènera à travers les étapes d’empaquetage de nouveaux logiciels.

Vous aurez envie en premier lieu de lire l’article Mise en route afin de préparer votre environnement de développement.

6.1. Vérification du programme

La première étape de l’empaquetage est d’obtenir le fichier .tar issu de l’amont (nous appelons les auteurs d’applications « l’amont ») et de vérifier qu’il se compile et s’exécute.

Ce guide vous mènera à travers l’empaquetage d’une application simple, appelée GNU Bonjour, postée sur GNU.org.

Si vous n’avez pas les outils de compilation, assurez-vous de les obtenir au préalable. De même, si vous n’avez pas les dépendances requises, installez-les également.

Installez les outils de compilation :

$ sudo apt-get install build-essential

Téléchargez le paquet principal :

$ wget -O hello-2.7.tar.gz "http://ftp.gnu.org/gnu/hello/hello-2.7.tar.gz"

Maintenant, décompressez le paquet principal :

$ tar xf hello-2.7.tar.gz
$ cd hello-2.7

Cette application utilise le système de construction autoconf, nous exécuterons donc ./configure pour préparer la compilation.

Cela vérifiera les dépendances de construction nécessaires. Comme bonjour est un exemple simple, build-essential doit fournir tout ce dont nous avons besoin. Pour les programmes plus complexes, la commande échouera si vous n’avez pas les bibliothèques et les fichiers de développement nécessaires. Installez les paquets nécessaires et recommencez jusqu’à ce que la commande s’exécute avec succès.:

$ ./configure

Maintenant vous pouvez compiler la source :

$ make

Si la compilation se termine avec succès, vous pouvez installer et exécuter le programme :

$ sudo make install
$ hello

6.2. Commencer un paquet

bzr-builddeb inclut un greffon pour créer un nouveau paquet à partir d’un modèle. Ce greffon est une surcouche de la commande dh_make. Ces programmes devraient déjà être présents si vous avez installé packaging-dev. Exécutez la commande fournissant le nom du paquet, le numéro de version et le chemin vers l’archive de l’amont :

$ sudo apt-get install dh-make bzr-builddeb
$ cd ..
$ bzr dh-make hello 2.7 hello-2.7.tar.gz

Lorsqu’il vous est demandé le type de paquet, entrez s pour binaire unique. Ceci importera le code dans une branche et ajoutera le répertoire d’empaquetage debian/. Jetez un œil sur son contenu. La plupart des fichiers ajoutés ne sont nécessaires que pour les paquets spécialisés (tels que les modules d’Emacs) de sorte que vous pouvez commencer par supprimer les fichiers optionnels d’exemple :

$ cd hello/debian
$ rm *ex *EX

Vous devriez maintenant personnaliser chacun des fichiers.

In debian/changelog change the version number to an Ubuntu version: 2.7-0ubuntu1 (upstream version 2.7, Debian version 0, Ubuntu version 1). Also change unstable to the current development Ubuntu release such as trusty.

Le gros du travail de construction de paquet est réalisé par une série de scripts appelée debhelper. Le comportement exact de debhelper change avec les nouvelles versions majeures, le fichier compat indique à debhelper à quelle version se conformer. Vous souhaiterez généralement régler ce paramètre à la version la plus récente qui est 9.

control contient toutes les métadonnées du paquet. Le premier paragraphe décrit le paquet source. Les paragraphes suivants décrivent les paquets binaires à construire. Nous aurons besoin d’ajouter à Build-Depends: les paquets nécessaires pour compiler l’application. Pour bonjour, assurez-vous qu’il comprend au moins :

Build-Depends: debhelper (>= 9)

Vous devrez également remplir une description du programme dans le champ Description:.

Le copyright doit être rempli pour suivre la licence de la source en amont. Selon le fichier bonjour/COPYING, il s’agit de la licence GNU GPL 3 ou ultérieure.

docs contient les fichiers de documentation de l’amont qui, selon vous, devraient être inclus dans le paquet final.

README.source et README.Debian ne sont nécessaires que si votre paquet possède une caractéristique non standard, ce qui n’est pas le cas donc vous pouvez les supprimer.

source/format peut être laissé tel quel, il décrit le format de version du paquet source et devrait être 3.0 (quilt).

rules est le fichier le plus complexe. Il s’agit d’un Makefile qui compile le code et le transforme en un paquet binaire. Heureusement, le gros du travail se fait de nos jours automatiquement à l’aide de debhelper 7 de telle sorte que la cible universelle % du Makefile lance uniquement le script dh qui exécute toutes les opérations nécessaires.

Tous ces fichiers sont expliqués plus en détail dans l’article aperçu du répertoire Debian.

Enfin, soumettez le code à votre branche d’empaquetage :

$ bzr add debian/source/format
$ bzr commit -m "Initial commit of Debian packaging."

6.3. Construisez le paquet

Maintenant, nous devons vérifier que notre empaquetage compile le paquet correctement et construit le paquet binaire .deb :

$ bzr builddeb -- -us -uc
$ cd ../../

bzr builddeb est une commande pour construire le paquet dans son emplacement actuel. Le -us -uc indique que GPG n’a pas besoin de signer le paquet. Le résultat sera placé dans le dossier ...

Vous pouvez afficher le contenu du paquet avec :

$ lesspipe hello_2.7-0ubuntu1_amd64.deb

Install the package and check it works (later you will be able to uninstall it using sudo apt-get remove hello if you want):

$ sudo dpkg --install hello_2.7-0ubuntu1_amd64.deb

You can also install all packages at once using:

$ sudo debi

6.4. Étapes suivantes

Even if it builds the .deb binary package, your packaging may have bugs. Many errors can be automatically detected by our tool lintian which can be run on the source .dsc metadata file, .deb binary packages or .changes file:

$ lintian hello_2.7-0ubuntu1.dsc
$ lintian hello_2.7-0ubuntu1_amd64.deb

To see verbose description of the problems use --info lintian flag or lintian-info command.

Results of Ubuntu archive checks can be found online on http://lintian.ubuntuwire.org.

For Python packages, there is also a lintian4python tool that provides some additional lintian checks.

Après avoir établi un correctif pour l’empaquetage, vous pouvez le reconstruire en utilisant -nc pour « no clean » afin d’éviter d’avoir à le reconstruire à partir de zéro :

$ bzr builddeb -- -nc -us -uc

Après avoir vérifié que le paquet est construit localement, vous devez vous assurer qu’il peut se compiler sur un système propre à l’aide de pbuilder. Puisque nous allons bientôt l’ajouter à un PPA (Personal Package Archives), ce téléchargement doit être signé pour permettre à Launchpad de vérifier que le téléchargement émane de vous (vous pouvez dire que le téléchargement sera signé car les options -us et -uc ne sont pas transmises à bzr builddeb comme auparavant). Pour que la signature fonctionne, vous devez avoir configuré GPG. Si vous n’avez pas encore configuré pbuilder-dist ou GPG, faites le maintenant :

$ bzr builddeb -S
$ cd ../build-area
$ pbuilder-dist trusty build hello_2.7-0ubuntu1.dsc

Lorsque vous serez satisfait de votre paquet, vous souhaiterez en obtenir la relecture par d’autres. Vous pouvez télécharger la branche vers Launchpad pour la relecture :

$ bzr push lp:~<lp-username>/+junk/hello-package

Le télécharger vers un PPA assurera qu’il se construit et donnera un moyen aisé pour vous et les autres de tester les paquets binaires. Vous avez besoin de configurer un PPA dans Launchpad puis de télécharger avec dput :

$ dput ppa:<lp-username>/<ppa-name> hello_2.7-0ubuntu1.changes

Voir téléchargement pour plus d’informations.

You can ask for reviews in #ubuntu-motu IRC channel, or on the MOTU mailing list. There might also be a more specific team you could ask such as the GNU team for more specific questions.

6.5. Soumettez pour inclusion

Il existe nombre de chemins que peut emprunter un paquet pour entrer dans Ubuntu. Dans la plupart des cas, passer par Debian en premier peut s’avérer la meilleure voie. Cette façon vous assure que votre paquet atteindra le plus grand nombre d’utilisateurs, car il sera disponible non seulement dans Debian et Ubuntu, mais également dans l’ensemble de leurs dérivés. Voici quelques liens utiles pour soumettre de nouveaux paquets à Debian :

  • Debian Mentors FAQ - debian-mentors is for the mentoring of new and prospective Debian Developers. It is where you can find a sponsor to upload your package to the archive.
  • Work-Needing and Prospective Packages - Information on how to file “Intent to Package” and “Request for Package” bugs as well as list of open ITPs and RFPs.
  • Debian Developer’s Reference, 5.1. New packages - The entire document is invaluable for both Ubuntu and Debian packagers. This section documents processes for submitting new packages.

In some cases, it might make sense to go directly into Ubuntu first. For instance, Debian might be in a freeze making it unlikely that your package will make it into Ubuntu in time for the next release. This process is documented on the “New Packages” section of the Ubuntu wiki.

6.6. Captures d’écran

Une fois que vous avez téléversé un paquet vers debian, vous devez ajouter des captures d’écran pour permettre aux utilisateurs potentiels de voir à quoi le programme ressemble. Elles doivent être téléversées sur http://screenshots.debian.net/upload.