Installer le support OCI8 pour PHP5 sur Debian 4.0 Etch et 5.0 Lenny
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.
- Étape 2 : Cliquez sur suivant.
- Étape 3 : Sélectionner l'installation "Runtime" (nécessaire pour compiler le module oci8 de PHP), et cliquez sur suivant.
- Étape 4 : Cliquez sur suivant.
- Étape 5 : Cliquez sur suivant.
- Étape 6 : Cliquez sur suivant.
- Étape 7 : Cette étape apparait après l'installation du client. Elle lance un assistant de configuration.
- Étape 8 : Dans la fenêtre "popup", cliquez sur suivant.
- Étape 9 : Dans la fenêtre "popup", cliquez sur terminer.
- Étape 10 : Ignorez ce message et l'erreur associée, nous verrons cela dans la suite de ce guide. Cliquez sur "Ok".
- Étape 11 : Cliquez sur Quitter.
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
- Merci à Oracle pour les paquets OCI8 et leur article Installing Oracle Database XE on Debian, Ubuntu and Kubuntu.
sources de PHP5 ?
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
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
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
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
Sources
Bonne continuation
blogs@oncle-tom.net
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
:'(
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 !
php-oci8 problème
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
Merci beaucoup. Certains scripts sont encore du chinois pour moi mais au final ca fonctionne ^^















Problème pour récupérer les paquets nécessaires à la compilation du paquet PHP 5
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.