php 5.3.10 est sorti – Petit guide de compilation

Ce guide n’est qu’une mise à jour de notre guide sur la compilation de php-5.3.8

Nous l’avions prévu pour php 5.3.9, mais comme php 5.3.10 est sorti moins d’une semaine plus tard, nous avons décidé de passer tout de suite à cette nouvelle version

La méthode décrite dans cet article This article worked for us, however, neither will the author or Open Skill be taken for responsable for any negative consequences this tutorial could have.

La méthode suivie par ce guide a les avantages suivants:

  • Permet d’installer facilement plusieurs versions concurrentes de php sur une même machine,
  • Offre un choix de version par site,
  • Idéal pour tester une nouvelle version sur un serveur sans menacer la stabilité des sites fonctionnant dessus.

L’inconvénient c’est que c’est un php custom qui ne sera pas affecté par les mises à jour de votre système.

Allons dans notre répertoire home:

$ cd ~

Installons les dépendances dont on pourrait avoir besoin:

$ sudo yum install -yq gcc libicu-devel libxml2-devel mysql-devel libpng-devel libjpeg-devel curl-devel bzip2-devel gettext-devel gmp-devel pcre-devel freetype-devel gd-devel aspell-devel db4-devel libxslt-devel php-xml libtidy.i386 libtidy-devel.i386 libmemcached gcc-c++ libevent libevent-devel.i38 ImageMagick.i386 ImageMagick-devel.i386

Récupérons la dernière archive de php et décompressons la:

$ wget http://be.php.net/distributions/php-5.3.10.tar.gz
$ tar -xzf php-5.3.10.tar.gz

Déplaçons la dans /home et allons-y:

$ sudo mv php-5.3.10 /home/version-5.3.10
$ cd /home/version-5.3.10

Créons les répertoires nécessaires:

$ mkdir -p usr/local/5310 etc/5310 etc/5310.d

Lançons le ./configure – Vous pouvez vouloir modifier cette ligne selon vos besoins, notamment si vous souhaitez plusieurs versions de php sur la même machine. Patience, cette étape peut durer un certain temps.

./configure --prefix=/home/version-5.3.10/usr/local/5310 --with-config-file-path=/home/version-5.3.10/etc/5310 --with-config-file-scan-dir=/home/version-5.3.10/etc/5310.d --with-bz2 --with-db4=/usr --with-curl --with-exec-dir=/usr/bin --with-freetype-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --without-gdbm --with-gettext --with-gmp --with-iconv --with-jpeg-dir=/usr --with-openssl --with-pspell --with-pcre-regex=/usr --with-zlib --with-layout=GNU --enable-exif --enable-ftp --enable-magic-quotes --enable-sockets --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-wddx --with-kerberos --enable-ucd-snmp-hack --enable-shmop --enable-calendar --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql-sock=/var/lib/mysql/mysql.sock --with-libxml-dir=/usr --with-gd=/usr --with-regex=system --with-xsl=/usr --enable-mbstring --with-pic --without-sqlite --with-tidy --enable-zip

Si tout s’est bien déroulé, php est configuré pour être compilé sur votre système: compilons le. Patience, cette étape est bien plus longue que la précédente :p

$ gmake

Maintenant que php est compilé, il faut mettre un php.ini pour cette version et le configurer.

$ cp /home/version-5.3.10/php.ini-production /home/version-5.3.10/etc/5310/php.ini
$ nano /home/version-5.3.10/etc/5310/php.ini

Procédons à l’installation

$ gmake install

Une fois php compilé et son .ini en place, on peut s’attaquer à la configuration et à l’adjonction de modules:

$ mkdir -p /home/version-5.3.10/usr/local/5310/share/pear/
$ cd /home/version-5.3.10/usr/local/5310/share/pear/

On installe pear, il va poser 2 questions. Répondre 1 et puis /home/version-5.3.10/usr/local/5310

$ wget http://pear.php.net/go-pear.phar
$ cat go-pear.phar | /home/version-5.3.10/usr/local/5310/bin/php
$ cd /home/version-5.3.10/

On redémarre httpd:

$ sudo /etc/init.d/httpd restart

Nous avons observé quelqus soucis de configuration lors d’une mise à jour, et vous recommandons de vérifier les path avec la commande suivante:

$ /home/version-5.3.10/usr/local/5310/bin/pear config-show

Si certains répertoires ne sont pas corrects, corrigez les avec la commande idoine (adaptez selon les cas):

$ /home/version-5.3.10/usr/local/5310/bin/pear config-set bin_dir /home/version-5.3.10/usr/local/5310/bin
$ /home/version-5.3.10/usr/local/5310/bin/pear config-set doc_dir /home/version-5.3.10/usr/local/5310/docs
$ /home/version-5.3.10/usr/local/5310/bin/pear config-set php_dir /home/version-5.3.10/usr/local/5310/share/pear
$ /home/version-5.3.10/usr/local/5310/bin/pear config-set cfg_dir /home/version-5.3.10/usr/local/5310/cfg
$ /home/version-5.3.10/usr/local/5310/bin/pear config-set data_dir /home/version-5.3.10/usr/local/5310/data
$ /home/version-5.3.10/usr/local/5310/bin/pear config-set test_dir /home/version-5.3.10/usr/local/5310/tests
$ /home/version-5.3.10/usr/local/5310/bin/pear config-set www_dir /home/version-5.3.10/usr/local/5310/www

On peut maintenant installer des modules supplémentaires à notre nouveau php: Cette commande est nécessaire pour installer les extensions par pecl, ne pas oublier de remonter la partition en noexec plus tard!

$ sudo mount -o remount,exec /tmp

On télécharge, décompresse et installe json:

$ wget http://pecl.php.net/get/json-1.2.1.tgz
$ tar -xvzf json-1.2.1.tgz
$ rm json-1.2.1.tgz
$ cd json-1.2.1
$ /home/version-5.3.10/usr/local/5310/bin/phpize
$ ./configure --with-php-config=/home/version-5.3.10/usr/local/5310/bin/php-config --prefix=/home/version-5.3.10/usr/local/5310/ --with-json
$ make
$ make install
$ cd ../

! Ajouter la ligne extension=json.so à votre php.ini pour charger le module !

$ echo "extension=json.so" >> /home/version-5.3.10/etc/5310/php.ini

On installe memcache:

$ sudo /home/version-5.3.10/usr/local/5310/bin/pecl install memcache

! Ajouter la ligne extension=memcache.so à votre php.ini pour charger le module !

$ echo "extension=memcache.so" >> /home/version-5.3.10/etc/5310/php.ini

On installe zip:

$ sudo /home/version-5.3.10/usr/local/5310/bin/pecl install zip

! Ajouter la ligne extension=memcache.so à votre php.ini pour charger le module !

$ echo "extension=zip.so" >> /home/version-5.3.10/etc/5310/php.ini

On télécharge, compile, installe memcached:

$ wget http://memcached.googlecode.com/files/memcached-1.4.7.tar.gz
$ tar -xzf memcached-1.4.7.tar.gz
$ cd memcached-1.4.7
$ ./configure --prefix=/home/version-5.3.10/usr/local/5310/
$ make
$ make install
$ cd ..
$ sudo echo "/usr/local/lib/" >> /etc/ld.so.conf.d/libevent-i386.conf
$ ldconfig

! ! ! Attention de prendre des ports distincts pour chaque memcached! ! !

$ sudo /home/version-5.3.10/usr/local/5310/bin/memcached -d -u nobody -m 1024 127.0.0.1 -p 11211
$ sudo touch /etc/init.d/memcached-version-5.3.10
$ sudo echo '#!/bin/sh -e' >> /etc/init.d/memcached-version-5.3.10
$ sudo echo '/home/version-5.3.10/usr/local/5310/bin/memcached -d -m 512 -p 11211 -u nobody -l localhost' >> /etc/init.d/memcached-version-5.3.10
$ sudo chmod u+x /etc/init.d/memcached-version-5.3.10
$ sudo echo '/etc/init.d/memcached-version-5.3.10' >> /etc/rc.local
$ cd ../

On installe libmemcached:

$ wget http://launchpadlibrarian.net/73843684/libmemcached-0.50.tar.gz
$ tar -xvzf libmemcached-0.50.tar.gz
$ cd libmemcached-0.50

Une erreur dans les sources nous empêche de compiler libmemcached sous architecture 32 bits, c’est pourquoi dans le fichier clients/memcapable.cc, on remplace aux lignes 658, 728 et 787, la valeur « 0xdeadbeefdeadcafe » par « 0xdeadbeefdeadcafeULL ». Ensuite, la compilation passe tout seul (NB: Lors de l’écriture de cet article, il existe des versions plus récentes de libmemcached. Celles-ci ne se compilent pas correctement car la version de autoconf de centos 5 est trop ancienne).

$ nano +658 clients/memcapable.cc
$ ./configure --without-memcached --disable-64bit --prefix=/home/version-5.3.10/usr/local
$ make
$ make install
$ cd ..
$ sudo /home/version-5.3.10/usr/local/5310/bin/pecl install memcached

! Ajouter la ligne extension=memcached.so à votre php.ini pour charger le module !

$ echo "extension=memcached.so" >> /home/version-5.3.10/etc/5310/php.ini
$ sudo /home/version-5.3.10/usr/local/5310/bin/pecl install imagick

! Ajouter la ligne extension=imagick.so à votre php.ini pour charger le module !

$ echo "extension=imagick.so" >> /home/version-5.3.10/etc/5310/php.ini

On télécharge, décompresse, compile et installe tidy:

$ wget http://pecl.php.net/get/tidy-1.2.tgz
$ tar -xvzf tidy-1.2.tgz
$ rm tidy-1.2.tgz
$ cd tidy-1.2
$ /home/version-5.3.10/usr/local/5310/bin/phpize
$ ./configure --with-php-config=/home/version-5.3.10/usr/local/5310/bin/php-config --prefix=/home/version-5.3.10/usr/local --with-tidy
$ make
$ make install
$ cd ..
$ echo "extension=tidy.so" >> /home/version-5.3.10/etc/5310/php.ini

!Une fois tous les plugins installés, on remonte tmp en noexec comme dit plut tot!

$ sudo mount -o remount,noexec /tmp
$ sudo /etc/init.d/httpd restart

Il ne vous reste plus qu’a activer php pour un site en particulier en copiant 3 lignes dans le fichier vhost de votre site (exemple pour site1):

$ sudo echo "ScriptAlias /5310-cgi /home/version-5.3.10/usr/local/5310/bin/php-cgi" >> /etc/httpd/conf/vhosts/site1.include
$ sudo echo "Action application/x-http-5310 /5310-cgi" >> /etc/httpd/conf/vhosts/site1.include
$ sudo echo "AddHandler application/x-http-5310 .php" >> /etc/httpd/conf/vhosts/site1.include

Et on redémarre apache:

$ sudo /etc/init.d/httpd restart

Si tout s’est déroulé comme prévu, il ne vous reste plus qu’à tester votre site avec un info.php et tout devrait fonctionner. N’hésitez pas à nous faire part de vos commentaires, corrections pour ce tutoriel.

  • Facebook
  • Twitter
  • LinkedIn
  • Digg
  • RSS