Création de DEB

Published: 25-01-2015

Updated: 31-05-2018

By: Maxime de Roucy

tags: deb debian nspawn package

Sources :

Je vous encourage à lire l’excellent « BuildingTutorial » du wiki Debian dont les commandes et la trame principal sont reprisent dans cet article si vous voulez faire les chose proprement (générer un paquet que vous pourrez redistribuer). Et notamment la section « Edit the source code ».

généralitées

paquet source

Un paquet source est constitué de :

….dsc
metadata, checksum et signature du paquet source et de ces différents composants
….orig.tar.gz
code source du logiciel empaqueté, upstream, non modifié
….debian.tar.xz
contient le répertoire debian dans lequel se trouve tous les patches, recettes et metadata nécessaire à la création du paquet. Les fichier/dossier contenu dans ce dossier sont décrit dans les chapitres Required files under the debian directory et Other files under the debian directory de la documentation officiel.

Pour récupérer ces fichier vous pouvez aller sur packages.debian.org ou utiliser la commande suivante :

max@testhost % apt-get source P=V-D

packages.debian.org

Rendez-vous sur le site debian.org pour rechercher un paquet. Une fois le paquet trouvé, rechercher “Download Source Package” dans la page pour obtenir l’url du paquet source. Le lien « Developer Information (PTS) » mène à l’un des tracker du paquets (nouveau, ancien). Dans ces trackers on peut trouver un lien vers le dépôt git du répertoire debian du paquet.

build

Sources :

Compiler un paquet à partir des sources :

max@testhost % wget P_V-D.dsc
max@testhost % wget P_V.orig.tar.gz
max@testhost % wget P_V-D.debian.tar.xz
max@testhost % dpkg-source --no-check -x P_V-D.dsc
max@testhost % cd P-V
max@testhost % sudo mk-build-deps -i -r debian/control
max@testhost % debuild -us -uc

dpkg-source -x extrait les archives et appliques les patches contenu debian au sources upstream.

Sans dpkg-source :

max@testhost % wget P_V.orig.tar.gz
max@testhost % wget P_V-D.debian.tar.xz
max@testhost % mkdir P-V
max@testhost % cd P-V
max@testhost % tar xvaf ../P_V.orig.tar.gz
max@testhost % tar xvaf ../P_V-D.debian.tar.xz
max@testhost % sudo mk-build-deps -i -r debian/control
max@testhost % cat debian/patches/series
max@testhost % patch …
max@testhost % debuild -us -uc

Attention, le dossier doit bien s’appeler « P-V » (l’archive upstream s’appelant P_V.orig.tar.gz).

La list des patchs à appliquer peut aussi se trouver dans le fichier debian/patches/debian.series (man dpkg-source).

mk-build-deps

mk-build-deps -i -r debian/control créé un meta-packet avec les dépendance décrite dans le fichier control, l’installe (-i) puis le supprime (-r).

Si mk-build-deps -i -r debian/control ne fonctionne pas, on peut installé manuellement le meta-packet créé par mk-build-deps et voir ce qui ne vas pas.

root@testhost # mk-build-deps debian/control
root@testhost # dpkg --unpack …deb
root@testhost # apt-get -f install

debuild

Source : Building debian package

Quelques notes sur la commande debuild.

debuild [options_debuild] [options_dpkg-buildpackage] [--lintian-opts options_lintian]

Attention, l’ordre des options est importante. Il faut d’abord mettre toutes les options debuild, puis celles dpkg-buildpackage et enfin celles de lintian.

Options intéressantes :

Parfois debuild (j’ai eu les deux cas) à besoin que le fichier ….orig.tar.gz soit présent dans le dossier parent, il a aussi besoin des sources patchées dans le dossier courant. Il ne re-génère pas le fichier ….orig.tar.gz.

Pour que debuild fonctionne correctement, il faut que le répertoire de build ne contienne rien si ce n’est les sources du paquet. Lancer un git clean -dfx avant debuild est généralement une bonne idée.

binaire precompilé

Sources :

Cette méthode permet d’empaqueter des binaires précompilé. C’est une méthode “manuel”, pour faire des paquets un peu à la shlag… je déconseille mais ça peu s’avérer pratique.

On va juste créer un dossier DEBIAN dans le l’arborescence de fichiers qui doit être créé à l’installation du paquet. Ce dossier DEBIAN doit contenir au moins le fichier control, contenant à minima :

Pour créer se dossier on peut utiliser dh_make (paquet dh-make) puis renommer le dossier debian en DEBIAN.

Une fois ce dossier créé on utilise fakeroot (ou sudo) et dpkg-deb pour empaqueter l’arborescence.

root@debian:~# tree --noreport aaa/
aaa/
|-- DEBIAN
|   |-- control
|-- etc
|   `-- …
|-- lib
|   `-- …
`-- usr
    `-- …
root@debian:~# dpkg-deb --build aaa/ toto.deb
dpkg-deb: building package 'superpackage' in 'toto.deb'.

Voir prometheus-apache-exporter pour un exemple concret.

checkinstall

checkinstall permet de générer simplement un nouveau paquet à partir de source upstream.

max@testhost % tar -xvaf ….tar.gz
max@testhost % cd …
max@testhost % ./configure
max@testhost % make
max@testhost % checkinstall --install=no

Exemple avec le paquet php-cld :

root@debian-8-test:/test/php-cld# # je créé le fichier ini de l'extention php car celui-ci
root@debian-8-test:/test/php-cld# # n'est pas contenu dans les sources
root@debian-8-test:/test/php-cld# mkdir -p `dirname /usr/share/php5/cld/cld.ini`
root@debian-8-test:/test/php-cld# cat > /usr/share/php5/cld/cld.ini
; configuration for php CLD module
; priority=20
extension=cld.so
^C
root@debian-8-test:/test/php-cld# # création de la documentation et de la description du paquet
root@debian-8-test:/test/php-cld# mkdir doc-pak
root@debian-8-test:/test/php-cld# cat > doc-pak/README
…
^C
root@debian-8-test:/test/php-cld# cat > description-pak
This small extension provides bindings to use the Chromium Compact Language Detector in PHP.
^C
root@debian-8-test:/test/php-cld# # ajout de bibliothèque nécessaire au paquet mais non installé par `make install`
root@debian-8-test:/test/php-cld# echo '/usr/lib/x86_64-linux-gnu/libcld2.so' > checkinstall-include
root@debian-8-test:/test/php-cld# echo '/usr/lib/x86_64-linux-gnu/libcld2_full.so' >> checkinstall-include
root@debian-8-test:/test/php-cld# echo '/usr/share/php5/cld/cld.ini' >> checkinstall-include
root@debian-8-test:/test/php-cld# checkinstall --install=no --pkgname 'php5-cld' --pkgversion 20170327 --pkgrelease 1 --pkglicense BSD --pkgsource 'https://…' --maintainer 'maxime.deroucy@google.com' --requires php5-common --include=checkinstall-include
checkinstall 1.6.2, Copyright 2009 …
…
root@debian-8-test:/test/php-cld# dpkg -c php5-cld_20170327-1_amd64.deb
drwxr-xr-x root/root         0 2017-03-27 13:54 ./
drwxr-xr-x root/root         0 2017-03-27 13:54 ./usr/
drwxr-xr-x root/root         0 2017-03-27 11:50 ./usr/share/
drwxr-xr-x root/root         0 2017-03-27 13:54 ./usr/share/doc/
drwxr-xr-x root/root         0 2017-03-27 13:34 ./usr/share/doc/php5-cld/
-rw-r--r-- root/root       191 2017-03-27 12:26 ./usr/share/doc/php5-cld/README
drwxr-xr-x root/root         0 2017-03-27 13:52 ./usr/share/php5/
drwxr-xr-x root/root         0 2017-03-27 13:54 ./usr/share/php5/cld/
-rw-r--r-- root/root        66 2017-03-27 13:52 ./usr/share/php5/cld/cld.ini
drwxr-xr-x root/root         0 2017-03-27 13:54 ./usr/lib/
drwxr-xr-x root/root         0 2017-03-27 13:54 ./usr/lib/x86_64-linux-gnu/
-rwxr-xr-x root/staff  1865216 2017-03-27 11:58 ./usr/lib/x86_64-linux-gnu/libcld2.so
-rwxr-xr-x root/staff  6542848 2017-03-27 11:58 ./usr/lib/x86_64-linux-gnu/libcld2_full.so
drwxr-xr-x root/root         0 2017-03-27 13:54 ./usr/lib/php5/
drwxr-xr-x root/root         0 2017-03-27 13:54 ./usr/lib/php5/20131226/
-rwxr-xr-x root/root     26296 2017-03-27 13:54 ./usr/lib/php5/20131226/cld.so
root@debian-8-test:/test/php-cld# dpkg --info php5-cld_20170327-1_amd64.deb
 new debian package, version 2.0.
 size 5221736 bytes: control archive=427 bytes.
       0 bytes,     0 lines      conffiles
     302 bytes,    10 lines      control
 Package: php5-cld
 Priority: extra
 Section: checkinstall
 Installed-Size: 8252
 Maintainer: maxime.deroucy@google.com
 Architecture: amd64
 Version: 20170327-1
 Depends: php5-common
 Provides: php5-cld
 Description: This small extension provides bindings to use the Chromium Compact Language Detector in PHP.

Note: Ici le fichier cld.so n’a pas les bon droits (la faute à make install qui utilise install), mais ça n’empèchera pas sont bon fonctionnement.

quilt

Sources :

Pour ajouter un patch à un paquet il est recommendé d’utiliser quilt.

Si on suit ce qui est indiqué dans la documentation officiel, et qu’on imagine modifier le paquet N_U-D_A.deb.

Installation et configuration de quilt et création du fichier ~/.quiltrc-dpkg :

root@testhost # apt-get install quilt
max@testhost % alias dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg"
max@testhost % complete -F _quilt_completion $_quilt_complete_opt dquilt
max@testhost % cat > ~/.quiltrc-dpkg
d=.
while test ! -d $d/debian -a `readlink -e $d` != /
do
        d=$d/..
done
if test -d $d/debian -a -z "$QUILT_PATCHES"
then
        # if in Debian packaging tree with unset $QUILT_PATCHES
        QUILT_PATCHES="debian/patches"
        QUILT_PATCH_OPTS="--reject-format=unified"
        QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
        QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
        QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33"
        if test ! -d $d/debian/patches
        then
                mkdir $d/debian/patches
        fi
fi

Installation des dépendances de compilation et téléchargement et extraction des sources :

root@testhost # apt-get build-dep N
max@testhost % apt-get source N
max@testhost % cd N-U

Dans l’ordre :

  1. lancement de l’enregistrement des modification, configuration du patch (vide pour l’instant)
  2. ajout du fichier à modifier au patch
  3. modification du fichier
  4. génération du patch
  5. ajout d’un descriptif
  6. ajout des modification au changelog (suivre le style des précédentes modifications)
  7. génération du/des paquet (généré dans le répertoire parent)

En console :

max@testhost % dquilt new mon-super-patch.patch
max@testhost % dquilt add le-fichier-a-modifier
max@testhost % vim        le-fichier-a-modifier
max@testhost % dquilt refresh
max@testhost % dquilt header -e
max@testhost % dch -i
max@testhost % debuild -us -uc

version

Source : Debian Policy Manual: Chapter 5 - Control files and their fields

Les versions des paquets se décompose en [epoch:]upstream_version[-debian_revision].

upstream_version peut contenir les caractères spéciaux . + - : ~. : n’est autorisé que lorsque epoch est présent (le premier : délimite forcément l’epoch). - n’est autorisé que lorsque debian_revision est présent (le dernier - délimite forcément la debian_revision).

debian_revision peut contenir les caractères spéciaux + . ~.

Algorithme :

The strings are compared from left to right.

First the initial part of each string consisting entirely of non-digit characters is determined. These two parts (one of which may be empty) are compared lexically. If a difference is found it is returned. The lexical comparison is a comparison of ASCII values modified so that all the letters sort earlier than all the non-letters and so that a tilde sorts before anything, even the end of a part. For example, the following parts are in sorted order from earliest to latest: ~~, ~~a, ~, the empty part, a.

Then the initial part of the remainder of each string which consists entirely of digit characters is determined. The numerical values of these two parts are compared, and any difference found is returned as the result of the comparison. For these purposes an empty string (which can only occur at the end of one or both version strings being compared) counts as zero.

These two steps (comparing and removing initial non-digit strings and initial digit strings) are repeated until a difference is found or both strings are exhausted.

info

Pour obtenir des informations sur un fichier « .deb » j’utilise ces deux options de dpkg.

root@debian-8-test:~# dpkg --info varnish_4.0.2-1_amd64.deb
 new debian package, version 2.0.
 size 528790 bytes: control archive=4606 bytes.
     187 bytes,     8 lines      conffiles
    1191 bytes,    27 lines      control
    3095 bytes,    45 lines      md5sums
    4405 bytes,   132 lines   *  postinst             #!/bin/sh
    2348 bytes,    99 lines   *  postrm               #!/bin/sh
     999 bytes,    38 lines   *  preinst              #!/bin/sh
     487 bytes,    17 lines   *  prerm                #!/bin/sh
 Package: varnish
 Version: 4.0.2-1
 Architecture: amd64
 Maintainer: Varnish Package Maintainers <pkg-varnish-devel@lists.alioth.debian.org>
 Installed-Size: 1429
 Depends: libc6 (>= 2.14), libedit2 (>= 2.11-20080614), …
 Suggests: varnish-doc
 Replaces: libvarnishapi1 (<< 3.0.0-5)
 Section: web
 Priority: optional
 Homepage: http://varnish-cache.org/
 Description: state of the art, high-performance web accelerator
  Varnish Cache is a state of the art web accelerator written with
  performance and flexibility in mind.
  …
root@debian-8-test:~# dpkg -c varnish_4.0.2-1_amd64.deb
drwxr-xr-x root/root         0 2014-10-14 22:58 ./
drwxr-xr-x root/root         0 2014-10-14 22:58 ./usr/
drwxr-xr-x root/root         0 2014-10-14 22:58 ./usr/share/
drwxr-xr-x root/root         0 2014-10-14 22:58 ./usr/share/varnish/
-rwxr-xr-x root/root      3846 2014-10-14 22:58 ./usr/share/varnish/reload-vcl
drwxr-xr-x root/root         0 2014-10-14 22:58 ./usr/share/man/
drwxr-xr-x root/root         0 2014-10-14 22:58 ./usr/share/man/man1/
-rw-r--r-- root/root      1194 2014-10-14 22:58 ./usr/share/man/man1/varnishadm.1.gz
-rw-r--r-- root/root     11175 2014-10-14 22:58 ./usr/share/man/man1/varnishd.1.gz
…

installation

Pour installer un paquet, sous forme de fichier en local, avec toutes ses dépendances on peut utiliser gdebi, ou procéder comme suit :

root@testhost # dpkg --unpack …deb
root@testhost # apt-get -f install

Pour installé un paquet dans un répertoire particulier :

root@testhost # dpkg --instdir=test-directory/ -i …deb

environement

nspawn

Pour compiler le paquet j’ai utilisé un nspawn Debian.

policy-rc.d

Debian 7 wheezy n’utilise pas systemd et aucun service n’a besoins de tourné dans le nspawn pour pouvoir compiler un paquet, je n’utilise donc pas l’option « -b, –boot » de systemd-nspawn.

Debian démarre les services qu’il installe, ce qui peut poser problème lorsqu’on installe des paquets dans un nspawn non booté. Pour empécher Debian de démarrer les services à l’installation j’ai utilisé la configuration suivante :

root@testhost # echo exit 101 > /usr/sbin/policy-rc.d
root@testhost # chmod +x /usr/sbin/policy-rc.d

build-essential

Ces paquets sont nécessaire à la compilation des autres paquets.

root@testhost # apt-get install build-essential fakeroot devscripts

Très souvent j’ai aussi eu à installer les paquets suivant ; je ne sais pas pourquoi ils ne sont pas inclue dans build-essential.

Vérifier que nous avons accès aux « dépôts sources ».

root@testhost # grep deb-src /etc/apt/sources.list
deb-src http://ftp.fr.debian.org/debian/ jessie main
deb-src http://security.debian.org/ jessie/updates main
deb-src http://ftp.fr.debian.org/debian/ jessie-updates main
deb-src http://ftp.fr.debian.org/debian/ jessie-backports main

Si ce n’est pas le cas, il faut ajouter l’accès et mettre à jour l’indexe des paquets.

root@testhost # cat /etc/apt/sources.list
deb http://ftp2.fr.debian.org/debian jessie main
root@testhost # echo "deb-src http://ftp2.fr.debian.org/debian jessie main" >> /etc/apt/sources.list
root@testhost # apt-get update

Création de l’utilisateur et du répertoire qui serviront à compiler le paquet.

root@testhost # useradd -u 1000 -g users -G sudo -m userbuild
root@testhost # passwd userbuild
root@testhost # su - userbuild
max@testhost % mkdir src/
max@testhost % cd src

Le --gid 100 est une conf perso non nécessaire, elle me permet de partagé facilement les home de userbuild avec celui de mon user standard.

Dans la suite de cette article je considère que tous ces prérequis ont été appliqué.

PECL → deb

Source: Compiler un module PECL en paquet Debian

dh-make-php permet de transformer une extention PHP disponible sur PECL en paquet debian.

Dans un premier temps faite vous un environment de build puis installer dh-make-php et php5-dev.

root@testhost # apt-get install dh-make-php php5-dev

Après vous être logger en tant que userbuild, téléchargé l’extention sur PECL.

root@testhost # su - userbuild
userbuild@testhost $ wget https://pecl.php.net/get/superextention-1.2.3.tgz

Transformer l’archive en sources de paquet debian :

userbuild@testhost $ DEBFULLNAME="Maxime de Roucy" DEBEMAIL="maxime.deroucy@gmail.com" dh-make-pecl --depends toto --build-depends 'titi, tata' superextention-1.2.3.tgz

Installer les dépendances et compiler les sources pour générer le paquet.

userbuild@testhost $ cd php-superextention-1.2.3
userbuild@testhost $ sudo mk-build-deps -i -r debian/control
userbuild@testhost $ debuild -us -uc

Expériences

Je détaille ici quelques-unes de mes expériences avec les paquets debian.

gdm3

J’ai du re-packager gdm (paquet gdm3) pour déboguer et corriger le problème évoqué dans mon précédent article sur Xephyr. Je n’ai pas fait de packaging propre (ajout d’un nouveau patch, modification du nom du paquet…) mais une modification rapide qui m’a permit de déboguer gdm et tester mon correctif.

Sans modification des sources

Si vous n’avez pas besoin de modifier les sources et voulez juste les symboles de débogues.

Avec paquets dbg

Certains logiciels dispose de paquets particulier pour installer les symboles de débogues. Ces paquets ont une extension -dbg.

max@testhost % apt-cache search zsh | grep dbg
zsh-dbg - shell with lots of features (debugging symbols)

Ce n’est pas le cas de gdm.

max@testhost % apt-cache search gdm | grep dbg
lcgdm-dbg - LHC Computing Grid debuggng symbols

Sans paquets dbg

Si votre logiciel ne dispose pas de ce type de paquet, vous pouvez le reconstruire facilement avec la suite de commandes suivantes.

root@testhost # apt-get build-dep gdm3
max@testhost % DEB_BUILD_OPTIONS="nostrip noopt" fakeroot apt-get -b source gdm3

Utiliser fakeroot directement n’est pas recommandé. Il est préférable d’utiliser debuild.

Avec modification des sources

Téléchargement des dépendances et des sources du paquet gdm3.

root@testhost # apt-get build-dep gdm3
max@testhost % apt-get source gdm3

Édition directe des sources, comme je l’ai dit précédemment, je n’ai pas fait les choses proprement et n’ai pas généré de patch.

max@testhost % cd gdm3-*
max@testhost % …

Compilation en conservant les symboles de débogue (pour pouvoir lancer gdb dessus). (Note: fakeroot fonctionne très bien dans un systemd-nspawn mais doit être lancé avec un utilisateur autre que root)

max@testhost % DEB_BUILD_OPTIONS='nostrip noopt debug' fakeroot debian/rules binary

Comme indiqué plus haut, utiliser fakeroot directement n’est pas recommandé. Il est préférable d’utiliser debuild. Ici je ne m’embarasse car ce paquet n’est destiné qu’a faire du debugage.

Installation du paquet que nous venons de générer

root@testhost # dpkg -i /home/userbuild/src/gdm3_*.deb

Si vous re-modifier les sources vous devrez « nettoyer » le répertoire de compilation avant de re-générer le paquet.

max@testhost % fakeroot debian/rules clean
max@testhost % DEB_BUILD_OPTIONS='nostrip noopt debug' fakeroot debian/rules binary

tzdata

J’ai eu à backporter sous debian 7 wheezy des modifications faites sur le paquet tzdata de debian 8 jessie. Plus précisément, j’ai du générer la version « 2016g-0+deb7u1 », sachant que la dernière version été « 2016d-0+deb7u1 ». Sous jessie les paquets « 2016d-0+deb8u1 » et « debian/2016g-0+deb8u1 » existent.

Préparation des sources debian. Ici, je ne modifie pas les sources du logiciel empaqueté mais celle du paquet lui-même. J’effectue cette opération en dehors du nspawn pour plus de facilité.

  1. téléchargement des sources
  2. recherche des tags des versions qui m’intéresse
  3. déplacement dans la branch wheezy
  4. lecture des logs et de leurs patchs associés (-p) pour visualiser le travail future
  5. création des patchs
  6. modification rapide des patchs (j’ai vérifié qu’il n’y avais pas de risque lors de l’étape 4)
  7. application des patchs
  8. copie des sources dans le nspawn

En console :

max@testhost % git clone https://anonscm.debian.org/git/pkg-glibc/tzdata.git
max@testhost % cd tzdata
max@testhost % ls
debian/
max@testhost % git tag --list | grep '2016[dg]'
debian/2016d-0+deb7u1
debian/2016d-0+deb8u1
debian/2016d-1
debian/2016d-2
debian/2016g-0+deb8u1
debian/2016g-1
max@testhost % git checkout -b wheezy origin/wheezy
La branche wheezy est paramétrée pour suivre la branche distante wheezy depuis origin.
Basculement sur la nouvelle branche 'wheezy'
max@testhost % git log -p debian/2016d-0+deb8u1..debian/2016g-0+deb8u1
…
max@testhost % git format-patch debian/2016d-0+deb8u1..debian/2016g-0+deb8u1
0001-New-upstream-version-affecting-the-following-future-.patch
…
0010-releasing-package-tzdata-version-2016g-0-deb8u1.patch
max@testhost % sed -i 's/deb8u/deb7u/' 000*
max@testhost % git am 00*
Application de  New upstream version, affecting the following future time stamp:
error: le patch a échoué : debian/changelog:1
error: debian/changelog : le patch ne s'applique pas
le patch a échoué à 0001 New upstream version, affecting the following future time stamp:
La copie du patch qui a échoué se trouve dans : .git/rebase-apply/patch
Quand vous avez résolu ce problème, lancez "git am --continue".
Si vous préférez plutôt sauter ce patch, lancez "git am --skip".
Pour restaurer la branche originale et arrêter de patcher, lancez "git am --abort".
max@testhost % vim debian/changelog
max@testhost % git add debian/changelog
max@testhost % git am --continue
Application de  New upstream version, affecting the following future time stamp:
…
max@testhost % …
max@testhost % git am --continue
Application de  releasing package tzdata version 2016g-0+deb8u1
max@testhost % sudo cp -r debian '/var/lib/machines/.#machine.debian-7-build-tmp/home/userbuild/'
max@testhost % sudo chown max:1000 -R '/var/lib/machines/.#machine.debian-7-build-tmp/home/userbuild/debian'

Dans le nspawn j’ai :

  1. installé les dépendances de compilation de tzdata (heureusement, elles n’ont pas changé avec les versions du paquet)
  2. créé le répertoire « src/P-V » (P: paquet, V: version)
  3. téléchargé les sources du logiciel tzdata
  4. les ai extrait
  5. appliqué les patchs listés dans les sources debian
  6. compilé les paquets

En console :

root@debian-7-build-tmp:~# apt-get build-dep tzdata
root@debian-7-build-tmp:~# su - userbuild
userbuild@debian-7-build-tmp:~$ mkdir -p src/tzdata-2016g
userbuild@debian-7-build-tmp:~$ cd src
userbuild@debian-7-build-tmp:~/src$ wget http://debian.bononia.it/debian/pool/main/t/tzdata/tzdata_2016g.orig.tar.gz
userbuild@debian-7-build-tmp:~/src$ cd tzdata-2016g/
userbuild@debian-7-build-tmp:~/src/tzdata-2016g$ tar xvaf ../tzdata_2016g.orig.tar.gz
userbuild@debian-7-build-tmp:~/src/tzdata-2016g$ mv ~/debian/ .
userbuild@debian-7-build-tmp:~/src/tzdata-2016g$ cat debian/patches/series
systemv.diff -p1
java.diff -p1
userbuild@debian-7-build-tmp:~/src/tzdata-2016g$ patch -p1 < debian/patches/systemv.diff
…
userbuild@debian-7-build-tmp:~/src/tzdata-2016g$ patch -p1 < debian/patches/java.diff
…
userbuild@debian-7-build-tmp:~/src/tzdata-2016g$ debuild -us -uc
…
dpkg-deb: building package `tzdata' in `../tzdata_2016g-0+deb7u1_all.deb'.
dpkg-deb: building package `tzdata-java' in `../tzdata-java_2016g-0+deb7u1_all.deb'.
 dpkg-genchanges  >../tzdata_2016g-0+deb7u1_amd64.changes
dpkg-genchanges: including full source code in upload
 dpkg-source --after-build tzdata-2016g
dpkg-source: info: using options from tzdata-2016g/debian/source/options: --compression=xz
dpkg-buildpackage: full upload (original source is included)
Now running lintian...
W: tzdata: binary-without-manpage usr/sbin/tzconfig
Finished running lintian.
userbuild@debian-7-build-tmp:~/src/tzdata-2016g$ echo $?
0
userbuild@debian-7-build-tmp:~/src/tzdata-2016g$ ls ..
tzdata-2016g/                        tzdata_2016g-0+deb7u1_all.deb
tzdata-java_2016g-0+deb7u1_all.deb   tzdata_2016g-0+deb7u1_amd64.build
tzdata_2016g-0+deb7u1.debian.tar.xz  tzdata_2016g-0+deb7u1_amd64.changes
tzdata_2016g-0+deb7u1.dsc            tzdata_2016g.orig.tar.gz

php-couchbase

Utilisation de dh-make-pecl.

Après avoirs créé un environment de build (et installé sudo).

root@testhost # apt-get install dh-make-php php5-dev
root@testhost # # installation d'une dépendance non présente dans les dépots
root@testhost # wget http://packages.couchbase.com/releases/couchbase-release/couchbase-release-1.0-4-amd64.deb
root@testhost # dpkg -i couchbase-release-1.0-4-amd64.deb
root@testhost # su - userbuild
userbuild@testhost $ wget https://pecl.php.net/get/couchbase-1.1.5.tgz
userbuild@testhost $ DEBFULLNAME="Maxime de Roucy" DEBEMAIL="mderoucy@oxalide.com" dh-make-pecl --depends libcouchbase2-bin --build-depends libcouchbase-dev couchbase-1.1.5.tgz
cd php-couchbase-1.1.5
userbuild@testhost $ # pour éviter https://stackoverflow.com/questions/5010387/php-unable-to-load-memcached-extension-due-to-json
userbuild@testhost $ sed -i 's/priority=20/priority=25/' ./debian/couchbase.ini
userbuild@testhost $ sudo mk-build-deps -i -r debian/control
userbuild@testhost $ debuild -us -uc

php-phalcon

Pour ce paquet je n’ai pas utilisé dh-make-pecl mais j’ai adapté un paquet à Debian (jessie) un paquet venant d’un dépot Ubuntu.

Après avoirs créé un environment de build (jessie) et installé sudo, j’ai téléchargé les sources du paquets sur le ppa falcon de Ubuntu.

userbuild@testhost $ wget https://launchpad.net/~phalcon/+archive/ubuntu/legacy/+files/php-phalcon_1.3.4-ppa1~precise.dsc
userbuild@testhost $ wget https://launchpad.net/~phalcon/+archive/ubuntu/legacy/+files/php-phalcon_1.3.4-ppa1~precise.debian.tar.gz
userbuild@testhost $ wget https://launchpad.net/~phalcon/+archive/ubuntu/legacy/+files/php-phalcon_1.3.4.orig.tar.gz
userbuild@testhost $ dpkg-source --no-check -x php-phalcon_1.3.4-ppa1~precise.dsc
userbuild@testhost $ cd php-phalcon-1.3.4/
userbuild@testhost $ cp debian/changelog /tmp/
userbuild@testhost $ vi debian/changelog
userbuild@testhost $ diff -Naur /tmp/changelog debian/changelog
--- /tmp/changelog        2018-02-07 15:20:47.911032962 +0100
+++ debian/changelog    2018-02-07 15:21:19.139101446 +0100
@@ -1,3 +1,8 @@
+php-phalcon (1.3.4-1) jessie; urgency=low
+  * ppa1~vivid -> jessie
+
+ -- Maxime de Roucy <mderoucy@oxalide.com>  Thu, 21 Nov 2017 18:58:20 +0100
+
 php-phalcon (1.3.4-ppa1~precise) precise; urgency=low
    * Fix improper access to \Phalcon\Debug::$_charset (#2840)
       * Fix segfault in Phalcon\Mvc\Collection when an invalid parameter is passed as conditions
userbuild@testhost $ sudo mk-build-deps -i -r debian/control
userbuild@testhost $ debuild -us -uc

prometheus-apache-exporter

J’ai du backporter prometheus-apache-exporter d’une sid vers une debian wheezy. Je ne pouvais pas lancer la compilation du paquet sous wheezy (même en tordant la conf dans tous les sens) mais le binaire est standalone. Je peux donc utilisé le binaire sid sous wheezy sans problème. J’ai quand même du adapté les script de démarrage de systemd à systemV.

max@debian:~$ mkdir prometheus-apache-exporter_0.5.0+ds-1+b1_amd64
max@debian:~$ cd prometheus-apache-exporter_0.5.0+ds-1+b1_amd64/
max@debian:~$ ar x ../prometheus-apache-exporter_0.5.0+ds-1+b1_amd64.deb
max@debian:~% tree ..
..
├── prometheus-apache-exporter_0.5.0+ds-1+b1_amd64
│   ├── control.tar.xz
│   ├── data.tar.xz
│   └── debian-binary
└── prometheus-apache-exporter_0.5.0+ds-1+b1_amd64.deb

1 directory, 4 files
max@debian:~/prometheus-apache-exporter_0.5.0+ds-1+b1_amd64$ mkdir data
max@debian:~/prometheus-apache-exporter_0.5.0+ds-1+b1_amd64$ tar xvaf ../data.tar.xz -C data
./
./etc/
…
./usr/share/doc/prometheus-apache-exporter/copyright
max@debian:~/prometheus-apache-exporter_0.5.0+ds-1+b1_amd64$ mkdir data/DEBIAN
max@debian:~/prometheus-apache-exporter_0.5.0+ds-1+b1_amd64$ cd data/DEBIAN/
max@debian:~/prometheus-apache-exporter_0.5.0+ds-1+b1_amd64/data/DEBIAN$ tar xvaf ../../control.tar.xz
./
./conffiles
./control
./md5sums
./postinst
./postrm
./prerm

max@debian:~/prometheus-apache-exporter_0.5.0+ds-1+b1_amd64/data/DEBIAN$ rm md5sums
max@debian:~/prometheus-apache-exporter_0.5.0+ds-1+b1_amd64/data/DEBIAN$ vim *
max@debian:~/prometheus-apache-exporter_0.5.0+ds-1+b1_amd64/data/DEBIAN$ # adaptation de l'arborescence
max@debian:~/prometheus-apache-exporter_0.5.0+ds-1+b1_amd64/data/DEBIAN$ cd ../..
max@debian:~/prometheus-apache-exporter_0.5.0+ds-1+b1_amd64$ fakeroot dpkg-deb --build data/ prometheus-apache-exporter_0.5.0+ds-1+b1_amd64.deb
dpkg-deb : construction du paquet « prometheus-apache-exporter » dans « prometheus-apache-exporter_0.5.0+ds-1+b1_amd64.deb ».
max@debian:~/prometheus-apache-exporter_0.5.0+ds-1+b1_amd64$