29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
17-02-2012 : Pétition pour une protection de l’apiculture et des consommateurs face au lobby des OGM
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / Internet / Serveur web Apache / Apache 1.3.37 : compiler et installer eAccelerator (X)





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox
zero papier grâce aux catalogues et promos en ligne de bonial

Apache 1.3.37 : compiler et installer eAccelerator (X)

Date de publication: le vendredi 24 août 2007 à 23h00
Dernière modification: par Pascal BOYER le vendredi 17 septembre 2010 à 11h36
« Article précédent: Apache 1.3.37 : compiler et installer le module mod_deflate (IX)
» Article suivant: Apache 1.3.37 : compiler et installer le module mod_gzip (XI)

eAccelerator : prérequis

Sur la page d'accueil du projet on lit ceci:

eAccelerator is still under development. The latest release, 0.9.5, supports PHP 4 and all PHP 5 releases including 5.2. In older releases, the encoder will only work with PHP versions from the 4.x.x branch. eAccelerator will not work with any other versions of PHP.  
eAccelerator  est encore en développement. La dernière version 0.9.5 est compatible avec les versions PHP 4 et PHP 5, incluant même la version 5.2. L'encodeur des anciennes versions de  eAccelerator  ne fonctionne qu'avec les versions de la branche 4.x.x de PHP. eAccelerator ne fonctionnera avec aucune autre version de PHP. 

Sur la page d'aide à l'installation, on lit ceci:

eAccelerator only works with mod_php or php in fastcgi mode. 
eAccelerator ne fonctionne qu'avec le module mod_php ou php en mode fastcgi.

Voici les logiciels nécessaires au fonctionnement de eAccelerator:

  • php4 or php5
  • autoconf
  • automake
  • libtool
  • m4
  • make

eAccelerator : avec PHP non compilé

Si on utilise une version de PHP installée à partir des packages debian, alors voila, par exemple, la liste de ceux qui sont installés sur ma machine:

dpkg -l '*php4*' |grep ii

ii libapache-mod-php4 4.4.4-8+etch1 server-side, HTML-embedded scripting language (apache 1.3 module)
ii php4 4.4.4-8+etch1 server-side, HTML-embedded scripting language (meta-package)
ii php4-cli 4.4.4-8+etch1 command-line interpreter for the php4 scripting language
ii php4-common 4.4.4-8+etch1 Common files for packages built from the php4 source
ii php4-dev 4.4.4-8+etch1 Files for PHP4 module development
ii php4-gd 4.4.4-8+etch1 GD module for php4
ii php4-imagick 0.9.11+1-4.1 ImageMagick module for php4
ii php4-imap 4.4.4-8+etch1 IMAP module for php4
ii php4-mcal 4.4.4-8+etch1 MCAL calendar module for php4
ii php4-mcrypt 4.4.4-8+etch1 MCrypt module for php4
ii php4-mhash 4.4.4-8+etch1 MHASH module for php4
ii php4-mysql 4.4.4-8+etch1 MySQL module for php4
ii php4-pear 4.4.4-8+etch1 PHP Extension and Application Repository (transitional package)
ii php4-xslt 4.4.4-8+etch1 XSLT module for php4

:
Veillez à bien avoir la version de développement de PHP, sinon certaines commandes ne seront pas disponibles

eAccelerator : avec PHP compilé

Il est tout à fait possible, bien sûr, d'installer eAccelerator sur un serveur n'utilisant qu'une version compilée de PHP.

Sur ma Dedibox, j'utilise eAccelerator avec un serveur Apache 1.3.37 + PHP 4.4.7 compilés à la main

On verra, au moment de la création du Makefile, qu'elle option de la commande ./configure permet de choisir l'une ou l'autre version de PHP.

Contrôler la configuration du serveur Apache

Pour connaître les modules lancés par le serveur web, on peut utiliser la fonction phpinfo() 

Il suffit de créer, par exemple à la racine du serveur web, un fichier info.php dans lequel on écrit ces trois lignes:

<?php
 
phpinfo();
 
 ?>

...puis d'y accéder avec un URI de type:

http://www.monsite.com/info.php

Voici le cadre qui nous intéresse:

 

 

Liste des modules du serveur Apache

eAccelerator : installer mod_fastcgi 

Comme je l'ai indiqué en début d'article, eAccelerator ne fonctionne qu'en mode Fastcgi. Il est donc nécessaire d'installer le module mod_fastcgi sur le serveur Apache.

Avant toute chose, on vérifie, à l'aide d'un fichier info.php, que ce module n'est pas déjà installé:
 

 
 

Si le module n'est pas déjà présent, alors, pour l'installer, reportez-vous aux explications détaillées de ces deux articles:

  1.   Installer mod_fastcgi  
  2.   Compiler mod_fastcgi  (je rappelle qu'il s'agit d'une compilation statique du module)

Télécharger eAccelerator

On se place dans le répertoire ServeurWeb:

cd /usr/local/ServeurWeb

Puis on télécharge la dernière version disponible de l'archive (0.9.5.1 à l'heure où j'écris cet article) depuis la page de téléchargement  du site officiel consacré au projet EAccelerator  ou bien avec la commande wget:

wget http://bart.eaccelerator.net/source/0.9.5.1/eaccelerator-0.9.5.1.tar.bz2

--23:44:07-- &nbsp;http://bart.eaccelerator.net/source/0.9.5.1/eaccelerator-0.9.5.1.tar.bz2
=> `eaccelerator-0.9.5.1.tar.bz2'
Résolution de bart.eaccelerator.net... 193.190.253.234
Connexion vers bart.eaccelerator.net|193.190.253.234|:80...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 122 279 (119K) [application/x-tar]
 
100%[====================================>] 122 279 --.--K/s
 
23:44:08 (1.33 MB/s) - « eaccelerator-0.9.5.1.tar.bz2 » sauvegardé [122279/122279]

On affiche l'empreinte SHA1 de l'archive:

sha1sum eaccelerator-0.9.5.1.tar.bz2

2789f56d713549a360871accd9869a6bb4a0b514 &nbsp;eaccelerator-0.9.5.1.tar.bz2

Puis on télécharge la signature sur la même page que l'archive:

wget http://bart.eaccelerator.net/source/0.9.5.1/SHA1SUM && cat SHA1SUM |grep bz2

2789f56d713549a360871accd9869a6bb4a0b514 &nbsp;eaccelerator-0.9.5.1.tar.bz2

Installer eAccelerator

On extrait le contenu de l'archive:

tar jxfv eaccelerator-0.9.5.1.tar.bz2

On se place à présent dans le nouveau répertoire:

cd eaccelerator-0.9.5.1

Il faut maintenant s'assurer que les deux commande suivantes:

  •  phpize
  •  php-config

...font bien partie de notre variable d'environnement $PATH 

  1. On affiche le chemin de chacune des deux commandes:

    whereis phpize

    phpize: /usr/bin/phpize /usr/X11R6/bin/phpize /usr/bin/X11/phpize /usr/local/bin/phpize 
    /usr/share/man/man1/phpize.1.gz

    whereis php-config

    php-config: /usr/bin/php-config /usr/X11R6/bin/php-config /usr/bin/X11/php-config 
    /usr/local/bin/php-config /usr/share/man/man1/php-config.1.gz
  2. On affiche la valeur de la variable d'environnement $PATH 

    echo $PATH

    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  3. Ce qui nous importe, c'est que le chemin /usr/local/bin/ fasse partie de la variable $PATH puisque les deux commandes phpize et php-config installées par notre version compilée de PHP 4.4.7 sont placées dans ce répertoire. Les deux commandes situées dans les autres répertoires sont issues de l'installation des packages Debian.

    Donc, si tel n'est pas le cas, alors il faut préalablement ajouter ce chemin à la variable $PATH. Pour cela, on édite le fichier /etc/profile et on ajoute le chemin /usr/local/bin aux deux lignes définissant la variable PATH:

    if [ "`id -u`" -eq 0 ]; then
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    else
    PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
    fi

Il est particulièrement important , si vous n'avez qu'une seule installation de PHP, de lancer, à la racine du répertoire d'installation de eAccelerator, la commande phpsize:

/usr/local/bin/phpize

Configuring for:
PHP Api Version: 20020918
Zend Module Api No: 20020429
Zend Extension Api No: 20050606

Compiler eAccelerator

Création du Makefile pour PHP non compilé

Si PHP est installé à partir des packages debian, la commande est tout simplement:

./configure --enable-eaccelerator=shared

Création du Makefile pour PHP compilé

Dans ce deuxième cas, il faut indique le chemin complet du fichier php-config:

./configure --prefix=/usr/local --enable-shared --enable-static --enable-eaccelerator=shared --with-php-config=/usr/local/bin/php-config

La sortie très verbeuse de ces deux commandes doit se terminer par ces lignes:

...
...
checking dynamic linker characteristics... GNU/Linux ld.so
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking whether -lc should be explicitly linked in... no
creating libtool
configure: creating ./config.status
config.status: creating config.h
config.status: config.h is unchanged

Ensuite, on compile:

make

Là encore, la sortie très verbeuse de cette commande doit se terminer par:

----------------------------------------------------------------------
Libraries have been installed in:
 &nbsp; /usr/local/ServeurWeb/eaccelerator-0.9.5.1/modules
 
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
 - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
 during execution
 - add LIBDIR to the `LD_RUN_PATH' environment variable
 during linking
 - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
 - have your system administrator add LIBDIR to `/etc/ld.so.conf'
 
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
 
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).

Les librairies dynamique compilées à la racine du répertoire sont:

 
  •  cache.lo
  •  content.lo
  •  debug.lo
  •  eaccelerator.lo
  •  ea_dasm.lo
  •  ea_info.lo
  •  ea_restore.lo
  •  ea_store.lo
  •  encoder.lo
  •  loader.lo
  •  mm.lo
  •  opcodes.lo
  •  optimize.lo
  •  session.lo
  •  shm.lo
 

 Cette liste de bibliothèques est présente dans le fichier Makefile.

Il y a deux nouveaux modules compilés:

ls -la modules/

total 168
 drwxr-xr-x 2 root root 4096 2007-08-25 12:17 .
 drwxr-xr-x 10 500 500 4096 2007-08-25 12:17 ..
 -rw-r--r-- 1 root root 753 2007-08-25 12:17 eaccelerator.la
 -rwxr-xr-x 1 root root 152210 2007-08-25 12:17 eaccelerator.so

Et on installe:

make install

Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20020429/

Configurer eAccelerator

Il y a deux façons de configurer eAccelerator:

  1.  soit en tant qu'extension Zend
  2.  soit en tant qu'extension PHP

eAcceleartor : extension Zend

:
Pour la suite de l'article, et dans la pratique, c'est ainsi que je l'ai installé.

Pour être configuré en tant qu'extension Zend, voici les lignes à ajouter au bas du fichier de configuration de PHP:

zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20020429/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

eAcceleartor : extension PHP

Pour être configuré en tant qu'extension PHP, voici les lignes à ajouter au bas du fichier de configuration de PHP:

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

eAccelerator : Répertoire de cache

Comme on vient de l'indiquer dans le fichier php.ini, il faut créer un répertoire dans lequel eAccelerator placera ses données:

mkdir /tmp/eaccelerator

On donne au répertoire le même propriétaire et groupe propriétaire que Apache:

chown apache:apache /tmp/eaccelerator

Puis on modifie les droits pour que seul Apache/PHP puisse y accéder:

chmod 0770 /tmp/eaccelerator

Et on relance apache:

../apache_1.3.37/src/support/apachectl restart

On teste que eAccelerator est bien activé, soit à l'aide d'un fichier info.php qui doit afficher ceci:

 

 

puis, un peu plus bas, encore ceci:

 

 

Il y a un autre moyen de savoir si eAccelerator est lancé:

/usr/local/bin/php -v

PHP 4.4.7 (cli) (built: Aug 21 2007 23:21:22)
 Copyright (c) 1997-2007 The PHP Group
 Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
 with eAccelerator v0.9.5.1, Copyright (c) 2004-2006 eAccelerator, by eAccelerator

Si vous affichez quelques pages de votre site, vous pouvez également contrôler l'apparition de contenu dans le répertoire de cache:

ls -Rla /tmp/eaccelerator |more

...
...
/tmp/eaccelerator/f/1:
total 224
drwxrwxrwx 2 root root 4096 2007-08-25 18:27 .
drwxrwxrwx 18 root root 4096 2007-08-25 18:27 ..
-rw------- 1 apache apache 88236 2007-08-25 18:27 eaccelerator-4502.0519845
-rw------- 1 apache apache 29620 2007-08-25 18:27 eaccelerator-4502.3419845
-rw------- 1 apache apache 17896 2007-08-25 18:27 eaccelerator-4502.4419845
-rw------- 1 apache apache 7540 2007-08-25 18:27 eaccelerator-4502.6319845
-rw------- 1 apache apache 15328 2007-08-25 18:27 eaccelerator-4502.6419845
-rw------- 1 apache apache 48748 2007-08-25 18:27 eaccelerator-4502.7319845
...
...

Ressources

La description de toutes les options de eAccelerator est ici: Settings  

Quelques valeurs pour la configuration de eAccelerator avec eZ Publish: configuration pour eZ Publish  

Pour la résolution de problèmes: TroubleShooting  

Commentaires