仮想マシンのCentOS6.5にmailcatcherを導入しようと思うも、色々と躓くところがあったので顛末を記録しておく。
環境
- CentOS release 6.5 (Final)
TL;DR
1. 必要になるライブラリをあらかじめ入れておく
$ yum install -y openssl-devel readline-devel zlib-devel gcc-c++ sqlite sqlite-devel ruby ruby-devel rubygems
2. NSSの更新
$ yum update nss nss-util nspr
3. rbenv の導入と、もう少し新しいRubyのインストール
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ ~/.rbenv/bin/rbenv init
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv install -v 2.0.0-p648
$ rbenv global 2.0.0-p648
4. mailcatcher インストールと起動
$ gem install mailcatcher
$ mailcatcher --ip=0.0.0.0
Ruby周りの導入
まず mailcatcher は rubygems でインストールするのだけれど、その際に前提条件としてRubyのバージョンは1.9.3以上が必要になる。
mailcatcher requires Ruby version >= 1.9.3
CentOS6.5にバンドルされているRubyは1.8.7と古いので、この際 rbenv でもう少し新しいバージョンを入れておく。詳細は rbenv/rbenv と rbenv/ruby-build を参考にされたし。
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ ~/.rbenv/bin/rbenv init
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv が導入できたら2.0.0あたりを入れておく。
$ rbenv install --list # バージョンのリストを確認
$ rbenv install -v 2.0.0-p648
ここで curl: (35) SSL connect error
のエラーが発生してRubyのダウンロードに失敗する(ここでの調査に結構な時間を要することになる)
結論から言うと「pycurlで「(35, 'SSL connect error')」が出るときの対処法(のうちの1つ) - Qiita」が参考になった。
NSSが脆弱性のあるバージョンで、アップデートの必要があるとのこと。
$ yum update nss nss-util nspr
$ rbenv install -v 2.0.0-p648
さらに Build Failed のエラーが吐かれるので、エラーメッセージに従って不足ライブラリをyumで入れる。
$ yum install -y openssl-devel readline-devel zlib-devel
$ rbenv install -v 2.0.0-p648
ビルドが通り、Rubyの2.0.0がインストールされた。globalに適用する。
$ rbenv global 2.0.0-p648
$ ruby --version
ruby 2.0.0p648 (2015-12-16 revision 53162) [x86_64-linux]
Mailcatcherのインストール
Rubyの準備が整ったら gem コマンドで mailcatcher のインストールを行う。
$ gem install mailcatcher
エラーが吐かれたので不足しているライブラリを導入して再試行。成功した。
$ yum install -y gcc-c++ sqlite sqlite-devel
$ gem install mailcatcher
早速起動。IPアドレスはデフォルトだと127.0.0.1で都合が悪いので、0.0.0.0とする。
$ mailcatcher --ip=0.0.0.0
ホストからブラウザでアクセスできるようにポートを開放しておこう。
$ vim /etc/sysconfig/iptables
$ sudo /etc/init.d/iptables reload
PHPからのメール送信をキャッチしてみる
PHPから使いたかったので、php.ini の sendmail_path を書き換える。送信テストは成功した。
sendmail_path = /usr/bin/env catchmail