Script Bash para executar “pecl install oci8”

3

Eu estou tentando criar um script de shell que fará o provisionamento inicial de um vm errante (rodando o Ubuntu 12.04). Tudo (instalando php, apache, oracle instantclient, etc,) funciona bem, exceto pela última etapa - instalando a extensão php oci8:

pecl install oci8

Quando eu executo este comando manualmente (com o prefixo sudo) ele funciona bem. Mas quando o script executa esse comando, ele falha assim:

running: make
/bin/bash /tmp/pear/temp/pear-build-rootG74SsU/oci8-2.0.6/libtool --mode=compile cc  -I. -I/tmp/pear/temp/oci8 -DPHP_ATOM_INC -I/tmp/pear/temp/pear-build-rootG74SsU/oci8-2.0.6/include -I/tmp/pear/temp/pear-build-rootG74SsU/oci8-2.0.6/main -I/tmp/pear/temp/oci8 -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64  -DHAVE_CONFIG_H  -g -O2   -c /tmp/pear/temp/oci8/oci8.c -o oci8.lo
libtool: compile:  cc -I. -I/tmp/pear/temp/oci8 -DPHP_ATOM_INC -I/tmp/pear/temp/pear-build-rootG74SsU/oci8-2.0.6/include -I/tmp/pear/temp/pear-build-rootG74SsU/oci8-2.0.6/main -I/tmp/pear/temp/oci8 -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -c /tmp/pear/temp/oci8/oci8.c  -fPIC -DPIC -o .libs/oci8.o
In file included from /tmp/pear/temp/oci8/oci8.c:48:0:
/tmp/pear/temp/oci8/php_oci8_int.h:60:17: fatal error: oci.h: No such file or directory
compilation terminated.
make: *** [oci8.lo] Error 1
ERROR: 'make' failed

O script pecl solicita um caminho no início da instalação, e é aí que acho que o problema é:

Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] :

Para que a instalação prossiga, você precisa fornecer o diretório ORACLE_HOME ou pressionar Enter . Eu tentei o seguinte sugerido em outro lugar, mas ele não funciona - a quebra de linha está faltando na saída (em comparação com quando executando o comando pecl manualmente) para que ele não emule adequadamente o pressionamento de tecla Enter :

printf "\n" | pecl install oci8

Alguma sugestão sobre como posso fazer isso funcionar corretamente?

    
por Samuel Lindblom 17.01.2014 / 22:49

3 respostas

3

Normalmente, para esse tipo de instalação, você pode fazer eco nos parâmetros que deseja definir. Eu envolvi a declaração inteira para que ela possa ser executada com permissões sudo

sudo sh -c "echo 'instantclient,/opt/oracle/instantclient' | pecl install oci8"
    
por 08.12.2015 / 19:34
2

Minha solução foi executar o seguinte comando:

export C_INCLUDE_PATH=/usr/include/oracle/11.2/client

e reinicie:

pecl insatlla oci8
    
por 18.02.2014 / 11:52
1

Eu realmente não encontrei uma solução de propósito geral para esse problema. O que acabou funcionando no meu cenário específico (provisionamento via Vagrant) estava usando um manifesto Puppet para essa etapa de provisionamento específica, o que foi fácil, já que você só precisa especificá-lo na configuração do Vagrant após o provisionador Shell:

"pecl-install-oci8":
    command => "pecl install oci8",
    user => root,
    timeout => 0,
    tries   => 5,
    unless => "/usr/bin/php -m | grep -c oci8";

Por alguma razão que ainda não descobri, o fantoche instala o oci8 sem problemas.

E quando eu fiz isso, eu carreguei todo o meu script para um manifesto Puppet, mas isso é fora do assunto.

    
por 02.02.2014 / 07:37