Tag Archives: apache

PHP Module is not compiled to be threadsafe

Pour mon serveur, j’utilise Debian. J’aime beaucoup cette distribution pour plusieurs raisons. Premièrement elle est très stable et maintenue, deuxièmement j’aime bien le gestionnaire de paquet APT et pour terminer ils ne font pas de mise à jour tous les 6 mois.
Seulement, revers de la médaille, les paquets ne correspondent presque jamais à la dernière version majeure.

Prenons un serveur web, ce que je connais le mieux. Dessus, il y a 3 choses indispensables dues au caractère web du serveur: Apache, MySQL (ou autre) et PHP. Cependant, j’aime bien profiter des dernières nouveautés en ce qui concerne PHP. Et là, les choses coincent. Debian propose systématiquement l’avant-dernière version stable, et donc pas les toutes dernières innovations. Alors que faire ?

Et bien c’est très simple: deux solutions. La première, c’est tout simplement de compiler PHP soit-même. Seulement ça demande du temps, or du temps, c’est la ressource dont je dispose le mien actuellement. Vient donc la deuxième solution, se faire compiler PHP par quelqu’un d’autre. Et ça, c’est possible, et c’est même très utilisé. Ce sont les fameux paquets !

Alors oui, je viens de vous dire que justement les paquets ne sont pas disponibles, et je vous donne comme solution d’utiliser des paquets… Mais ce qu’il faut savoir, c’est qu’il est possible de rajouter d’autre fournisseur de paquets ! Et il y en a un bien connu, qui justement s’occupe pour vous de vous compiler les dernières versions d’Apache, MySQl et PHP ! J’ai nommé Dotdeb !

Je vous invite à visiter leur site pour plus d’information. Vous avez notamment la page Instructions qui vous des détails précise sur comment utiliser leur repo. Pour ma part, j’ai un petit script qui m’installe et me configure une bonne partie des services que je suis amené à installer sur mon serveur. En voici un extrait pour installer apache php et mysql en utilisant dotdeb:

echo $'
# dotdeb 
deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy all

# dotdeb php
deb http://packages.dotdeb.org wheezy-php55 all
deb-src http://packages.dotdeb.org wheezy-php55 all
' >> /etc/apt/sources.list

wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | apt-key add -

# install some lib
aptitude update
aptitude install php5 php5-mysql mysql-client mysql-server apache2 apache2-mpm-prefork

Si vous n’utilisez pas ce script, vous aller par contre être potentiellement confronter à un message d’erreur:

[Wed Aug 21 22:43:04 2013] [crit] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.
Pre-configuration failed
Action 'configtest' failed.
The Apache error log may have more information.
 failed!

Les symptômes sont très visibles: votre serveur Apache n’est pas capable d’exécuter du PHP, il se contente de l’affiche tel un vulgaire fichier texte !

La raison de ce message d’erreur n’est, je vous l’avoue, pas évidente pour moi. Je ne maîtrise pas les modules Apache, et quand je suis tombé sur ce message d’erreur je me suis senti quelque peu impuissant. J’ai même été amené à désinstaller les paquets et virer dotdeb de la liste des repos pour réinstaller un PHP 5.4. Jusqu’à ce que je décide de faire face au problème plutôt que de l’éviter.

C’est là qu’en voguant de site en site, de forum en forum, j’ai fini par trouver qu’il suffisait de remplacer le paquet apache2-mpm-worker (installé de base lors de l’installation d’Apache) par apache2-mpm-prefork.
Ainsi donc un simple

aptitude install apache2-mpm-prefork

résoudra votre problème.

PS: Si toi, lecteur, tu as les compétences pour expliquer à quoi ai dû cette erreur, et pour quelle raison le paquet apache-mpm-worker le résous, je me ferai un plaisir de compléter ce billet !

Tagged , , , ,