StatusNet : queuedaemon, pcntl et hébergement mutualisé

Ceux qui me connaissent depuis un certain temps sont très certainement au courant de mes multiples déboires avec mon instance StatusNet, celle-ci n’en faisant qu’à sa tête (pour peu qu’elle en ait une), et ma rage mêlée d’espoir de ne pouvoir utiliser le queuedaemon, et le nombre d’erreurs que je peux obtenir à chaque fois que je poste un message. La totale, mais je n’ai jamais voulu abandonner.

Mesdames et messieurs, sans même avoir à changer d’hébergeur (youpie), je crois avoir pu résoudre ce malicieux problème de ne pouvoir activer cette fichue extension ! La solution ? Forger l’extension par moi-même. Est-ce compliqué ? Non, mais pas spécialement trépidant. Suivez le guide.

N.B. Pour que la manipulation reflète ma situation, j’ai laissé des chemins tels que je les ai sur mon hébergement mutualisé chez PlanetHoster :

  • ~/ pour l’origine où j’effectue ces manipulations ;
  • /www/statusnet/ pour le dossier de mon instance StatusNet.

Si vous désirez reproduire ces manipulations, soyez donc attentif aux chemins que vous utilisez.

Forger sa propre extension pcntl

C’est, en fait, la partie la plus contraignante, faite des quelques tâtonnements et échecs. J’ai pour cela suivi ce très bon document tout en l’adaptant à mes besoins.

~ $ php --version

Afin de trouver la version de PHP utilisée sur mon hébergement à télécharger et à extraire dans mon dossier. En l’occurrence il s’agit de la version 5.3.10. Si votre hébergeur utilise une autre version, cherchez-la.

~ $ wget http://be.php.net/distributions/php-5.3.10.tar.gz
~ $ tar -xzf php-5.3.10.tar.gz

Ensuite, simplement se rendre dans le dossier relatif à pcntl dans la source téléchargée.

~ $ cd php-5.3.10/ext/pcntl

Ayant besoin de phpize mais, hélas, la version préinstallée échouant lamentablement (oui, quand ça merde, rien n’est laissé au hasard), donc j’ai poursuivi en retéléchargeant le script, que j’ai édité ensuite.

~/php-5.3.10/ext/pcntl $ wget stuporglue.org/downloads/phpize
~/php-5.3.10/ext/pcntl $ chmod +x phpize</code>

Maintenant, simplement éditer ce script pour lui donner les valeurs convenant à son utilisation. En l’occurence, il s’agit de corriger phpdir, includedir et aclocaldir afin qu’ils soient valides.

~/php-5.3.10/ext/pcntl $ cd /
$ find . -name "build" > /dev/null
$ cd -

Cela m’a ressorti deux occurences utilisables :

  1. /usr/lib/php/build et
  2. `/usr/local/lib/php/build.

C’est cette dernière que j’utiliserai afin de modifier l’entête de phpize.

~/php-5.3.10/ext/pcntl $ cat phpize
#!/bin/sh
# Variable declaration
prefix='/usr'
exec_prefix="`eval echo ${prefix}`"
phpdir="$prefix/local/lib/php/build"
includedir="$prefix/include/php"
aclocaldir="$prefix/share/aclocal"
builddir="`pwd`"
SED="/bin/sed"

Ainsi est-il possible d’exécuter phpize.

~/php-5.3.10/ext/pcntl $ ./phpize

Ce n’est pas tout, ne reste plus qu’à configurer et à forger, enfin, l’extension si vivement désirée. Configurons, donc :

~/php-5.3.10/ext/pcntl $ cd /
/ $ find . -name php-config 2&gt;/dev/null
/ $ cd -

À nouveau sont-ce deux occurrences qui me reviennent, /usr/bin/php-config et /usr/local/bin/php-config, et c’est à nouveau la seconde que je retiendrai pour poursuivre et configurer.

~/php-5.3.10/ext/pcntl $ ./configure --with-php-config=/usr/local/bin/php-config
~/php-5.3.10/ext/pcntl $ make
~/php-5.3.10/ext/pcntl $ make test

Une fois le test passé, et (en ayant croisé tous les doigts à disposition) remporté à 100%, nous pouvons finalement disposer de cette fichue extension manquante. Mettons-la là où il faut, et configurons un php.ini qui va bien !

~/php-5.3.10/ext/pcntl $ mkdir ~/php-modules
~/php-5.3.10/ext/pcntl $ cp modules/pcntl.so ~/php-modules

~ $ cat www/statusnet/scripts/php.ini
extension_dir=~/php-modules
extension=pcntl.so

Démarrage des démons

Afin de lancer les daemons, il m’a fallu éditer ~/www/statusnet/scripts/startdaemon.sh afin que soit utilisée l’extension voulue :

for f in $DAEMONS; do

printf "Starting $f...";
php -c ~/www/statusnet/scripts/php.ini $f $ARGSD
printf "DONE.\n"

done

Ensuite, Jean-Baptiste explique très bien ce qu’il reste à faire : éditer ~/www/statusnet/scripts/getvaliddaemons.php afin de n’avoir que les processus désirés. En l’occurrence, j’ai commenté cette ligne :

 $daemons[] = INSTALLDIR.'/scripts/imdaemon.php';

Ne reste plus qu’à lancer le daemon (mais pas trop loin, sinon on risque de le perdre) !

~ $ ./www/statusnet/scripts/startdaemons.sh

Configurer StatusNet

Toujours suivant ce merveilleux article (il en existe d’autre, comme celui-ci, mais c’est celui que je connais depuis le plus longtemps), il ne me restait plus qu’à éditer mon config.php (dont vous pouvez retrouver la structure ici) en ayant préalablement créé le dossier /tmp/ qui va bien.

/*- Queue ------------------------------------------*/
$config['queue']['enabled'] = true;
$config['daemon']['piddir'] = '~/www/statusnet/tmp/';
$config['daemon']['user'] = 'postblue';
$config['daemon']['group'] = 'postblue';

Le mot de la fin

~ $ php www/statusnet/scripts/checkschema.php

Sources