Recherche de site Web

Guide de création de paquets Debian


1. Préface

Être responsable d'une machine, c'est s'occuper aussi bien du matériel que des composants logiciels. Comme on le voit dans la vie de tous les jours en tant qu'administrateur système, il est préférable d'installer un logiciel en tant que progiciel plutôt qu'un ensemble de fichiers source. Cela réduit les coûts pour entretenir correctement le système.

Les packages disponibles auprès de votre distributeur préféré sont validés et supervisés par un responsable de package. Il a testé le logiciel et assure qu'il s'adapte aux autres progiciels disponibles dans la distribution. De plus, le paquet est signé avec une clé GPG du responsable du paquet. Cela garantit l'intégrité du paquet et vous montre que le paquet provient d'une source fiable.

Le format du package dépend de votre distribution Linux. Les formats sélectionnés sont les suivants :

deb

Paquets utilisés dans : Debian GNU/Linux, Ubuntu,Armbian,Linux Mint, Knoppix

tr/min

Packages utilisés dans : RedHat, Fedora, CentOS, OpenSuse

tgz et txz

Paquets utilisés dans : Slackware

tar.xz

Paquets utilisés dans : Arch Linux

Ce document explique brièvement comment construire un paquet pour Debian GNU/Linux. Pour des informations détaillées sur le format de paquet Debian et les outils de maintenance d'un système Linux basé sur `deb`, vous pouvez consulter le livre de gestion des paquets Debian [dpmb]. Pour construire des paquets pour Debian GNU/Linux, ces documents sont essentiels :

  • Le guide du nouveau responsable Debian [dnmg]

  • La référence du développeur Debian [ddr]

  • Le tutoriel sur l'empaquetage Debian [dpt]

  • Le manuel des règles Debian [dpm]

Le package avec lequel nous allons travailler s'appelle "helloworld" et porte le numéro de version 0.1. À des fins de démonstration, il contient simplement un seul script Python qui affiche le célèbre message "Hello, world !" :

#!/usr/bin/python

print ("Hello, world!")

2. Exigences

2.1. Clé GPG

À l'étape 1, ayez votre clé GPG à disposition. Plus tard, la clé sera nécessaire pour signer le colis. Gardez à l'esprit que les paquets non signés ne sont pas dignes de confiance et ne peuvent pas faire partie de l'univers Debian.

Si vous n'avez pas encore de clé GPG, créez-en une. Vous pouvez suivre les trois étapes ci-dessous. La première commande génère une nouvelle clé, la seconde exporte votre nouvelle clé dans un fichier séparé et la troisième ajoute la clé à votre trousseau de clés personnel.

$ gpg --gen-key
$ gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'YOUR NAME'
$ gpg --import ~/.gnupg/YOUR_NAME.gpg

Lors de la création, assurez-vous que le prénom _VOTRE NOM_ est correct. Il est courant d'utiliser une combinaison de prénom et de nom de famille. Ce nom devra donc être exactement le même dans le paquet, lors de la création du fichier `control` du paquet Debian. Pour plus d'informations sur GPG, consultez le GNU Privacy Handbook [gph].

2.2. La chaîne d'outils de l'emballage

Pour construire un paquet Debian avec le code source, les paquets logiciels suivants sont requis sur votre système :

  • essentiel à la construction

  • autoconf

  • fabrication automatique

  • autotools-dev

  • dh-faire

  • debhelper

  • devscripts

  • fausse racine

  • xutils

  • lintien

  • constructeur

En tant qu'utilisateur "root", vous pouvez les installer à l'aide de la commande suivante :

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder

2.3. Préparer le logiciel à empaqueter

Nous devons préparer un répertoire pour construire le paquet. Créez un répertoire pour préparer l'environnement dans lequel nous allons construire le package :

$ mkdir -p ~./build/helloworld/0.1

Copiez l'archive compressée `tar.gz` dans le répertoire :

$ cp helloworld-0.1.tar.gz ~./build/helloworld/0.1

Accédez au répertoire et extrayez le package :

$ cd ~./build/helloworld/0.1
~/build/helloworld/0.1$ tar -xzf helloworld-0.1.tar.gz

Désormais, le répertoire contient à la fois le code source dans un répertoire séparé et l'archive compressée :

~/build/helloworld/0.1$ ls
helloworld-0.1  helloworld-0.1.tar.gz

3. Débianisation

À ce stade, nous ajouterons les fichiers spécifiques à un paquet Debian. C'est pourquoi cette étape est nommée _Debianization_ du logiciel. Cela se fait en plusieurs étapes simples.

3.1 Préparer la structure du package

Accédez au répertoire contenant l'intégralité du code source du package. Dans notre exemple, le package contient le fichier `helloworld.py`, uniquement :

~$ cd build/helloworld/0.1/helloworld-0.1
~/build/helloworld/0.1/helloworld-0.1$ ls
helloworld.py

Ajoutons les fichiers spécifiques à un paquet Debian. L'outil `dh_make` entre en jeu. Le commutateur `-e` utilise l'adresse donnée comme adresse e-mail dans le champ `Maintainer` du fichier `debian/control`. Pour créer le package, utilisez plutôt votre propre adresse e-mail. N'oubliez pas d'utiliser la même adresse e-mail qui correspond à votre clé GPG.

Le commutateur `-f` utilise le fichier donné comme archive source d'origine et ignore la copie de l'arborescence actuelle du programme vers `program.orig`.

~/build/helloworld/0.1/helloworld-0.1$ dh_make -e frank.hofmann@efho.de -f ../helloworld-0.1.tar.gz

À l'invite, vous êtes invité à sélectionner le type de package à créer. Pour choisir _single binary_ tapez `s`.

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

Maintainer name  : Frank Hofmann
Email-Address    : frank.hofmann@efho.de
Date             : Sat, 04 Nov 2017 21:16:13 +0100
Package Name     : helloworld
Version          : 0.1
License          : blank
Type of Package  : Single
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 helloworld Makefiles install into $DESTDIR and not in / .

Cela se traduit par un répertoire appelé `debian` :

~/build/helloworld/0.1/helloworld-0.1$ ls
debian  helloworld.py

Ce répertoire contient tous les fichiers spécifiques au package.

3.2. Ajuster le fichier de contrôle

Le fichier `debian/control` conserve les dépendances nécessaires _pour construire_ le paquet. À l'aide de la commande `dpkg-depcheck -d ./configure`, vous recevez une liste de tous les packages requis. Dans notre cas, aucun autre package n'est nécessaire car Python est un langage interprété.

Ensuite, nous devons éditer le fichier `debian/control` et ajouter des valeurs spécifiques au paquet. Pour notre exemple, il se présente comme suit :

Source: helloworld
Section: python
Priority: optional
Maintainer: Frank Hofmann <frank.hofmann@efho.de>
Build-Depends: debhelper (>= 9)
Standards-Version: 3.9.5
Homepage: http://www.efho.de/
#Vcs-Git: git://anonscm.debian.org/collab-maint/helloworld.git
#Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/helloworld.git;a=summary

Package: helloworld
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, python
Description: Prints Hello World in Python
  Prints Hello World in Python

3.3. Ajuster le fichier de copyright

Le fichier `debian/copyright` contient les informations de licence pour le paquet logiciel. Il est préparé pour la publication via GNU Public License 2 (GPLv2). Pour notre exemple, il se présente comme suit :

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: helloworld
Source: http://www.efho.de/

Files: debian/*
Copyright: 2017 Frank Hofmann <frank.hofmann@efho.de>
License: GPL-2+
 This package is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 .
 This package is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 .
 You should have received a copy of the GNU General Public License
 along with this program. If not, see <http://www.gnu.org/licenses/>
 .
 On Debian systems, the complete text of the GNU General
 Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".

3.4. Ajuster le fichier changelog

Après les informations de copyright, le fichier `debian/changelog` doit être ajusté. Dans notre exemple, nous ajoutons l'information "Version initiale".

helloworld (0.1-1) unstable; urgency=low

  * Initial release

 -- Frank Hofmann <frank.hofmann@efho.de>  Sat, 04 Nov 2017 21:16:13 +0100

C'est tout ce dont nous avons besoin jusqu'à présent - maintenant nous pouvons enfin créer le package.

4. Créez le package

Pour construire le package, nous devons remonter d'un répertoire et exécuter la commande suivante :

~/build/helloworld/0.1/helloworld-0.1$ dpkg-buildpackage -rfakeroot

L'option `-rfakeroot` permet à `dpkg-buildpackage` d'exécuter des commandes en tant qu'utilisateur privilégié à l'aide de la commande `fakeroot`. Cela est nécessaire pour préparer le package et pour créer des fichiers et des répertoires. La commande ci-dessus entraîne une liste plus longue de messages de sortie (affichés ici dans un environnement de langue allemande) :

dpkg-buildpackage: Quellpaket helloworld
dpkg-buildpackage: Quellpaket helloworld
dpkg-buildpackage: Quellversion 0.1-1
dpkg-buildpackage: Quelldistribution unstable
dpkg-buildpackage: Quellen geändert durch Frank Hofmann <frank.hofmann@efho.de>
dpkg-buildpackage: Host-Architektur amd64
 dpkg-source --before-build helloworld-0.1
 fakeroot debian/rules clean
dh clean
   dh_testdir
   dh_auto_clean
   dh_clean
 dpkg-source -b helloworld-0.1
dpkg-source: Information: Quellformat »3.0 (quilt)« wird verwendet
dpkg-source: Information: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.orig.tar.gz gebaut
dpkg-source: Information: helloworld wird in helloworld_0.1-1.debian.tar.xz gebaut
dpkg-source: Information: helloworld wird in helloworld_0.1-1.dsc gebaut
 debian/rules build
dh build
   dh_testdir
   dh_auto_configure
   dh_auto_build
   dh_auto_test
 fakeroot debian/rules binary
dh binary
   dh_testroot
   dh_prep
   dh_auto_install
   dh_installdocs
   dh_installchangelogs
   dh_perl
   dh_link
   dh_compress
   dh_fixperms
   dh_strip
   dh_makeshlibs
   dh_shlibdeps
   dh_installdeb
   dh_gencontrol
dpkg-gencontrol: Warnung: Feld Depends von Paket helloworld: unbekannte Substitutionsvariable ${shlibs:Depends}
   dh_md5sums
   dh_builddeb
dpkg-deb: Paket »helloworld« wird in »../helloworld_0.1-1_amd64.deb« gebaut.
 dpkg-genchanges  <../helloworld_0.1-1_amd64.changes
dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen
 dpkg-source --after-build helloworld-0.1
dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten)
 signfile helloworld_0.1-1.dsc

Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren.
Benutzer: "Frank Hofmann (Hofmann EDV) <frank.hofmann@efho.de>
"
4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 2014-09-05

4.1. Validation du colis

Félicitations — vous avez réussi à construire un paquet Debian — ouais ! Maintenant, regardons de plus près le paquet. Ici, "lintian" entre en jeu. Cet outil valide votre paquet afin de trouver des violations aux règles strictes que les paquets Debian doivent respecter.

Pour exécuter les tests, tapez la commande suivante :

lintian helloworld_0.1-1_amd64.deb

L'outil ne trouve pas les violations de règles mais aussi les fautes d'orthographe et les caractères erronés. Le commutateur `–pedantic` demande à `lintian` d'être beaucoup plus critique que d'habitude. Comme vous pouvez le voir ci-dessous, `lintian` est un peu grincheux et a découvert trois avertissements et une erreur.

À l'exception du premier avertissement, nous pouvons facilement rendre `lintian` heureux et ajuster le contenu du paquet en fonction de l'ensemble de règles. L'avertissement `new-package-should-close-itp-bug` signifie qu'il n'y a pas de rapport de bogue concernant le paquet ITP (ITP signifie _intentionnel paquet_). Pour un paquet Debian standard, un rapport de bogue doit être envoyé au bugtracker pour le paquet ITP pour informer les autres que vous avez l'intention de commencer à empaqueter ce logiciel.

4.2. Avertissement : `readme-debian-contains-debmake-template

Le fichier `README.Debian` est destiné à conserver des notes supplémentaires concernant ce paquet. `dh_make` a créé ce fichier pour nous :

helloworld for Debian
---------------------

<possible notes regarding this package - if none, delete this file>

 -- Frank Hofmann <frank.hofmann@efho.de>  Sat, 04 Nov 2017 21:16:13 +0100

Dans notre exemple, nous n'avons pas d'informations supplémentaires, nous pouvons donc supprimer le fichier.

4.3. Avertissement : `description-starts-with-leading-spaces`

Cet avertissement est émis car la description plus longue de notre paquet dans le fichier `debian/control` commence par plus d'un espace. Dès que nous supprimons un seul espace, l'avertissement disparaît.

4.4. Erreur : `description-synopsis-is-duplicated`

Chaque paquet nécessite à la fois une description courte et une description plus longue dans `debian/control`. Cette erreur est générée car les deux descriptions sont identiques. Dès que nous avons prolongé la description plus longue, l'erreur a disparu.

5. Liens et références

– [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson : la référence du développeur Debian– [dnmg] Josip Rodin, Osamu Aoki : le guide du nouveau responsable Debian– [dpmb] Axel Beckert, Frank Hofmann : The Debian Package Management Book– [dpm] The Debian Policy Manual– [dpt] The Debian Packaging Tutorial– [gph] The GNU Privacy Handbook– [lushpaiPackage] Alex Lushpai : Comment créer un paquet Debian à partir des sources

6. Remerciements

Articles connexes: