Vous le savez déjà, je package des logiciels avec RPM pour qu'ils soient inclus dans la distribution Fedora. Seulement voilà, au boulot on utilise des Debian, donc je me suis dit que ça pourrait être pas mal d'apprendre à packager sous Debian, en tout cas au minimum d'apprendre à recompiler un package pour sa distribution. J'ai commencé à apprendre le packaging en .deb, et voilà mes premières impressions sur les différences entre le format RPM et le format deb. Bien sûr c'est incomplet, mais je complèterai au fur et à mesure que ma connaissance du format Debian grandira :)

Avantages Debian

- Debconf. C'est génial ce truc

  • Plus de possibilités dans les scriptlets (on peut faire quelquechose d'interactif alors qu'avec RPM c'est interdit par convention)
  • La liste des fichiers de l'archive est créée automatiquement
  • Possibilité de "Recommander/Suggérer" un package. Ca vient tout juste d'arriver dans RPM avec Requires(hint), mais c'est pas encore intégré aux résolveurs de dépendences type yum.

Avantages RPM

- On peut signer individuellement un package avec GPG. C'est très important.

  • Plus simple à fabriquer de toutes pièces. OK, sachant que je package des RPM depuis relativement longtemps, ce point est peut-être biaisé, mais je trouve qu'il est plus simple de manipuler des scripts shell que des makefiles (mais je suis plus admin que développeur aussi)
  • Il est plus facile de savoir quels patches on été appliqués à la source, parce qu'ils sont dans des fichiers séparés (avec nom et version). Chez Debian il y a dpatch qui permet de faire ça mais ce n'est pas systématique (et apparemment pas majoritaire).
  • On peut utiliser des macros prédéfinies pour se simplifier la vie et pour garder une uniformité au sein de la distrib. Debhelper fournit ce genre de services, mais il est beaucoup plus complexe et moins automatique que dans RPM. Par exemple, dans RPM il y a des macros pour les chemins des autotools (ex: %_libdir pour /usr/lib). Ca a permit d'adapter facilement la distrib au 64bits, en définissant simplement %_lib en /lib64 au lieu de /lib.
  • Possibilté de dépendre d'un fichier (une librairie, un programme) et pas seulement d'un autre package

Voilà, ce sont les grandes lignes de ce que j'ai découvert. Il n'y a pas de meilleur dans l'absolu, ils ont tous les deux leurs avantages et leurs inconvénients.

Recompiler un package

Je pense que dans tous les cas, il est bon de savoir recompiler un package. Alors voilà la solution :

Avec RPM

  • vérifier qu'on a bien installé le package rpm-build
  • récupérer le .src.rpm (avec yumdownloader par exemple, ou un bon vieux wget)
  • lancer rpmbuild --rebuild sur le package

Avec Debian

  • vérifier qu'on a bien installé dpkg-dev et fakeroot
  • récupérer la source debian (apt-get source)
  • récupérer les dépendances de compilation (apt-get build-dep)
  • se placer dans le répertoire décompressé
  • lancer un fakeroot debian/rules binary

Voilà, n'hésitez pas à me laisser vos commentaires surtout ! (Et le premier qui trolle, je sacque sauvagement son post :) )

P.S. :

Note : Comment fait-on pour ajouter un fichier binaire quand on construit un package debian ? Exemple je veux ajouter une icône parce qu'il n'y en a pas de fourni avec la tarball, et cette icône est en PNG. Comment construit-il le diff puisque c'est du binaire ? J'ai essayé, et ça me donne :

dpkg-source: cannot represent change to debian/syslogo.png: binary file contents changed

Pas très satisfaisant...

EDIT : on peut utiliser uuencode et uudecode.