Dépôt CPAN à la sauce Debian

user_icon admin | icon2 Perl | icon4 26/1/2009 20h11| Type doc: article| Type File: xml| icon3 No Comment

Debian et CPAN


1. Construction du dépot

Catalyst est dépendant d'un nombre important de modules du CPAN loin d'être tous présent dans Debian. Pour y remédier plusieurs outils assurent leur mise en paquet. ( dh-make-perl , dpkg-buildpackage , cpan2dist et surement d'autres ...)

Dans ce chapitre je monterai comment j'ai laborieusement mis en place le dépot http://apt.catapulse.org/debian à l'aide de ces outils (Cette méthode peut aussi s'appliquer à d'autres distributions). Actuellement celui-ci contient près de 400 modules nécessaires au fonctionnement de Catalyst, Catapulse, MojoMojo et/ou Angerwhale .

Pour utiliser ce dépot ajoutez la ligne suivante à votre /etc/apt/source.list :

deb http://apt.catapulse.org/debian stable main

Attention: http://security.debian.org/ doit aussi être présent dans le sources.list

Ensuite pour utiliser Catalyst :

apt-get update
apt-get install cpan-libcatalyst-runtime-perl
apt-get install cpan-libcatalyst-devel-perl
catalyst.pl MonAppli

ou Catapulse :

apt-get install libcatapulse-modules-perl
svn co svn://www.catapulse.org:28077/Catapulse
cd Catapulse
./script/catapulse_spawn_db.pl
./script/catapulse_server.pl

Voilà maintenant quelques indications permettant d'aider à la construction du dépot. Pour ne pas polluer ma distribution j'ai commencé par créer une mini Debian avec debootstrap dans laquelle je me suis chrooté :

debootstrap etch etch
chroot etch
echo "catapulse.org"                       > /etc/mailname
echo "127.0.0.1       localhost buildhost" > /etc/hosts
echo "buildhost"                           > /etc/hostname

oû j'ajoute un utilisateur ('dab' en l'occurence) avec qui je génère une clé pgp:

adduser dab [ Full name: dab xxx ]

su - dab
gpg --gen-key  [ Real name: dab ... ]
               [ Email address: dab@catapulse.org ]

Installation des packages minum requis, pour cela je met à jour le fichier /etc/apt/sources.list :

deb http://ftp.fr.debian.org/debian etch main contrib non-free
deb http://security.debian.org/ etch/updates main contrib
apt-get update
apt-get upgrade
apt-get install dh-make-perl build-essential libperl-dev libmodule-signature-perl libmodule-corelist-perl \
                libparams-check-perl libtest-harness-perl libclass-data-inheritable-perl libclass-inspector-perl \
                libtest-simple-perl libarchive-tar-perl libio-zlib-perl liblocale-maketext-simple-perl libmodule-load-perl \
                libmodule-pluggable-perl libextutils-cbuilder-perl devscripts

Perl est alors upgradé en 5.8.8-7etch6 nécessaire pour la suite. Avec dh-make-perl je peux générer les packages des derniers modules CPAN suivants:

  • Module::Load::Conditional

  • IPC::Cmd

  • Archive::Extract

  • File::Fetch

  • Log::Message

  • Module::Build

Je me logue en 'dab' et j'exécute :

su - dab

mkdir packages && cd packages
dh-make-perl --build --cpan Module::Load::Conditional

Chaque package étant installé après sa construction.

Le package suivant dépendant de Module::Install ne veut pas s'installer avec la méthode précédente, il est nécessaire de lui ajouter l'option 'depends':

dh-make-perl --depends perl --build --cpan  Module::Signature

Les derniers packages à construire utiliseront l'une de ces méthodes :

  • Module::CoreList

  • ExtUtils::CBuilder

  • Module::Loaded

  • Package::Constants

  • Params::Check

  • Log::Message::Simple

  • Term::UI

  • CPANPLUS

  • CPANPLUS::Dist::Build

  • CPANPLUS::Dist::Deb

Au passage on notera que CPANPLUS fourni des modules pour construire des packages pour plusieurs gestionnaires de packages ( DEB, RPM, MDV, FEDORA ... voir les packages CPANPLUS::Dist::* )

Nota: j'ai dû constuire le package CPANPLUS::Dist::Deb en tant que root sinon la construction échouait sur un vilain : dpkg: `ldconfig' not found on PATH

Dans certains cas et pour diverses raisons, rien ne passe avec dh-make-perl . Si ce dernier a tout de même construit le répertoire ' debian ' dans les sources du modules alors il est aussi possible d'éxécuter:

dpkg-buildpackage -rfakeroot

A partir d'ici les nouveaux packages ne seront plus construit avec dh-make-perl mais avec cpan2dist (fourni par CPANPLUS ). Beaucoup plus souple, il gère aussi la construction des dépendances de packages. Testons immédiatement en lancant la construction du package CGI::Simple::Cookie (qui nous sera utile pour le package Catalyst ) :

cpan2dist --format CPANPLUS::Dist::Deb --buildprereq --timeout 0 --verbose CGI::Simple::Cookie

Je vais ainsi construire tous les packages de dépendances de Catalyst ... Et pendant que j'y suis je recreer les packages construits prédemenent avec dh-make-perl .

Au final il ne me reste qu'a générer les fichiers Packages , Source et Release pour que l'arborescence devient un vrai dépot Debian:

cd ~/.cpanplus/5.8.8/dist/debian
mkdir -p dists/stable/main/binary-i386
apt-ftparchive packages main/pool/cpan-lib/ >dists/stable/main/binary-i386/Packages
apt-ftparchive sources main/pool/cpan-lib/ >dists/stable/main/binary-i386/Sources
apt-ftparchive release main/pool/cpan-lib/ >dists/stable/main/binary-i386/Release

gzip dists/stable/main/binary-i386/Packages

Pour utiliser ce dépot local il suffit d'ajouter la ligne suivante au fichier /etc/apt/sources.list :

deb file:/home/dab/.cpanplus/5.8.8/dist/debian stable main

Sinon pour synchroniser le dépôt local sur un serveur distant:

rsync -avz --delete -e 'ssh -p 22' /home/dab/.cpanplus/5.8.8/dist/debian/ USER@SERVEUR_DISTANT:/var/www/apt/debian/

Tous les paquets générés par cpan2dist porte un nom commencant par 'cpan-' et se termiant par '-perl'. Pour tous les supprimer :

dpkg -l | awk '{print $2}' | grep "^cpan-.*-perl$" | xargs apt-get remove -y

2. libcatapulse-modules-perl

Ce chapitre fourni une méthode simple pour construire un méta package dont le role sera d'installer d'autre packages. Ca tombe bien car Catapulse dépend d'un très grand nombre de packages, une installation manuelle des dépendances était très fastidieuse, avec un méta package cela devient trivial.

mkdir libcatapulse-modules-perl-0.06 && cd libcatapulse-modules-perl-0.06
wget http://www.catapulse.org/static/files/articles/perl/catalyst/debian/debian-catapulse-modules.tgz
tar xvzf debian-catapulse-modules.tgz && rm debian-catapulse-modules.tgz

Tout ce passe dans le fichier debian/control , oû il suffit d'ajouter les dépendances.

Je génère le debian/changelog avec la commande suivante en modifiant ' PACKAGE ' par ' libcatapulse-modules-perl ', ' VERSION ' par ' 0.06 ' et ' UNRELEASED ' par ' unstable ' :

dch --create "Initial release"

Ensuite la construction du package est lancée avec :

dpkg-buildpackage -rfakeroot

Et voilà le package libcatapulse-modules-perl_0.06_all.deb est généré. Il suffit alors de le copier dans l'arborescence du dépot et de relancer les 'apt-ftparchive' et le voilà intégré au dépôt :)


Add_a_comment

Validator_logo
Catapulse v0.06
( 0.079508 s)