GoldZone Web Hosting

Rédigé par Gaëtan Trellu (goldyfruit)

Outils pour utilisateurs

Outils du site


creation_de_paquets_php_5.1.6_avec_support_oracle_oci8_mssql_et_sybase

Création de paquets PHP 5.1.6 avec support Oracle (oci8), MSSQL et Sybase.

Red Hat est l'une des distributions commerciales les plus utilisée dans le milieu professionnel. Cette distribution offre un support aux entreprises tant que l'on suit les règles ses règles.

  • Utilisation des paquets officiels.
  • Pas de compilation de noyau.
  • etc…

Ce tutoriel a donc pour but de créer des paquets PHP 5.1.6 avec les connecteurs Oracle et Sybase tout en utilisant les paquets sources de Red Hat.

Voici l'environnement dans lequel j'ai créé ces paquets :

Sous Red Hat la construction d'un paquet s'effectue à l'aide de l'outil “rpmbuild”, vérifiez donc qu'il soit bien installer.

Options ajoutées à PHP :

  1. Support Oracle (oci8).
  2. Support Sybase (sybase_ct).
  3. Support Microsoft SQL Server (mssql).
  4. Support PDO DBLib (pour Sybase et MSSQL).
  5. Support PDO OCI.
  6. Support PDO ODBC.

A cela s'ajoute la création de paquets supplémentaires.

Installation de Oracle Instant Client.

Une fois les paquets suivants téléchargés (voir ci-dessus pour le lien de téléchargement), il faudra les installer via RPM.

  1. oracle-instantclient-basic.i386
  2. oracle-instantclient-devel.i386
# rpm -ivh oracle-*.rpm

Après l'installation, il est nécessaire d'indiquer à Red Hat ou se trouve les librairies Oracle. Pour se faire il suffit de créer un fichier “oracle-i386.conf” dans le répertoire “/etc/ld.so.conf.d/” contentant la ligne suivante :

/usr/lib/oracle/10.2.0.3/client/lib

Ne pas oublier de relancer la commande “ldconfig” pour regénérer le cache. Il est possible de voir si le système a bien pris en compte la modification.

# ldconfig -p | grep ora

Résultat :

       libtheora.so.0 (libc6) => /usr/lib/libtheora.so.0
	libsqlplusic.so (libc6) => /usr/lib/oracle/10.2.0.3/client/lib/libsqlplusic.so
	libsqlplus.so (libc6) => /usr/lib/oracle/10.2.0.3/client/lib/libsqlplus.so
	liboraodbcS.so.1 (libc6) => /usr/lib/liboraodbcS.so.1
	libocijdbc10.so (libc6) => /usr/lib/oracle/10.2.0.3/client/lib/libocijdbc10.so
	libociei.so (libc6) => /usr/lib/oracle/10.2.0.3/client/lib/libociei.so
	libocci.so.10.1 (libc6) => /usr/lib/oracle/10.2.0.3/client/lib/libocci.so.10.1
	libnnz10.so (libc6) => /usr/lib/oracle/10.2.0.3/client/lib/libnnz10.so
	libhal-storage.so.1 (libc6) => /usr/lib/libhal-storage.so.1
	libhal-storage.so (libc6) => /usr/lib/libhal-storage.so
	libexchange-storage-1.2.so.3 (libc6) => /usr/lib/libexchange-storage-1.2.so.3
	libexchange-storage-1.2.so (libc6) => /usr/lib/libexchange-storage-1.2.so
	libclntsh.so.10.1 (libc6) => /usr/lib/oracle/10.2.0.3/client/lib/libclntsh.so.10.1

L'installation du client Oracle 10.2.0.3 est terminée. LOL

Installation de Freetds.

Freetds est une bibliothèque qui permet d'accéder aux bases de données de type Microsoft SQL Server (MSSQL) et Sybase. Cela nous permet de ne pas avoir à installer le client Sybase.

Après avoir récupéré les deux paquets Freetds :

  • freetds-devel-0.64-4.el5.remi
  • freetds-0.64-4.el5.remi

Passons à l'installation :

# rpm -ivh freetds*.rpm

La librairie “ctpublic.h” est désormais présente dans le répertoire “/usr/include/freetds/”.

L'installation de la bibliothèque Freetds 0.64 est terminée. LOL

Compilation de PHP 5.1.6.

Maintenant que nos clients Oracle et Sybase sont installés, nous pouvons passer à la compilation de PHP 5.1.6.
Pour le téléchargement du paquet voir ici.

Vérifier que se soit bien le paquet “src”. ^_^

# rpm -ivh php-5.1.6-23.el5.src.rpm

Ce paquet installe :

  • Les sources de PHP.
  • Le fichier .spec nécessaire à la création du paquet.
  • Les patchs CVE, etc…

Le tout est installé dans le répertoire “/usr/src/redhat/”.

La version de PHP présente dans la distribution Red Hat EL 5.3 nécessite d'être patchée afin de pouvoir compiler avec le support Oracle et Sybase.

Bug Sybase : http://bugs.php.net/bug.php?id=45393
Bug Oracle : http://bugs.php.net/bug.php?id=41941

Le patch Sybase est nécessaire uniquement si vous compilez PHP à partir de l'OpenClient Sybase 15.0.2. Vous n'en aurez pas besoin si vous suivez ce tutorial.

Les patchs sont disponibles ci-dessous.

Patch Oracle.

Créer un fichier “php-5.1.6-oracle.patch” dans le répertoire “/usr/src/redhat/SOURCES/”.
Le contenu du patch Oracle est disponible ici : php-5.1.6-oracle.patch

Patch Sybase.

Créer un fichier “php-5.1.6-sybase.patch” dans le répertoire “/usr/src/redhat/SOURCES/”.
Le contenu du patch Sybase est disponible ici : php-5.1.6-sybase.patch

Première étape.

Maintenant que nous avons nos patchs il est nécessaire de les ajouter à notre fichier “php.spec” présent dans “/usr/src/redhat/SPEC/

Ligne 83 (après “Patch98: php-5.1.6-CVE-2008-210x.patch), on ajoute ceci :

# Patch Sybase (à dé-commenter si vous ne suivez pas ce tutoriel).
#Patch99: php-5.1.6-sybase.patch
 
# Pacth Oracle.
Patch100: php-5.1.6-oracle.patch

Ligne 400 (après “%patch98 -p1 -b .cve210x), on ajoute ceci :

#%patch99 -p1 -b .sybase
%patch100 -p1 -b .oracle

Deuxième étape.

Nos patchs sont en places.
Création des paquets php-oci8, php-pdo-oci, php-sybase-ct, php-pdo-dblib.

Ligne 341 (après “%description dba), on ajoute ceci :

%package oci8
Summary: Oracle connector for PHP
Group: Development/Languages
Requires: php-common = %{version}-%{release}
 
%description oci8
The php-oci8 package contains an Oracle connector (oci8) for PHP.
 
%package pdo-oci
Summary: Oracle PDO connector for PHP
Group: Development/Languages
Requires: php-common = %{version}-%{release}
 
%description pdo-oci
The php-pdo-oci package contains an Oracle PDO connector (pdo_oci) for PHP.
 
%package sybase-ct
Summary: Sybase connector for PHP
Group: Development/Languages
Requires: php-common = %{version}-%{release}
 
%description sybase-ct
The php-sybase-ct package contains a Sybase connector (sybase_ct) for PHP.
 
%package pdo-dblib
Summary: Sybase/MSSQL PDO DBLib connector for PHP
Group: Development/Languages
Requires: php-common = %{version}-%{release}
 
%description pdo-dblib
The php-pdo-dblib package contains a Sybase/MSSQL PDO DBLib connector for PHP.

Ligne 664 (après “pdo pdo_mysql pdo_pgsql pdo_odbc pdo_sqlite dbase), on ajoute ceci :

oci8 sybase_ct pdo_dblib pdo_oci

Ligne 754 (après “%files pdo -f files.pdo), on ajoute ceci :

%files oci8 -f files.oci8
%files sybase-ct -f files.sybase_ct
%files pdo-dblib -f files.pdo_dblib
%files pdo-oci -f files.pdo_oci

Troisième étape.

Modification des options de compilation afin d'ajouter la prise en charge des connecteurs.

Ligne 554 (après “–with-system-tzdata \), on ajoute ceci :

        --with-sybase-ct=shared,/usr \
        --with-mssql \
        --with-oci8=shared,instantclient,/usr/lib/oracle/10.2.0.3/client/lib,10.2.0.3 \
        --enable-sigchild \

Ligne 596 (après “–with-pdo-sqlite=shared,%{_prefix} \), on ajoute ceci :

      --with-pdo-dblib=shared,%{_prefix} \
      --with-pdo-oci=shared,instantclient,/usr,10.2.0.3 \
Les “\” en fin de ligne sont très importants, veillez à ne pas les oublier !!

Fichier php.spec au complet.

Voici à quoi doit ressembler le fichier “php.spec” après modifications.
Lien : php.spec

Création des paquets.

Passons à la création des paquets (RPM), une fois la commande terminée les paquets seront stockés dans le répertoire “/usr/src/redhat/RPMS/i386/”.

Voici la commande à exécuter pour compiler puis créer les paquets.

# rpmbuild -bb /usr/src/redhat/SPEC/php.spec

Cette étape prend beaucoup de temps, environ 20 minutes sur un Xeon 2.8Ghz. :!:

Installation des paquets.

Une fois les paquets générés, il ne reste plus qu'à vérifier qu'ils s'installent sans soucis.
Pour vérifier cela, direction le répertoire “/usr/src/redhat/RPMS/i386/” puis :

# rpm -ivh *.rpm

Il se peut que le message suivant apparaisse à l'écran (c'est normal 8-o) :

erreur: Dépendances requises:
	libclntsh.so.10.1 est nécessaire pour php-oci8-5.1.6-23.i386

RPM nous dit qu'il ne trouve pas la librairie “libclntsh.so.10.1” alors qu'elle est pourtant présente sur notre système. Pour résoudre cela il suffit d'utiliser l'option “—nodeps” qui permet de ne pas tenir compte des dépendances d'un paquet.

# rpm -ivh *.rpm --nodeps

Relancer Apache pour qu'il prenne en compte la librairie PHP.

# /etc/init.d/httpd restart

Et si tout va bien :

Arrêt de httpd :                                           [  OK  ]
Démarrage de httpd :                                       [  OK  ]

Conclusion.

Pour vérifier le bon fonctionnement de nos paquets PHP, il suffit de créer une page phpinfo();.
Vous devriez avoir des blocs quasiment identiques à ceux-là :

Nous avons désormais des paquets PHP 5.1.6 sous Red Hat EL 5.3 avec :

  • Le support de la PDO pour :
    • MSSQL
    • MySQL
    • PgSQL
    • Oracle
    • SQLite
    • Sybase
  • Support de connexion aux bases Oracle via oci8.
  • Support de connexion aux bases MSSQL.
  • Support de connexion aux bases Sybase via sybase_ct.

A priori ces paquets sont supportés par Red Hat, cela à confirmer. ;-)

Changelog.

creation_de_paquets_php_5.1.6_avec_support_oracle_oci8_mssql_et_sybase.txt · Dernière modification: 2011/01/05 16:05 (modification externe)