MacにHomebrewを使ってdovecotをインストールしてみた。
Symfony2の事についてほったらかしにしていますが、
テスト用にpopサーバが欲しくなったので書いてみますたノシ
仮想環境を使って作れば良いじゃんという話もありますが、それはめんどくさいので。。。
Homebrewを使うには、以下のurlよりお願いね。
macOS 用パッケージマネージャー — Homebrew
では早速dovecotをインストールしましょう。
brew install dovecot
こんな感じでインストールされます。
==> Downloading http://dovecot.org/releases/2.1/dovecot-2.1.15.tar.gz ######################################################################## 100.0% ==> ./configure --prefix=/usr/local/Cellar/dovecot/2.1.15 --libexecdir=/usr/local/Cellar/dovecot/2.1.15/libexec --sysco ==> make install ==> Caveats For Dovecot to work, you will need to do the following: 1) Create configuration in /usr/local/etc 2) If required by the configuration above, create a dovecot user and group 3) possibly create a launchd item in /Library/LaunchDaemons/homebrew.mxcl.dovecot.plist, like so: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>homebrew.mxcl.dovecot</string> <key>OnDemand</key> <false/> <key>ProgramArguments</key> <array> <string>/usr/local/sbin/dovecot</string> <string>-F</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceDescription</key> <string>Dovecot mail server</string> </dict> </plist> Source: http://wiki.dovecot.org/LaunchdInstall 4) start the server using: sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dovecot.plist ==> Summary /usr/local/Cellar/dovecot/2.1.15: 744 files, 13M, built in 2.2 minutes
インストールが終わったら、次にするのは設定ファイルの準備
cd /usr/local/etc/dovecot
まで移動すると中にREADMEファイルが。
それを見ると設定ファイルの場所が記述されているので、
/usr/local/etc/dovecotへとコピーしましょう。
cd /usr/local/etc/dovecot cp -pr /usr/local/Cellar/dovecot/2.1.15/share/doc/dovecot/example-config/dovecot.conf . cp -pr /usr/local/Cellar/dovecot/2.1.15/share/doc/dovecot/example-config/conf.d .
コピーする時は注意してください。
これで設定ファイルの準備が出来たので、
次に、launchdで起動できるようにplistファイルを作成します。
launchdというのは何かというと、説明できないので調べてください。
cd /Library/LaunchDaemons sudo vi homebrew.mxcl.dovecot.plist
rootユーザでplistファイルを作成します。
ここに記述する内容はインストール時に表示されていた
3)の内容を入力します。
入力したらlaunchctlでloadします。
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dovecot.plist
正直launchdとかlaunchctlとかよく分かっていません。
イメージとしてはLinuxやWindowsでいうサービスと同じ物かと思ってます。はい。
この設定をしておく事で、Macを再起動してもdovecotは勝手に自動起動されるようになります。
自動起動したくないという方は
sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.dovecot.plist
と入力して自動起動の設定を無効にしておきましょう。
launchctlを設定した時はページの下部も参考にしてね。
じゃあ早速dovecotを起動してみましょう。
ターミナルより
dovecot
と入力するだけでdovecotは起動するはずですが、、、あれれ
doveconf: Fatal: Error in configuration file /usr/local/etc/dovecot/conf.d/10-ssl.conf line 12: ssl_cert: Can't open file /etc/ssl/certs/dovecot.pem: No such file or directory
とエラーが出ました。
というわけで10-ssl.confの内容を修正しましょう。
#ssl = yes ↓ ssl = no
としてsslを無効にしましょう。
ついでに、
ssl_cert =
とコメントアウトしましょう。
もう一度dovecotと入力すると、、、、
doveconf: Fatal: Error in configuration file /usr/local/etc/dovecot/dovecot.conf: default_login_user doesn't exist: dovenull
今度は別のエラーが発生しました。
Dovecot2系からdovenullユーザーも必要になったんだけど、
dovenullユーザを作らないといけないんだなと思って
view /etc/passwd
とユーザを確認すると
_dovenull:*:227:227:Dovecot Authentication:/var/empty:/usr/bin/false
と_dovenullユーザとしてあるではありませんか!!!
ついでに_dovecotユーザもあるではりませんか!!!
なぜ「_」がついているのは分かりませんけど、これだけでは駄目みたいなので、
dovecot.confの最終行にエラーの内容を追加しましょう。
(追記)
なぜ「_」がつくのか調べてみました。
どうやらMacではデーモンで動作するユーザにはユーザ名の前に「_」をつけるようです。
Macはまだまだ知らない事だらけですね。
default_login_user = _dovenull
再度dovecotと実行すると、、、
doveconf: Fatal: Error in configuration file /usr/local/etc/dovecot/dovecot.conf: default_internal_user doesn't exist: dovecot
今度は別のエラーが出たので同じく、dovecot.confの最終行にエラーの内容を追加しましょう。
default_internal_user = _dovecot
もう大丈夫だろうと思って再度dovecotと実行すると、、、
無事に起動することが出来ました。
ps -ef | grep dovecot
と実行するとプロセスが実行している事が分かります。
以上でdovecotのインストールから実行まで終了しますたノシ
じゃあ次は実際にpopへ接続してみましょう。
popへはtelnetコマンドからつなぐとします。
telnet 127.0.0.1 110
これでログインできました。
次にpopコマンドでアクセスしましょう。
USER Macでログインしているユーザ名 +OK PASS Macでログインしているユーザのパスワード -ERR Authentication failed.
おぉっとエラーが発生しましたね。
というわけで早速解析してみましょう。
/var/log/mail.logを確認すると、、、
auth-worker(579): Error: pam(username,127.0.0.1): pam_authenticate() failed: authentication error (/etc/pam.d/dovecot missing?)
pam.dにdovecotなんてありませんよと言われてるっぽいですね。
これは困った、Macにpamなんてないし、、、、と悩んでいたのですが、
以下の方法でpamを使わずにMacのログイン機能(正しくは違いますが)を使っていけます。
cd /usr/local/etc/dovecot/conf.d vi auth-system.conf.ext
以下の場所にあるargs = loginを追加します。
passdb { driver = pam # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=] # [cache_key= ] [ ] #args = dovecot args = login }
追加後、dovecotをreloadすればOK!
と思いきやまたしてもエラーが発生。
dovecot.confの設定でpopをコメントアウトするのを忘れていました。
# Protocols we want to be serving. #protocols = imap pop3 lmtp ↓ # Protocols we want to be serving. protocols = pop3
imapを使いたい人はimapも一緒に書いとけば良いんだけど、今回は不要だからpop3のみにしています。
あともう一つ設定があって、古いdovecotなら既に設定されていたんだけど、mail_locationの設定が必要です。
というわけで、conf.d/10-mail.confを開いて、
## #mail_location = ↓ # # mail_location = maildir:~/Maildir
と変更しちゃいましょう。
一応これでtelnetから接続出来るようになりました。
ちなみにdovecotを停止するには
dovecot stop
と入力すればおk。
これで一通りdovecotの設定は終わりました。
ここからはlaunchctlを設定した話を前提とします。
launchctlで自動起動を有効にした後、Macを再起動するとdovecotはrootユーザでの実行となります。
そのため、dovecotを操作をするにはrootユーザかsudoを使っての操作となります。
但し、dovecotを実行するには/usr/local/sbinまで環境変数を設定しておく必要がありますのでご注意ください。
dovecot stop ではなく rootユーザで dovecot stop または sudo dovecot stop
で停止します。
→但し、plistにOnDemand falseと記述があるので、dovecotは停止してもすぐに起動されるのですがね。。
launchctlを有効にしていない方はrootユーザでなくてもdovecotと入力すれば起動されます。
))
以上で駆け足となりますが凄く適当に説明したので、Maildirの設定の仕方とかは他のページを参考にしてくだせぇ。
(追記 2013/03/05)
dovecot起動時に、
Warning: fd limit (ulimit -n) is lower than required under max. load (256 < 1000), because of default_client_count
と警告が発生した場合、dovecotを停止後、
ulimit -n 1024
と入力後、dovecotを起動すれば警告は発生しません。
まぁテスト的な環境だから特に気にする必要はありませんが一応念のため。。。