Script Bash para ejecutar "pecl install oci8"

Script Bash para ejecutar "pecl install oci8"

Estoy intentando crear un script de shell que realice el aprovisionamiento inicial de una máquina virtual vagabunda (que ejecuta Ubuntu 12.04). Todo (instalar php, apache, oracle instantclient, etc.) funciona bien, excepto el último paso: instalar la extensión php oci8:

pecl install oci8

Cuando ejecuto este comando manualmente (con el prefijo sudo), funciona bien. Pero cuando el script ejecuta este comando falla así:

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

El peclscript solicita una ruta al comienzo de la instalación, y aquí es donde creo que está el 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 la instalación continúe, debe proporcionar el directorio ORACLE_HOME o presionar Enter. Intenté lo siguiente sugerido en otro lugar, pero no funciona: falta el salto de línea en la salida (en comparación con cuando se ejecuta el peclcomando manualmente), por lo que no emula correctamente la Enterpulsación de tecla:

printf "\n" | pecl install oci8

¿Alguna sugerencia sobre cómo puedo hacer que esto funcione correctamente?

Respuesta1

Mi solución fue ejecutar el siguiente comando:

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

y reiniciar:

pecl insatlla oci8

Respuesta2

Realmente no encontré una solución de propósito general para este problema. Lo que terminó funcionando en mi escenario específico (aprovisionamiento a través de Vagrant) fue usar un manifiesto Puppet para este paso de aprovisionamiento específico, lo cual fue fácil ya que solo necesitas especificarlo en la configuración de Vagrant después del aprovisionamiento de Shell:

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

Por alguna razón que todavía tengo que descubrir, Puppet instala oci8 sin problemas.

Y cuando hice esto, transfirí todo mi guión a un manifiesto de Puppet, pero eso está fuera de tema.

Respuesta3

Normalmente, para este tipo de instalación, puede introducir los parámetros que desea configurar. Envolví la declaración completa para que pueda ejecutarse con permisos sudo

sudo sh -c "echo 'instantclient,/opt/oracle/instantclient' | pecl install oci8"

información relacionada