Tym-Project

From: SUPINFO
To: Tous
Subject: IT

Pour S'occuper Pendant L'hiver : Faire Du Perl Sous Archlinux

Je me suis mis en tête de mettre en place HellaSmella, une interface Web pour HellANzb. Une interface Web en PERL pour être précis. Une interface Web en PERL qui utilise le framework CATALYST. Nous avons donc l’équation suivante : Archlinux + Perl + Catalyst = “Ouh pinaize…je vais jamais m’en sortir…!”

C’est pas facile à faire, pas facile du tout car Archlinux a trop peu de modules Perl dans ses dépots. Comme souvent dans le monde du libre, il existe un outil pour palier à ce problème : [man]pacpan[/man].
C’est un gestionnaire de paquets pour les modules Perl, top moumoute ! Oui…mais non ! En fait cet outil n’est pas parfait…et j’ai bien gratté pour m’en sortir (et encore, pas complètement…). Voici donc comment résoudre les problèmes les plus classiques de pacpan…

Tout d’abord faites tout en root, cela vous épargnera des erreurs sur des fichiers non lisibles. Cela a pour conséquence de devoir rajouter une option à makepkg : --asroot. Si vous n’utilisez pas une installation vierge de tout paquet perl (ce qui est fort probablement le cas), utilisez l’option pour forcer les installations : -f. Ce qui nous donne :

./build_cpan --makepkg-args --asroot -f --pacman-args -f

Certains paquets sont mal configurés, et n’utilisent pas la bonne convention de nommage. Vous obtiendrez alors des erreurs lors de l’execution de la commande précédente.
Il faut donc modifier le fichier build_cpan. Trouvez la section qui correspond au paquet récalcitrant et localisez la fonction build(). Voici les lignes qui nous intéressent :

_makefile=$(find $srcdir -iname Makefile.PL)
[...]
PERL_MM_USE_DEFAULT=1
perl Makefile.PL INSTALLDIRS=vendor || return 1
make || return 1
make install DESTDIR=${pkgdir} || return 1

C’est dans la plupart des cas le fichier Makefile.PL qui est remplacé par un script : Build. Vous devez donc modifier les lignes comme suit :

_makefile=$(find $srcdir -iname Build)
[...]
PERL_MM_USE_DEFAULT=1
perl Build INSTALLDIRS=vendor || return 1
./Build || return 1 make install DESTDIR=${pkgdir} || return 1

Il existe surement d’autres problèmes et d’autres solutions mais j’ai jeté l’éponge !

Bon “galérage” ;-)

Comments