"pecl install oci8"을 실행하는 Bash 스크립트

"pecl install oci8"을 실행하는 Bash 스크립트

vagrant vm(Ubuntu 12.04 실행)의 초기 프로비저닝을 수행할 쉘 스크립트를 만들려고 합니다. 마지막 단계인 php oci8 확장 설치를 제외하고 모든 것(php, apache, oracle instantclient 등 설치)이 잘 작동합니다.

pecl install oci8

이 명령을 수동으로 실행하면(sudo 접두사 사용) 제대로 작동합니다. 그러나 스크립트가 이 명령을 실행하면 다음과 같이 실패합니다.

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

스크립트 pecl는 설치 시작 시 경로를 요청하는데, 여기서 문제가 있다고 생각합니다.

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] :

설치를 계속하려면 ORACLE_HOME 디렉토리를 제공하거나 키를 눌러야 합니다 Enter. 다른 곳에서 제안된 다음을 시도했지만 작동하지 않습니다. 출력에 줄 바꿈이 누락되어(명령을 pecl수동으로 실행할 때와 비교하여) 키 입력을 제대로 에뮬레이션하지 않습니다 Enter.

printf "\n" | pecl install oci8

이것을 올바르게 실행하는 방법에 대한 제안 사항이 있습니까?

답변1

내 솔루션은 다음 명령을 실행하는 것입니다.

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

다시 시작하세요.

pecl insatlla oci8

답변2

나는 실제로 이 문제에 대한 일반적인 목적의 해결책을 찾지 못했습니다. 내 특정 시나리오(Vagrant를 통한 프로비저닝)에서 작동하게 된 것은 이 특정 프로비저닝 단계에 대해 Puppet 매니페스트를 사용하는 것이었습니다. 이는 Shell 프로비저닝 후 Vagrant 구성에서 지정하기만 하면 되므로 쉬웠습니다.

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

아직 파악하지 못한 어떤 이유로든 puppet은 문제 없이 oci8을 설치합니다.

이 작업을 완료한 후 전체 스크립트를 Puppet 매니페스트로 포팅했지만 이는 주제에서 벗어났습니다.

답변3

일반적으로 이러한 종류의 설치에서는 설정하려는 매개변수를 에코할 수 있습니다. sudo 권한으로 실행될 수 있도록 전체 명령문을 래핑했습니다.

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

관련 정보