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 !" :
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 -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 :
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 :
Copiez l'archive compressée `tar.gz` dans le répertoire :
Accédez au répertoire et extrayez le package :
~/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 :
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 :
~/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`.
À l'invite, vous êtes invité à sélectionner le type de package à créer. Pour choisir _single binary_ tapez `s`.
[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` :
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 :
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 :
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".
* 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 :
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: 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 :
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 :
---------------------
<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


