web-dev-qa-db-ja.com

「peclinstalloci8」を実行するためのBashスクリプト

Vagrant vm(Ubuntu 12.04を実行)の初期プロビジョニングを行うシェルスクリプトを作成しようとしています。最後のステップであるphpoci8拡張機能のインストールを除いて、すべて(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

これを正しく実行する方法についての提案はありますか?

3
Samuel Lindblom

私の解決策は、次のコマンドを実行することでした。

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

そして再起動します:

pecl insatlla oci8
2
user301078

通常、この種のインストールでは、設定するパラメーターをエコーすることができます。 Sudo権限で実行できるように、ステートメント全体をラップしました

Sudo sh -c "echo 'instantclient,/opt/Oracle/instantclient' | pecl install oci8"
2
Phil Porada

私はこの問題の汎用的な解決策を実際には見つけられませんでした。私の特定のシナリオ(Vagrantを介したプロビジョニング)で機能することになったのは、この特定のプロビジョニングステップにPuppetマニフェストを使用することでした。これは、シェルプロビジョナーの後に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マニフェストに移植しましたが、それはトピックから外れています。

1
Samuel Lindblom