Debian

Comment créer un paquet Debian

Comment créer un paquet 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 bien 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 s'assure qu'il s'adapte aux autres progiciels disponibles dans la distribution. De plus, le paquet est signé avec une clé GPG du mainteneur du paquet. Cela garantit l'intégrité du package et vous montre que le package provient d'une source de confiance.

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

le goudron.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 pour maintenir un système Linux basé sur « deb », vous pouvez consulter le Debian Package Management Book [dpmb] Pour construire des paquets pour Debian GNU/Linux, ces documents sont essentiels :

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 génère le célèbre message « Hello, world!" :

#!/usr/bin/python print ("Bonjour, monde!") 

2. Conditions

2.1. Clé GPG

Comme étape 1, ayez votre clé GPG disponible. 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 personnel.

$ gpg --gen-key $ gpg -a --output ~/.gnupg/VOTRE_NOM.gpg --export 'VOTRE NOM' $ gpg --import ~/.gnupg/VOTRE_NOM.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 être exactement le même dans le paquet, puis, 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 d'emballage

Pour créer un package Debian avec le code source, les packages logiciels suivants sont requis sur votre système :

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 à emballer

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 le 'tar.archive compressée gz' dans le répertoire :

$ cp helloworld-0.1.le goudron.gz ~./build/helloworld/0.1 

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

$ cd ~./build/helloworld/0.1 ~/build/helloworld/0.1$ goudron -xzf helloworld-0.1.le goudron.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.le goudron.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

Passez dans le répertoire qui conserve 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 construire 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 saute la copie de l'arborescence du programme actuel vers 'program.d'origine.

~/build/helloworld/0.1/helloworld-0.1$ dh_make -e [email protégé] -f… /helloworld-0.1.le goudron.gz 

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

Type de paquet : binaire unique, binaire indépendant, binaire multiple, bibliothèque, module noyau, correctif noyau? [s/i/m/l/k/n] s Nom du responsable : Frank Hofmann Adresse e-mail : [email protected] Date : Sam, 04 Nov 2017 21:16:13 +0100 Nom du package : helloworld Version : 0.1 Licence : vierge Type de Package : Single Hit  pour confirmer : actuellement il n'y a pas de Makefile de niveau supérieur. Cela peut nécessiter un réglage supplémentaire. Fait. Veuillez éditer les fichiers dans le sous-répertoire debian/ maintenant. Vous devez également vérifier que les Makefiles helloworld s'installent dans $DESTDIR et non dans / . 

Cela donne 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 avec 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, cela ressemble à ceci :

Source : helloworld Section : python Priorité : facultative Mainteneur : Frank Hofmann <[email protected]> Build-Depends: debhelper (>= 9) Standards-Version: 3.9.5 Page d'accueil : 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 Dépend : $shlibs:Depends, $misc:Depends, python Description : imprime Hello World en Python Imprime Hello World en Python 

3.3. Ajuster le fichier de copyright

Le fichier 'debian/copyright' contient les informations de licence pour le progiciel. Il est préparé pour la publication via la licence publique GNU 2 (GPLv2). Pour notre exemple, cela ressemble à ceci :

Format : http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Nom en amont : helloworld Source : http://www.efho.de/ Fichiers : debian/* Copyright : 2017 Frank Hofmann <[email protected]> Licence : GPL-2+ Ce package est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier selon les termes de la licence publique générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, soit (à votre choix) toute version ultérieure… Ce package est distribué dans l'espoir qu'il vous sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de QUALITÉ MARCHANDE ou D'ADAPTATION À UN USAGE PARTICULIER. Voir la licence publique générale GNU pour plus de détails… Vous devriez avoir reçu une copie de la licence publique générale GNU avec ce programme. Sinon, voir  . Sur les systèmes Debian, le texte complet de la GNU General Public License version 2 se trouve dans "/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 « Libération initiale ».

bonjour monde (0.1-1) instable ; urgence=faible * Version initiale -- Frank Hofmann <[email protected]> Sam, 04 nov. 2017 21:16:13 +0100 

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


4. Construire le paquet

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'. Ceci 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 <[email protected]> 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 : Informations : Quellformat "3.0 (quilt)" wird verwendet dpkg-source: Information: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.orig.le goudron.gz gebaut dpkg-source : Informations : helloworld wird dans helloworld_0.1-1.debian.le goudron.xz gebaut dpkg-source : Informations : helloworld wird dans 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 binaires dh binaires 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 dans "… /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) <[email protected]> " 4096-Bit RSA Schlüssel, ID D431AC07, Erzeugt 2014-09-05 

4.1. Valider le forfait

Félicitations - vous avez réussi à créer 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 contre les 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 mauvais caractères. Le commutateur '-pédant' 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 faire plaisir à 'lintian' 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 contre le package ITP (ITP signifie _destiné au package_). 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 pour Debian ---------------------  -- Frank Hofmann <[email protected]> Sam, 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-commence-par-des-espaces-de-tête »

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

4.4. Erreur : 'description-synopsis-is-duplicate'

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 étendu 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 : Le livre de gestion des paquets Debian
- [dpm] Le manuel de politique Debian
- [dpt] Le didacticiel sur l'empaquetage Debian
- [gph] Le manuel de confidentialité GNU
- [lushpaiPackage] Alex Lushpai : Comment créer un paquet Debian à partir des sources


6. Remerciements

L'auteur tient à remercier Axel Beckert et Gerold Rupprecht pour leur soutien et leurs critiques lors de la préparation de cet article.

Meilleurs émulateurs de console de jeu pour Linux
Cet article répertorie les logiciels d'émulation de console de jeu populaires disponibles pour Linux. L'émulation est une couche de compatibilité logi...
Meilleures distributions Linux pour les jeux en 2021
Le système d'exploitation Linux a parcouru un long chemin depuis son apparence originale, simple et basée sur le serveur. Ce système d'exploitation s'...
Comment capturer et diffuser votre session de jeu sur Linux
Dans le passé, jouer à des jeux n'était considéré qu'un passe-temps, mais avec le temps, l'industrie du jeu a connu une croissance énorme en termes de...