Introduction
Cet article décrit les étapes et les problèmes rencontrés lors de la compilation de PHP 5.0.5 sous Sun Solaris SPARC 2.9. Cette compilation est réalisée dans le contexte de la mise en place d’Insite Portal sous Solaris.
Dans le contexte de la compilation réalisée, la machine Solaris en question ne dispose d’aucun compilateur disponible, aussi la description de l’installation de tous les packages Solaris nécessaires pour la compilation est réalisée dans cette documentation.
Options PHP 5
Pour les futurs besoins de l’utilisation de PHP 5, les options de compilation PHP ci-dessous sont nécessaires :
Option PHP | Description |
---|---|
oci8 |
Client Oracle Call Interface
(/Software/oracle/app/product/9.2.0 ) |
sybase-ct |
Client Sybase CT Library
(/Software/sybase/sybase-12.5/OCS-12_5 ) |
mysql |
Client Mysql
(/Software/mysql/mysql-4.1 ) |
libxml |
Librairie XML pour l’utilisation de SimpleXML |
gd |
Librairie gd pour l’utilisation de JPGraph 2.0 |
zlib |
Libraire des fonctions de compression |
png |
Librairie des images PNG pour pouvoir utiliser les
fonctions PHP image% sur les images au format png
(getimagesize , etc.) |
jpeg |
Librairie des images JPEG pour pouvoir utiliser les
fonctions PHP image% sur les images au format jpeg
(getimagesize , etc.) |
enable-calendar |
Activation du calendrier |
enable-memory-limit |
Activation du bridage de la mémoire lors de l’exécution
d’un script PHP5 (memory_limit = 8M dans
le fichier php.ini ) |
enable-track-vars |
Activation de la recherche des variables HTTP/POST
et HTTP/get |
enable-trans-sid |
Activation du transport de la variable de session
par les méthodes GET et POST |
Dans une première phase (avant rencontre des erreurs), la ligne de commande de configuration de la
compilation de PHP5 sous Solaris avec les options souhaitées est alors la suivante,
sachant que toutes les librairies nécessaires (libxml, png
, etc.) sont installées par défaut dans le répertoire
/usr/local/bin
:
./configure --prefix=/Software/php5 \
--with-oci8=/Software/oracle/app/product/9.2.0 \
--with-sybase-ct=/Software/sybase/sybase-12.5/OCS-12_5 \
--with-mysql=/Software/mysql/mysql-4.1 \
--with-libxml \
--with-jpeg-dir=/usr/local/bin \
--with-zlib-dir=/usr/local/bin \
--with-png-dir=/usr/local/bin \
--with-gd \
--enable-calendar \
--enable-memory-limit \
--enable-track-vars \
--enable-trans-sid
L’option --prefix=/Software/php5
spécifie une installation de PHP 5 dans le répertoire /Software/php5
.
Prérequis de la compilation PHP 5 sous Sun Solaris 2.9
Dans la documentation officielle PHP pour l’installation et la compilation de PHP sous Solaris, les packages Solaris ci-dessous sont nécessaires :
gcc autoconf
make automake
flex perl
bison gzip
m4 tar
GNU sed
La commande pkginfo
La commande pkginfo
de Solaris permet de déterminer si un package est déjà existant ou non sur la machine.
Exemple pour déterminer si le package gcc
est installé (dans cet exemple, le package est déjà installé
juste pour démonstration) :
root@SRVUNXFR > pkginfo | grep 'gcc'
application SMCgcc342 gcc application SMClibgcc libgcc
Le site SunFreeWare
Les packages nécessaires sont disponibles sur le site Sunfreeware.com à la rubrique SPARC/Solaris 9 dans le contexte technique de cette documentation ( http://www.sunfreeware.com/indexsparc9.html).
À droite de l’écran sont donnés les liens vers tous les packages disponibles (exemple : gd-2.0.33) et le site donne également toutes les dépendances éventuelles d’un package.
Exemple pour gd-2.0.33 :
gd-2.0.33-sol9-sparc-local.gz
:
GD Graphics Library - An ANSI C library for the dynamic creation of images. GD creates PNG and JPEG images, among other formats -
installs in /usr/local. The gd package requires the following library files - libXpm.so.4.11 from
xpm, libfreetype.so.6 from freetype, libfontconfig.so.1 from fonctconfig, libgcc_s.so.1 from libgcc-3.3 or from gcc-3.3.2, libiconv.so.2 from libiconv, libpng12.so.0 from libpng, libz.so from zlib, libexpat.so.0 from expat, and libjpeg.so.62 from the jpeg package.
Les commandes pkgadd et pkgrm
La commande pkgadd
avec l’option -d
est utilisée pour ajouter un package Solaris.
Dans le contexte de cette documentation, tous les packages zippés provenant de SunFreeWare sont installés
dans le répertoire /export/home/compilation/packages
et pour installer par exemple le package flex 2.5.31 :
root@SRVUNXFR > cd /export/home/compilation/packages root@SRVUNXFR > gunzip flex-2.5.31-sol9-sparc-local root@SRVUNXFR > pkgadd -dflex-2.5.31-sol9-sparc-local
The following packages are available: 1 SMCflex flex (sparc) 2.5.31 Select package(s) you wish to process (or 'all' to process all packages). (default: all) [?,??,q]: 1
La commande pkginfo
confirme si package est effectivement installé :
root@SRVUNXFR > pkginfo | grep 'flex'
application SMCflex flex
La commande pkgrm
supprime un package Solaris :
root@SRVUNXFR > pkgrm flex
Téléchargement des sources PHP 5.0.5
Les sources PHP 5.0.5 (php-5.0.5.tar.gz
) sont téléchargées à partir du site http://www.php.net/downloads.php
et installées dans le répertoire /export/home/compilation/php5
avec le user root :
root@SRVUNXFR > cd /export/home/compilation/php5
root@SRVUNXFR > gunzip php-5.0.5.tar.gz
root@SRVUNXFR > tar xvf php-5.0.5.tar
À l’issue de la commande tar
sur l’archive php-5.0.5.tar
, les sources pour la compilation sont
alors décompressées dans le répertoire /export/home/compilation/php5/php-5.0.5
.
Installation des packages Solaris nécessaires pour PHP 5
Tous les packages GNU sont installés par défaut dans le répertoire /usr/local/
,
ce qui est le cas dans l’implémentation technique ici qui nous intéresse.
Installation des packages primaires
Compte tenu des dépendances, et notamment pour l’installation du package gcc version 3.4.2, le package libiconv version 1.8 est installé en premier :
root@SRVUNXFR > pkgadd -d libiconv-1.8-sol9-sparc-local
Puis les packages ci-dessous sont installés :
Package gcc 3.4.2 |
|
Package make 3.80 |
|
Package flex 2.5.31 |
|
Package bison 1.875d |
|
Package m4 1.4.2 |
|
Package autoconf 2.59 |
|
Package automake 1.9 |
|
Package gzip 1.3 |
|
Package tar 1.15.1 |
|
Package GNU Sed 4.1.1 |
|
L’installation du package automake peut nécessiter le package perl, cependant il s’est avéré que le package perl n’a pas été nécessaire durant la compilation de PHP5 avec les options choisies.
Installation des packages liés aux librairies XML
La configuration de PHP5 avec l’option simpleXML
génère une erreur si le package libxml2 n’est pas installé :
configure: error: libxml2 version 2.5.10 or greater required.
Le package libxml2 version 2.6.16 dépend uniquement des packages zlib, libiconv et gcc ou libgcc, cependant le package zlib n’est pas encore installé, d’où les installations ci-dessous :
Package zlib 1.2.3 |
|
Package libxml2 2.6.16 |
|
Installation des packages liés aux librairies graphiques
Pour l’utilisation des librairies GD 2 (Graphics library), png et jpeg et compte tenu des dépendances de GD 2, les packages suivants sont installés dans l’ordre ci-dessous :
Package expat 1.95.5 |
|
Package xpm 3.4k |
|
Package freetype 2.1.9 |
|
Package fontconfig 2.2.98 |
|
Package libpng 1.2.8 |
|
Package jpeg6b |
|
Package gd 2.0.33 |
|
Compilation et installation de PHP 5.0
Méthodologie de la compilation PHP 5.0 (configure, make, make install)
Pour réaliser la compilation de PHP 5.0.5, il faut se positionner dans le répertoire racine des sources PHP 5.0.5
/export/home/compilation/php5/php-5.0.5
, ensuite bien affecter respectivement les répertoires
/usr/local/bin
et /usr/local/lib
dans les variables d’environnement
PATH
et LD_LIBRARY_PATH
pour retrouver les packages nécessaires lors de la compilation :
root@SRVUNXFR > cd /export/home/compilation/php5/php-5.0.5
root@SRVUNXFR > export PATH=/usr/local/bin:$PATH
root@SRVUNXFR > export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
puis la compilation est exécutée en lançant successivement les 3 étapes configure, make
et make install
ci-dessous :
Étape 1 : configuration de la compilation avec configure
./configure --prefix=/Software/php5 \
--with-oci8=/Software/oracle/app/product/9.2.0 \
...
Étape 2 : construction des binaires avec make
./make
Étape 3 : installation de PHP 5 dans le répertoire spécifié avec l’option --prefix
(/Software/php5
)
grâce à make install
./make install
Toutes les erreurs rencontrées et contournées lors de la compilation sont décrites dans le paragraphe qui suit.
Erreurs de compilation PHP 5 rencontrées
Problème de compilation Zend avec flex 2.5.31, upgrade vers flex 2.5.4
Pour PHP 5.0, la compilation du moteur Zend 2 rencontre une grave erreur. Cette erreur se produit avec les versions de flex inférieures à la version 2.5.4.
flex -Pzend -S/export/home/php5/php-5.0.5/Zend/flex.skl -oZend/zend_language_scanner.c
-i/export/home/php5/php-5.0.5/Zend/zend_language_scanner.le
make: *** [Zend/zend_language_scanner.c] Error 1
Pour résoudre ce problème, le package flex 2.5.31 doit être désinstallé pour être remplacé par la version flex 2.5.4. Toutefois à ce jour le package flex 2.5.4 n’est pas encore prêt et cette version doit être compilée manuellement.
Problèmes de compilation avec PEAR
Une erreur se produit lors de la compilation de PEAR avec la librairie libwtc8.so
qui est une librairie Oracle 8
Installing PEAR environment: /Software/php5/lib/php/
ld.so.1: /export/home/compilation/php5/php-5.0.5/sapi/cli/php: fatal:
libwtc8.so: open failed: No such file or directory
Killed
make[1]: *** [install-pear-installer] Error 137
make: *** [install-pear] Error 2
Dans la configuration de la compilation, Oracle 9 est utilisé et non Oracle 8.
Des contournements à problème sont possibles mais n’ont pas été mis en œuvre car PEAR n’est pas utile,
toutefois pour contourner ce problème, le fichier /etc/ld.so.conf
doit être mis à jour :
root@SRVUNXFR> updatedb
root@SRVUNXFR> locate lbwtc
Un autre problème pour la compilation de PEAR peut également se présenter avec XML :
ld.so.1: php: fatal: relocation error: file
/export/home/compilation/php5/php-5.0.5/sapi/cli/php: symbol
xmlRelaxNGCleanupTypes: referenced symbol not found
Killed
make[1]: *** [install-pear-installer] Error 137
make: *** [install-pear] Error 2
Cette erreur à due à la présence des packages XML Solaris SUNWlxml et SUNWlxmlx qui prennent le pas sur le package xml2
et il suffit de supprimer ces 2 packages avec pkgrm
pour éviter cette erreur de compilation.
Pour les besoins futurs de PHP5, PEAR n’est pas utilisé aussi pour contourner cette erreur de compilation, l’option
--without-pear
est ajoutée dans la ligne de commande de configuration de la compilation de PHP5.
./configure --prefix=/Software/php5
...
--without-pear
Problèmes de compilation avec sqlite
Par défaut, le support de la base de données sqlite est automatiquement embarqué dans la compilation de PHP 5, cependant une erreur grave se produit lors de la compilation de l’extension sqlite avec PHP 5 sous Solaris 2.9 :
bison -y
/export/home/compilation/php-5.0.5/ext/sqlite/libsqlite/src/parse.y
/export/home/compilation/php-5.0.5/ext/sqlite/libsqlite/src/parse.y :19 :
unrecognized : %token-prefix
/export/home/compilation/php-5.0.5/ext/sqlite/libsqlite/src/parse.y :19 :
Skipping to next %
Cette erreur vient du fait que le parser Lemon est nécessaire dans la ligne de commande ci-dessus en échec.
Le parser Bison/yacc ne peut pas prendre en charge le fichier parse.y
en raison d’une syntaxe spécifique au parser Lemon.
Pour les besoins futurs de PHP5, sqlite n’a pas d’intérêt aussi pour contourner cette erreur de compilation, l’option --without-sqlite
est ajoutée dans la ligne de commande de configuration de la compilation de PHP 5.
./configure --prefix=/Software/php5 \
...
--without-pear \
--without-sqlite
Avertissement avec libiconv
Un avertissement non gravissime lors de la compilation est détecté avec la librairie iconv. Ces avertissements peuvent être ignorés et sont causés par des différences de prototype entre libiconv et glibc.
/export/home/compilation/php-5.0.5/libtool --silent --preserve-dup-deps
--mode=compile
gcc -I"/usr/local/include" -Iext/iconv/
-I/export/home/compilation/php-5.0.5/ext/iconv/ -DPHP_ATOM_INC
-I/export/home/compilation/php-5.0.5/include
-I/export/home/compilation/php-5.0.5/main
-I/export/home/compilation/php-5.0.5
-I/export/home/compilation/php-5.0.5/Zend -I/usr/local/include
-I/export/home/compilation/php-5.0.5/TSRM -g -O2 -prefer-pic -c
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c -o
ext/iconv/iconv.lo
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c: In
function`_php_iconv_appendl':
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c:246: warning: passing
arg 2 of `libiconv' from incompatible pointer type
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c: In function
`php_iconv_string':
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c:406: warning: passing
arg 2 of `libiconv' from incompatible pointer type
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c: In function
`_php_iconv_strlen':
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c:520: warning: passing
arg 2 of `libiconv' from incompatible pointer type
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c: In function
`_php_iconv_substr':
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c:620: warning: passing
arg 2 of `libiconv' from incompatible pointer type
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c: In function
`_php_iconv_strpos':
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c:751: warning: passing
arg 2 of `libiconv' from incompatible pointer type
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c: In function
`_php_iconv_mime_encode':
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c:985: warning: passing
arg 2 of `libiconv' from incompatible pointer type
/export/home/compilation/php-5.0.5/ext/iconv/iconv.c:1073: warning: passing
arg 2 of `libiconv' from incompatible pointer type
Ligne de commande configure définitive
Les lignes de commande définitives pour la compilation de PHP5 sans erreurs sont alors les suivantes :
#!/bin/ksh
export PATH=/usr/local/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
./configure --prefix=/Software/php5 \
--with-oci8=/Software/oracle/app/product/9.2.0 \
--with-sybase-ct=/Software/sybase/sybase-12.5/OCS-12_5 \
--with-mysql=/Software/mysql/mysql-4.1 \
--with-libxml \
--with-jpeg-dir=/usr/local/bin \
--with-zlib-dir=/usr/local/bin \
--with-png-dir=/usr/local/bin \
--with-gd \
--enable-calendar \
--enable-memory-limit \
--enable-track-vars \
--enable-trans-sid \
--without-pear \
--without-sqlite
./make
./make install
Vérification de l’installation de PHP5 (fichier php.ini, php -m, ldd)
À l’issue de la compilation de PHP5 et l’étape make install
, toute la distribution PHP 5 a été installée dans
le répertoire /Software/php5
. Il est nécessaire d’affecter alors le bon propriétaire au répertoire
/Software/php5
car par défaut toute la distribution a été installée avec le user Unix root.
Par défaut dans un environnement Unix/linux, le fichier de configuration php.ini
doit être créé dans le répertoire
<install_dir_php>/lib
( soit /Software/php5/lib
dans cet exemple).
Il est également possible de vérifier en ligne de commande les extensions disponibles et valides pour la distribution PHP 5 créée :
pour cela il suffit de donner l’option -m
au binaire php
installé dans le répertoire
<install_dir_php>/bin
:
root@SRVUNXFR > cd /Software/php5/bin
root@SRVUNXFR > php -m
[PHP Modules]
bcmath
calendar
ctype
gd
iconv
libxml
mysql
oci8
session
SimpleXML
standard
sybase_ct
tokenizer
zlib
[Zend Modules]
La commande ldd
lancée pour le binaire php
permet également de déterminer les
librairies dépendantes (Sybase, Oracle, etc.) :
root@SRVUNXFR > ldd php