From 440f03b456d69623025b2f2e432be616a8b8daa7 Mon Sep 17 00:00:00 2001 From: Gregory Colpart Date: Sat, 25 Aug 2018 00:13:33 +0200 Subject: [PATCH] debian packaging dans un autre fichier --- HowtoDebian/Packaging.md | 120 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 HowtoDebian/Packaging.md diff --git a/HowtoDebian/Packaging.md b/HowtoDebian/Packaging.md new file mode 100644 index 00000000..336fffeb --- /dev/null +++ b/HowtoDebian/Packaging.md @@ -0,0 +1,120 @@ +## Créer un paquet Debian + +* Debian Policy : +* Debian Dev refs : +* Debian New Maint guide : +* Howto sur le wiki Debian : +* Howto de L. Nussbaum : + +### Génération de l'arborescence _debian/_ + +Cette étape consiste à créer une arborescence qui constituera le paquet Debian. On peut l'automatiser simplement avec la commande _dh_make_ : + +~~~ +cd futur-paquet-0.1 +dh_make +~~~ + +_NOTE : le nom du répertoire doit obligatoirement être de la forme _nom_-_version_ (_nom_ peut contenir des minuscules, chiffres et tirets)._ + +En utilisant dh_make sans options, il essayera de deviner les informations dont il a besoin. On peut forcer celles ci en les spécifiant sur la ligne de commande. Pour les plus utiles : + +* `-c` : la licence du programme ; +* `-e` : l'adresse email du responsable du paquet (vous) ; +* `-p` : nom du paquet, si le nom du répertoire courant n'est pas sous la forme standard ; +* `-f` : chemin vers l'archive contenant les sources. Si elle n'existe pas, utilisez l'option --createorig. + +Le type de paquet vous sera demandé lors de l'exécution. + +### Édition de certains fichiers importants + +_dh_make_ a créé de nombreux fichiers dans le répertoire _debian/_. Certains sont indispensables, d'autres moins. +Par exemple (si vous ne vous en servez pas) vous pouvez supprimer tous les *.ex, des templates servant d'exemple. + +~~~ +rm *.ex +rm *.EX +~~~ + +Voici une rapide explication à propos des fichiers importants : + +* le fichier _control_ : il décrit de manière générale le paquet. Plusieurs champs sont à compléter, notamment : +* _Section_ : voir la liste [ici](http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections) ; +* _Homepage_ : le site du programme ; +* _Architecture_ : _any_ par défaut, ce qui va générer un paquet par architecture. Dans le cas d'un script shell par exemple, on préférera _all_ (un seul paquet est généré car compatible avec toutes les architectures) ; +* _Depends_ : indiquez ici le nom et la version des paquets dont dépends éventuellement le programme (en général des bibliothèques) ; +* _Description_ : le champ doit contenir une description courte, suivi d'une description longue (sur la ligne suivante, indentée d'un espace). +* le fichier _changelog_ : il décrit les changements qui ont été fait sur le programme. À priori, il est déjà complété avec un « Initial release ». Supprimez juste le « (Closes: #nnnn) » puisque c'est la première version. +* le fichier _copyright_ : il contient la licence sous laquelle est distribué le programme. `dh_make` l'a partiellement remplit, il vous reste à indiquer le(s) développeur(s) du programme ainsi que le texte de la licence. +* le fichier _rules_ : c'est en fait un fichier Makefile, qui décrit les règles de construction et d'installation du paquet. Dans le cas d'un script unique, et qui ne nécessite pas de configuration/compilation : + +C'est le célèbre _./debian/rules_ qui gère donc la compilation et la copie des fichiers dans la future arborescence. +Si l'on simplement copier un script, on peut par exemple rajouter ceci à la fin de la cible _install_ : + +~~~ + install -d -m 0755 -o root -g root $(CURDIR)/debian/futur-paquet + install -m 0755 -o root -g root nom-du-script $(CURDIR)/debian/futur-paquet +~~~ + +### Construction du paquet + +Maintenant nous pouvons construire le paquet à l'aide de la commande : + +~~~ +$ debuild -us -uc +~~~ + +Si aucune erreur n'est apparue, votre paquet est prêt à être installé et/ou poussé sur un dépôt non officiel. + + +## Créer un paquet pour un module PHP Pear ou Pecl + +La commande `dh-make-pecl` (ou `dh-make-pear`) permet de télécharger l'archive depuis les dépôts PHP puis de créer l'arborescence du paquet Debian en pré remplissant certains fichiers (notamment le _debian/rules_) : + +~~~ +dh-make-pecl --maintainer "John Doe " --only 5 pecl-package +~~~ + +### Construire un paquet pour un module PHP Pecl avec PHP7.X + +Depuis Debian Stretch avec php7.0, la commande `dh-make-pecl` n'est pas adapté a php7.0, il faut donc adapté le fichier debian/rules et inclure le fichier /usr/share/dh-php/pkg-pecl.mk pour construire le paquet correctement : + +~~~ +#!/usr/bin/make -f +include /usr/share/dh-php/pkg-pecl.mk +~~~ + +## Manipulation d'un paquet (binaire) + +Pour certaines (mauvaises) raisons, on peut être amené à vouloir modifier un paquet binaire... notamment un maintainer script par exemple. + +~~~ +$ ar x foo.deb +$ ls +control.tar.gz data.tar.gz debian-binary +$ tar xf control.tar.gz +$ vim preinst + +$ tar cvf control.tar.gz md5sums postrm control prerm preinst postinst +$ ar r foo.deb control.tar.gz +~~~ + +Et voilà, on a modifié le _preinst_ du paquet _foo.deb_. + +## FAQ + +### Erreur lintian : mkdir -p failed at /usr/share/perl5/Lintian/Unpacker.pm line 224 + +~~~ +mkdir -p /tmp/temp-lintian-lab-6xngeaELBD/pool/d/devscripts/devscripts_2.13.8_amd64_binary failed at /usr/share/perl5/Lintian/Unpacker.pm line 224. +~~~ + +C'est probablement que votre système n'a pas assez de mémoire. +Avec un _strace lintian_ vous obtiendrez peut-être : + +~~~ +clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f09117029d0) = -1 ENOMEM (Cannot allocate memory) +~~~ + + +