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.
vvillenave says
Très intéressant. La solidité des paquets Debian n’est plus à démontrer, mais il me semble que les RPM n’ont aujourd’hui plus rien à leur envier…
Pour la petite histoire : je suis actuellement sous Fedora pour une seule raison : l’existence d’un petit utilitaire en ncurses appelé rpmreaper, qui me permet d’afficher l’arborescence de tous les paquets installés avec leurs liens de dépendances, ce qui me permet de virer absolument toutes les bibliothèques dont je ne me sers pas (et de ce fait de garder mon système très propre et minimal). Cette fonctionnalité unique (que l’on ne retrouve ni dans Synaptic ni dans Aptitude) fonctionne beaucoup mieux que deborphan (Debian, Ubuntu) ou urpme –auto-orphans (Mandriva) car elle est constamment générée et mise à jour depuis la base de données des paquets eux-même.
Raphaël Hertzog says
Je ne connais pas d’interface graphique similaire dans Debian mais il est assez facile d’avoir un système minimal avec Debian également: https://raphaelhertzog.com/2011/03/07/debian-cleanup-tip-6-remove-automatically-installed-packages/
Stéphane Péchard says
Merci pour cet article intéressant.
Je me suis toujours demandé si il existait des outils d’aide à la création de paquets (édition des fichiers, création des binaires, etc.) ou bien si un packageur répétait à chaque fois les même commandes. Une idée ?
Raphaël Hertzog says
On suit forcément la même démarche à chaque fois mais des outils d’aide il en existe plein, mais rien qui ne soit « tout intégré » pour autant que je sache.
En général on utilise
dh_make
pour créer les fichiers initiaux et ensuite on adapte le contenu des fichiers créés (avec un simple éditeur de texte).Freddec says
Salut,
Merci de cet article qui nous éclaire un peu plus sur les .deb
Que penses tu (en tant que DD) de l’utilitaire checkinstall ?
Non pas pour la création de paquets officiels propres (où là l’expertise du mainteneur est primordiale)
Mais plus comme un outils pour amateurs (comme moi) permettant de garder un système « propre » en passant par apt pour installer/desinstaller un paquet issus des sources, tout en évitant la trilogie infernale des .config, make, make install ?
Il m’est arrivé de l’utiliser 2-3 fois, je l’ai trouvé pratique mais me demande si c’est une solution saine.
Quelles sont selon toi ses avantages et ses limites ?
Raphaël Hertzog says
Je n’ai jamais utilisé checkinstall donc je ne peux pas vraiment me prononcer. Mais j’en ai entendu parler à plusieurs reprises et je n’ai pas souvenir de mauvaises critiques.
http://packages.qa.debian.org/c/checkinstall.html n’indique que 2 bogues et un paquet avec un long historique. Le logiciel a donc l’air assez mature de prime abord.
Freddec says
Merci de ce retour rapide
Évidement, vu sous l’aspect « Historique » et « Rapport de Bug » on peut se dire qu’il n’y a pas trop de soucis à l’utiliser
Me voila rassurer 😉
djiock says
Merci pour cet article ! C’est sympa de prendre du temps pour expliquer un peu les rouages au commun des mortels 🙂
Qui sait, peut-être certains d’entre nous serons amenés à créer un paquet Debian un jour !