Daily Archives: 22/07/2011

Piwam sur Debian Squeeze

Logo de PiwamAfin de permettre l’utilisation de l’outil Piwam qui est utile pour gérer les membres d’une association, j’ai été amené à migrer celui-ci de notre ancien hébergeur vers le nouveau mais – petit bémol – Piwam ne fonctionne pas avec PHP5.3 qui est la version installée par défaut sous Debian Squeeze.

Je vais donc suivre l’explication donnée par le site Dave James Miller pour mettre en place PHP5.2 en plus de PHP5.3 .

Installation

Toute l’explication part du principe que vous maîtrisez votre système et que vous vous êtes connecté en tant que root, l’utilisateur qui dispose de tous les droits d’administration; je n’utiliserai donc pas la commande “sudo” durant ce tutoriel.

Un système à jour

S’assurer que le serveur offrira les dernières mises à jour :

apt-get update
apt-get dist-upgrade

Installation de fastcgi

Pour installer le module fast-cgi tapez la commande suivante :

apt-get install libapache2-mod-fastcgi
[...]
Enabling module fastcgi.
Run '/etc/init.d/apache2 restart' to activate new configuration!
:~#

Si jamais le module ne s’active pas durant l’installation, tapez la commande suivante :

a2enmod actions fastcgi

Si vous souhaitez profiter immédiatement de fastcgi, alors redémarrez Apache2 sinon attendez la fin de l’explication.

/etc/init.d/apache2 restart

Quelques prérequis

Pour permettre la compilation, plusieurs packages sont indispensables :

apt-get build-dep php5
apt-get install libfcgi-dev

Ces 2 commandes peuvent quelque peu inquiéter car elles vont ajouter beaucoup de paquets, dans mon cas 173 nouveaux paquets sont installés pour un total de 115Mo, mais cela est nécessaire afin de disposer d’un environnement de compilation complet, donc rien d’exotique et pas de panique…

Compilation

Préparation

Créer un répertoire pouvant au besoin contenir les différentes versions de PHP5.2 :

mkdir -p /usr/src/php5.2/
cd /usr/srv/php5.2

Récupération des sources de PHP5.2.17 depuis un miroir Debian situé en Belgique :

wget http://www.php.net/get/php-5.2.17.tar.gz/from/be.php.net/mirror -O php-5.2.17.tar.gz

Décompression des sources :

tar -zxf php-5.2.17.tar.gz
cd php-5.2.17

Compilons !

Commençons par un petit “./configure” dans lequel nous indiquons tous les modules que nous souhaitons utiliser dans notre PHP5.2 (si jamais par la suite, il vous manque des modules alors refaites un “./configure” qui contient ce que vous désirez.  Un conseil : allez-y module par module et pas tout d’un coup).

Au final PHP5.2 sera installé dans le répertoire /usr/local/php52/

./configure \
--prefix=/usr/local/php52 \
--enable-force-cgi-redirect \
--enable-fastcgi \
--with-regex=php \
--enable-calendar \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-bcmath \
--with-bz2 \
--enable-ctype \
--with-iconv \
--enable-exif \
--enable-ftp \
--with-gettext \
--enable-mbstring \
--with-pcre-regex \
--enable-shmop \
--enable-sockets \
--enable-wddx \
--with-libxml-dir=/usr \
--with-zlib \
--with-openssl=/usr \
--enable-soap \
--enable-zip \
--with-mhash=yes \
--with-gd \
--with-mysql \
--with-mysqli \
--with-pdo-mysql \
--with-pear \
--with-jpeg-dir=/usr/lib

Si tout s’est passé correctement vous devriez voir ceci :

+——————————————————————–+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+——————————————————————–+

Thank you for using PHP.

Maintenant effectuons la compilation à proprement parler :

make

Si tout s’est passé correctement vous devriez voir ceci :

Build complete.
Don’t forget to run ‘make test’.

Déployons la compilation de PHP5.2 dans les répertoires définitif
make install

Installing PHP SAPI module: cgi
Installing PHP CGI binary: /usr/local/php52/bin/
Installing PHP CLI binary: /usr/local/php52/bin/
Installing PHP CLI man page: /usr/local/php52/man/man1/
Installing build environment: /usr/local/php52/lib/php/build/
Installing header files: /usr/local/php52/include/php/
Installing helper programs: /usr/local/php52/bin/
program: phpize
program: php-config
Installing man pages: /usr/local/php52/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /usr/local/php52/lib/php/
[PEAR] Archive_Tar – installed: 1.3.7
[PEAR] Console_Getopt – installed: 1.2.3
[PEAR] Structures_Graph- installed: 1.0.3
[PEAR] XML_Util – installed: 1.2.1
[PEAR] PEAR – installed: 1.9.1
Wrote PEAR system config file at: /usr/local/php52/etc/pear.conf
You may want to add: /usr/local/php52/lib/php to your php.ini include_path
Installing PDO headers: /usr/local/php52/include/php/ext/pdo/

Configuration

Maintenant que PHP5.2 est installé, il faut pouvoir l’utiliser avec Apache2.  Cette partie est moins simple à maîtriser que la précédente car beaucoup d’aspects peuvent être configurés.  Tout d’abord il faut différencier PHP en module et PHP en CGI. L’utilisation de PHP en module fait qu’une seule version de PHP tourne et que celle-ci utilise un seul fichier de configuration (par défaut /etc/php5/apache2/php.ini) pour tous nos sites, même si par la suite, on souhaite personnaliser chaque virtualhost.  Avec PHP en mode CGI il faut bien comprendre que chaque VirtualHost a son propre PHP qui tourne (il pourrait même disposer d’un user/group dédié).  Du coup, il peut y avoir un fichier php.ini par instance, donc par VirtualHost.

Sur mon serveur, j’essaie de séparer les fichiers sans intérêt (la compilation de PHP) de ceux qui sont personnalisés pour mes besoins (la configuration) en les plaçant à des endroits différents.  Ainsi, je vais stocker les shell-scripts de mes sites dans /srv/web/fcgi/.  Je vais créer un répertoire “default” pour le shell-script et la configuration PHP que j’utiliserai par défaut pour mes sites.  Au besoin, je pourrai créer un autre répertoire pour des sites plus spécifiques.

mkdir -p /srv/web/fcgi/default

Créer le shell-script “php52.sh” dans /srv/web/fcgi/default/ :

#!/bin/sh
export PHP_FCGI_CHILDREN=4
export PHP_FCGI_MAX_REQUESTS=200
export PHPRC="/srv/web/fcgi/default/php.ini"
exec /usr/local/php52/bin/php-cgi

Permettre l’exécution du shell-script :

chmod +x /srv/web/fcgi/default/php52.sh

Copions le fichier “php.ini” fourni dans l’archive de php.net :

cp /usr/src/php5.2/php-5.2.17/php.ini-dist /srv/web/fcgi/default/php.ini

Touche finale de l’installation, configurer de façon adéquate Apache2 afin de désactiver le PHP en module (PHP5.3 normalement) et d’utiliser PHP en CGI.  Il faudra ajouter les lignes suivantes dans votre VirtualHost :

# supprimer PHP en module
php_admin_flag engine off
ScriptAlias /cgi-bin /srv/web/fcgi/default/
Action application/x-httpd-php /cgi-bin/php52.sh

Puis relancez votre Apache2 et vous aurez un PHP5.2 !