― Web Technology and Life ―

ubuntu14.04でApacheのmod_php(phpbrewでphp5.5)構築のChefレシピ案

2014-07-03
phpの最新環境を構築しようと去年からphp-build(phpenv)とかphpbrewとか触ったりしてた。フルスタックの便利phpは環境を整えるconfigure,php.iniが難しくて挫折していたけど、ツールもよくなったし僕自身も知識増えて、やっと目的のビルドレシピ案ができたので公開。

まず宣伝 ~PHPの話がPerlのカンフェレンスできけますよ~

YAPC::Asia2014というPerl最大カンファレンスが8/28-30まで開催されます。『半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情(5.6対応)』っていう後述のchefレシピの作成にも大変お世話になってホントいつもありがとうございますのわれらが@uzullaさんによりPHPの話もあるかも(採択まだ未決定)だったりと、Perlに限らずいろんな話があるのでテック系のカンファレンスとしてPerl以外の人も参加してみると面白いと思います。

ちなみに、私も『Plack時代のPerlのSession古今東西』という地味なテーマでトークに応募しているので、気にある人はソーシャルブクマボタンを押して応援お願いしますーw(ホントはこれがメインの宣伝www)

YAPC::Asia TOKYO 2014

早速レシピ案

chefのレシピ案にしてあります。こちら↓

my-env-chef-01の「"nodes/recipe-test.json"」が特にphpに特化した設定

chefのレシピはなんだかんでいってわかりやすいですからね。注意点としては、

  • ubuntu14.04の64bit用でWindows上にいれたVMWareで検証したレシピ
  • ただしなぜかphpbrew installのところがうまくいかないのでそこだけ構築先のサーバーでたたいた
  • phpのビルドオプションはEC-CUBEを動作させる用
  • phpのビルドに必要なライブラリはinit-librayもあるので、phpのところだけ見ないように
  • hirobanexというユーザーIDは適宜変更
  • もともとオレオレ環境セットアップレシピなのでphp以外レシピもあるけど無視して
  • phpのrecipeの「phpbrew setup and setup php5.5」のセクションは実際はchefでたたくとコケるの注意(だから、レシピ案)

という感じです。

phpのビルドのスクリプト

EC-CUBE用だとこんな感じで、かなりモリモリ。環境/サービスによって違うからググってもどんぴしゃりのは出てこないと思うので、そのあたりが大変。(長いので改行しています)

phpbrew install php-5.5.13 +default +mb +dbs \
    +session +zlib +openssl +curl +hash +apxs2 +gd \
    -- \
    --with-gd=shared --enable-gd-native-ttf \
    --with-jpeg-dir=/usr/lib/x86_64-linux-gnu \
    --with-png-dir=/usr/lib/x86_64-linux-gnu \
    --with-freetype-dir=/usr/include/feeetype2/freetype

ちなみに、+で渡しているのが、phpのconfigureオプションのようなやつで、phpbrew variantsで一覧がみれる、うまく隠ぺいというラップされている感じですね。php-buildのほうが実際のconfigureスクリプトファイルがあるのでわかりやすいですね。

phpbrewのメリットとデメリット

phpbrewはmod_phpの.soをバージョンごとに生成するので、システムでいれたphpのを上書きしない(php-buildは上書きしてしまったはず)のが大きなメリット。

もちろん、本番環境は一つだから上書きしてもいいんだけど、「バージョンごとの違いを確認したい」目的でphpの切り替えのできるphpenvとかphpbrewをいれてると、バックアップとらないと上書きするphp-buildはちょっと微妙。

逆に、本番みたいに一つの環境しか使わないなら、上書きしちゃっていいし、切り替えるためのよくわからん設定をphpbrewはしないといけないので、逆にいらないことをしないといけない()がデメリット。

phpの悪夢とか注意点とかぼやき ~フルスタック環境の構築は闇が多い~

結論的には、

しっかり必要なライブラリが入っているか、phpinfoとかでしっかり見るべし!

ということなんだけど、phpって実務上アプリの実装はフルスタックですごいんだけど、phpのインストールというかビルドが石器自体並みにめんどい。

エラーログも界隈の情報が分かっていないと意味が分からん。xdebugって何?pharって何?とかいろいろphp周辺を取り巻く特殊な便利ツール情報がログにベロベロと意味不明な用語として出てきても、全く理解できないし、何が必要かもわからない。

php.iniも同じくって様相を呈しているけど・・・

事前にインストールするライブラリが多種多様

Linuxのディストリビューション毎に必要なライブラリが結構名前違ったりして、ググっても情報散乱しているし、よくわからん。個人的にはまったライブラリは以下(すべて、aptでいれるdebパッケージ名)

  • autoconf
  • libcurl4-gnutls-dev
  • libfreetype6
  • libfreetype6-dev
  • libjpeg-dev
  • libtiff-dev
  • libpng-dev

下記のconfigureもそうだけど、画像処理系はLinuxディストリビューション毎にややっこしいと思う。

あと、なさげライブラリは実際に必要なファイルが何か「OS名 ライブラリ php」とかでググってファイル名探して、さらにOS内で「find /usr | grep ファイル名」とかやったり、「aptitude search ライブラリ名の断片」とか「aptitude search ライブラリ名の断片 | grep 当て感の文字列」とかで探すほかないというあたりまえなことが、最初のうちはよくわからんから結構あってつらい。。。

configureオプション多くて指定が罠が多い

特に環境によって異なる以下がはまりどころ感がある。

  • --with-gd=shared
  • --enable-gd-native-ttf
  • --with-jpeg-dir=/usr/lib/x86_64-linux-gnu
  • --with-png-dir=/usr/lib/x86_64-linux-gnu
  • --with-freetype-dir=/usr/include/feeetype2/freetype

64bitのubuntu14.04で書くライブラリをaptでいれていればならこのパスだと思うけど、そうでない場合はパスが変わるので注意。まぁ画像系はいろんな言語でもはまりどころですね。。。

あと、--with-jpeg-dirのオプションを指定しないで(間違ったパスを指定して)ビルドをしてしまうと、一旦phpbrew remove pphp-5.5.13とかで間違ってビルドしちゃったバージョンを削除してから、再コンパイルしないと何度ビルドしなおしても、うまくいかないのが大きな罠だと思った。

後々変えたいところ

sudo chmod 777 /usr/lib/apache2/modules/
sudo chmod 777 /etc/apache2/mods-available/

とか超絶キモいので、かえたい。twitterでつぶやいたら、uzullaさんがapxsがPerlで書いてあるからそこをハックすればいけそうって教えてくれた。mod_phpのロードは自分でapache2.confにホームディレクトリ内に作ったシンボリックリンク書き込んで、phpbrewではシンボリックリンクをバージョン別のphp.soで書き換えればうまくいきそう。

あと、なぜか、phpbrew installをknife solo cookでたたくとおかしくなるのがきもいので、要調査。サーバーに入って普通にたたくとすんなり入るんだけど、まったく謎。phpbrewがインストール終わると例外はくとよくわからんことをしているのかもしれないけどphpbrewのソールは見ていないので、ご存知の方がいればご指摘くださいー。(やっぱりphp-buildのほうがいいかもねーw)

やっぱりphpは新しい方がいいし、Packagistも使いたい

pearはオワコンらしいですが、phpのあたらしいライブラリ管理リボジトリ(サイト)のPackagistがありまして、RubyのRubyGemsやPerlのCPAN的に便利な感じですが、PHPが古いと対応していなかったり使いづらかったりするんですよね。。。なので、とりあえず、新しいバージョンに上げるのが吉ですね!!!mysql_connectとか使わずにいいものをかいていけるといいですね!

PHP広大ですが、これからもじわじわと学んでいきたいと思いますー。

PHP update_at : 2014-07-03T10:16:19
hirobanex.netの更新情報の取得
 RSSリーダーで購読する   
blog comments powered by Disqus