[OHS] Building PHP 5.3 with Oracle HTTP Server 11g

このエントリは、過去のエントリを基にして、Oracle HTTP Server 11g (OHS) でPHPを使うための方法をまとめましたものです。

Using PHP with Oracle HTTP Server 11g
http://www.oracle.com/technetwork/topics/php/php-ohs-092324.html

今回珍しいOSを使いましたが、手順は他のOSとほぼ同じはずです。このエントリは「備忘録」の類で、HP-UX Itanium上でPHPをビルドする「楽しさ」といわれるものを最近体験しました。このプラットフォームに関するOracleの発表を知って、非常にうれしく思っています。

(注意)Oracleは2011年3月22日に以下の発表をしています。
Oracle Stops All Software Development For Intel Itanium Microprocessor
http://www.oracle.com/us/corporate/press/346696

Itaniumを使っているPHPコミュニティの人たちはそれほど多くないと思います。PHPをコンパイルする間に、本運用のアプリケーションでItaniumを使うと非常に不快になる警告がたくさん出てきます。ItaniumへのPHPのインストール時のバグをかなり前に登録したのですが、まだパッチは出てきませんので、このプラットフォームに対する作業をする人があまりいないということなのでしょう。それゆえ、PHPをItaniumプラットフォーム上で動作させることは個人的にはおすすめできません。とにかく、必要があったので、後に続く皆様に手順を公開したいと思います。

PHP 5.3.5をOHS 11gでビルドする手順(HP-UX Itanium 64ビットの場合)

1. OSとコンパイラを確認します。
このバージョンより古い、もしくはこのバージョンとは異なるコンパイラを使っている場合、コンパイルに失敗してしまうという問題も含めて、HP-UXの開発環境全体でいろいろ問題を発見しました。
$ uname -a
HP-UX B.11.31 U ia64 2921109885 unlimited-user license
$ cc --version
cc: HP C/aC++ B3910B A.06.23 [May 18, 2009]
2. 環境変数を設定します。
ORACLE_HOMEにはOHSインスタンスを含んでいます。
export ORACLE_HOME=/path/to/your/oracle-home
export ORACLE_INSTANCE=$ORACLE_HOME/instances/instance1
export CONFIG_FILE_PATH=$ORACLE_INSTANCE/config/OHS/ohs1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/ohs/lib:$LD_LIBRARY_PATH
PHPコンパイラの環境変数を設定します。
export CFLAGS='+O2 +DD64'
export CC=/bin/cc
最良のコンパイラオプションを見つけ出す必要があります。Itaniumでは OHSと組み合わせて利用することができる64ビットバイナリをビルドするためには、+DD64のオプションが必要です。

3. Oracle InstantClientをダウンロードし展開します。
[訳注]11.2.0.2でもOKです
OTNからダウンロードする場合は、以下からダウンロードできます。
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
例えば11.1.0.7のSDKをダウンロードした場合、以下のようにZipファイルを展開します。
unzip sdk-11.1.0.7.0-hpux-ia64.zip
4. 新しいHeaderファイルをコピーします。
cp instantclient_11_1/sdk/include/*.h $ORACLE_HOME/rdbms/demo
5. php-5.3.5を作業ディレクトリに展開します。
gunzip php-5.3.5.tar.gz tar -xf php-5.3.5.tar
6. 展開したPHPディレクトリに移動します。
cd php-5.3.5
7. PHPのconfigureファイルを編集して、3720行目あたりにある'hpux'のcase中の'sl'を'so'に変更します。これはItanium固有の不具合で、提供されているパッチを使わずに手で変更しています。

Bug #15016 Unable to locate instantclient on HP-UX
http://pecl.php.net/bugs/bug.php?id=15016
case $host_alias in
*hpux*)
SHLIB_SUFFIX_NAME=so
SHLIB_DL_SUFFIX_NAME=so ;;
8. PHP 5.3.6もしくはそれ以前のものを使っている場合は、PHPのconfigureスクリプトを次のように編集します。
(修正前)APACHE_VERSION=`expr $4 \* 1000000 + $5 \* 1000 + $6`
(修正後)APACHE_VERSION=`expr $6 \* 1000000 + $7 \* 1000 + $8`
この手順はOHS11gへのPHPインストール手順から抜けています。OHSのApacheがエラー番号を別に報告するために必要です。詳細はPHP bug 54084を確認ください。5.3で修正済みで、PHPソースコードのブランチに組み込みました。

Request #54084 Fix apxs Apache version test to work with Apache variants
http://bugs.php.net/bug.php?id=54084

9. この手順を繰り返したり、別のオプションでconfigureを再事項しているなら、ビルドしたものをクリーンナップします。
make distclean
rm -rf config.cache autom4te.cache
10. 必要なオプションをつけてconfigureを実行し、PHPをビルドします。
./configure --disable-all --with-apxs2=$ORACLE_HOME/ohs/bin/apxs --with-oci8=$ORACLE_HOME --disable-rpath --prefix=$ORACLE_HOME --with-config-file-path=$CONFIG_FILE_PATH
make
この結果コンパイラの警告が山のように出てきます。これは実運用する上で非常に気分が悪くなるようなものなので、--disable-allを使うべきでしょう。システムライブラリはItaniumで少々違いますし、libxml2のようなライブラリにはアクセスしませんでした。おそらくインストールしたり、3rdパーティのソフトウェアをビルドすると、他のPHPエクステンションの依存性を解決できると思います。

11. デフォルトのphp.iniファイルをコピーします。
cp php.ini-devlopment $CONFIG_FILE_PATH/php.ini
もしくは
cp php.ini-production $CONFIG_FILE_PATH/php.ini
12. $CONFIG_FILE_PATH/php.iniを編集して、タイムゾーンを追加します(PHP 5.3では必須)
date.timezone=America/Los_Angeles
13. $CONFIG_FILE_PATH/php.iniを編集して、'variables_order'に'E'を追加します。これにより、PHPの run-tests.php実行時にOracleの環境を正しく認識します。この設定は後で削除します。
variables_order = "EGPCS"
14. run-tests.phpを編集し、60から600に変更することで、長時間のOracleテストでのタイムアウトを抑止します。

15. ext/oci8/tests/details.incを編集し、SYSTEMパスワードとデータベースへの接続文字列を設定します。

16. PHP の環境を設定し、PHPのテスト中に結果をメール配信しないようにしておきます。
export NO_INTERACTION=no
17. PHPコマンドラインバイナリをテストします。
make test
OCI8のテストは以下のコマンドで実行できます。
make test TESTS=ext/oci8
18. 失敗したテストの原因調査をします。同時に、64Bit Linuxのテスト結果と比較しておきましょう。デリケートでメモリ衝突の問題がよく発生するとはいえ、Itaniumでテスト成功した例はたくさんありますので、コードとしては問題なく動くという希望を持ちましょう。

19. テストが成功したら、PHPバイナリをインストールします。
make install
20. $CONFIG_FILE_PATH/httpd.confを編集して1行追加します。
AddType application/x-httpd-php .php
21. OHSを再起動します。
cd $ORACLE_INSTANCE/bin
     ./opmnctl start
     ./opmnctl stopproc ias-component=ohs1
     ./opmnctl startproc ias-component=ohs1
22. phpinfoファイルを作成します。
echo '<?php phpinfo(); ?>' > $ORACLE_INSTANCE/config/OHS/ohs1/htdocs/phpinfo.php
23. phpinfoを確認します。今回の場合、ポートは7777を使ったので、以下のURLで確認します。
http://localhost:7777/phpinfo.php
24. 余裕があれば、$ORACLE_INSTANCE/config/OHS/ohs1/htdocsにあるOCI8のスクリプトを作成し、実行します。

繰り返しになりますが、Itanium上でのPHP実行はお勧めしません。


原文はこちら。
http://blogs.oracle.com/opal/2011/03/building_php_53_with_oracle_ht.html

0 件のコメント:

コメントを投稿