Maman, j'ai patché Debian
Par Mathieu le jeudi 19 mars 2020, 15:33 - Hacks - Lien permanent
Un billet en forme de note à moi-même sur ce qu'il faut faire pour correctement :
- Récupérer un package depuis upstream
- Appliquer un ou plusieurs patches
- Le signer et le re-déployer en production
Préparer l'environnement
Pour compiler et signer un paquet simplement il vous faut :
- Un utilisateur (non root)
- Une clé GPG
- Les build-essentials et les devscripts (parce qu'on est feignasse)
Créez un utilisateur non-root et loguez-vous avec. N'utilisez pas "su" à partir de root, parce que sinon GPG ne pourra pas vous demander la phrase de passe (des histoires de droits sur les TTY).
Créez une clé GPG, et paramétrez-la :
gpg --full-generate-key
Récupérez l'identifiant de clé à la fin de la procédure, ou avec gpg --list-keys si vous l'avez loupé.
Modifiez ou créez le fichier ~/.devscripts et ajoutez :
DEBUILD_SET_ENVVAR_DEBSIGN_KEYID=xxxxxxxx
Avec le xxxxxx qui correspond à votre identifiant de clé.
Récupérer le paquet et les dépendances de compilation
Le plus simple c'est quand le paquet existe déjà et qu'il faut simplement patcher. S'il n'existe aucun paquet, il faut créer un nouveau paquet, éventuellement debianizer la configuration, et c'est une autre paire de manches (et c'est pas le sujet ici).
Pour récupérer le paquet upstream :
apt-get source nomdupaquet
Si le paquet est introuvable, ajoutez les dépôts src à votre sources.list :
deb-src http://deb.debian.org/debian/ buster main contrib deb-src http://security.debian.org/debian-security buster/updates main contrib deb-src http://deb.debian.org/debian/ buster-updates main contrib
Il faut ensuite récupérer les paquets nécessaires à la compilation. Coup de bol, si vous avez pu avoir le paquet source à l'étape précédente, c'est facile :
apt-get build-dep nomdupaquet
Patcher le paquet
Le format dpatch est obsolète, en principe votre package utilise quilt comme tout paquet récent. Il suffit de télécharger le patch depuis git et le placer dans le dossier debian/patches.
Ensuite, ajoutez le nom du fichier que vous avez ajouté au fichier debian/patches/series . Attention, l'ordre dans series est important.
Déclarer les changements
Ce n'est pas nécessaire la première fois, mais si vous re-compilez un paquet, il faut ajouter un commentaire dans le Changelog. Le plus simple : utilisez la commande dch -i et modifiez la ligne de changelog, en changeant bien la version du paquet pour qu'elle soit consécutive à la précédente.
Compiler le paquet
Rendez-vous dans le dossier du paquet, et lancez la commande debuild . C'est tout. Rentrez votre phrase de passe pour la clé à la fin de la procédure.
Déployer en production
Pour déployer un paquet, deux solutions :
- Envoyer le paquet puis l'installer avec dpkg -i lefichier.deb ou un outil d'orchestration
- Installer un DPA (Debian Private Repository) et l'ajouter au sources.list
L'installation du serveur DPA fera l'objet d'un autre billet (un jour).