Outils personnels
Vous êtes ici : Accueil GNU / Linux Debian Installer le support OCI8 pour PHP5 sur Debian 4.0 Etch et 5.0 Lenny
Actions sur le document
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Installer le support OCI8 pour PHP5 sur Debian 4.0 Etch et 5.0 Lenny

Par Pierre-Yves Landuré - Dernière modification 18/08/2011 13:35

Dû aux licences non libres du SGBDR Oracle, le paquet php5-oci8 n'est pas présent dans les dépôts de la distribution Debian. Ce guide vous explique comment compiler vos propres paquets.

Au sujet de MSSQL

Pendant un long moment, ce guide présentait aussi la création des paquets php5-mssql. Ce n'était pas nécessaire. En effet, pour disposer des fonctions de connexion à un serveur MSSQL, il suffit d'installer le paquet php5-sybase :

/usr/bin/apt-get install php5-sybase

Remarque : Si vous utilisez le framework Symfony, vous devriez désactiver la conversion automatique des dates :

/bin/sed -i -e 's/^.*\(mssql\.datetimeconvert\).*/\1 = Off/' /etc/php5/*/php.ini

Installation du module php5-oci8

Attention : L'installation du client Oracle nécessite un minimum de 256 Mo de RAM.

Installation des pré-requis

En premier lieu, installez les logiciels nécessaires à la compilation du module php5-oci8 :

/usr/bin/apt-get install php5-dev php-pear make bc libaio1 \
                         curl x11-utils unzip ksh rpm

Nous initialisons la base de données de RPM :

/usr/bin/rpm --initdb

Nous créons les liens symbolique pour les applications dont Oracle est incapable de détecter le chemin :

/bin/ln -s /usr/bin/rpm /bin/rpm
/bin/ln -s /usr/bin/awk /bin/awk

L'installation d'Oracle nécessite la création de nouveaux groupes et utilisateurs.

/usr/sbin/addgroup --system oinstall
/usr/sbin/addgroup --system dba
/usr/sbin/adduser --system --shell /bin/bash --home /opt/oracle --ingroup oinstall oracle
/usr/sbin/adduser oracle dba

L'utilisateur nobody est aussi nécessaire, mais il est déjà disponible sur un système debian de base, comme indiqué par la commande :

id nobody

Une fois ceci fait, nous créons le dossier destiné à contenir l'installation d'oracle (et les bibliothèques partagées) :

/bin/mkdir --parent /opt/oracle/app
/bin/chown -R oracle:oinstall /opt/oracle
/bin/chmod 775 /opt/oracle/app

Nous assignons temporairement un mot de passe à l'utilisateur oracle de façon à pouvoir l'utiliser lors d'une connexion SSH :

passwd oracle

Téléchargement de l'installeur d'Oracle

Obtenez la dernière version du client Oracle pour GNU/Linux amd64 en le téléchargeant depuis la page :

Oracle Database Software Downloads

Remarque : Il est nécessaire de s'inscrire pour télécharger l'installeur :(.

Une fois inscrit, si vous souhaitez télécharger l'installeur depuis le serveur cible.

L'installation d'Oracle nécessite la présence d'un serveur X (kof). Ne souhaitant pas mettre en place un serveur X sur le serveur de base de données (parceque faut pas déconner non plus), nous allons établir un tunnel SSH avec support du protocole X11 depuis notre machine de bureau, disposant d'un serveur X, vers le serveur ou sera installé la base de donnée Oracle.

Identifiez-vous comme l'utilisateur oracle sur le serveur en utilisant cette ligne de commande :

/usr/bin/ssh -Y -C oracle@www.mon-serveur-php.com

Remarque : L'option -C compresse la connexion, et l'option -Y va nous permettre d'utiliser des programmes nécessitant X via la connexion SSH : C'est indispensable pour lancer l'installation d'Oracle.

Renseignez vos identifiants pour le site Oracle :

ORACLE_USERNAME=email@domain.com
ORACLE_PASSWORD=my-password

Nous récupérons l'IP de la connexion Internet serveur :

IP_ADDRESS=$(/usr/bin/wget -q http://www.monip.org/ -O- \
    | /bin/grep "IP :" | /usr/bin/cut --characters=-80 \
    | /bin/sed -e 's/^.* \(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*$/\1/')

Nous renseignons le nom du fichier que nous souhaitons télécharger :

  • Pour la version amd64 :

    FILENAME=linux.x64_11gR1_client.zip
  • Pour la version i386 :

    FILENAME=linux_11gR1_client.zip

Nous utilisons curl pour nous identifier sur le serveur Oracle, et télécharger l'installeur :

/usr/bin/curl --data-urlencode "remoteIp=${IP_ADDRESS}" \
              --data-urlencode 'globalId=' \
              --data-urlencode "redirectUrl=http://download-llnw.oracle.com/otn/linux/oracle11g/${FILENAME}" \
              --data-urlencode "onFailRedirectUrl=/jsp/realms/otnWrongPassword.jsp?nexturl=http://download-llnw.oracle.com/otn/linux/oracle11g/${FILENAME}" \
              --data-urlencode "username=${ORACLE_USERNAME}" \
              --data-urlencode "password=${ORACLE_PASSWORD}" \
              --data-urlencode "submit=Continue" \
              --referer "http://profile.oracle.com/jsp/realms/otnLogin.jsp?remoteIp=${IP_ADDRESS}&globalId=&redirectUrl=http%3a%2f%2fdownload-llnw.oracle.com%3a80%2fotn%2flinux%2foracle11g%2f${FILENAME}" \
              --user-agent 'Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1' \
              --location --cookie-jar /tmp/cookie.jar \
              --output "/opt/oracle/${FILENAME}" \
              https://profile.oracle.com/jsp/reg/loginHandler.jsp

Nous décompressons le fichier téléchargé :

/usr/bin/unzip -d "/opt/oracle" "/opt/oracle/${FILENAME}"

Remplacez le binaire unzip fourni avec le client Oracle par celui du système :

/bin/mv /opt/oracle/client/install/unzip /opt/oracle/client/install/unzip.back
/bin/ln -s /usr/bin/unzip /opt/oracle/client/install/unzip

Nous renseignons le nom des dossiers destinés à contenir l'installation d'Oracle :

export ORACLE_BASE=/opt/oracle/app/oracle

Lancez l'installation :

/opt/oracle/client/runInstaller -ignoreSysPrereqs
  • Étape 1 : Cliquez sur suivant.
    Installation du client : étape 1
  • Étape 2 : Cliquez sur suivant.
    Installation du client : étape 2
  • Étape 3 : Sélectionner l'installation "Runtime" (nécessaire pour compiler le module oci8 de PHP), et cliquez sur suivant.
    Installation du client : étape 3
  • Étape 4 : Cliquez sur suivant.
    Installation du client : étape 4
  • Étape 5 : Cliquez sur suivant.
    Installation du client : étape 5
  • Étape 6 : Cliquez sur suivant.
    Installation du client : étape 6
  • Étape 7 : Cette étape apparait après l'installation du client. Elle lance un assistant de configuration.
    Installation du client : étape 7
  • Étape 8 : Dans la fenêtre "popup", cliquez sur suivant.
    Configuration du client : étape 1
  • Étape 9 : Dans la fenêtre "popup", cliquez sur terminer.
    Configuration du client : étape 2
  • Étape 10 : Ignorez ce message et l'erreur associée, nous verrons cela dans la suite de ce guide. Cliquez sur "Ok".
    Installation du client : étape 7 - dialogue
  • Étape 11 : Cliquez sur Quitter.
    Installation du client : étape 8

A la fin de l'installation "graphique", exécutez la commande suivante pour compléter l'installation :

/bin/su -c "/opt/oracle/app/oracle/product/11.1.0/client_1/root.sh"

Une fois ceci fait, ajoutez les paramètre nécessaires à Oracle à votre fichier /etc/profile :

/bin/su -c "/bin/echo '# Oracle environment settings.
export ORACLE_OWNER=\"oracle\"
export TNS_ADMIN=\"/etc/oracle\"
export ORACLE_HOME=\"/opt/oracle/app/oracle/product/11.1.0/client_1\"
PATH=\"\${PATH}:/opt/oracle/app/oracle/product/11.1.0/client_1/bin\"' >> /etc/profile"

Nous avons terminé l'installation du client Oracle, il nous faut maintenant compiler le module oci8 pour PHP. Mais avant tout, il faut désactiver le mot de passe du compte oracle pour éviter les problèmes de sécurité :

/bin/su -c "passwd --lock oracle"

Installation du module OCI8 à l'aide de PECL

Vous devez en premier lieu vous identifier en tant que "root" :

/bin/su -

 

Précédement, ce guide préconisait l'installation d'OCI8 en recompilant complètement les source de PHP5. PECL s'étant énormément développé depuis la première version de ce guide, le voici mis à jour. Commencez par mettre à jour les "canaux" PECL :

/usr/bin/pear update-channels
/usr/bin/pear upgrade-all
/usr/bin/pecl update-channels
/usr/bin/pecl upgrade-all

Une fois la mise à jour effectuée, obtenez l'emplacement du client Oracle, que vous devrez spécifier lors de l'installation par PECL :

/bin/echo $(find /opt/oracle/app/oracle/product/11.1.0/ -type d -name 'client_*' | sort --reverse | head --lines=1)

Sur ma configuration, cette valeur est : /opt/oracle/app/oracle/product/11.1.0/client_1

Installez oci8 :

/usr/bin/pecl install oci8

Activez maintenant le module oci8 :

/bin/echo "extension=oci8.so" | /usr/bin/tee /etc/php5/conf.d/oci8.ini

Et redémarrez votre serveur HTTP :

test -x /etc/init.d/apache2 && /etc/init.d/apache2 force-reload
test -x /etc/init.d/lighttpd && /etc/init.d/lighttpd force-reload

Configuration d'Apache 2

Vous devez configurer Apache 2 (s'il s'agit du serveur HTTP que vous utilisez) pour que le module soit fonctionnel. En premier lieu, détectez l'emplacement de votre installation du client Oracle :

ORACLE_CLIENT=$(find /opt/oracle/app/oracle/product/11.1.0/ -type d -name 'client_*' | sort --reverse | head --lines=1)

Mettez en place la configuration d'Oracle dans l'environnement d'Apache :

/bin/echo "# Oracle environment
export ORACLE_HOME=\"${ORACLE_CLIENT}\"
export LD_LIBRARY_PATH=\"\${ORACLE_HOME}/lib:\${LD_LIBRARY_PATH}\"
export TNS_ADMIN=\"/etc/oracle\"
export NLS_LANG=\"AMERICAN_AMERICA.UTF8\"" \
    | /usr/bin/tee -a /etc/apache2/envvars

Redémarrez votre serveur Apache 2 :

/etc/init.d/apache2 restart

Configuration d'une base de donnée

Remarque : Cette étape, bien que non obligatoire, est fortement recommandée. Elle peut résoudre de nombreux problèmes de connexion.

Nous créons le dossier de configuration du client Oracle si nécessaire :

/bin/mkdir --parent /etc/oracle

Nous renseignons les paramètres de notre base de données :

ORA_HOST=oracle-server-name
ORA_PORT=1521
ORA_DB=DATABASE_NAME

Et nous créons le fichier de configuration du client Oracle en utilisant ces paramètres :

/bin/echo "$ORA_DB = (DESCRIPTION =
                (ADDRESS_LIST = (
                        ADDRESS = (PROTOCOL = TCP)(HOST = $ORA_HOST)(PORT = $ORA_PORT)
                ))
                (CONNECT_DATA = (SERVICE_NAME = $ORA_DB))
        )" | /usr/bin/tee -a /etc/oracle/tnsnames.ora

Remarque: Vous pouvez utiliser les deux dernières commandes plusieurs fois si vous disposez de plusieurs bases de données et/ou serveurs.

Si tout s'est bien passé, vous pouvez maintenant utiliser les clients Oracle (sqlplus pour n'en citer qu'un) et le module php5-oci8 sans problème sur votre serveur.

Installation du module php5-oci8 sur i386

Attention : L'installation du client Oracle nécessite un minimum de 256 Mo de RAM.

Installation des pré-requis

En premier lieu, installez les logiciels nécessaires à la compilation du module php5-oci8 :

/usr/bin/apt-get install php5-dev php-pear make

Installation du client Oracle

Nous ajoutons les dépôts Oracle à notre configuration apt :

/bin/echo "# Oracle repositories for debian unstable
deb http://oss.oracle.com/debian unstable main non-free" \
     | /usr/bin/tee /etc/apt/sources.list.d/unstable-oracle.list

Nous téléchargeons la clef signant ces dépôts.

/usr/bin/wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle  -O- |  /usr/bin/apt-key add -

Nous mettons à jour la liste des paquets disponibles

/usr/bin/apt-get update

Enfin, nous installons le client Oracle nécessaire à la compilation de php5-oci8:

/usr/bin/apt-get install oracle-xe-client

Nous pouvons maintenant passer à l'étape suivante.

Installation du module OCI8 à l'aide de PECL

Au précédent, ce guide préconisait l'installation d'OCI8 en recompilant complètement les source de PHP5. PECL s'étant énormément développé depuis la première version de ce guide, le voici mis à jour. Commencez par mettre à jour les "canaux" PECL :

/usr/bin/pear update-channels
/usr/bin/pear upgrade-all
/usr/bin/pecl update-channels
/usr/bin/pecl upgrade-all

Une fois la mise à jour effectuée, obtenez l'emplacement du client Oracle, que vous devrez spécifier lors de l'installation par PECL :

/bin/echo $(find /usr/lib/oracle/xe/app/oracle/product/ -name 'client' | sort --reverse | head --lines=1)

Sur ma configuration, cette valeur est : /usr/lib/oracle/xe/app/oracle/product/10.2.0/client

Et installez oci8 :

/usr/bin/pecl install oci8

Activez maintenant le module oci8 :

/bin/echo "extension=oci8.so" | /usr/bin/tee /etc/php5/conf.d/oci8.ini

Et redémarrez votre serveur HTTP :

test -x /etc/init.d/apache2 && /etc/init.d/apache2 force-reload
test -x /etc/init.d/lighttpd && /etc/init.d/lighttpd force-reload

N'oubliez pas de mettre en place la configuration nécessaire d'Apache et de votre environnement utilisateur (voir plus haut).

Remerciements

Images

Problème pour récupérer les paquets nécessaires à la compilation du paquet PHP 5

Posté par Matthieu B. le 15/05/2008 13:30
Bonjour Pierre-Yves,
Je tiens tout d'abord à vous remercier pour votre tutorial, car MSSQL c'est un vrai sport.
J'ai donc essayé de suivre vos indications pour compiler mon propre paquet php5-mssql, mais j'ai un problème de dépendances dû au fait que je n'arrive pas à télécharger les paquets nécessaires à la compilation du paquet PHP 5, j'obtiens l'erreur suivante:

-------------------------------------------------------------------------
root@Station-10:~/SOURCES/php5-5.2.6# /usr/bin/apt-get build-dep php5
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Aucune version du paquet libmysqlclient14-dev n'est disponible, mais il existe dans la base
de données. Cela signifie en général que le paquet est manquant, qu'il est devenu obsolète
ou qu'il n'est disponible que sur une autre source
Cependant les paquets suivants le remplacent :
libalps-heap1-dev
E: Aucun paquet ne correspond au paquet libmysqlclient14-dev
E: Impossible de satisfaire les dépendances Build-Depends pour php5 : libmysqlclient14-dev
-------------------------------------------------------------------------

Je dois avouer ne pas trop savoir quoi faire pour les récupérer, auriez vous une piste à me proposer ?
Je vous remercie d'avance.


sources de PHP5 ?

Posté par Pierre-Yves Landuré le 15/05/2008 13:49
Bonjour,

ils semblent que vos sources de PHP5 ne soient pas celle fournie par Debian 4.0 Etch (en version 5.2.0 normallement). Vous vous éloignez donc des paramètres de ce guide. Cependant, mon conseil est de modifier le fichier debian/conrol et remplacer libmysqlclient14 par libmysqlclient15.

Bon courage.

php5-5.2.6

Posté par Matthieu B. le 16/05/2008 08:45
En effet, la commande $>/usr/bin/apt-get source php5 me rapatrie les sources de php5-5.2.6, pourtant je suis bien sur une Debian 4.0 Etch.

J'ai essayé comme vous me l'avez conseillé de changer libmysqlclient14 par libmysqlclient15 dans le ficher debian/control, mais j'ai toujours mes problèmes de dépendances:
----------------------------------------------------------------------------
root@Station-10:~/SOURCES/php5-5.2.6# /usr/bin/dpkg-buildpackage -rfakeroot
dpkg-buildpackage: source package is php5
dpkg-buildpackage: source version is 5.2.6-0.dotdeb.1
dpkg-buildpackage: source changed by Guillaume Plessis <gui@php.net>
dpkg-buildpackage: host architecture i386
dpkg-buildpackage: source version without epoch 5.2.6-0.dotdeb.1
dpkg-checkbuilddeps : dépendances de construction non trouvées : apache-dev (>= 1.3.23) apache2-prefork-dev (>= 2.0.53-3) automake1.4 bison chrpath flex (>= 2.5.4) libaspell-dev libbz2-dev (>= 1.0.0) libc-client-dev libcurl3-dev libdb4.2-dev libgmp3-dev libkrb5-dev libldap2-dev libmcal0-dev (>= 0.6) libmcrypt-dev libmhash-dev (>= 0.8.8) libming-dev libncurses5-dev libpam0g-dev libpcre3-dev (>= 4.3-1) postgresql-dev libpspell-dev libreadline5-dev librecode-dev libsablot0-dev (>= 0.96) libsasl2-dev libsnmp5-dev libsqlite0-dev libsqlite3-dev libssl-dev (>= 0.9.6) libt1-dev libtidy-dev libtool (>= 1.4.2-4) libwrap0-dev libxmltok1-dev libxslt1-dev (>= 1.0.18) libzzip-dev re2c unixodbc-dev
dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting.
dpkg-buildpackage: (Use -d flag to override.)
----------------------------------------------------------------------------

Le copier/coller n'est pas très joli, mais dès fois que ca vous aide.

Ce que je ne comprends non plus, c'est qu'initialement, j'avais instalé le paquet php5-sybase, du coup je peux bien appeler les fonctions mssql de php, mais je n'arrive pas à me connecter au serveur SQL Server du réseau:
Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: Station-2 in /home/noticias/raid1/matt/mssql.php on line 5
Alors qu'en utilisant EasyPHP sur une autre machine, cela ne pose pas de problème (ce n'est pas un problème de port du serveur).
Comme je le disais plus haut c'est un vrai sport ;)

Serveur

Posté par lwolf le 16/05/2008 09:22
Bonjour,

Essayez de faire : ping Station-2 depuis votre serveur PHP. Normallement, si je devine bien, cela ne fonctionnera pas. Il vous faut ajouter la ligne adéquate à votre fichier /etc/hosts pour que cela fonctionne.

Pour ce qui est de PHP 5, vous récupérez les sources de dotdeb, et non de Debian Etch.

Ping

Posté par Matthieu B. le 16/05/2008 09:36
Merci de répondre si vite, et je tiens à m'excuser de "polluer" votre tuto de mes commentaires un peu à coté de la plaque.
Pour te répondre lwolf, j'ai fait un ping de la Station-2 depuis mon Serveur (Apache) et ca fonctionne bien.
Concernant les sources il y a un moyen de forcer la manip pour récupérer les sources Debian Etch et non celles de dotdeb, avec la commande $>/usr/bin/apt-get source php5 ?

sources

Posté par lwolf le 16/05/2008 09:39
Le plus simple et sûr c'est de retirer les lignes dot deb de votre /etc/apt/sources.list (ou du dossier /etc/apt/sources.list.d selon la manière dont elle sont configurées).

Sources

Posté par Matthieu B. le 16/05/2008 12:55
J'ai commenté les lignes associées à dotdeb dans mon source.list et j'ai ainsi pu suivre les étapes du tuto correctement, cependant j'ai un problème lors de la compilation du paquet mssql. Je vais essayer de trouver le problème par moi-même, en tout cas je vous beaucoup pour votre aide. Je reviendrai vous tenir au courant si je trouve le pourquoi du comment ;)
Bonne continuation

blogs@oncle-tom.net

Posté par Oncle Tom le 01/09/2008 15:27
Bonjour,

j'ai suivi la procédure (en prenant garde à remplacer les * par le numéro de version installé) mais la compilation se bloque subitement après plusieurs minutes :
<code>dpkg-shlibdeps: échec: pas d'information de dépendance trouvée pour /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib/libclntsh.so.10.1 (utilisé par debian/php5-oci8/usr/lib/php5/20060613+lfs/oci8.so).
dh_shlibdeps: command returned error code 512
make: *** [binary-arch] Erreur 1
dpkg-buildpackage: échec: debian/rules binary a produit une erreur de sortie de type 2</code>

Problème : si je fais un `head /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib/libclntsh.so.10.1` j'ai bien un retour ...

J'ai essayé de compléter votre procédure par celle-ci (http://guim.info/dokuwiki/debian:php-oracle), au niveau de l'export des variables mais sans succès. Et quand je fais un sudo -s, j'ai ce message : [quote]ERROR: ld.so: object 'libclntsh.so.10.1' from LD_PRELOAD cannot be preloaded: ignored.[/quote].
J'imagine que c'est lié mais je ne trouve pas :-/

Merci d'avance

hum, aucune idée

Posté par Pierre-Yves Landuré le 01/09/2008 15:40
Ca ressemble à un problème d'installation du client oracle.. Donc, un problème possible avec les paquets fournit par Oracle, j'essairais de regarder quand j'aurai quelque minutes, mais je ne trouverais probablement pas de solution.


:'(

Posté par Oncle Tom le 01/09/2008 15:51
Merci pour cette réponse, rapide de surcroît. C'est vraiment dommage si ça vient du côté d'Oracle ou du packaging ... j'avais choisi Debian pour la stabilité :-/

Dans le fichier debian/rules, la seule ligne ajoutée est ` --with-oci8=shared,/usr/lib/oracle/xe/app/oracle/product/10.2.0/client \` ... j'ai quand même peine à croire que ça pose problème :-/

Merci en tous cas

Résolu !

Posté par Oncle Tom le 01/09/2008 16:57
En utilisant instantclient : http://ubuntuforums.org/showthread.php?t=637158 :)

php-oci8 problème

Posté par Marc le 22/10/2008 15:10
Pour régler le problème de librairies au redemarrage d'apache2, j'ai juste rajouté 2 liens symboliques (sans toucher aux variables d'env.) :

ln -s /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib/libclntsh.so.10.1 /usr/lib/libclntsh.so.10.1
ln -s /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib/libnnz10.so /usr/lib/libnnz10.so

Si ça peut aider quelqu'un ..

Un grand merci

Posté par yann le 14/10/2009 16:04
Tout nouveau dans l'univers linux ainsi que celui de la base de donnée, cet article m'a sauvé de pas mal de nuit blanche.
Merci beaucoup. Certains scripts sont encore du chinois pour moi mais au final ca fonctionne ^^

BlogBang
Navigation
 

Réalisé avec Plone

Ce site respecte les normes suivantes :

Wikio