PHP 5.3 : Compilation et Installation sur une vmware
20 octobre 2008 —PHP 5.3 n'était pas encore en version alpha lorsque j'ai commencé à vouloir l'essayer.
Considérant que je ne voulais pas risquer de "casser" l'installation Apache + PHP 5.2 que j'ai sur mon PC et que j'utilise quotidiennement, la solution la plus simple à mettre en place et laissant le plus de liberté en termes d'expérimentations, était d'installer PHP 5.3 au sein d'une machine virtuelle.
C'est ce que nous ferons au cours de cet article : installer PHP 5.3 depuis les sources, sur une machine virtuelle...
Et voici le sommaire de cet article :
- VMware
- Téléchargement des sources de PHP 5.3
- Compilation de PHP 5.3
- Installation et configuration de base
- Tester si PHP 5.3 est bien installé
- Quelques outils utiles
J'ai choisi d'utiliser vmware, un des outils de virtualisation les plus connus, qui est gratuit, et disponible à la fois sous Windows et sous Linux : VMware Server
Pour la suite de cet article, je supposerai que vous avez installé vmware -- sous Windows, c'est l'histoire de quelques "suivant", et sous Linux, ce n'est pas bien compliqué non plus (et au besoin, google is your friend
).
VMware
Le système que j'installerai sur ma machine virtuelle est un GNU/Linux ; une distribution Ubuntu Server 8.04, plus précisément[1] : c'est plus adapté que Windows quand il s'agit de faire tourner un serveur Apache + PHP, et, surtout, quand il s'agit de compiler PHP !
(Sans compter, avantage non négligeable, la gratuité : je n'ai pas de licence Windows disponible ^^)
Le processus d'installation d'Ubuntu Server est relativement simple : globalement, suivant, suivant, suivant
; en veillant à ne choisir aucun logiciel à installer lorsque l'assistant demande de quel type de serveur nous souhations disposer.
De la sorte, nous obtenons une installation relativement minimaliste, sur laquelle nous pourrons installer exactement ce dont nous avons besoin, sans avoir à côté quantité de logiciels inutiles.
Vous noterez que j'ai créé un utilisateur dont le login est "php". Son mot de passe est aussi "php".
Installation d'un serveur SSH
La première étape, une fois l'installation du système en elle-même terminée, est d'installer un serveur SHH :
apt-get install openssh-server
De la sorte, nous pourrons nous connecter à distance à la machine virtuelle, ce qui est plus commode pour travailler -- notamment en terme d'intégration avec le système que vous utilisez quotidiennement !
Obtenons l'adresse IP de la machine virtuelle :
ifconfig
Et maintenant, nous pouvons travailler à distance, en SSH, sans avoir jamais besoin de revenir directement sur la machine virtuelle :
Depuis votre système hôte, vous pouvez vous connecter à votre machine virtuelle avec l'utilisateur ("php") que vous avez créé lors de l'installation :
ssh -l php 172.16.133.128
Typiquement, j'utilise fréquemment cette possibilité pour éditer mes fichiers via Eclipse PDT, connecté à la machine virtuelle à l'aide du plugin RSE Target Management.
Mise à jour du système
Une fois le système installé, il peut être bon de le mettre à jour, pour disposer de la dernière version disponible (y compris correctifs de sécurité -- OK, sur une machine virtuelle de test, ce n'est probablement pas indispensable... Mais c'est toujours un bon réflexe) :
apt-get update && apt-get dist-upgrade
Installation des logiciels dont nous aurons besoin
Nous voulons obtenir une installation comportant Apache et PHP 5.3, que nous compilerons depuis les sources.
Cela signifie qu'il va nous falloir installer quelques paquets supplémentaires :
apt-get install apache2-mpm-prefork zip unzip make sun-java5-jdk subversion ant apache2 subversion-tools perl memcached build-essential gcc-4.1-locales automake1.9 autoconf manpages-dev debian-keyring apache2-prefork-dev libxml2-dev libcurl4-gnutls-dev libicu-dev libmcrypt-dev libpng12-dev libxslt1-dev
Quelques précisions sur certains paquets :
apache2-mpm-prefork
: Serveur Apache2, avec le module prefork + le paquet de développement correspondantbuild-essential
: Une bonne partie des outils permettant de compiler un logiciel sont regroupées par Ubuntu via ce paquetlibxml2-dev
etlibxslt1-dev
: nous voulons activer les fonctionnalités de manipulation XML de PHP ; nous avons donc besoin de ces paquets lors de la compilationlibicu-dev
: Pour ce qui est gestion de l'internationalisationlibpng12-dev
: Pour intégration de GD à PHP
Téléchargement des sources de PHP 5.3
Comme dit plus haut, nous allons compiler PHP 5.3 depuis les sources, en nous basant sur la toute dernière version disponible.
(Ce n'est bien évidemment pas la démarche qu'il faudrait suivre pour un environnement de production... Mais pour tester les nouveautés de PHP 5.3, cela permet de disposer d'une installation parfaitement à jour, sans avoir besoin d'attendre la sortie d'une version "officielle" -- que ce soit alpha, beta, RC, ou finale ^^)
Pour commencer, nous travaillerons pour la compilation des sources dans un répertoire temporaire :
mkdir /home/php/temp cd /home/php/temp
La toute dernière version des sources est disponible via un snapshot re-créé tous les jours, téléchargeable sur snaps.php.net.
Aujourd'hui, vous pouvez télécharger un snapshot de PHP 5.2 (la version stable actuelle), un autre pour PHP 5.3 (la prochaine version en cours de développement), et un dernier pour PHP 6 (la version suivante, elle aussi en cours de développement).
Celui qui nous intéresse est le snapshot de PHP 5.3, qui aura une URL de la forme suivante : http://snaps.php.net/php5.3-200809281430.tar.bz2 (Cette URL changeant à chaque génération d'un nouveau snapshot, elle sera à adapter par vos soins !)
Téléchargez le dernier snapshot, et décompressez-le :
wget http://snaps.php.net/php5.3-200809281430.tar.bz2 tar xvf php5.3-200809281430.tar.bz2 cd php5.3-200809281430
Une fois la décompression des sources terminée, nous allons pouvoir passer au processus de compilation...
Compilation de PHP 5.3
La compilation d'un logiciel depuis ses sources se fait traditionnellement en trois étapes :
- Configuration
- Compilation
- Installation
PHP 5.3 ne déroge pas à la règle.
Configuration de la compilation
La première étape est d'indiquer au processus de compilation quels composants devront être construits.
Pour obtenir la liste des possibilités et des options correspondantes, utilisez :
./configure --help
Vous obtiendrez en sortie la liste de toutes les options de compilation acceptées :
$ ./configure --help Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print `checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR --enable and --with options recognized: --with-libdir=NAME Look for libraries in .../NAME rather than .../lib --disable-rpath Disable passing additional runtime library search paths --enable-re2c-cgoto Enable -g flag to re2c to use computed goto gcc extension SAPI modules: --with-aolserver=DIR Specify path to the installed AOLserver --with-apxs[=FILE] Build shared Apache 1.x module. FILE is the optional pathname to the Apache apxs tool [apxs] --with-apache[=DIR] Build Apache 1.x module. DIR is the top-level Apache build directory [/usr/local/apache] --enable-mod-charset APACHE: Enable transfer tables for mod_charset (Rus Apache) --with-apxs2filter[=FILE] EXPERIMENTAL: Build shared Apache 2.0 Filter module. FILE is the optional pathname to the Apache apxs tool [apxs] --with-apxs2[=FILE] Build shared Apache 2.0 Handler module. FILE is the optional pathname to the Apache apxs tool [apxs] --with-apache-hooks[=FILE] EXPERIMENTAL: Build shared Apache 1.x module. FILE is the optional pathname to the Apache apxs tool [apxs] --with-apache-hooks-static[=DIR] EXPERIMENTAL: Build Apache 1.x module. DIR is the top-level Apache build directory [/usr/local/apache] --enable-mod-charset APACHE (hooks): Enable transfer tables for mod_charset (Rus Apache) --with-caudium[=DIR] Build PHP as a Pike module for use with Caudium. DIR is the Caudium server dir [/usr/local/caudium/server] --disable-cli Disable building CLI version of PHP (this forces --without-pear) --with-continuity=DIR Build PHP as Continuity Server module. DIR is path to the installed Continuity Server root --enable-embed[=TYPE] EXPERIMENTAL: Enable building of embedded SAPI library TYPE is either 'shared' or 'static'. [TYPE=shared] --with-isapi[=DIR] Build PHP as an ISAPI module for use with Zeus --with-litespeed Build PHP as litespeed module --with-milter[=DIR] Build PHP as Milter application --with-nsapi=DIR Build PHP as NSAPI module for Netscape/iPlanet/Sun Webserver --with-phttpd=DIR Build PHP as phttpd module --with-pi3web[=DIR] Build PHP as Pi3Web module --with-roxen=DIR Build PHP as a Pike module. DIR is the base Roxen directory, normally /usr/local/roxen/server --enable-roxen-zts ROXEN: Build the Roxen module using Zend Thread Safety --with-thttpd=SRCDIR Build PHP as thttpd module --with-tux=MODULEDIR Build PHP as a TUX module (Linux only) --with-webjames=SRCDIR Build PHP as a WebJames module (RISC OS only) --disable-cgi Disable building CGI version of PHP General settings: --enable-gcov Enable GCOV code coverage (requires LTP) - FOR DEVELOPERS ONLY!! --enable-debug Compile with debugging symbols --with-layout=TYPE Set how installed files will be laid out. Type can be either PHP or GNU [PHP] --with-config-file-path=PATH Set the path in which to look for php.ini [PREFIX/lib] --with-config-file-scan-dir=PATH Set the path where to scan for configuration files --enable-safe-mode Enable safe mode by default --with-exec-dir[=DIR] Only allow executables in DIR under safe-mode [/usr/local/php/bin] --enable-sigchild Enable PHP's own SIGCHLD handler --enable-magic-quotes Enable magic quotes by default. --enable-libgcc Enable explicitly linking against libgcc --disable-short-tags Disable the short-form <? start tag by default --enable-dmalloc Enable dmalloc --disable-ipv6 Disable IPv6 support --enable-fd-setsize Set size of descriptor sets Extensions: --with-EXTENSION=[shared[,PATH]] NOTE: Not all extensions can be build as 'shared'. Example: --with-foobar=shared,/usr/local/foobar/ o Builds the foobar extension as shared extension. o foobar package install prefix is /usr/local/foobar/ --disable-all Disable all extensions which are enabled by default --with-regex=TYPE regex library type: system, php. [TYPE=php] WARNING: Do NOT use unless you know what you are doing! --disable-libxml Disable LIBXML support --with-libxml-dir[=DIR] LIBXML: libxml2 install prefix --with-openssl[=DIR] Include OpenSSL support (requires OpenSSL >= 0.9.6) --with-kerberos[=DIR] OPENSSL: Include Kerberos support --with-pcre-regex=DIR Include Perl Compatible Regular Expressions support. DIR is the PCRE install prefix [BUNDLED] --with-zlib[=DIR] Include ZLIB support (requires zlib >= 1.0.9) --with-zlib-dir=<DIR> Define the location of zlib install directory --enable-bcmath Enable bc style precision math functions --with-bz2[=DIR] Include BZip2 support --enable-calendar Enable support for calendar conversion --disable-ctype Disable ctype functions --with-curl[=DIR] Include cURL support --with-curlwrappers Use cURL for url streams --enable-dba Build DBA with bundled modules. To build shared DBA extension use --enable-dba=shared --with-qdbm[=DIR] DBA: QDBM support --with-gdbm[=DIR] DBA: GDBM support --with-ndbm[=DIR] DBA: NDBM support --with-db4[=DIR] DBA: Berkeley DB4 support --with-db3[=DIR] DBA: Berkeley DB3 support --with-db2[=DIR] DBA: Berkeley DB2 support --with-db1[=DIR] DBA: Berkeley DB1 support/emulation --with-dbm[=DIR] DBA: DBM support --without-cdb[=DIR] DBA: CDB support (bundled) --disable-inifile DBA: INI support (bundled) --disable-flatfile DBA: FlatFile support (bundled) --disable-dom Disable DOM support --with-libxml-dir[=DIR] DOM: libxml2 install prefix --enable-exif Enable EXIF (metadata from images) support --disable-fileinfo Disable fileinfo support --disable-filter Disable input filter support --with-pcre-dir FILTER: pcre install prefix --enable-ftp Enable FTP support --with-openssl-dir[=DIR] FTP: openssl install prefix --with-gd[=DIR] Include GD support. DIR is the GD library base install directory [BUNDLED] --with-jpeg-dir[=DIR] GD: Set the path to libjpeg install prefix --with-png-dir[=DIR] GD: Set the path to libpng install prefix --with-zlib-dir[=DIR] GD: Set the path to libz install prefix --with-xpm-dir[=DIR] GD: Set the path to libXpm install prefix --with-freetype-dir[=DIR] GD: Set the path to FreeType 2 install prefix --with-t1lib[=DIR] GD: Include T1lib support. T1lib version >= 5.0.0 required --enable-gd-native-ttf GD: Enable TrueType string function --enable-gd-jis-conv GD: Enable JIS-mapped Japanese font support --with-gettext[=DIR] Include GNU gettext support --with-gmp[=DIR] Include GNU MP support --with-mhash[=DIR] Include mhash support --disable-hash Disable hash support --without-iconv[=DIR] Exclude iconv support --with-imap[=DIR] Include IMAP support. DIR is the c-client install prefix --with-kerberos[=DIR] IMAP: Include Kerberos support. DIR is the Kerberos install prefix --with-imap-ssl[=DIR] IMAP: Include SSL support. DIR is the OpenSSL install prefix --with-interbase[=DIR] Include InterBase support. DIR is the InterBase base install directory [/usr/interbase] --enable-intl Enable internationalization support --with-icu-dir=DIR Specify where ICU libraries and headers can be found --disable-json Disable JavaScript Object Serialization support --with-ldap[=DIR] Include LDAP support --with-ldap-sasl[=DIR] LDAP: Include Cyrus SASL support --enable-mbstring Enable multibyte string support --disable-mbregex MBSTRING: Disable multibyte regex support --disable-mbregex-backtrack MBSTRING: Disable multibyte regex backtrack check --with-libmbfl[=DIR] MBSTRING: Use external libmbfl. DIR is the libmbfl base install directory [BUNDLED] --with-onig[=DIR] MBSTRING: Use external oniguruma. DIR is the oniguruma install prefix. If DIR is not set, the bundled oniguruma will be used --with-mcrypt[=DIR] Include mcrypt support --with-msql[=DIR] Include mSQL support. DIR is the mSQL base install directory [/usr/local/Hughes] --with-mssql[=DIR] Include MSSQL-DB support. DIR is the FreeTDS home directory [/usr/local/freetds] --with-mysql[=DIR] Include MySQL support. DIR is the MySQL base directory. If mysqlnd is passed as DIR, the MySQL native driver will be used [/usr/local] --with-mysql-sock[=DIR] MySQL/MySQLi/PDO_MYSQL: Location of the MySQL unix socket pointer. If unspecified, the default locations are searched --with-zlib-dir[=DIR] MySQL: Set the path to libz install prefix --with-mysqli[=FILE] Include MySQLi support. FILE is the path to mysql_config. If mysqlnd is passed as FILE, the MySQL native driver will be used [mysql_config] --enable-embedded-mysqli MYSQLi: Enable embedded support Note: Does not work with MySQL native driver! --with-oci8[=DIR] Include Oracle (OCI8) support. DIR defaults to $ORACLE_HOME. Use --with-oci8=instantclient,/path/to/oic/lib for an Oracle Instant Client installation --with-adabas[=DIR] Include Adabas D support [/usr/local] --with-sapdb[=DIR] Include SAP DB support [/usr/local] --with-solid[=DIR] Include Solid support [/usr/local/solid] --with-ibm-db2[=DIR] Include IBM DB2 support [/home/db2inst1/sqllib] --with-ODBCRouter[=DIR] Include ODBCRouter.com support [/usr] --with-empress[=DIR] Include Empress support [$EMPRESSPATH] (Empress Version >= 8.60 required) --with-empress-bcs[=DIR] Include Empress Local Access support [$EMPRESSPATH] (Empress Version >= 8.60 required) --with-birdstep[=DIR] Include Birdstep support [/usr/local/birdstep] --with-custom-odbc[=DIR] Include user defined ODBC support. DIR is ODBC install base directory [/usr/local]. Make sure to define CUSTOM_ODBC_LIBS and have some odbc.h in your include dirs. f.e. you should define following for Sybase SQL Anywhere 5.5.00 on QNX, prior to running this configure script: CPPFLAGS="-DODBC_QNX -DSQLANY_BUG" LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" --with-iodbc[=DIR] Include iODBC support [/usr/local] --with-esoob[=DIR] Include Easysoft OOB support [/usr/local/easysoft/oob/client] --with-unixODBC[=DIR] Include unixODBC support [/usr/local] --with-dbmaker[=DIR] Include DBMaker support --enable-pcntl Enable pcntl support (CLI/CGI only) --disable-pdo Disable PHP Data Objects support --with-pdo-dblib[=DIR] PDO: DBLIB-DB support. DIR is the FreeTDS home directory --with-pdo-firebird[=DIR] PDO: Firebird support. DIR is the Firebird base install directory [/opt/firebird] --with-pdo-mysql[=DIR] PDO: MySQL support. DIR is the MySQL base directoy If mysqlnd is passed as DIR, the MySQL native native driver will be used [/usr/local] --with-zlib-dir[=DIR] PDO_MySQL: Set the path to libz install prefix --with-pdo-oci[=DIR] PDO: Oracle OCI support. DIR defaults to $ORACLE_HOME. Use --with-pdo-oci=instantclient,prefix,version for an Oracle Instant Client SDK. For Linux with 10.2.0.3 RPMs (for example) use: --with-pdo-oci=instantclient,/usr,10.2.0.3 --with-pdo-odbc=flavour,dir PDO: Support for 'flavour' ODBC driver. include and lib dirs are looked for under 'dir'. 'flavour' can be one of: ibm-db2, iODBC, unixODBC, generic If ',dir' part is omitted, default for the flavour you have selected will used. e.g.: --with-pdo-odbc=unixODBC will check for unixODBC under /usr/local. You may attempt to use an otherwise unsupported driver using the "generic" flavour. The syntax for generic ODBC support is: --with-pdo-odbc=generic,dir,libname,ldflags,cflags When build as shared the extension filename is always pdo_odbc.so --with-pdo-pgsql[=DIR] PDO: PostgreSQL support. DIR is the PostgreSQL base install directory or the path to pg_config --without-pdo-sqlite[=DIR] PDO: sqlite 3 support. DIR is the sqlite base install directory [BUNDLED] --with-pgsql[=DIR] Include PostgreSQL support. DIR is the PostgreSQL base install directory or the path to pg_config --disable-phar Disable phar support --disable-posix Disable POSIX-like functions --with-pspell[=DIR] Include PSPELL support. GNU Aspell version 0.50.0 or higher required --with-libedit[=DIR] Include libedit readline replacement (CLI/CGI only) --with-readline[=DIR] Include readline support (CLI/CGI only) --with-recode[=DIR] Include recode support --disable-session Disable session support --with-mm[=DIR] SESSION: Include mm support for session storage --enable-shmop Enable shmop support --disable-simplexml Disable SimpleXML support --with-libxml-dir=DIR SimpleXML: libxml2 install prefix --with-snmp[=DIR] Include SNMP support --with-openssl-dir[=DIR] SNMP: openssl install prefix --enable-ucd-snmp-hack SNMP: Enable UCD SNMP hack --enable-soap Enable SOAP support --with-libxml-dir=DIR SOAP: libxml2 install prefix --enable-sockets Enable sockets support --without-sqlite=DIR Do not include sqlite support. DIR is the sqlite base install directory [BUNDLED] --enable-sqlite-utf8 SQLite: Enable UTF-8 support for SQLite --without-sqlite3[=DIR] Do not include SQLite3 support. DIR is the prefix to SQLite3 installation directory. --with-sybase-ct[=DIR] Include Sybase-CT support. DIR is the Sybase home directory [/home/sybase] --enable-sysvmsg Enable sysvmsg support --enable-sysvsem Enable System V semaphore support --enable-sysvshm Enable the System V shared memory support --with-tidy[=DIR] Include TIDY support --disable-tokenizer Disable tokenizer support --enable-wddx Enable WDDX support --with-libxml-dir=DIR WDDX: libxml2 install prefix --with-libexpat-dir=DIR WDDX: libexpat dir for XMLRPC-EPI (deprecated) --disable-xml Disable XML support --with-libxml-dir=DIR XML: libxml2 install prefix --with-libexpat-dir=DIR XML: libexpat install prefix (deprecated) --disable-xmlreader Disable XMLReader support --with-libxml-dir=DIR XMLReader: libxml2 install prefix --with-xmlrpc[=DIR] Include XMLRPC-EPI support --with-libxml-dir=DIR XMLRPC-EPI: libxml2 install prefix --with-libexpat-dir=DIR XMLRPC-EPI: libexpat dir for XMLRPC-EPI (deprecated) --with-iconv-dir=DIR XMLRPC-EPI: iconv dir for XMLRPC-EPI --disable-xmlwriter Disable XMLWriter support --with-libxml-dir=DIR XMLWriter: libxml2 install prefix --with-xsl[=DIR] Include XSL support. DIR is the libxslt base install directory (libxslt >= 1.1.0 required) --enable-zip Include Zip read/write support --with-zlib-dir[=DIR] ZIP: Set the path to libz install prefix --with-pcre-dir ZIP: pcre install prefix --enable-mysqlnd-threading MYSQLND: Enable threaded fetch. Note: This forces ZTS on! PEAR: --with-pear=DIR Install PEAR in DIR [PREFIX/lib/php] --without-pear Do not install PEAR Zend: --with-zend-vm=TYPE Set virtual machine dispatch method. Type is one of CALL, SWITCH or GOTO [TYPE=CALL] --enable-maintainer-zts Enable thread safety - for code maintainers only!! --disable-inline-optimization If building zend_execute.lo fails, try this switch --enable-zend-multibyte Compile with zend multibyte support TSRM: --with-tsrm-pth[=pth-config] Use GNU Pth --with-tsrm-st Use SGI's State Threads --with-tsrm-pthreads Use POSIX threads (default) Libtool: --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --disable-libtool-lock avoid locking (might break parallel builds) --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] --with-gnu-ld assume the C compiler uses GNU ld [default=no]
Comme qui dirait, il y en a quelques unes ^^
Je me suis limité aux suivantes, qui couvrent les besoins que j'avais pour illustrer les nouveautés de PHP 5.3 :
./configure --prefix=/usr/ --with-apxs2=/usr/bin/apxs2 --with-config-file-path=/etc/php/ --disable-ipv6 --with-curl --enable-ftp --with-gd --enable-intl --enable-mbstring --with-mcrypt --with-mhash --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-soap --with-pear --with-xsl --with-zlib --with-openssl
Dans le principe, pour ne citer que quelques points :
- PHP 5.3 devra être compilé vers
/usr/
, et la configuration ira dans/etc/php/
- Nous n'avons pas besoin du support d'IP v6
- Quelques extensions doivent être constuites : cURL, GD, intl, ...
- Nous souhaitons utiliser le driver "mysqlnd" pour les trois extensions MySQL (mysql, mysqli, et PDO_MySQL).
Une fois cette commande lancée, configure
va vérifier que vous avez installé tout ce qui sera nécessaire au processus de compilation -- en particulier, qu'il ne vous manque pas certaines bibliothèques, en version de développement (Cf la liste des paquets installés plus haut, typiquement).
Si tout se passe correctement, vous obtiendrez une sortie se terminant par quelque chose de ce genre :
Generating files creating ./config.status creating php5.spec creating main/build-defs.h creating scripts/phpize creating scripts/man1/phpize.1 creating scripts/php-config creating scripts/man1/php-config.1 creating sapi/cli/php.1 creating main/php_config.h creating main/internal_functions.c creating main/internal_functions_cli.c +--------------------------------------------------------------------+ | 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.
Dans le cas contraire, il vous faudra partir à la chasse des logiciels manquants... Bon courage !
Compilation
Maintenant que nous avons défini quoi compiler, nous n'avons plus qu'à lancer la compilation en elle-même :
make
Au bout de quelques minutes (selon performance de votre machine... Le fait de travailler dans une machine virtuelle n'arrangeant pas les choses), la compilation se termine :
Build complete. Don't forget to run 'make test'.
Là encore, en cas d'erreur, il vous faudra partir à la chasse aux paquets manquants...
(Ou alors, vous avec eu la malchance de tomber sur un snapshot complètement foireux -- ça ne m'est jamais arrivé jusqu'à présent, ceci dit)
Exécution des tests
Une fois la compilation terminée, avant d'installer les logiciels que vous venez de compiler, il est recommandé de lancer les tests automatisés.
Considérant que vous construisez un environnement de test, vous pouvez choisir de sauter cette étape... Mais si vous n'êtes jamais passé par là, ça ne peut être qu'instructif de les lancer au moins une fois :
make test
Et en résultat :
===================================================================== TEST RESULT SUMMARY --------------------------------------------------------------------- Exts skipped : 44 Exts tested : 36 --------------------------------------------------------------------- Number of tests : 7789 6091 Tests skipped : 1698 ( 21.8%) -------- Tests warned : 134 ( 1.7%) ( 2.2%) Tests failed : 36 ( 0.5%) ( 0.6%) Expected fail : 3 ( 0.0%) ( 0.0%) Tests passed : 5918 ( 76.0%) ( 97.2%) --------------------------------------------------------------------- Time taken : 491 seconds =====================================================================
Un bon nombre de tests réussis, quelques tests sautés, quelques échecs...
...Moué, ok... On verra si ça marche ^^
Installation et configuration de base
Il ne reste maintenant plus qu'à lancer la commande déclenchant l'installation
Note : Pour exécuter le processus d'installation, qui déploie des fichiers dans les répertoires système, vous devez être root
Installation
make install
Considérant la configuration d'Apache mise en place par Ubuntu, il y a de fortes chances que l'installation échoue lamentablement :
Installing PHP SAPI module: apache2handler /usr/share/apache2/build/instdso.sh SH_LIBTOOL='/usr/share/apr-1.0/build/libtool' libphp5.la /usr/lib/apache2/modules /usr/share/apr-1.0/build/libtool --mode=install cp libphp5.la /usr/lib/apache2/modules/ cp .libs/libphp5.so /usr/lib/apache2/modules/libphp5.so cp .libs/libphp5.lai /usr/lib/apache2/modules/libphp5.la libtool: install: warning: remember to run `libtool --finish /home/php/temp/php5.3-200808211630/libs' chmod 644 /usr/lib/apache2/modules/libphp5.so apxs:Error: Activation failed for custom /etc/apache2/httpd.conf file.. apxs:Error: At least one `LoadModule' directive already has to exist.. make: *** [install-sapi] Error 1
En effet, les fichiers de configuration d'Apache ne sont pas organisés, sous Ubuntu, de la façon dont l'installeur de PHP les attend ; il ne parvient donc pas à les modifier pour y ajouter le chargement du module PHP.
Tant pis ; nous gérerons ce point là ultérieument, "à la main" ; en attendant, relançons l'installation, en ignorant les erreurs :
# make install --ignore-errors Installing PHP SAPI module: apache2handler /usr/share/apache2/build/instdso.sh SH_LIBTOOL='/usr/share/apr-1.0/build/libtool' libphp5.la /usr/lib/apache2/modules /usr/share/apr-1.0/build/libtool --mode=install cp libphp5.la /usr/lib/apache2/modules/ cp .libs/libphp5.so /usr/lib/apache2/modules/libphp5.so cp .libs/libphp5.lai /usr/lib/apache2/modules/libphp5.la libtool: install: warning: remember to run `libtool --finish /home/php/temp/php5.3-200808211630/libs' chmod 644 /usr/lib/apache2/modules/libphp5.so apxs:Error: Activation failed for custom /etc/apache2/httpd.conf file.. apxs:Error: At least one `LoadModule' directive already has to exist.. make: [install-sapi] Error 1 (ignored) Installing PHP CLI binary: /usr//bin/ Installing PHP CLI man page: /usr//man/man1/ Installing build environment: /usr//lib/php/build/ Installing header files: /usr//include/php/ Installing helper programs: /usr//bin/ program: phpize program: php-config Installing man pages: /usr//man/man1/ page: phpize.1 page: php-config.1 Installing PEAR environment: /usr//lib/php/ --04:52:08-- http://pear.php.net/install-pear-nozlib.phar => `pear/install-pear-nozlib.phar' Resolving pear.php.net... 216.92.131.66 Connecting to pear.php.net|216.92.131.66|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3 642 880 (3.5M) [text/plain] 100%[=====================================================================================================================================================================================>] 3 642 880 105.07K/s ETA 00:00 04:52:40 (112.63 KB/s) - `pear/install-pear-nozlib.phar' saved [3642880/3642880] [PEAR] Console_Getopt - installed: 1.2.3 [PEAR] Archive_Tar - installed: 1.3.2 [PEAR] Structures_Graph- installed: 1.0.2 pear/PEAR can optionally use package "pear/XML_RPC" (version >= 1.4.0) [PEAR] PEAR - installed: 1.7.2 Wrote PEAR system config file at: /usr//etc/pear.conf You may want to add: /usr//lib/php to your php.ini include_path /home/php/temp/php5.3-200808211630/build/shtool install -c ext/phar/phar.phar /usr//bin Installing PDO headers: /usr//include/php/ext/pdo/
Cette fois-ci, le processus d'installation a pu aller jusqu'au bout, malgré l'impossibilité d'ajouter le chargement de PHP à la configuration d'Apache.
On peut notamment noter l'installation des installeurs pear et pecl.
Configuration PHP
Maintenant que PHP est installé, il nous faut le configurer.
Pour cela, copions le fichier de configuration "recommandé", fourni avec PHP, vers l'emplacement indiqué plus haut, lors de la configuration de la configuration (Pour rappel : /etc/php/
) :
mkdir /etc/php/ cp php.ini-recommended /etc/php/php.ini
De la sorte, ce fichier sera utilisé lors de l'exécution de php, que ce soit en ligne de commande, ou en tant que module Apache.
Pour nos tests, il peut être intéressant de modifier quelques points de configuration dans le fichier php.ini
que nous venons de créer.
En particulier, activons le reporting et l'affichage d'erreurs :
error_reporting = E_ALL | E_STRICT display_errors = On html_errors = On
Cela nous facilitera la tâche lors des écritures de programmes de test !
Configuration Apache
Puisque -- du moins sous Ubuntu -- la modification de la configuration Apache a échoué lors de l'installation, il est temps de traiter ce point "manuellement".
A vous de voir comment charger un nouveau module sous votre système...
Sous Ubuntu, il faut créer un fichier de configuration dans le répertoire mods-available
d'Apache :
# cat /etc/apache2/mods-available/php5.conf <IfModule mod_php5.c> AddType application/x-httpd-php .php .phtml AddType application/x-httpd-php-source .phps </IfModule>
Et un fichier chargeant le module :
# cat /etc/apache2/mods-available/php5.load LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
Et enfin, lier ces deux fichiers depuis le répertoire mods-enabled
, pour qu'ils soient pris en compte au prochain rechargement d'Apache :
# ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf # ln -s /etc/apache2/mods-available/php5.load /etc/apache2/mods-enabled/php5.load
Et pour terminer, redémarrons Apache pour que la nouvelle configuration soit prise en compte :
/etc/init.d/apache2 restart
Et voila ! Un environnement Apache + PHP 5.3 installé et configuré !
Tester si PHP 5.3 est bien installé
A présent, vérifions si PHP 5.3 est bien installé...
Tout d'abord, vérifions l'installation de l'exécutable php
, en l'appelant en ligne de commande :
$ php --version PHP 5.3.0alpha3-dev (cli) (built: Sep 7 2008 16:53:20) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2008 Zend Technologies
La sortie que vous obtenez devrait se rapprocher de celle-ci ; la date de compilation changera, bien évidemment, et le numéro de version exact peut-être aussi.
Et pour vérifier que PHP est bien disponible en tant que module Apache, créez une page contenant un appel à phpinfo
:
<?php
phpinfo();
Ce qui devrait donner quelque chose de ce genre -- et plus encore :
Si cette page s'affiche, contenant le bon numéro de version, c'est que votre installation a fonctionné :-)
Dans le cas cas contraire... Revoyez les étapes par lesquelles nous sommes passé... Et, au besoin, laissez un commentaire indiquant le problème.
A tout hasard, en cas de problème, assurez-vous d'avoir configuré Apache de manière à ce que son DocumentRoot
pointe là où vous placez vos sources PHP ; ou créez un VirtualHost
pointant sur votre répertoire de travail.
Typiquement, votre configuration Apache peut ressembler à ceci :
# cat /etc/apache2/sites-enabled/000-default NameVirtualHost * <VirtualHost *> ServerAdmin webmaster@localhost DocumentRoot /home/php/php53/ <Directory /home/php/php53/> Options Indexes FollowSymLinks MultiViews +ExecCGI AllowOverride All Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On </VirtualHost>
Quelques outils utiles
Avant de terminer, installons encore quelques outils, qui nous faciliteront les choses par la suite...
Installer Xdebug depuis pecl
Xdebug est une extension PHP fournissant -- entre autre -- des informations de debuggage en cas d'erreur ou d'exception.
Cette extension supporte PHP 5.3 depuis déjà plusieurs mois.
Nous allons l'installer, toujours sur notre machine virtuelle tournant sous Linux, depuis pecl.
Commençons par mettre à jour le channel :
# pecl channel-update pecl.php.net
Et passons ensuite à l'installation de Xdebug (Je tronque un peu la sortie) :
# pecl install xdebug ... ... ... Build process completed successfully Installing '/usr//lib/php/extensions/no-debug-non-zts-20071006/xdebug.so' install ok: channel://pecl.php.net/xdebug-2.0.3 configuration option "php_ini" is not set to php.ini location You should add "extension=xdebug.so" to php.ini
Vous noterez que j'ai sauté toutes les lignes en rapport avec la compilation de Xdebug, pour ne pas surcharger plus que nécessaire.
Et maintenant, il nous faut modifier notre fichier de configuration PHP (Encore une fois : /etc/php/php.ini
) pour charger Xdebug, et activer quelques options.
Typiquement, rajoutez le passage suivant à la fin du fichier :
zend_extension=/usr//lib/php/extensions/no-debug-non-zts-20071006/xdebug.so xdebug.default_enable = 1 xdebug.overload_var_dump = 1 xdebug.collect_includes = 1 xdebug.collect_params = 2 xdebug.collect_vars = 1 xdebug.show_exception_trace = 0 xdebug.show_mem_delta = 1 xdebug.max_nesting_level = 256 xdebug.var_display_max_children = 256 xdebug.var_display_max_data = 2048 xdebug.var_display_max_depth = 8 xdebug.auto_trace = 0 xdebug.profiler_enable = 0 xdebug.profiler_enable_trigger = 1 xdebug.profiler_append = 0 xdebug.profiler_output_dir = /tmp xdebug.profiler_output_name = cachegrind.out.%t
Dans les grandes lignes, nous activons les traces en cas d'erreur et les var_dump
améliorés, et désactivons le débugguer, que nous n'utiliserons pas.
Et pour que la modification soit prise en compte, redémarrez Apache :
/etc/init.d/apache2 restart
Xdebug devrait maintenant être visible en sortie de votre page phpinfo
.
Un exemple typique d'utilisation ? Prenez cet exemple de trace d'exption, obtenue avec Xdebug installé et activé :
Différent de ce à quoi vous êtes habitué en temps normal, n'est-ce pas ?
Vous l'aurez compris : je n'imagine pas une machine de développement PHP sans Xdebug[2] !
Cela signifie que nous allons enfin pouvoir véritablement nous attaquer aux nouveautés de PHP 5.3... Dès le prochain article !
Notes
[1] La version 8.10 de Ubuntu n'était pas encore sortie lorsque j'ai commencé à rédiger cette série d'articles -- les différences avec la version 8.04 ne devraient pas être bien importantes au niveau des logiciels qui nous intéressent, quoi qu'il en soit
[2] Par contre, n'installez pas Xdebug sur une machine de production : ça ne serait absolument pas judicieux -- notamment pour ce qui est des performances ! Pensez plutôt, par exemple, à APC ;-)