Les paquets Debian font certainement partie de votre quotidien… mais savez-vous seulement ce qu’ils sont exactement ? De simples archives ? Sûrement plus que ça, sinon de « simples » archives TAR (vous savez, les fameux fichiers finissant par .tar.gz) feraient l’affaire. Cet article vous propose de plonger au cœur de leurs structures… suivez le guide !
1. Un paquet Debian ? Deux archives TAR dans une archive AR !
Un fichier .deb est, en premier lieu, une archive au format AR. Archive que vous pouvez manipuler à l’aide de la commande ar. Cette archive contient 3 fichiers, comme vous pouvez le constater par vous-même en téléchargeant n’importe quel .deb, et en lui passant la commande « ar t » :
$ ar t gwibber_2.31.91-1_all.deb debian-binary control.tar.gz data.tar.gz
Le fichier debian-binary
est un fichier texte indiquant la version du format du .deb, la version actuelle étant la 2.0.
$ ar p gwibber_2.31.91-1_all.deb debian-binary 2.0
Le fichier data.tar.gz
contient quant à lui les fichiers « utiles » du paquets, i.e. tous les fichiers décompressés lorsque vous exécutez dpkg --unpack
.
Jusque-là…rien d’extraordinaire. Ce qui fait qu’un .deb est plus qu’une archive est contenu dans le dernier fichier : control.tar.gz
. Il contient des métainformations utilisées par le gestionnaire de paquets. Par exemple :
$ ar p gwibber_2.31.91-1_all.deb control.tar.gz | tar tzf - ./ ./postinst ./prerm ./preinst ./postrm ./conffiles ./md5sums ./control
2. Des méta-informations concernant le paquet et ses relations…
Le fichier control
contenu dans l’archive control.tar.gz
est le plus important de tous : il contient des informations basiques sur le paquet telles que son nom, sa version, sa description, les architectures supportées, son mainteneur, etc. Il contient également tout le jeu de dépendances nécessaires au paquet, grâce auquel le gestionnaire de paquets peut s’assurer de la cohérence de l’écosystème avant l’installation du paquet. La page dédiée aux Binary control files vous en dira plus quant à l’utilisation de tous ces attributs.
Ces informations sont copiées dans le fichier /var/lib/dpkg/status
après que le paquet a été installé.
3. …et des scripts pour que tout fonctionne dès l’installation
Aux différentes étapes de la vie d’un paquet — installation, mise à jour, suppression… — dpkg exécute les scripts du mainteneur, embarqués dans le paquet :
postinst
: après l’installationpreinst
: avant l’installationpostrm
: après la suppressionprerm
: avant la suppression
Il s’agit là d’une description largement simplifiée. Plus exactement, ces scripts sont exécutés en de nombreuses autres occasions, avec des paramètres d’appel différents. Un chapitre entier de la Charte Technique Debian est dédié à ce sujet. Cette page du wiki Debian pourrait vous paraître plus digeste pour une première approche.
Bien qu’effrayante de prime abord, il s’agit là d’une fonctionnalité très importante, indispensable à la bonne gestion des mises à jour non réversibles, à la création d’utilisateurs système, pour la configuration automatique, etc.
4. Les fichiers de configuration sont… spéciaux
Décompresser une archive entraîne la suppression des versions précédentes des fichiers, ce qui constitue le comportement désiré lorsqu’un paquet est mis à jour… sauf pour les fichiers de configuration : il vaut mieux ne pas écraser vos modifications, non ?
C’est dans cette optique que les paquets listent les fichiers de configuration dans le fichier conffiles
fourni par control.tar.gz
. De cette manière, dpkg les traitera différemment.
5. Vous pouvez toujours ajouter de nouvelles méta-informations
Et il existe déjà des outils qui exploitent la possibilité d’ajouter des fichiers supplémentaires dans control.tar.gz
:
- debsums utilise le fichier
md5sums
pour s’assurer qu’aucun fichier n’a été modifié par accident - dpkg-shlibdeps utilise les fichiers
shlibs
etsymbols
pour générer les dépendances à une bibliothèque - debconf utilise les scripts
config
pour obtenir des informations de configuration de la part de l’utilisateur
Une fois installés, ces fichiers sont conservés par dpkg dans /var/lib/dpkg/info/package.*
à côté des scripts du mainteneur du paquet.
Cet article est une traduction de 5 reasons why a Debian package is more than a simple file archive contribuée par Weierstrass01. Suivez moi sur Identi.ca, Twitter et Facebook. Ou abonnez-vous à ce blog par RSS ou par email.