jeudi 10 avril 2008

Threads perl avec Gentoo - Beware !

Je viens de perdre deux bonnes heures avec un problème bien tordu.

A PolyLAN X, il semblerait que la cause du gros foirage de l'authentification soit dû non pas au dimensionnement du nombre de transactions autorisé, comme je l'ai d'abord pensé, mais au fait que l'interpréteur Perl n'était pas threadé, et que par conséquent un seul login simultané pouvait avoir lieu pour le serveur radius.

Après un "echo dev-lang/perl ithreads >>/etc/portage/package.use ; emerge perl", radiusd s'est retrouvé incapable de démarrer, se plaignant d'un symbole manquant dans le module rlm_perl.

Ré-emerger freeradius n'a bien entendu rien donné.

Le problème était qu'a la compilation, freeradius à utilisé les headers de perl pour compiler son module, mais au lancement, il se liait dynamiquement à la libperl. Sous Gentoo, l'interpréteur perl et la libperl sont deux packages séparés, et je n'avais pas réinstallé la libperl.


De manière générale, plein de problèmes de linking sont apparus. Ces problèmes auraient du être résolus par perl-cleaner; malheureusement, si perl threadé et non threadé sont considérées comme des versions différentes, avec des répertoires séparés pour les libs, perl-cleaner les considère comme une seule et même version, et ne déclenche pas la reconstruction par défaut. Il fallait donc utiliser "perl-cleaner allmodules" plutot que "perl-cleaner modules".