サマリ:OpenPNE3をインストールしました
phpコマンド環境がない場所でOpenPNE3をインストールする
PHPコマンドがない環境にOpenPNE3をインストールするには、サーバサイドの知識や技術だけでなく、Makefileを読むことができることが必要です。
が、これができれば、手嶋屋さんに頼まなくても大体の環境でインストールできちゃったりします。
まずは、試験環境づくりから。今回は公開領域に非公開ファイルなども詰め込んでしまいます。本当に上手くいくと分かってから、ディレクトリを切ればいいと思います。きちんと考えすぎると、失敗したときの回復手順も複雑になりえますので。
あと、Windows Server系は知りません。
環境
サーバ環境と同じ環境を手元に構築します。VMWare でもVirtual PCでも構いません。サーバ環境を厳密に知っておく必要がありますが、エラーメッセージから推測することもできます。基本的には何度も何度もTrial and Errorを繰り返すものと覚悟してください。
サーバ環境を知るには、以下のようにreleaseファイルを覗くことが一番いいと思います。以下のどれかのファイルが引っかかると思います(引っかからない場合はTrial and Errorの数は増えるかもしれません)。
cat /etc/lsb-release
cat /etc/redhat-release
cat /etc/debian_version
cat /etc/SuSE-release
cat /etc/mandriva-release
cat /etc/vine-release
cat /etc/issue
lsbの場合はubuntu系、redhatの場合はRHEL/CentOS系といった具合に、サーバと同じディストリビューションを手元に構築できれば、サーバサイドに移したときにもエラーがでる可能性は低くなります。
PHP compilation
まずはPHPのコンパイルから。インストールするわけではないので、一般ユーザで問題ありません。githubにもソースがありますが、backup用途で置いているだけなので、以下のリポジトリから落とせとreadme.mdに書いてあります(2012/10/01時点)。
cd ~/
git clone https://git.php.net/repository/php-src.git
cd php−src
./buildconf
./configure --enable-static \
--with-mysql \
--with-mcrypt \
--with-mhash \
--with-curl \
--enable-ftp \
--with-openssl \
--enable-sockets \
--with-pear \
--enable-soap \
--with-pdo-mysql \
--with-mysqli
buildconfのためにはautoconf/automake/bison/gccなどの各パッケージが必要になりますので、エラーが出るたびにインストールしながらすすめてください。
configureのオプションですが、バックスラッシュの前は半角空白を忘れずに。あと、関係ありそうなものを全部のせしてますが、enable-static/with-mysql/with-pdo-mysqlあたりだけでいいのではないかと思います。たぶん。そこまで確認するだけの気力はありませんでした..。
completeだとか、正常に終了した旨のメッセージはでません。エラーがでていなければ成功です。
次が少し面倒です。configure後、Makefile(Mは大文字、それ以外小文字)ができています。.inとかついてるファイルは無視してください。
以下の箇所を見つけてください。ファイル内に一箇所しかないはずです。
BUILD_CLI = ... $(ZEND_EXTRA_LIBS) -o $(SAPI_CLI_PATH).
以下のように変更(-all-staticを追加)します。
BUILD_CLI = ... $(ZEND_EXTRA_LIBS) -all-static -o $(SAPI_CLI_PATH).
準備完了です。サーバに慣れている場合、make;make installみたいなことするかもしれませんが、しないでください。ローカル(作業)環境のPHPが置き換わりますよ。
make
確認方法
static compilationによって、外部ライブラリに依存せず、スタンドアロンで動作する、cli/phpが作成できたはずです。
確認するには以下のコマンドを発行してください。
ldd sapi/cli/php
『ldd: sapi/cli/php: not a dynamic ELF executable』のようにでると成功です。
以下のような場合はstatic compilationに失敗しています。ただ、サーバ側に各ライブラリがすべて用意されていれば問題ないのですが..。安全策を取りたい場合は、上記の内容のどこかに問題がなかったか、確認してください。
linux-gate.so.1 => (0xffffe000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7f7f000)
librt.so.1 => /lib/librt.so.1 (0xb7f76000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb7f63000)
libm.so.6 => /lib/libm.so.6 (0xb7f3e000)
libdl.so.2 => /lib/libdl.so.2 (0xb7f39000)
libnsl.so.1 => /lib/libnsl.so.1 (0xb7f24000)
libc.so.6 => /lib/libc.so.6 (0xb7e04000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7df0000)
/lib/ld-linux.so.2 (0xb7fc3000)
OpenPNE3に同梱
先ほど作成したPHPバイナリとOpenPNE3に同梱した上で、サーバ側にアップロードします。
OpenPNE3のダウンロード
最新版で試してみたいので、githubから落としてます。設定ファイルはインストール時にエラーにならないように、コピーしているだけで、とりあえず、内容はそのままにします。
cd ~/
git clone git://github.com/openpne/OpenPNE3.git
cd OpenPNE3
cp config/ProjectConfiguration.class.php.sample config/ProjectConfiguration
.class.php
cp config/OpenPNE.yml.sample config/OpenPNE.yml
PHPを同梱
cli版phpをコピーするだけです。
cp ~/php-src/sapi/cli/php ~/OpenPNE3/
リパッケージング
zipに固めるだけです。
cd ~/
zip -9 -r OpenPNE3.zip OpenPNE3/
インストールなど
サーバ側のインストールはOpenPNE3の公式に委ねます。一点だけ異なるのは、インストール時のコマンドです。上記で作成したphpを利用するよう、以下のようにしてください。
unzip OpenPNE3.zip
cd OpenPNE3/
./php symfony openpne:install
./symfonyとやると、システム固有のパスからphpコマンドを探すので、not foundエラーになるはずです(むしろ、ならないなら、上記の作業は必要ありませんでした)。
注意点
ELF binary type “0” not known.
Linuxで作成したバイナリをBSD系で実行していると思われます。上記手順に則って、BSD系でバイナリを作りなおしてください。
なお、以下のようなコマンドを発行すれば、問題は解決できます。という記事が色々ありますが、結局のところ、次のエラーが生じますので、トラブルシュートとしては賢明ではありません。
cd ~/OpenPNE3
brandelf -t Linux ./php
サーバ側にbrandelfがなければ、そもそもお手上げになります。
ELF interapter /lib/ld-linux.so.2 not found
static compilationしましょう。上記手順の通りで上手くいく「はず」
以上。