Posted at

仮想CentOS6.5にMailCatcherを導入する顛末

仮想マシンの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/rbenvrbenv/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