Tornado e cx_Oracle no Python 2.6 em CentOS 5 com Oracle Instant Client

A instalação do CentOS utilizada para escrever este post é resultado dos procedimentos publicados no post Como criar uma máquina virtual no servidor Xen Centos 5 e instalar o CentOS pela rede e a instalação do Tornado, bem como do Python 2.6, que é pré-requisito para o Tornado que não está disponível no CentOS 5.8 é resultado dos procedimentos publicados no post Configurar o CentOS 5 para suporte ao Tornado no Python 2.6, os dois aqui mesmo na Compostagem Digital, portanto para ter uma instalação como esta de uma conferida neles.

Continuando …

Para instalar o Oracle Instant Client precisamos baixar os pacotes Basic e SDK do Oracle Instant Client da própria Oracle, veja como fazer isto neste meu outro post Como configurar o PHP com suporte Oracle no Fedora – extension oci8, não é necessário ler o artigo inteiro, já na primeira parte há a explicação de como proceder para realizar o download do Oracle Instant Client e isto é o suficiente para você ter sucesso nesta primeira etapa e depois voltar pra cá, que estou te esperando.

Considerando que tu já fez o download do Oracle Instant Client, vou começar a mostrar como instalar e configurar o ambiente.

Comece pela instalação do pacote Oracle Instant Client Basic, com o comando abaixo:

yum install --nogpgcheck oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm

O parâmetro –nogpgcheck ignora a checagem da assinatura do pacote.

Se tudo correu bem, algo como isto abaixo deve estar sendo exibido na sua tela:

Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: centos.pop.com.br
 * epel: mirror.cogentco.com
 * extras: centos.pop.com.br
 * updates: centos.pop.com.br
Setting up Install Process
Examining oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm: oracle-instantclient11.2-basic-11.2.0.3.0-1.i386
Marking oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package oracle-instantclient11.2-basic.i386 0:11.2.0.3.0-1 set to be updated
--> Finished Dependency Resolution
 
Dependencies Resolved
 
===========================================================================================================================================
 Package                                Arch         Version               Repository                                                 Size
===========================================================================================================================================
Installing:
 oracle-instantclient11.2-basic         i386         11.2.0.3.0-1          /oracle-instantclient11.2-basic-11.2.0.3.0-1.i386         168 M
 
Transaction Summary
===========================================================================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)
 
Total size: 168 M
Is this ok [y/N]: y

Alí em cima pressione “y” para instalar.

Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : oracle-instantclient11.2-basic                                                                                      1/1 
 
Installed:
  oracle-instantclient11.2-basic.i386 0:11.2.0.3.0-1                                                                                       
 
Complete!

Terminado a instalação do pacote Oracle Instant Client Basic, repita a operação para instalar o pacote Oracle Instant Client Devel,como segue:

yum install --nogpgcheck oracle-instantclient11.2-devel-11.2.0.3.0-1.i386.rpm

Tu deves estar vendo algo assim na console:

Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirror.linux.duke.edu
 * epel: mirror.cogentco.com
 * extras: centos.netnitco.net
 * updates: centos.digitalcompass.net
Setting up Install Process
Examining oracle-instantclient11.2-devel-11.2.0.3.0-1.i386.rpm: oracle-instantclient11.2-devel-11.2.0.3.0-1.i386
Marking oracle-instantclient11.2-devel-11.2.0.3.0-1.i386.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package oracle-instantclient11.2-devel.i386 0:11.2.0.3.0-1 set to be updated
--> Finished Dependency Resolution
 
Dependencies Resolved
 
===========================================================================================================================================
 Package                                Arch         Version               Repository                                                 Size
===========================================================================================================================================
Installing:
 oracle-instantclient11.2-devel         i386         11.2.0.3.0-1          /oracle-instantclient11.2-devel-11.2.0.3.0-1.i386         1.9 M
 
Transaction Summary
===========================================================================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)
 
Total size: 1.9 M
Is this ok [y/N]: y

De novo pressione o “y” para instalar e aguarde o término da instalação:

Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : oracle-instantclient11.2-devel                                                                                      1/1 
 
Installed:
  oracle-instantclient11.2-devel.i386 0:11.2.0.3.0-1                                                                                       
 
Complete!

Legal, simples até agora, não se preocupe, vai continuar sendo simples, siga em frente.

Crie um arquivo com o nome instantclient.sh e coloque o conteúdo que segue abaixo nele:

#!/bin/bash
export ORACLE_HOME=/usr/lib/oracle/11.2/client
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

É bom saber que o ORACLE_HOME pode ser diferente, pois tu podes ter instalado outra versão do Oracle Instant Client, para saber qual o caminho correto da tua instalação, use o famigerado comando ls como segue:

ls -l /usr/lib/oracle

Agora copie este arquivo instantclient.sh para a pasta /etc/profile.d:

cp instantclient.sh /etc/profile.d/

O que fizemos ai em cima é para dizer ao sistema operacional que ao abrir uma sessão de usuário ele deve atribuir as variáveis ORACLE_HOME e LD_LIBRARY_PATH, necessárias para o funcionamento do Oracle Instant Client.

Feche a sessão atual e faça login novamente para forçar o carregamento destes novos parâmetros.

Feito isto certifique-se que funcionou executando o comando abaixo e veja a saída, ela deve apontar para o caminho da instalação do Oracle Instant Client, conforme colocamos no arquivo instantclient.sh:

echo $ORACLE_HOME

A saída para o comando deve ser algo como isto abaixo se você tiver a mesma versão do Oracle Instant Client que eu usei.

/usr/lib/oracle/11.2/client

Joinha, mais um pouco eu te liberto desta saga, pois agora ainda temos que ajustar algumas configurações.

Crie o arquivo cx_Oracle.conf, com o conteúdo a seguir:

/usr/lib/oracle/11.2/client/lib

Ta bom, vou falar novamente, mas não esqueça por favor: O diretório acima na sua instalação pode ser outro.

Copie este arquivo para /etc/ld.so.conf.d/:

cp cx_Oracle.conf /etc/ld.so.conf.d/

Execute o comando abaixo para atualizar os paths das libs:

ldconfig

“Agora vem a parte mais fácil da história.”

Precisamos fazer o Python 2.6 acessar Oracle a partir do Oracle Instant Client, para realizar esta “mágica”, basta instalar a extensão cx_Oracle no Python 2.6.

Sempre é bom começar pelo básico, mas essencial, então faça download do cx_Oracle a partir do link abaixo:

Clique para baixar cx_Oracle

Para instalar a partir de um pacote tarball precisaremos compilar a extension cx_Oracle novamente, assim temos que ter certeza de que nosso ambiente pode fazer isto.

A sua vez é agora, tenha certeza de ter instalado o pacote de desenvolvimento do Python 2.6 e o compilador gcc, faça isto com o comando que segue:

yum install python26-devel gcc

Ok! Já sabemos que nosso ambiente será capaz de compilar a cx_Oracle e já fizemos o download, agora descompacte o arquivo do cx_Oracle:

tar zxvf cx_Oracle-5.1.1.tar.gz

Entre na pasta que tu acabou de extrair:

cd cx_Oracle-5.1.1

Agora agradeça o Guido van Rossum e depois execute o comando abaixo:

python26 setup.py install

Umas “coisas” como estas devem ter sido exibidas pra ti:

running install
running build
running build_ext
building 'cx_Oracle' extension
gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -D_GNU_SOURCE -fPIC -fwrapv -I/usr/kerberos/include -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/oracle/11.2/client -I/usr/include/python2.6 -c cx_Oracle.c -o build/temp.linux-i686-2.6-11g/cx_Oracle.o -DBUILD_VERSION=5.1.1
creating build/lib.linux-i686-2.6-11g
gcc -pthread -shared build/temp.linux-i686-2.6-11g/cx_Oracle.o -L/usr/lib/oracle/11.2/client/lib -L/usr/lib -lclntsh -lpython2.6 -o build/lib.linux-i686-2.6-11g/cx_Oracle.so
running install_lib
copying build/lib.linux-i686-2.6-11g/cx_Oracle.so -> /usr/lib/python2.6/site-packages
running install_egg_info
Writing /usr/lib/python2.6/site-packages/cx_Oracle-5.1.1-py2.6.egg-info

Caraca, agora já deve estar funcionado, vamos testar?

Execute os comandos abaixo, simples assim:

python26

Bem vindo ao Python 2.6:

Python 2.6.8 (unknown, Apr 12 2012, 20:59:00) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Tente importar o módulo, se não retornar nenhum erro sorria você está sendo filmado parabéns.

>>> import cx_Oracle
>>>

Meu serviço termina aqui, o seu deve estar só começando.

Lembrando, agora vou configurar este servidor para ser um proxy reverso Nginx, quando terminar faço referência aqui.

3 comentários sobre “Tornado e cx_Oracle no Python 2.6 em CentOS 5 com Oracle Instant Client”

  1. 3. Set the library loading path in your environment to the directory in Step 2 (“instantclient”). On many UNIX platforms, LD_LIBRARY_PATH is the appropriate environment variable. On Windows, PATH should be used.

Deixe uma resposta