Oracle Instant Client
+
Par Remi le samedi 24 juin 2006, 09:59 - Archives - Lien permanent
A short guide to build RPM of new Oracle Instant Client version 10.2.0.2 as they are no more availaible on the official Oracle web site.
Un petit guide pour construire les RPM du nouveau Oracle Instant Client version 10.2.0.2 puiqu'ils ne sont plus disponibles sur le site officiel d'Oracle.
L'installation de Oracle Instant Client est certainement la solution la plus simple de disposer d'un accès aux bases Oracle depuis un client Unix/Linux/Windows/MacOS. Jusqu'à la version 10.2.0.1, Oracle fournissait directement des RPM utilisables sous Fedora. Depuis la sortie des nouvelles versions, seules les archives aux formats ZIP sont disponibles sur le site.
Bien sur l'idéal serait que je puisse mettre les RPM sur mon dépôt, cependant, la licence d'utilisation ne me le permet sans doute pas.
Voici donc une petit guide, que j'espère trés simple, qui vous permettra de les construire vous même.
Préparez un environnement de construction
Faut-il encore rappeler que les RPM ne doit jamais être construit sous le compte administrateur ?
Tutorial : RPM : environnement de construction
Téléchargez les archives depuis le site officiel
Adresse : http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html
Récupérez et enregistrez dans votre dossier SOURCES:
- instantclient-basic-linux32-10.2.0.2-20060331.zip (33 Mo)
- instantclient-jdbc-linux32-10.2.0.2-20060331.zip (1,4 Mo)
- instantclient-sqlplus-linux32-10.2.0.2-20060331.zip (0,7 Mo)
- instantclient-sdk-linux32-10.2.0.2-20060331.zip (0,6 Mo)
- instantclient-odbc-linux32-10.2.0.2-20060331.zip (0,3 Mo)
N.B. pour les versions 64 bits, il faut prendre les instantclient-*-linux-x86-64-10.2.0.2-20060228.zip
Installez les soures du RPM
Enregistrez le fichier oracle-instantclient-10.2.0.2-3.fc6.remi.nosrc.rpm dans un dossier et installez le :
rpm -ivh oracle-instantclient-10.2.0.2-3.fc6.remi.nosrc.rpm
Le fichier oracle-instantclient.spec sera enregistré dans votre dossier SPEC.
Les directives de construction du RPM suivent la même stratégie qu'Oracle dans les anciennes versions , c'est à dire que les entêtes (fichiers .h) sont enregistrées dans le dossier /usr/include/oracle/10.2.0.2/client et les bibliothèques dans le dossier /usr/lib/oracle/10.2.0.2/client/lib. Par contre la configuration de l'éditeur de lien dynamique est modifiée pour trouver ces bibliothèques.
Lancez la construction
Depuis votre dossier $HOME: vérifier que le fichier .rpmmacros ne contienne pas la directive :
%__arch_install_post /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
Si elle est présente, commentez là (insérez un # en début de ligne) pour cette opération.
Depuis votre dossier SPEC :
rpmbuild -bb oracle-instantclient.spec
Vous devez obtenir les RPM attendus dans le dossier RPMS/i386:
- oracle-instantclient-basic-10.2.0.2-1.fc5.remi.i386.rpm
- oracle-instantclient-devel-10.2.0.2-1.fc5.remi.i386.rpm
- oracle-instantclient-jdbc-10.2.0.2-1.fc5.remi.i386.rpm
- oracle-instantclient-odbc-10.2.0.2-1.fc5.remi.i386.rpm
- oracle-instantclient-sqlplus-10.2.0.2-1.fc5.remi.i386.rpm
Installez et utilisez vos RPM
Vous pouvez maintenant les installer et les utiliser. Par exemple pour avoir Accès aux bases de données Oracle en PHP
Comme toujours n'hésitez pas à me faire part de vos remarques.
Commentaires
Bonjour,
J'ai suivi la procédure mais lors du build je tombe sur des erreurs de check-rpaths, dont:
ERROR 0002: file '/usr/lib/oracle/10.2.0.2/client/lib/libsqlplusic.so' contains an invalid rpath '/ade/aime_sqlplus_28151/oracle/lib' in [/ade/aime_sqlplus_28151/oracle/lib]
Ce qui est logique, vu que je n'ai pas de /rep "/ade/"
je suis sencé avoir ce /rep ?
Ma config: FC5 apache php mysql natif, et je voudrais pouvoir me connecter a un oracle sur un serveur distant
Edwin,
FC4 avec les mêmes besoins que toi (conserver l'existant + ajouter oci), j'ai contourné en exécutant la commande suivante (force à ne pas tenir compte des alertes) :
QA_RPATHS=$[ 0002 ] rpmbuild -bb SPECS/oracle-instantclient.spec
ensuite il a fallu récupérer les libstdc++.so.5 (compat-libstdc++-33-3.2.3-47.fc4.i386.rpm via rpmfind.net).
Ensuite les rpm se sont installés simplement.
Maintenant place à la génération du rpm php à partir du src...
j'ai le meme problème qu'edwin, je n'ai pas pu construire les rpm instantclient-10.2.0.2 (meme erreurs)
Pour edwin et guelpetch : pour le problème du rpath, je viens d'ajouter à la fiche la nécessité de commenter la directive d'invocation du "check-rpaths".
Pour Marc : pourquoi recompiler php, puisque les RPM sont directement disponibles dans mon dépôt ?
A+
En fait je tente la compilation par curiosité et dans un but d'auto-formation. Mais étant donné que je tombe systématiquement sur cette erreur, je vais suivre ton conseil et me ruer vers ton dépôt.
Erreur de construction de RPM:
Ne peut ouvrir le fichier donné à %files /home/marc/rpmbuild/BUILD/php-5.0.4/files.oci8: Aucun fichier ou répertoire de ce type
Merci pour le contenu de tes fiches.
Si tu n'existais pas ...
Les rpm instantclient 10.2.0.2 fonctionnent bien!
Merci
J'ai suivit vorte tutorial avec succes et je tenais a vous remercier pour cette source d'information tres bien documenté et claire.
Mais ils me reste un probleme PHP est bien configuré pour l'extension oci8 et ca marche mais j'ai la totalité de mes scripts qui tournent avec l'extention oracle.
Est t'il possible d'avoir la marche a suivre pour qu'elle soit aussi reconnu par php
bonjour rémi,
voici mon probleme quand je fais le make install pour compiler php
Installing PHP SAPI module: apache2handler
/usr/local/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/apache2/build/libtool' libphp4.la /usr/local/apache2/modules
/usr/local/apache2/build/libtool --mode=install cp libphp4.la /usr/local/apache2/modules/
cp .libs/libphp4.so /usr/local/apache2/modules/libphp4.so
cp .libs/libphp4.lai /usr/local/apache2/modules/libphp4.la
libtool: install: warning: remember to run `libtool --finish /usr/local/install/php-4.4.2/libs'
chmod 755 /usr/local/apache2/modules/libphp4.so
[activating module `php4' in /usr/local/apache2/conf/httpd.conf]
Installing PHP CLI binary: /usr/local/bin/
Installing PHP CLI man page: /usr/local/man/man1/
Installing PEAR environment: /usr/local/share/pear/
/usr/local/install/php-4.4.2/sapi/cli/php: relocation error: /usr/lib/oracle/10.2.0.2/client/lib/libclntsh.so.10.1: symbol semtimedop, version GLIBC_2.3.3 not defined in file libc.so.6 with link time reference
make[1]: *** [install-pear-packages] Erreur 127
make: *** [install-pear] Erreur 2
as-tu une idée du problème ?? j'ai installé oracle instant avec ton tutorial sur la construction des rpm...
merci d'avance
Pour Laurent : php-oracle est obslète. Il faut désormais utiliser la version php-oci8.
Pour benito : pourquoi compiler PHP, les RPM sont disponibles.
A+
salut Rémi,
quand je tente d'installer ton rpm php-oci voici l'erreur :
warning: php-oci8-4.3.9-2.2.el4.i386.rpm: V3 DSA signature: NOKEY, key ID e42d547b
error: Failed dependencies:
php = 4.3.9 is needed by php-oci8-4.3.9-2.2.el4
si je tente de l'installer avec --nodeps il me dit qu'il est déja installé, mais dans le phpinfo() je n'ai pas de rubrique oci8...
que dois-je faire ??? merci !
php-oci8-4.3.9-2.2.el4 n'est pas un de mes RPM.
Je ne connais pas les dépendances de cette version et je vais difficilement pouvoir t'aider (il faut utiliser la bonne version des clients Oracle).
L'uilisation de --nodeps est une trés mauvaise idée (rien de tel pour casser une machine)
Que retournes "rpm -qa php\*" ?
Si l'extension php est présente mais ne se charge pas, consulte les traces d'apache (/var/log/httpd/error_log) tu y trouveras surement une explilcation.
Consultes aussi la fiche remi.collet.free.fr/index... pour vérifier ton installation.
A+
Bonjour,
Depuis quelques temps, je cherche à compiler le support d'oracle sous php sur une redhat9.
N'ayant pas pu inclure le support d'oracle dans php4.4.4 après des dizaines de tentatives infructueuses, je cherche à l'inclure sous php5.2.0.
J'ai suivi les instructions susmentionnées pour construire les rpm d'oracle et je dispose maintenant des rpms suivantes:
oracle-instantclient-basic-10.2.0.2-2.i686.rpm
oracle-instantclient-devel-10.2.0.2-2.i686.rpm
oracle-instantclient-jdbc-10.2.0.2-2.i686.rpm
oracle-instantclient-odbc-10.2.0.2-2.i686.rpm
oracle-instantclient-sqlplus-10.2.0.2-2.i686.rpm
installées sur mon serveur.
Lors de la dernière recompilation réussie de php5.2.0, j'obtient le message suivant à l'exécution d'un script php depuis la console:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/20060613/oci8.so' - /usr/lib/oracle/10.2.0.2/client/lib/libclntsh.so.10.1: symbol semtimedop, version GLIBC_2.3.3 not defined in file libc.so.6 with link time reference in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/20060613/pdo_oci.so' - /usr/lib/oracle/10.2.0.2/client/lib/libclntsh.so.10.1: symbol semtimedop, version GLIBC_2.3.3 not defined in file libc.so.6 with link time reference in Unknown on line 0
Merci d'avance.
La version de glibc utilisée semble clairement obsolète pour faire tourner le client Oracle. Laisse tomber RH9. Passe sur quelque chose de plus récent. Par exemple une Fedora > 3, et comme cela tu trouveras directement tous les RPM que tu veux, ici par exemple.
Quelques notes et un nouveau fichier spec fonctionnant sous x86_64.
en tapant yum --enablerepo=remi install php-oci8 php-pdo
j ai ca en fin
--> Processing Dependency: libclntsh.so.10.1 for package: php-oci8
--> Finished Dependency Resolution
Error: Missing Dependency: libclntsh.so.10.1 is needed by package php-oci8
et j ai installé la librairie avec
rpm -ivh oracle-instantclient-10.2.0.2-3.fc6.remi.nosrc.rpm
Non, tu n'as pas installé la bibliothèque (qui est la bonne traduction de library, une librairie c'est autre chose), juste les sources nécessaires à la construction des RPM (fichier .src.rpm).
Il faut lire le billet en entier.
Tu peux aussi essayer de prendre la version Oracle Database 10g Express Client (oracle-xe-client).
A+
j'ai toujours la meme erreur en changant de rpm oracle
et j'ai bien mis
"export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client/lib
export NLS_LANG=FRENCH_FRANCE.AL32UTF8
export TNS_ADMIN=/etc/oracle
"~
dans le /etc/sysconfig/httpd
J'ai toujours ca a la fin du "yum --enablerepo=remi install php-oci8 php-pdo"
--> Processing Dependency: libclntsh.so.10.1 for package: php-oci8
--> Finished Dependency Resolution
Error: Missing Dependency: libclntsh.so.10.1 is needed by package php-oci8
merci d avance
Le oracle-xe-client ne fournit pas ce qu'il faut et ne permet donc pas de résoudre correctement les dépendances. Cependant il fonctionne, mais il faut bricoler.
Dans le fichier /etc/sysconfig/http, il faut mettre
export LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib
Et il faut installer manuellement le RPM sans tenir compte des dépendances
service httpd stop yum --enablerepo=remi install php-pdo wget http://remi.collet.free.fr/rpms/fc6.i386/php-oci8-5.2.0-4.fc6.remi.i386.rpm rpm -ivh --nodeps php-oci8-5.2.0-4.fc6.remi.i386.rp service httpd start
Je vais noter tout cela sur le billet.
A+
Perso je n'aime pas trop le client XE, leurs scripts d'installation me semble tordu, et seule la version i386 est disponible (et j'utilise désormais de préférence les versions x86_64).
Billet archivé, voir Oracle Instant Client 10.2.0.3 on x86_64