追記 2014-05-20
どうもjosegonzalez/homebrew-phpは存在こそしているもののprivate repositoryになってしまったらしい。
$ brew tap josegonzalez/homebrew-php Cloning into '/usr/local/Library/Taps/josegonzalez/homebrew-php'... remote: Reusing existing pack: 6020, done. remote: Total 6020 (delta 0), reused 0 (delta 0) Receiving objects: 100% (6020/6020), 1.17 MiB | 290.00 KiB/s, done. Resolving deltas: 100% (3741/3741), done. Checking connectivity... done. Tapped 395 formula It looks like you tapped a private repository. To avoid entering your credentials each time you update, you can use git HTTP credential caching or issue the following command: cd /usr/local/Library/Taps/josegonzalez/homebrew-php git remote set-url origin git@github.com:josegonzalez/homebrew-php.git
でもこのリポジトリの変更が組み込まれたはずのhomebrew/homebrew-phpにはphpenvおよびphp-buildが含まれていないらしく、josegonzalez/homebrew-php
をbrew tap
しておかないとError: No available formula for phpenv
と表示されるようになってしまった。
根本的対策はまだ私もやってないから何とも言えないが、phpenv以外のバージョン管理ソフトの導入を考えた方がいいかもしれない。
結局MacならPHP 5.5/5.4/5.3 for OS X 10.6/10.7/10.8/10.9 as binary packageが便利なんだろうな…。
参考: macのphpをアップデート - わすれっぽいきみえ
他のlinux環境でphpのバージョン管理をしたいと思ったときのデファクトみたいなの、あるなら知りたい。
なおgithubに現在使っているbrewfileをあげている。
本編
rbenvを導入したのでphpenvを利用してphpのバージョン管理を行おうと思う。
で、今回はmacを利用するので、つい最近ホッテントリしてた
と
- 「BrewfileでHomebrewパッケージを管理する」をやってみた - sonots:blog
- BrewfileでHomebrewパッケージを管理する | SOTA
- [PHP]HomebrewでPHP環境構築してマルチバージョン管理 | iii ThreeTreesLight
- これは便利!Homebrewに追加されたtapコマンドはリポジトリを追加して簡単にフォーミュラを増やせる | Macとかの雑記帳
を参考にphpenvをbrew bundle
でインストールしてみた。
まずbrew bundleする
次のように書いた。
tap homebrew/dupes || true tap josegonzalez/homebrew-php || true update || true upgrade || true install rbenv || true install ruby-build || true install --HEAD phpenv || true install --HEAD php-build || true install autoconf || true install pkg-config || true install openssl || true install fontforge || true install fontconfig || true install freetype || true install jpeg || true install libtiff || true install gettext || true install libpng || true install yasm || true cleanup
の設定をする上で必要になったformulaもリスト化してある。
install --HEAD phpenv
だったり、install --HEAD php-build
だったりするのはgithubのmasterブランチ最新バージョンをとってくるため。
デフォルトだと最新のタグをpullしてしまい、特にphp-buildは5.5.0betaまでしかphpをインストールできない。
なのでタグではなくHEADを取ってこいよと指定してやる必要がある。
あとは
$ brew bundle
でphpenvおよびphp-buildのダウンロード、インストールは完了。ただしrbenvの時と同じく.bashrcの設定が別途必要で
# phpenvの設定 export PATH="$HOME/.phpenv/bin:$PATH" eval "$(phpenv init -)"
を追加しておいた。
実際にphp-buildでインストールしてみる
php-build --definitions
でインストール可能なphpのバージョンが選べる。
とりあえずphp5.4.25を入れてみよう。
$ php-build 5.4.25 ~/.phpenv/versions/5.4.25 [Info]: Loaded apc Plugin. [Info]: Loaded pyrus Plugin. [Info]: Loaded xdebug Plugin. [Info]: Loaded xhprof Plugin. [Info]: php.ini-production gets used as php.ini [Info]: Building 5.4.25 into /Users/kimikimi714/.phpenv/versions/5.4.25 [Downloading]: http://php.net/distributions/php-5.4.25.tar.bz2 [Preparing]: /var/tmp/php-build/source/5.4.25 [Compiling]: /var/tmp/php-build/source/5.4.25 [Pyrus]: Downloading from http://pear2.php.net/pyrus.phar [Pyrus]: Installing executable in /Users/kimikimi714/.phpenv/versions/5.4.25/bin/pyrus [XDebug]: Downloading http://xdebug.org/files/xdebug-2.2.3.tgz [XDebug]: Compiling in /var/tmp/php-build/source/xdebug-2.2.3 [XDebug]: Installing XDebug configuration in /Users/kimikimi714/.phpenv/versions/5.4.25/etc/conf.d/xdebug.ini [XDebug]: Cleaning up. [Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.5.4.25.20140305234416.log [Success]: Built 5.4.25 successfully. $ phpenv versions * system (set by /Users/kimikimi714/.phpenv/version) 5.4.25 $ phpenv global 5.4.25 $ phpenv rehash $ phpenv versions system (set by /Users/kimikimi714/.phpenv/version) * 5.4.25 $ php -v PHP 5.4.25 (cli) (built: Mar 5 2014 23:49:30) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
おお、入った。入った。
じゃあ今度は5.5.9
$ php-build 5.5.9 ~/.phpenv/versions/5.5.9 [Info]: Loaded apc Plugin. [Info]: Loaded pyrus Plugin. [Info]: Loaded xdebug Plugin. [Info]: Loaded xhprof Plugin. [Info]: php.ini-production gets used as php.ini [Info]: Building 5.5.9 into /Users/kimikimi714/.phpenv/versions/5.5.9 [Downloading]: http://www.php.net/distributions/php-5.5.9.tar.bz2 [Preparing]: /var/tmp/php-build/source/5.5.9 [Compiling]: /var/tmp/php-build/source/5.5.9 [Pyrus]: Downloading from http://pear2.php.net/pyrus.phar [Pyrus]: Installing executable in /Users/kimikimi714/.phpenv/versions/5.5.9/bin/pyrus [XDebug]: Downloading http://xdebug.org/files/xdebug-2.2.3.tgz [XDebug]: Compiling in /var/tmp/php-build/source/xdebug-2.2.3 [XDebug]: Installing XDebug configuration in /Users/kimikimi714/.phpenv/versions/5.5.9/etc/conf.d/xdebug.ini [XDebug]: Cleaning up. [Info]: Enabling Opcache... [Info]: Done [Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.5.5.9.20140306001329.log [Success]: Built 5.5.9 successfully. $ phpenv versions system * 5.4.25 (set by /Users/kimikimi714/.phpenv/version) 5.5.9 $ phpenv global 5.5.9 $ phpenv rehash $ phpenv versions system 5.4.25 * 5.5.9 (set by /Users/kimikimi714/.phpenv/version) $ php -v PHP 5.5.9 (cli) (built: Mar 6 2014 00:21:47) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
Yeah!
timezoneはちゃんと設定してあげないとだめです
$ php -r 'phpinfo();' PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in Command line code on line 1 PHP Stack trace: PHP 1. {main}() Command line code:0 PHP 2. phpinfo() Command line code:1 phpinfo() PHP Version => 5.5.9 (以下いろいろ設定)
というわけでtimezone設定されてないからちゃんと書いてね!とおこられるので、インストールの都度設定の必要がある。
$ php -r 'phpinfo();' | grep ini … Configuration File (php.ini) Path => /Users/kimikimi714/.phpenv/versions/5.5.9/etc Loaded Configuration File => /Users/kimikimi714/.phpenv/versions/5.5.9/etc/php.ini …
みたいな行が見つかるはずなので
$ vim /Users/kimikimi714/.phpenv/versions/5.5.9/etc/php.ini … [Date]↲ ; Defines the default timezone used by the date functions↲ ; http://php.net/date.timezone↲ date.timezone = Asia/Tokyo …
の設定をしてあげてください。
番外編 もう一つのphpenv
phpenv.org by phpenvというのも実はあって*1、 これを使うとphp-buildがいらなくなる。
さらにtarファイルのダウンロード・展開ではなくgithubから直接ソースをpullしてきてビルドするというものなのだが、 エラーが解決しきれずに力つきて導入をあきらめた。(実際おとついの夜と昨晩はこれでつぶれて謎の夜更かしをしてしまった。)
興味がある人は一応この話もブログにしようかと思って下書きを書いてはいたので、続きを読むからお進みください。
元々はCHH/phpenv · GitHubだったものをまた別に書き直してphp-buildを入れずとも phpをインストールできるようにしたものになっている。多くの人が書いているブログ記事(ググったらかなりヒットする)のphpenvはhomebrewで入れるものだったり、CHHさんのリポジトリを参照していたりするのだけども、今回私が入れようとしたものはそれらとは異なることに注意していただきたい。
phpenv-installによると
- use of the php-src repo to compile your individual PHP installs as opposed to downloading a tarball from php.net.
- reads configuration options from source files located in .phpenv/etc
- allows you to do multiple builds per release
- includes building custom extensions located in the ".phpenv/php-ext` folder, as per the configuration source files, both static or shared.
- allows you to continue a failed installation from anywhere
- and more...
php-buildに依存せず、直接php.netが管理しているgithubのソースを見に行くことでphpのインストールを可能にしている。
とりあえずclone用ディレクトリにgit clone
してきてシンボリックリンク貼ったった。
$ git clone git@github.com:phpenv/phpenv.git $ ln -s ~/Documents/git_clone/phpenv ~/.phpenv
これで、.bashrcに次の行を書いておく。
# phpenvの設定 export PATH="$HOME/.phpenv/bin:$PATH" eval "$(phpenv init -)"
これで新しい窓開いたらphpenvがもう使える。
まだ何もほかにインストールしてない状態でphpenv versions
をうつと何も表示されないが、一応
$ phpenv version system (set by /Users/user/.phpenv/version)
とはなってくれる。
次に実際にphpenvを使ってインストールできるものを見てみる。それらを見るには
$ phpenv install --releases [Cloning]: source from php-src Github repo [Fetching]: latest code from Github repo (なんかほかにもいっぱーーーーい) php-5.5.1 php-5.5.10RC1 php-5.5.2 php-5.5.2RC1 php-5.5.3 php-5.5.4 php-5.5.4RC1 php-5.5.5 php-5.5.5RC1 php-5.5.6 php-5.5.6RC1 php-5.5.7 php-5.5.7RC1 php-5.5.8 php-5.5.8RC1 php-5.5.9 php-5.5.9RC1 php-5.6.0alpha1 php-5.6.0alpha2 php-5.6.0alpha3
みたいな感じでgithubから直接引っ張って来れるリストが見れる。
とりあえずphp5.5環境とphp5.4環境を入れてみよう
$ phpenv install php-5.5 php.ini-development gets used as php.ini Building php-5.5 [Error]: Release php-5.5 not found. BUILD ERROR The full Log is available here /tmp/phpenv-install-php-5.5.20140304013404.log
む、5.5.*みたいなのには対応してないのか。仕方ない。
$ phpenv install php-5.5.9 php.ini-development gets used as php.ini Building php-5.5.9 [Fetching]: latest code from Github repo [Branching]: for a clean build environment [Configuring]: build options for selected release BUILD ERROR Switched to a new branch 'build' uname: illegal option -- o usage: uname [-amnprsv] configure: WARNING: bison versions supported for regeneration of the Zend/PHP parsers: 2.4 2.4.1 2.4.2 2.4.3 2.5 2.5.1 2.6 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.7 (found: 2.3). configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers. configure: error: bison is required to build PHP/Zend when building a GIT checkout! Switched to branch 'master' The full Log is available here /tmp/phpenv-install-php-5.5.9.20140304013510.log
おや、まだエラー。
$ bison --version bison (GNU Bison) 2.3 Written by Robert Corbett and Richard Stallman. Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ふむ。bisonが古いとな。
じゃあbison2.7入れますか。(参考: homebrew で標準のバージョンよりも古い bison をインストールする - Sarabande.jp、Install specific version of Homebrew formula、phpenvでphp5.5.7とかビルドするとbisonとかでおこなので、brewでどうにかするつもりが結局bison27のFormulaかく羽目になったやつ - uzullaがブログ)
$ brew search bison bison homebrew/versions/bison27 $ cd `brew --prefix` $ git lg -10 Library/Formula/bison.rb # lgは私が貼ったgit logのエイリアス * 3872723 2013-12-11 Jack Nagel bison 3.0.2 * 4715b3c 2013-11-13 Jack Nagel bison 3.0.1 * b744b43 2013-07-26 Adam Vandenberg bison 3.0 * 804bcf6 2013-04-16 Jack Nagel bison 2.7.1 * adf87c6 2013-02-02 Adam Vandenberg bison 2.7 $ git checkout adf87c6 /usr/local/Library/Formula/bison.rb $ brew install bison $ /usr/local/Cellar/bison/2.7/bin/bison --version bison (GNU Bison) 2.7 Written by Robert Corbett and Richard Stallman. Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ brew link bison --force # これで/usr/local/bin下にbisonのシンボリックリンクができる $ vim .bashrc # homebrewでインストールしたものが/usr/binより先に読み込まれるようにするための設定↲ export PATH="/usr/local/bin:$PATH" (新しいセッションを開いて) $ bison --version bison (GNU Bison) 2.7 Written by Robert Corbett and Richard Stallman. Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
うむ、入った。でもre2c入ってないので、
$ brew install re2c ==> Downloading https://downloads.sourceforge.net/project/re2c/re2c/0.13.6/re2c-0.13.6.tar.gz ######################################################################## 100.0% ==> ./configure --prefix=/usr/local/Cellar/re2c/0.13.6 ==> make install 🍺 /usr/local/Cellar/re2c/0.13.6: 5 files, 344K, built in 26 seconds
よし、もっぺんphp 5.5.9インストールしてみようか。
$ phpenv install php-5.5.9 php.ini-development gets used as php.ini Building php-5.5.9 [Fetching]: latest code from Github repo [Branching]: for a clean build environment [Configuring]: build options for selected release BUILD ERROR Switched to a new branch 'build' uname: illegal option -- o usage: uname [-amnprsv] configure: error: mcrypt.h not found. Please reinstall libmcrypt. The full Log is available here /tmp/phpenv-install-php-5.5.9.20140305000121.log
おーいw 初めからlibmcrypt
ないって言ってよ。
$ brew install libmcrypt ==> Downloading https://downloads.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz ######################################################################## 100.0% ==> ./configure --prefix=/usr/local/Cellar/mcrypt/2.5.8 --mandir=/usr/local/Cellar/mcrypt/2.5.8/share/man ==> make install 🍺 /usr/local/Cellar/mcrypt/2.5.8: 12 files, 332K, built in 34 seconds
よしもっかい!!
$ phpenv install php-5.5.9 --deep-clean php.ini-development gets used as php.ini Building php-5.5.9 [Fetching]: latest code from Github repo [Branching]: for a clean build environment [Configuring]: build options for selected release BUILD ERROR Switched to a new branch 'build' uname: illegal option -- o usage: uname [-amnprsv] configure: error: invalid readline installation detected. Try --with-libedit instead. The full Log is available here /tmp/phpenv-install-php-5.5.9.20140305001111.log
ん?あ、uname
のエラー出てたのに見てなかった。てかillegal optionってamnprsv
からしか選べないのですが。
と思って調べたら(参考: On OS X: uname: illegal option -- o · Issue #25 · perl11/potion · GitHub)s
を使えばいいとのこと。
これphpenvのスクリプト自体を修正しないといけないじゃん…。
と思ってphpenv-install.shのスクリプト見に行ったら、オプションにo
なんか使ってないんだが?は?一番最初に開いてるブランチがdev?masterではo
使ってる…。マジかよ…。
もういいdevブランチに切り替えましょう。
$ phpenv install php-5.5.9 phpenv v0.0.4-dev /Users/kimikimi714/.phpenv/php-src/php.ini-recommended gets used as php.ini Building 5.5.9 with config options from: php-5.5.Darwin.source [Fetching] |1| latest code from Github repo [Branching] |2| for a clean build environment [Patching] |3| Applying patches to the source if any are applicable. [Configuring] |4| build options for selected release BUILD ERROR: STATUS is 4 The script aborted unexpectedly when a command returned a non zero exit code. Last 10 linens from the error log file may shed some light ------------------------------------------------------------------------------------- Switched to a new branch 'build' configure: WARNING: unrecognized options: --enable-apc, --enable-apc-debug, --enable-apc-filehits, --enable-igbinary, --enable-memcached, --with-libmemcached-dir, --enable-memcached-igbinary, --with-http-curl-requests, --with-http-curl-libevent, --with-http-zlib-compression, --with-http-magic-mime configure: error: Could not find pcre.h in /usr/local/opt/pcre ------------------------------------------------------------------------------------- The full STDERR Log is available here /tmp/phpenv-install-php-5.5.9.20140305004753.log.err The full STDOUT Log is available here /tmp/phpenv-install-php-5.5.9.20140305004753.log The command to view the logfile with $PAGER has been copied to your clipboard. ~/.phpenv/libexec
マジか…。こっちの方がずいぶん詳細ですね。でもビルド失敗です。
$ brew install pcre ==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/pcre-8.34.mavericks.bottle.tar.gz ######################################################################## 100.0% ==> Pouring pcre-8.34.mavericks.bottle.tar.gz 🍺 /usr/local/Cellar/pcre/8.34: 146 files, 5.6M
もーいっかい!もーいっかい!
$ phpenv install php-5.5.9 phpenv v0.0.4-dev /Users/kimikimi714/.phpenv/php-src/php.ini-recommended gets used as php.ini Building 5.5.9 with config options from: php-5.5.Darwin.source The version 5.5.9 was previously installed. Would you like to remove the current installation and re-install? Y/n: Y [Fetching] |1| latest code from Github repo [Branching] |2| for a clean build environment [Patching] |3| Applying patches to the source if any are applicable. [Configuring] |4| build options for selected release BUILD ERROR: STATUS is 4 The script aborted unexpectedly when a command returned a non zero exit code. Last 10 linens from the error log file may shed some light ------------------------------------------------------------------------------------- Switched to branch 'master' Switched to a new branch 'build' configure: WARNING: unrecognized options: --enable-apc, --enable-apc-debug, --enable-apc-filehits, --enable-igbinary, --enable- memcached, --with-libmemcached-dir, --enable-memcached-igbinary, --with-http-curl-requests, --with-http-curl-libevent, --with- http-zlib-compression, --with-http-magic-mime configure: error: vpx_codec.h not found. ------------------------------------------------------------------------------------- The full STDERR Log is available here /tmp/phpenv-install-php-5.5.9.20140305005444.log.err The full STDOUT Log is available here /tmp/phpenv-install-php-5.5.9.20140305005444.log The command to view the logfile with $PAGER has been copied to your clipboard. ~/.phpenv/libexec
今度はvpx_codec.h
がないとな。(参考: [homebrew] libvpx build log)
$ brew search vpx_codec No formula found for "vpx_codec". Searching pull requests... $ brew search libvpx libvpx $ brew install libvpx ==> Installing libvpx dependency: yasm ==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/yasm-1.2.0.mavericks.bottle.tar.gz ######################################################################## 100.0% ==> Pouring yasm-1.2.0.mavericks.bottle.tar.gz 🍺 /usr/local/Cellar/yasm/1.2.0: 44 files, 3.3M ==> Installing libvpx ==> Downloading http://webm.googlecode.com/files/libvpx-v1.3.0.tar.bz2 ######################################################################## 100.0% ==> ../configure --prefix=/usr/local/Cellar/libvpx/1.3.0 --enable-pic --disable-examples --disable-runtime-cpu-detect -- target=x86_64-darwin13-gcc ==> make install 🍺 /usr/local/Cellar/libvpx/1.3.0: 16 files, 2.0M, built in 61 seconds $ phpenv install --deep-clean $ phpenv install --releases
ついでにdevブランチになった上でもっかいinstall環境をきれいきれいしたった。これでどうや。
とかいろいろやったけど、もう疲れたよ…パトラッシュ。
*1:ページが開発中なのはわかるが、とても残念な感じだ…。