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, 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
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" 2>/dev/null
/ $ cd -
Cela m’a ressorti deux occurences utilisables : /usr/lib/php/build
et /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>/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
- Optimiser les performances et les fonctionnalités de son instance StatusNet, par Jean-Baptiste Favre (que j’ai longtemps ennuyé en lui faisant part de ma longue complainte du queuedaemon mal aimé), section Utiliser les files d’attentes asynchrones ;
- Adding Pcntl Support to a Shared Host.