Générer un paquet pur Debian depuis une distribution Ubuntu

Sur mon laptop principal j'utilise actuellement Ubuntu GNU/Linux. Cependant je distribue mes logiciels sur Debian. Ce petit memento décrit comment générer un paquet binaire pur Debian depuis le paquet source (créé auparavant) afin de vérifier si la compilation se passe bien notamment au niveau des dépendances à installer automatiquement.

Pour cela, il existe pbuilder-dist qui va me permettre d'instancier pas à pas un chroot Debian dans un répertoire, alors que je suis sous Ubuntu. Allons-y, commençont par le début, pour créer une distro Debian Sid pour un processeur de type amd64.

$ sudo apt install ubuntu-dev-tools
$ pbuilder-dist sid amd64 create

Le résultat est un tarball de la base Debian Sid pour architecture amd64. Il est placé dans $HOME/pbuilder/sid-base.tgz à côté des répertoires aptcache et sid_result.

Ensuite, on prend la description de son paquet source fraîchement créé afin de vérifier qu'il va pouvoir être candidat à bien se construire dans Debian Sid (ici je prends comme exemple mon logiciel qabc):

$ pbuilder-dist sid amd64 ~/src/deb/qabc/qabc_2.0-1.dsc

Et hop... après un café allongé on va pouvoir obtenir les logs de construction dans le chroot d'une Debian Sid, ainsi que le paquet binaire construit si cela s'est opéré avec succès.

Les logs de construction du package sont pour notre cas dans: $HOME/pbuilder/sid_result/qabc_2.0-1_amd64.build. Astuce: y rechercher le mot clé Error ou ERROR ...

Si le paquet a été construit avec succès, il est temps de le tester :

$ pbuilder-dist sid amd64 login
I: entering the shell
I: File extracted to: /var/cache/pbuilder/build/###NUMERO###
#

Dans un autre shell:

$ sudo cp pbuilder/sid_result/qabc_2.0-1_amd64.deb /var/cache/pbuilder/build/###NUMERO###

Puis dans le précédent shell où nous somme chrootés :

# dpkg -i qabc_2.0-1_amd64.deb
# apt --fix-broken install
# qabc --platform offscreen --version
...
QAbc 2.0 (stable)
# apt install devscripts
...
# hardening-check /usr/bin/qabc

Et enfin, on nettoie :

pbuilder-dist sid amd64 clean

Et voilà !