Niveau :      
Résumé : .deb

Connaissez-vous le format des paquets debian ? Non ? alors je vais vous couper la tête !

Debian a bien réfléchi son format de paquet dès le début. Les contraintes principales étant qu'il soit lisible avec des outils de base unix, c'est-à-dire qu'on peut les lire même si on n'est pas sous debian, qu'on puisse le faire évoluer (tiens il faut ajouter un champ pour mettre une capture d'écran...), et qu'on puisse rapidement lire les données importantes sans tout extraire.

Partant de là, une solution a été trouvée à base de tar, gz, ar et de fichier texte. Vous verrez, c'est beau.

Récupérer un fichier deb

Commençons par trouver un fichier. Si vous êtes sur une debian faites aptitude download monpaquet mais c'est un peu de la triche.

On va plutôt expliquer l'architecture des miroirs debian (une * devant les répertoires les plus intéressants) :

ftp.<pays>.debian.org :
|- debian (la racine)
  |- dists (la définition des distributions)
    |- <distro> (la version genre sid)
      |- Contents-<archi>.gz (mapping entre fichier et paquets)
      |- main (les paquets officiels de chez debian)
        |- binary-<archi> (les paquets pour cette architecture)
          |- Packages.gz (fichier compressé listant les paquets)
*       |- installer-<archi> (toutes les versions possibles des installeurs debian)
        |- debian-installer (les paquets spécifiques au système d'installation debian, au format udeb)
      |- contrib (les paquets qui dépendent de non-free)
        |- ...
      |- non-free (les paquets non libre donc non supportés par debian)
        |- ...
  |- pool (les paquets eux-mêmes)
    |- main (les paquets officiels de chez debian)
      |- a,b,c, ... (un répertoire pour chaque première lettre de nom de paquet, attention les libs sont séparées)
*       |- <paquet> (un répertoire par nom de paquet source)
          |- <paquet>.deb (un fichier par paquet binaire)
          |- <paquet>.dsc (un fichier par paquet source)
          |- <paquet>.diff.gz (un fichier par paquet source)
          |- <paquet>.orig.tar.gz (un fichier par paquet source)
    |- contrib (les paquets qui dépendent de non-free)
      |- ... 
    |- non-free (les paquets non libre donc non supportés par debian)
      |- ... 
  |- ... 

Et hop on récupère notre .deb dans /debian/pool/main/p/paquet/paquet_1.0_i386.deb

Pour les futés qui auraient la flemme, il suffit en fait d'aller sur http://packages.debian.org. Ce site vous permet de chercher un paquet par nom ou par nom de fichier contenu dans un paquet. Une fois que vous avez trouvé votre paquet, il vous propose de le télécharger, de lister les fichiers qui sont dedans ou d'en lister les dépendances. Gardez ce site dans vos favoris.

Extraction du paquet

Donc la beauté du .deb, c'est son format :

# on ouvre le paquet
$ cd /tmp
$ ar x paquet.deb

Et on se retrouve avec 3 choses :

  • data.tar.gz : nos données à installer !
  • control.tar.gz : les métadonnées
  • debian-binary : version du format .deb

Notez que vous pouvez n'extraire qu'une partie, par exemple les métadonnées :

$ ar x paquet.deb control.tar.gz

control.tar.gz peut contenir plus ou moins de fichiers. Il doit au minimum contenir md5sums et control. Control est le fichier qui va indiquer les dépendances, la version, l'architecture ... Il peut aussi contenir des fichiers comme postinst ou postrm qui seront exécutés pendant l'installation et la suppression du paquet.

Et enfin data.tar.gz contient les données du paquet. Pour installer les fichiers dans / :

$ tar xvfz data.tar.gz  -C /

Et pour les gens sous debian qui veulent faire la même chose sans se fatiguer :

# attention ce n'est pas une installation complète
$ dpkg -x paquet.deb /

Cas des paquets source

Un paquet source est lui aussi dans un format presque sympa, mais en 3 fichiers cette fois :

  • paquet.orig.tag.gz : les sources tel qu'on devrait les trouver chez le développeur
  • paquet.diff.gz : les modifications apportées par debian
  • paquet.dsc : une description du paquet source

Donc pour récupérer les sources debian :

# l'original
$ tar xvfz paquet.orig.tar.gz
$ cd paquet
# plus le patch
$ zcat ../paquet.diff.gz | patch -p1

Un faignant sous debian fera :

$ apt-get source paquet

Pour plus de détails sur tout cela, allez vous documenter à la source.