色々と思いを巡らしていてもしょうがないので、まずは一度Postfixを入れてみることにしよう。
実験の一番の目的はDBでバーチャルホスト用のメールアカウントを管理することなので、LANの中だけでテストしていても面白くない。
そこで、実環境で稼働している二台目のサーバーを使って実験することにした。
このサーバはWebサーバーとしての役割がメインで、メールについてはこれまでセカンダリーサーバーとしての役割とJmailの開発実験用だった。
Jmailはサーバーにアカウントを用意しているのではなく、Jmail用のドメイン宛のメールは一括で受信処理用のプログラムに渡して処理させている。
自分がログインするアカウント宛にメールが来ても全てメインサーバーのメールアカウント宛に転送しているので、このサーバーにはこれまでメールを受け取るアカウントが存在していない。
すなわち、実験中にメールの処理が出来なくても運用上支障がないとても都合の良いサーバーなのだ。
と言う訳で二台目のサーバーのMTAをPostfixに変え、適当にサブドメインでバーチャルホストを実現し、DBを使ったメールアカウント管理の実験を行おう。
まずは作業開始前のサーバーの状況。
OS:FreeBSD 6.0
MTA:Sendmail 8.13.4
DB:PostgreSQL 8.3.0
と言った構成である。
最初にどこから手を付けるかといえば、MTAをPostfixにしてみることが先決。
と思ったが、メインサーバーの移行時のことを考えると現状のSendmailでmbox形式でメールを受け取らせておいて、Postfix移行時にMaildir形式へコンバートする実験も行わないといけない。
と言う訳で実験用にアカウントを作成。そのアカウント宛にメールを送りメールスプールに貯まっていることを確認した。
続いてPostfixのインストール開始。
まずはPostfixのサイトからソースをダウンロードする。私が実験を始めた時の最新バーションは v2.5.5 だった。
ダウンロードしたファイルを展開し作業開始。
初回のインストールなので本当は必要ないが、なんとなくおまじないとして初期化から行う。
# make tidy
次にMakefileの初期化を行うが、PostgreSQLに対応させるためにはオプションの指定が必要となるみたいだ。
指定する内容はPostgreSQLのヘッダーファイルの在りかとライブラリーの在りか。
私のサーバではPostgreSQLのディレクトリ内に両方があったので、その場所を指定してMakefileの初期化を行った。
# make -f Makefile.init makefiles 'CCARGS=-DHAS_PGSQL -I/usr/local/pgsql/include' 'AUXLIBS=-L/usr/local/pgsql/lib -lpq'
無事初期化を終えたらコンパイル開始ということで、お決まりの
# make
を実行する。
make が無事終わったら make install を行う前にPostfix用の実行アカウントとグループ、それとmaildropの処理で使われるグループを作成しておく。
# pw groupadd postfix
# pw groupadd postdrop
# pw useradd postfix -g postfix -d /nonexistent -s /usr/sbin/nologin
更に、Sendmailを終了させOSの再起動時に動かないよう/etc/rc.confを書き換えておく。
そして、現在のSendmail関連のファイルを待避させる。
# mv /usr/sbin/sendmail /usr/sbin/sendmail.OLD
# mv /usr/bin/newaliases /usr/bin/newaliases.OLD
# mv /usr/bin/mailq /usr/bin/mailq.OLD
ここまで用意できたらいよいよインストール実行。
# make install
途中で設定ファイル等のインストール先を聞かれる。
本を読んでも、いろいろなWebサイトを見ても、ここで聞かれることに対しては基本的にデフォルト値から変える必要がないので[Enter]を押していけばよいと書いてある。
しかし!
私のインストール環境ではどういう訳かデフォルト値が空になっている...
何かがおかしい。でも、何がおかしいのか分からないので、とりあえず聞かれた項目に一つずつ答えていく。
最後のsetgid_groupを入力し終えるとインストールが始まった。
が、途中でlibpq.so.5が見つからないとエラーを吐いて止まってしまった。
libpq.so.5自体はMakefileの初期化を行った際に指定した /usr/local/pgsql/lib の中にちゃんとある。
なのに見つからないと怒られる...なぜ(ToT)
で、makeの実行状況をよく見ると /usr/local/lib の中から libpq.so.5 を読み出そうとしている。
いやいや、折角Makefileの初期化をする際にディレクトリを指定したのに、なぜ指定したディレクトリから探してくれないんだ。
何度かmakeをやり直してみたが結果は同じ。
う~ん、これってMakefileのバグ??
などと悩んでてもしょうがないので、とりあえず /usr/local/lib の中に libpq.so.5 をコピーしてやる。
# cp /usr/local/pgsql/lib/libpq.so.5 /usr/local/lib
もう一度make tidyからやり直してやると、今度はインストール先等を聞かれた時にちゃんとデフォルト値が入っている。明らかに先ほどとは違う。
で、進んでいくと見事インストール成功!!
後は /etc/postfix/main.cf を動作環境に合わせていじってやる。
とりあえずメールスプールはmbox形式のままで動かしてみることにして、変更した内容は以下のような感じ。
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
html_directory = no
manpage_directory = /usr/local/man
sample_directory = /etc/postfix
readme_directory = no
mail_spool_directory = /var/mail
#home_mailbox = Mailbox
#home_mailbox = Maildir/
mail_owner = postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
relay_domains = $mydestination, $mydomain
alias_maps = hash:/etc/mail/aliases
alias_database = hash:/etc/mail/aliases
virtual_alias_maps = hash:/etc/mail/virtusertable
virtual_alias_domains = /etc/mail/virtuser-domains
disable_vrfy_command = yes
smtpd_helo_required = yes
コメント等は端折ってあるのでご容赦ください。
準備が出来たらいよいよPostfixの起動。
# /usr/sbin/postfix start
syslogを見るとちゃんと起動できていそう...
先ほど作った実験用のアカウント宛やJmailのアカウント宛にメールを送ってみると無事届いた。
まずはPostfixのインストール成功!
次はいよいよPostgreSQLを使う実験だな。