Reconstruction d’un paquet Debian
Vous souhaitez modifier un logiciel empaqueté afin de corriger un bogue, une nouvelle fonctionnalité ou encore pour en analyser les sources ou changer les options de compilation. Je vais ici vous expliquer comment récupérer les sources d’un paquet empaqueter pour Debian, comment le construire puis comment l’installer. Dans cet article, je prendrais Shotwell en exemple.
Préparons le terrain
Avant toute chose, la compilation de paquet et la création d’un .deb
nécessite des outils essentiels que nous installons via la commande suivante :
# apt-get install build-essential devscripts fakeroot
- build-essential apporte les paquets nécessaires à la compilation
make
,gcc
. - devscripts apporte notamment
mk-build-deps
qui nous servira à créer le paquet de dépendance lié aux sources. - fakeroot permettra de mettre des droits root sur certains fichiers de l’archive sans utiliser root
Ensuite vous devez avoir spécifié dans votre sources.list
les dépôts source, les deb-src
. Voici un exemple :
deb http://ftp.fr.debian.org/debian/ jessie main contrib deb-src http://ftp.fr.debian.org/debian/ jessie main contrib
Si vous n’avez que la première ligne, copier la et changer le deb
en deb-src
. Cela permettra de récupérer les sources des paquets et pas uniquement le binaire pré-compilé.
Récupération des sources
La commande apt-get
permet de récupérer les sources très simplement dans la version disponible sur vos dépôts. Elle va récupérer les sources et les placer dans votre dossier courant. Dans mon cas, je me suis placé dans /tmp/build/shotwell
.
$ apt-get source shotwell
Cette commande télécharge les sources dans le dossier courant. Si vous voulez construire le paquet immédiatement vous devez ajouter l’option -b
. Cependant si les dépendances, nécessaires à la compilation de votre paquet, ne sont pas installées alors la construction échouera.
Installation des dépendances requises
Afin de pouvoir effectuer la construction du paquet, il est nécessaire que les dépendances requises par la compilation du paquet soit installées. Pour cela, nous avons 2 solutions apt-get
ou mk-build-deps
.
Via apt-get
Apt-get
peut, via l’option build-dep
, nous installer l’ensemble des dépendances requises à la compilation de notre paquet.
# apt-get build-deps shotwell
L’avantage de cette solution est qu’elle est simple et rapide. Son désavantage est que la désinstallation de l’ensemble des dépendances installées n’est pas possible de manière automatique.
Via mk-build-deps
mk-build-deps
nous créé un méta-paquet ayant pour dépendances tous les paquets nécessaires à la construction de shotwell. Cela a l’avantage de pouvoir installer ou désinstaller toutes les dépendances de manière très simple. Pour construire ce méta-paquet, exécutez la commande suivante :
$ mk-build-deps shotwell
Le méta-paquet se trouve dans le dossier courant sous le nom shotwell-build-deps_0.20.1-1_all.deb
. Le nom du méta-paquet dépend du paquet (shotwell), de sa version (0.20.1-1) et de l’architecture pour laquelle est fait le paquet (all).
Pour l’installer, nous utilisons dpkg
suivi de apt-get
car dpkg
ne gère pas les dépendances et je ne sais pas comment dire à apt-get
d’installer une archive Debian locale (si quelqu’un peut m’éclairer …).
# dpkg -i shotwell-build-deps_0.20.1-1_all.deb
Les dépendances n’étant pas installé, dpkg
s’arrête car les dépendances ne sont pas installées.
Nous utilisons donc maintenant apt-get
pour installer les dépendances requises par le paquet shotwell-build-deps
# apt-get -f install
Apt-get
va installer les dépendances demandées par l’installation du paquet shotwell-build-deps
. L’avantage de cette méthode est que lorsque vous voudrez supprimer l’ensemble des dépendances, vous n’aurez qu’à demander la suppression du paquet shotwell-build-deps
.
# apt-get remove shotwell-build-deps # apt-get autoremove
Passons à la compilation
Les paquets sont livrés avec des règles de compilation du mainteneur pour constituer les paquets Debian. Ces règles se situent dans le fichier debian/rules
contenu dans les sources. Nous allons exécuter ces règles afin d’obtenir un .deb
.
$ cd shotwell-0.20.1 $ fakeroot debian/rules binary ... dpkg-deb : construction du paquet « shotwell » dans « ../shotwell_0.20.1-1_amd64.deb ». dpkg-deb : construction du paquet « shotwell-common » dans « ../shotwell-common_0.20.1-1_all.deb ». dpkg-deb : construction du paquet « shotwell-dbg » dans « ../shotwell-dbg_0.20.1-1_amd64.deb ».
fakeroot
nous créé 3 paquets : shotwell
, shotwell-common
et shotwell-dbg
qu’il place dans le répertoire parent.
Installation du paquet
L’installation de shotwell
réclame l’installation de shotwell-common
, nous allons donc demander à dpkg
de nous installer ces 2 paquets.
# dpkg -i shotwell-common_0.20.1-1_all.deb shotwell_0.20.1-1_amd64.deb
Conclusion
Vous voila avec votre paquet recompiler et installer, vous pouvez maintenant en profiter pour aider les corrections de bogues en reproduisant ceux-ci et en essayant de les corriger. Dans ce cas, l’installation de la version avec les informations de débogage pourra vous servir shotwell-dbg
.
Sources:
https://www.debian.org/doc/manuals/maint-guide/build.fr.html
https://www.debian.org/doc/manuals/apt-howto/ch-sourcehandling.fr.html