Le 16/06/2010 dans DevBlog

Installer XHProf sous Ubuntu 9.10 et PHP5.3 (dotdeb)

Si comme moi vous utilisez les dépôts dotdeb sur votre Ubuntu / Debian, l’installation de l’extension XHProf peut s’avérer fastidieuse…

Voici la procédure normale :

wget http://pecl.php.net/get/xhprof-0.9.2.tgz
tar xvfz xhprof-0.9.2.tgz
cd xhprof-0.9.2/extension
phpize
./configure
make
sudo make install
sudo make test

On télécharge, on compile, on installe et on test. Si vous n’avez aucun soucis jusque là, GOOD FOR YOU. Vous pouvez modifier votre php.ini et jouer avec XHProf :

[xhprof]
extension=xhprof.so
;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
xhprof.output_dir=(A REMPLIR)

Maintenant si vous êtes comme moi, vous obtiendrez surement une erreur du style :

PHP Warning:  PHP Startup: xhprof: Unable to initialize module
Module compiled with module API=20060613
PHP    compiled with module API=20090626
These options need to match

Normal ! Vous venez de compiler le module avec la mauvaise version de php5-dev (et donc de phpize). Pour vérifier votre version, faite un phpize -v, si vous êtes en PHP 5.3 ça devrait être 20090626.
Un petit tour dans apt-get nous apprend que php5-dev ne peux pas être mis à jour :

libtool (>= 2.2) mais 2.2.6a-4 devra être installé

Cette erreur ne veux pas dire grand chose, je ne l’ai toujours pas compris, mais il existe une solution ! Downgrader à la main libtool et réinstaller le tout (car php5-dev est bien disponible chez dotdeb dans la version qui va bien) :

cd /tmp
wget http://fr.archive.ubuntu.com/ubuntu/pool/main/libt/libtool/libtool_1.5.26-1ubuntu1_i386.deb
sudo apt-get remove libtool
sudo dpkg -i libtool_1.5.26-1ubuntu1_i386.deb
sudo apt-get install php5-dev

Maintenant que vous avez la bonne version de php5-dev tout devrait rouler (vous pouvez recommencer depuis le début de ce post :P), et là j’ai eu le problème avec XHProf mais j’aurais pu avoir le même sur n’importe quel compilation de module.