compilation

Pour la compilation d'apache, rien de spécifique. J'ai juste indiqué les repertoires d'installation (avec les directives --prefix &co de configure ou mieux en indiquant tout ça dans un fichier layout). Les mêmes binaires me serviront pour mes deux instances d'apache.

Pour la compilation de php, il faut faire attention de spécifier un répertoire d'installation différent pour les deux versions differentes de php (avec la directive --prefix), sinon les binaires de l'un écraseront ceux de l'autre lors de l'installation. Ainsi, j'ai indiqué le répertoire /usr/local/php4 pour PHP4 et /usr/local/php5 pour PHP5. Je préfère avoir le fichier php.ini dans le repertoire d'apache, pour plus de commodité. On ne peut pas choisir le nom du fichier php.ini, donc là encore, il faut spécifier un repertoire différent avec la directive --with-config-file-path. Dans mon cas, ça sera donc /etc/apache/php4/ et /etc/apache/php5/. Pour le reste,j'ai suivi les instructions comme indiqué dans la documentation de PHP.

configuration d'apache

Une fois tout compilé et installé, il faut passer à la phase de configuration d'apache. Je veux donc lancer deux instances d'apaches. J'ai donc crée deux fichiers, /etc/apache/httpd-4.conf et /etc/apache/httpd-5.conf, avec donc une configuration différente :

  • écoute sur un port différent (80 pour la version PHP4, 81 pour la version PHP5)
  • fichier de lock, de pid, de scoreboard, de log et d'erreur différent (ex, pour la version PHP4 : /var/run/httpd-4.lock, /var/run/httpd-4.pid, /var/run/httpd-4.scoreboard /var/log/apache/access-4.log /var/log/apache/error-4.log
  • chargement de module différent : LoadModule php4_module lib/apache/libphp4.so pour php4 et LoadModule php5_module lib/apache/libphp5.so pour php5
  • un NameVirtualHost différent : 192.168.1.1:80 et 192.168.1.1:81

Pour le reste de la configuration, c'est totalement identique. D'ailleurs, pour plus de simplicité, j'ai déclaré mes hôtes virtuels dans un fichier séparé, que j'inclus dans mes deux fichiers de configuration d'apache.

configuration du lancement

Pour lancer apache, il existe un script, /usr/local/sbin/apachectl, dans lequel est indiqué notament le fichier de configuration à lancer, le fichier pid à utiliser etc.. Donc là encore, il faut dupliquer ce script (apachectl-4 et apachectl-5 par exemple) et modifier chaque copie pour que l'une lance apache avec http-4.conf, et l'autre lance apache avec http-5.conf.

J'ai ensuite crée les scripts de démarrage automatique dans /etc/init.d/. Il en faut un pour les deux instances d'apache. Je me suis basé sur le script /etc/init.d/apache livré avec le package d'apache pour debian. Je l'ai modifié pour que ça lance apachectl plutôt que de passer par le programme start-stop-daemon. Ça donne ça pour /etc/init-d/apache-4 (extrait):

NAME=apache-4
DAEMON=/usr/local/sbin/httpd
PIDFILE=/var/run/httpd-4.pid
CONF=/etc/apache/httpd-4.conf
APACHECTL="/usr/local/sbin/apachectl-4"

(...)
case "$1" in
 start)
   $ENV $APACHECTL start
   ;;

 stop)
   $ENV $APACHECTL stop
   rm -rf /var/lib/apache/mod-bandwidth/link/*
   ;;

 reload | force-reload)
   $ENV $APACHECTL graceful
   ;;

 restart)
   $ENV $APACHECTL restart
   ;;

 *)
   echo "Usage: /etc/init.d/apache {start|stop|reload|force-reload|restart}"
   exit 1
   ;;
esac

Ensuite, il restait plus qu'à faire un update-rc.d apache-4 stop 91 0 1 6 . start 91 2 3 4 5 . et update-rc.d apache-5 stop 91 0 1 6 . start 91 2 3 4 5 . pour que ça se lance automatiquement au démarrage de la machine.

lancement

Aprés avoir démarré mes deux instances d'apache (/etc/init.d/apache-4 start et /etc/init.d/apache-5 start), j'ai pu afficher une page montrant le phpinfo. En tapant http://monserveur/phpinfo.php, j'obtenais bien l'information sur la config de PHP4 et en faisant http://monserveur:81/phpinfo.php, celle de PHP5. Magique ! :-) Ceci va me permettre de tester mes applis avec les deux versions de PHP, en changeant simplement le numéro de port.