Amimoto AMIのEC2にphpenvを使ってphpをインストールし直す

Amimoto AMIのEC2にphpenvを使ってphpをインストールし直す

# phpenv + php-buildでMagentoのデバッグをしやすく
Magento本体、エクステンションはWordpressと比べてもphpバージョンに依存することが多く、導入時には複数のphpバージョンでテストする必要がある。
いちいちインスタンスを建てるのは面倒なので、ひとつのインスタンスでテストできるようにphpenvとphp-buildでバージョンを切り替えられるようにする。

# 更新状況
随時更新予定！
- 2014/03/02 23:07 最初の投稿

# アジェンダ

# 環境
## サーバー
- AWS EC2 Tokyo Region
 - t1.micro Instance
 - AMIMOTO.AMI
- Amazon Linux OS
- nginx version: nginx/1.4.3

## ソフトウェア
- Magento Community Edition(CE) 1.8.0.0
- WordPressを同サーバーに共存

# 0.前準備
Amimoto AMIでAmazon Linux OSインスタンスを立ち上げてることを前提とする。
既にphp5.4がインストールされているので、まずはこれをアンインストールするところからはじめる。
なお、phpビルドするときにCompilingでハイパー時間かかるので、一時的にインスタンスタイプを上げておいたほうが良いかもしれない。

# 1.php5.4のアンインストール

```Bash:Terminal
yum erase php*
```

yumを使って、サーバーにインストールされているphp関連のパッケージを削除。
アスタリスクを使って、php全てをヒットさせる。

# 2.phpenvのインストール

```Bash:Terminal
curl https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash
```

自動でgitからダウンロード、インストールされる。
終了時のメッセージにある通り、.bashrcまたは.zshrcの末尾に以下の２行を追加

```Bash:Terminal
vi ~/.bashrc
```

```Bash:Terminal
PATH=$HOME/.phpenv/bin:$PATH # Add phpenv to PATH for scripting
eval "$(phpenv init -)"
```

# 3.php-buildのインストール

```Bash:Terminal
mkdir $HOME/.phpenv/plugins
cd $HOME/.phpenv/plugins
git clone git://github.com/CHH/php-build.git
```

$HOME/.phpenv/plugins以下にphp-buildフォルダを置くだけで、php-buildプラグインが使用可能になる。

# 4.コンパイラをインストール
php-buildでビルドするとき、gccツールを使ってインストールする。
Amimoto AMIにはgccは標準でインストールされていないので、yumを使ってインストールしておく。

```Bash:Terminal
yum install gcc
```

# 5.phpをビルドするときに依存するパッケージをインストール

```Bash:Terminal
yum --enablerepo=epel install re2c libmcrypt libmcrypt-devel
yum install libxml2-devel bison bison-devel openssl-devel curl-devel libjpeg-devel libpng-devel libmcrypt-devel readline-devel libtidy-devel libxslt-devel httpd-devel enchant-devel libXpm libXpm-devel freetype-devel t1lib t1lib-devel gmp-devel libc-client-devel libicu-devel oniguruma-devel net-snmp net-snmp-devel bzip2-devel
```

後でエラー見ていちいちインストールしてたんでは時間の無駄なので、先にインストールしておく。

# 6.各バージョンのphpをビルド

```Bash:Terminal
phpenv install --complete
```

このコマンドで、インストール可能な全バージョンが表示される。
今回は試しに5.3.28をはじめにインストール。

## php 5.3.28

```Bash:Terminal
phpenv install 5.3.28
```
```Bash:Terminal
[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.3.28 into /root/.phpenv/versions/5.3.28
-[Downloading]: http://www.php.net/distributions/php-5.3.28.tar.bz2
-[Preparing]: /tmp/php-build/source/5.3.28
-[Compiling]: /tmp/php-build/source/5.3.28
[Pyrus]: Downloading from http://pear2.php.net/pyrus.phar
[Pyrus]: Installing executable in /root/.phpenv/versions/5.3.28/bin/pyrus
[XDebug]: Downloading http://xdebug.org/files/xdebug-2.2.3.tgz
[XDebug]: Compiling in /tmp/php-build/source/xdebug-2.2.3
[XDebug]: Installing XDebug configuration in /root/.phpenv/versions/5.3.28/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.3.28.20140302222943.log
[Success]: Built 5.3.28 successfully.
```

Compilingに鬼時間かかるけど黙って待機。
Successで完了。

## php 5.5.9
```Bash:Terminal
phpenv install 5.5.9
```


```Bash:Terminal
[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 /root/.phpenv/versions/5.5.9
-[Downloading]: http://www.php.net/distributions/php-5.5.9.tar.bz2
-[Preparing]: /tmp/php-build/source/5.5.9
-[Compiling]: /tmp/php-build/source/5.5.9
```

Compilingにやっぱり鬼時間かかるけど黙って待機。
Successで完了。