qmail + quickml を使ってみる quickml http://namazu.org/~satoru/quickml/ qmail を動かすホストと同じホスト上で qmail サーバーを動かす。 すでに qmail は tcpserver と daemontools の管理下で動作しているものとする。 ! 参考 quickmlサーバ: 他のMTAと共存させる方法 http://namazu.org/~satoru/quickml/with-mta.ja.html UNIX USER 2004.03 の特集「 独自に QuickML の環境を構築する 」 http://www.unixuser.jp/magazine/2004/200403.html 同一ホスト上での postfix と qmail での設定例がある。 QuickMLとsendmailを同一ホストに共存させる http://www.on.rim.or.jp/~kaw/sendmail/quickml-with-sendmail.html Sendmail の設定だけどメールの動作の図解がある。 qmail の動作 http://www.unixuser.org/~euske/doc/qmail/ qmail のメールキューの動作の図解がある。 ! 環境 Plamo Linux 2.x ! QuickML 取得してコンパイルする。 rin@sakura[~/usr/local]% wget http://quickml.com/quickml/quickml-0.7.tar.gz rin@sakura[~/usr/local]% tar xzf quickml-0.7.tar.gz rin@sakura[~/usr/local]% cd quickml-0.7 rin@sakura[~/usr/local/quickml-0.7]% ./configure && make checking for a BSD-compatible install... /bin/install -c checking whether build environment is sane... yes checking for gawk... gawk checking whether make sets $(MAKE)... yes checking for a BSD-compatible install... /bin/install -c checking whether ln -s works... yes checking whether make sets $(MAKE)... (cached) yes checking for ruby... /usr/local/bin/ruby checking where .rb files should go... /usr/local/lib/ruby/site_ruby/1.8 checking whether to enable maintainer-specific portions of Makefiles... no configure: creating ./config.status config.status: creating Makefile config.status: creating lib/Makefile config.status: creating lib/quickml/Makefile Making all in lib make[1]: 入ります ディレクトリ `/home/rin/usr/local/quickml-0.7/lib' Making all in quickml make[2]: 入ります ディレクトリ `/home/rin/usr/local/quickml-0.7/lib/quickml' rm -f version.rb sed -e 's!%VERSION%!0.7!g' \ version.rb.in > version.rb make[2]: 出ます ディレクトリ `/home/rin/usr/local/quickml-0.7/lib/quickml' make[2]: 入ります ディレクトリ `/home/rin/usr/local/quickml-0.7/lib' make[2]: `all-am' に対して行うべき事はありません。 make[2]: 出ます ディレクトリ `/home/rin/usr/local/quickml-0.7/lib' make[1]: 出ます ディレクトリ `/home/rin/usr/local/quickml-0.7/lib' Making all in . make[1]: 入ります ディレクトリ `/home/rin/usr/local/quickml-0.7' rm -f quickml-analog sed -e 's!%RUBY%!/usr/local/bin/ruby!g' \ quickml-analog.in > quickml-analog chmod +x quickml-analog chmod -w quickml-analog for i in messages.ja; do\ /usr/local/bin/ruby lib/quickml/gettext.rb $i quickml.in lib/quickml/*.rb;\ done rm -f quickml sed -e 's!%RUBY%!/usr/local/bin/ruby!g' \ -e 's!%SYSCONFDIR%!/usr/local/etc!g' quickml.in >quickml chmod +x quickml chmod -w quickml rm -f quickml-ctl sed -e 's!%SBINDIR%!/usr/local/sbin!g' \ -e 's!%PIDFILE%!/var/run/quickml.pid!g' \ quickml-ctl.in > quickml-ctl chmod +x quickml-ctl chmod -w quickml-analog rm -f quickmlrc.sample sed -e 's!%LOCALSTATEDIR%!/usr/local/var/quickml!g' \ -e 's!%DATADIR%!/usr/local/share!g' \ -e 's!%USER%!root!g' \ -e 's!%GROUP%!root!g' \ -e 's!%PIDFILE%!/var/run/quickml.pid!g' \ -e 's!%LOGFILE%!/var/log/quickml.log!g' \ quickmlrc.sample.in > quickmlrc.sample make[1]: 出ます ディレクトリ `/home/rin/usr/local/quickml-0.7' インストールする。 rin@sakura[~/usr/local/quickml-0.7]% su bash-2.04# make install Making install in lib make[1]: 入ります ディレクトリ `/home/rin/usr/local/quickml-0.7/lib' Making install in quickml make[2]: 入ります ディレクトリ `/home/rin/usr/local/quickml-0.7/lib/quickml' make[3]: 入ります ディレクトリ `/home/rin/usr/local/quickml-0.7/lib/quickml' make[3]: `install-exec-am' に対して行うべき事はありません。 test -z "/usr/local/lib/ruby/site_ruby/1.8/quickml" || mkdir -p -- . "/usr/local/lib/ruby/site_ruby/1.8/quickml" /bin/install -c -m 644 'config.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/config.rb' /bin/install -c -m 644 'gettext.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/gettext.rb' /bin/install -c -m 644 'mail.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/mail.rb' /bin/install -c -m 644 'sweeper.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/sweeper.rb' /bin/install -c -m 644 'core.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/core.rb' /bin/install -c -m 644 'logger.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/logger.rb' /bin/install -c -m 644 'server.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/server.rb' /bin/install -c -m 644 'utils.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/utils.rb' /bin/install -c -m 644 'version.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml/version.rb' make[3]: 出ます ディレクトリ `/home/rin/usr/local/quickml-0.7/lib/quickml' make[2]: 出ます ディレクトリ `/home/rin/usr/local/quickml-0.7/lib/quickml' make[2]: 入ります ディレクトリ `/home/rin/usr/local/quickml-0.7/lib' make[3]: 入ります ディレクトリ `/home/rin/usr/local/quickml-0.7/lib' make[3]: `install-exec-am' に対して行うべき事はありません。 test -z "/usr/local/lib/ruby/site_ruby/1.8" || mkdir -p -- . "/usr/local/lib/ruby/site_ruby/1.8" /bin/install -c -m 644 'quickml.rb' '/usr/local/lib/ruby/site_ruby/1.8/quickml.rb' make[3]: 出ます ディレクトリ `/home/rin/usr/local/quickml-0.7/lib' make[2]: 出ます ディレクトリ `/home/rin/usr/local/quickml-0.7/lib' make[1]: 出ます ディレクトリ `/home/rin/usr/local/quickml-0.7/lib' Making install in . make[1]: 入ります ディレクトリ `/home/rin/usr/local/quickml-0.7' make[2]: 入ります ディレクトリ `/home/rin/usr/local/quickml-0.7' test -z "/usr/local/bin" || mkdir -p -- . "/usr/local/bin" /bin/install -c 'quickml-analog' '/usr/local/bin/quickml-analog' test -z "/usr/local/sbin" || mkdir -p -- . "/usr/local/sbin" /bin/install -c 'quickml' '/usr/local/sbin/quickml' /bin/install -c 'quickml-ctl' '/usr/local/sbin/quickml-ctl' mkdir -p /usr/local/var/quickml chown -R root /usr/local/var/quickml chgrp -R root /usr/local/var/quickml chmod 750 /usr/local/var/quickml test -z "/usr/local/etc" || mkdir -p -- . "/usr/local/etc" /bin/install -c -m 644 'quickmlrc.sample' '/usr/local/etc/quickmlrc.sample' make[2]: 出ます ディレクトリ `/home/rin/usr/local/quickml-0.7' make[1]: 出ます ディレクトリ `/home/rin/usr/local/quickml-0.7' !! 設定ファイル quickmlrc を編集する。 bash-2.04# cd /usr/local/etc bash-2.04# cp quickmlrc.sample quickmlrc bash-2.04# diff -u quickmlrc.sample quickmlrc --- quickmlrc.sample Fri Apr 1 18:44:41 2005 +++ quickmlrc Mon Apr 25 23:41:16 2005 @@ -1,14 +1,14 @@ # -*- mode: ruby -*- Config = { - :user => "root", - :group => "root", - :port => 25, + :user => "quickml", + :group => "quickml", + :port => 10025, :bind_address => "0.0.0.0", - :smtp_host => 'mail.example.net', + :smtp_host => '127.0.0.1', :smtp_port => 25, - :domain => 'example.net', - :postmaster => "postmaster@example.net", + :domain => 'qml.area51.gr.jp', + :postmaster => "rin@maaya.jp", :info_url => "http://QuickML.com/", :data_dir => '/usr/local/var/quickml', @@ -25,7 +25,7 @@ :sweep_interval => 3600, :max_threads => 10, :timeout => 120, - :use_qmail_verp => false, + :use_qmail_verp => true, :confirm_ml_creation => false, # for confirming ML creation. (experimental) bash-2.04# !! 開始 bash-2.04# quickml-ctl start Starting QuickML services: /usr/local/lib/ruby/site_ruby/1.8/quickml/gettext.rb:55:in `load': No such file to load -- /usr/local/share/messages.ja (LoadError) from /usr/local/lib/ruby/site_ruby/1.8/quickml/gettext.rb:55:in `initialize' from /usr/local/lib/ruby/site_ruby/1.8/quickml/config.rb:48:in `new' from /usr/local/lib/ruby/site_ruby/1.8/quickml/config.rb:48:in `initialize' from /usr/local/lib/ruby/site_ruby/1.8/quickml/config.rb:76:in `new' from /usr/local/lib/ruby/site_ruby/1.8/quickml/config.rb:76:in `load' from /usr/local/sbin/quickml:66:in `main' from /usr/local/sbin/quickml:81 怒られたのでコピーする。 bash-2.04# cp /home/rin/usr/local/quickml-0.7/messages.ja /usr/local/share/ もいっかい開始 bash-2.04# quickml-ctl start ! qmail との共存 他の MTA と共存させる方法を参考に設定する。 http://namazu.org/~satoru/quickml/with-mta.ja.html !! DNS を設定する mail.area51.gr.jp を MTA サーバーとする。 mail.area51.gr.jp の MX レコードを mail.area51.gr.jp にする。 mail.area51.gr.jp の A レコードを 218.45.22.71 にする。 qml.area51.gr.jp を QuickML サーバーとする。 qml.area51.gr.jp の MX レコードを qml.area51.gr.jp にする。 qml.area51.gr.jp の A レコードを 218.45.22.71 にする。 !! qmail の設定 qml.area51.gr.jp からメールを受信し、 ローカルネットワークから外部ネットワークへメールを転送するようにする。 qml.area51.gr.jp 宛てのメールを qmail -> qml へと渡す。 rin@sakura[/var/qmail/control]% cat smtproutes qml.area51.gr.jp:127.0.0.1:10025 qml => qmail => 外部へのメールを転送させるために qml を許可する。 rin@sakura[/var/qmail/control]% cat rcpthosts area51.gr.jp qml.area51.gr.jp !! tcpserver qmail-smptd をローカルネットワークのホストからのメール転送を許可する。 rin@sakura[~]% cat /etc/tcp.smtp # # qmail-smtpd config # .area51.gr.jp:allow,RELAYCLIENT="" 192.168.0.:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT="" :allow 設定を変えたら再起動させておく。 bash-2.04# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp bash-2.04# svc -d /service/smtpd/ bash-2.04# svc -u /service/smtpd/ !! quickml のユーザーとグループを作成する bash-2.04# mkdir /home/quickml bash-2.04# groupadd quickml bash-2.04# useradd -g quickml quickml quickml を再起動させる。 bash-2.04# quickml-ctl restart ! 動作確認 hogehoge@qml.area51.gr.jp に送信して ML が作られることを確認する。