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.i386Ré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.gzDéplaçons la dans /home et allons-y:
$ sudo mv php-5.3.10 /home/version-5.3.10
$ cd /home/version-5.3.10Créons les répertoires nécessaires:
$ mkdir -p usr/local/5310 etc/5310 etc/5310.dLanç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-zipSi 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
$ gmakeMaintenant 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.iniProcédons à l’installation
$ gmake installUne 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 restartNous 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-showSi 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/wwwOn 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 /tmpOn 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.iniOn 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.iniOn 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.iniOn 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.50Une 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.iniOn 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 restartIl 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.includeEt on redémarre apache:
$ sudo /etc/init.d/httpd restartSi 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.
