Table des matières
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
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 :)


