qmailのインストール

基本用語

ドメイン

個人や組織に割り当てられたインターネット上の(DNS的)名前。

メイルドメイン

メイルアドレスとして利用するドメイン。

ドメインパート(ドメイン部)

@より後ろの部分。

ローカルパート(ローカル部)

@より前の部分。ユーザ名かエイリアス。

(メイル)エイリアス

任意の名前をローカルパートにして、本来のアドレスに転送できる。 その名前をエイリアスという。メイルサーバ運用時には postmaster, abuse などのアドレスを作っておく 必要があり、それらは実際の管理者へのエイリアスにする。

インストールの流れ

  1. 圧縮されているソースプログラムを展開する
  2. 展開したディレクトリに移動してコンパイル
  3. 設定ファイルの作成
  4. デーモンプログラムの起動

ソースプログラムの展開

必要なファイルは /files ディレクトリにある。これを 展開してmake作業に入る。makeするための作業ディレクトリを作る。

% mkdir make
% cd make

作業ディレクトリで qmail の最新ソース netqmail-1.05.tar.gzを展開する。

% tar zxpf /files/netqmail-1.05.tar.gz
% ls
netqmail-1.05/

コンパイル

作成されたディレクトリに移動する。

% cd netqmail-1.05
% ls
COPYRIGHTS              md5sums                 other-patches/
README                  netqmail-1.05.patch     qmail-1.03.tar.gz
collate.sh*             old-patches/

一般的に README というファイルに最初に必要な手順が 書いてあることが多い。

% less README
This is the netqmail-1.05 distribution of qmail.  It is comprised
of qmail-1.03 plus a patch file, some documentation, and a shell
script which prepares the files for compilation.  More information
is available at http://qmail.org/netqmail/

To collate the sources, run ./collate.sh
It will create a netqmail-1.05 directory
and apply the patch.  Continue the install with:
http://www.lifewithqmail.org/lwq.html#installation

Note that we couldn't get the Solaris version of patch to work.  You
will have more happiness if you download patch from www.fsf.org.

If you want to verify the md5sums of the files as patch wrote
them here, run 'md5sum -c md5sums'.

Russ Nelson <nelson@qmail.org>
Charles Cazabon <charlesc-netqmail@discworld.dyndns.org>
Dave Sill <de5@sws5.ornl.gov>
Peter Samuel <Peter.Samuel@gormand.com.au>
Henning Brauer <henning@bsws.de>

本来はこのページを見て作業を進める。作業手順は

  1. パッチの適用

    netqmailは、qmailの作者による最新版 qmail-1.03 にパッチを当てる形式で配付されている。

  2. ユーザID/グループIDの追加

    qmailはスーパーユーザ権限で動くプログラムを最小にする というポリシーで設計されている。メイル配送に必要な細かい仕事を 分担する一般ユーザをいくつか作る必要がある。

  3. コンパイル&インストール

    実際にコンパイルする。

である。このうち2番については「OSによる違いが大きい」、 「面倒だがコピーペーストで終わってしまう」ことから、本講座では 全員分既に完了した状態にしてある。1と3を行なう。

パッチの適用を行なうスクリプトが用意されているのでこれを起動する。

% ./collate.sh

これでプログラム全体が netqmail-1.05 相当になった。実際にプログラムを コンパイルする。そのための手順が INSTALL.orig ファイルに 書かれている(抜粋)。

To create /var/qmail and configure qmail (won't interfere with sendmail):

 1. Create the qmail home directory:
       # mkdir /var/qmail

 2. Read INSTALL.ids. You must set up the qmail group and the qmail
    users before compiling the programs.

 3. Compile the programs and create the qmail directory tree:
       # make setup check

 4. Read INSTALL.ctl and FAQ. Minimal survival command:
       # ./config

 5. Read INSTALL.alias. Minimal survival command:
       # (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon
         .qmail-root)
       # chmod 644 ~alias/.qmail*

この手順に従う。ただし、ここから先はスーパーユーザ権限が要るので ユーザを変更する。

% sudo -H -s
# 

スーパユーザでコンパイルとインストールをする。

# cd netqmail-1.05
# mkdir /var/qmail
# make setup check
# ./config
# (cd ~alias; touch .qmail-{postmaster,mailer-daemon,root}
# chmod 644 ~alias/.qmail-*

設定ファイルの作成

最後の ./config で各種設定ファイルを自動生成している。 すでにこれだけでも動かすのに十分な最低限の設定が終わっている。 これらの設定ファイルを見ていこう。

# head /var/qmail/control/*
==> /var/qmail/control/defaultdomain <==
is.koeki-u.ac.jp

==> /var/qmail/control/locals <==
qm200.is.koeki-u.ac.jp

==> /var/qmail/control/me <==
qm200.is.koeki-u.ac.jp

==> /var/qmail/control/plusdomain <==
ac.jp

==> /var/qmail/control/rcpthosts <==
qm200.is.koeki-u.ac.jp

もうひとつ、コマンドラインでメイルを送るときにデフォルトで付ける メイルドメインを定義する。/var/qmail/control/defaulthost に そのホストの名前を書き込む。以下のようにする。

# hostname > /var/qmail/control/defaulthost
# cat !$

これで、defaulhostファイルに qmXXX.is.koeki-u.ac.jp が書き込まれる。

sendmailの置き換え

多くのシステムではメイルを配送するコマンドとして Sendmailを標準的に採用している。FreeBSDも該当し/usr/bin/sendmail を使うことになっている。sendmailではなくqmailのものを使うように変更する。

/etc/mail/mailer.conf に「どのような処理にどのコマンドを 使うか」という定義があるのでこのファイルを書き換える。

# vi /etc/mail/mailer.conf

1行目を以下のように書き換える。

修正前

sendmail	/usr/libexec/sendmail/sendmail
send-mail	/usr/libexec/sendmail/sendmail

修正後

sendmail	/var/qmail/bin/datemail
send-mail	/var/qmail/bin/datemail

デーモンプログラムの起動

以上で設定ファイルの作成まで完了した。プログラムを起動するための スクリプトを作成する。/var/qmail/boot に起動スクリプトの見 本があるので、これをコピーしてから編集する。ファイル名は /var/qmail/rc とする。

# pushd /var/qmail
# cp boot/home rc
# vi rc

/var/qmail/rc

#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/maildir/.

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./maildir/ splogger qmail &

変更点は下線で示した部分。

実際に起動してみる。

# /var/qmail/rc
# ps ax
  PID  TT  STAT      TIME COMMAND
  953  ??  SsJ    0:00.25 /usr/sbin/syslogd -s
 7206  ??  IsJ    0:00.00 /usr/sbin/sshd
 7207  ??  IsJ    0:00.02 sshd: i2006000 [priv] (sshd)
 7210  ??  SJ     0:00.16 sshd: i2006000@ttyp2 (sshd)
 7211  p2  SsJ    0:00.07 -zsh (zsh)
17112  p2  SJ     0:00.05 /bin/zsh
18883  p2  IJ     0:00.00 qmail-send
18884  p2  IJ     0:00.00 splogger qmail
18885  p2  IJ     0:00.00 qmail-lspawn ./maildir/
18886  p2  IJ     0:00.00 qmail-rspawn
18887  p2  IJ     0:00.00 qmail-clean
18893  p2  R+J    0:00.00 ps ax

qmail-send のプロセスがあることを確認する。

配送試験

自分宛にメイルを送ってみる。配送試験のときにはログファイルを 垂れ流し表示しておくとよい。そのためにktermをもう一枚起動しサーバマシン にログインしてメイルログを表示する。

  1. Xの背景画面でマウスの左クリックしアプリケーションメニューを出す
  2. KTermを選んで起動し新しく出現したktermを選択する
  3. ssh qm***.is.koeki-u.ac.jp でサーバマシンにログイン
  4. sudo tail -f /var/log/maillog する

元のktermに戻り、自分(i20060XX@qm***.is.koeki-u.ac.jp) 宛にメイルを送る。次のようにすると「今月のカレンダー」が自分宛に送れる。

# cal | Mail -s calendar i20060XX
(XXは自分の番号)

以下のようなログメッセージが書かれるはずである。

Mar  6 19:33:57 qm200 qmail: 1141641237.791199 new msg 141939
Mar  6 19:33:57 qm200 qmail: 1141641237.791351 info msg 141939: bytes 387 from <root@itl.koeki-u.ac.jp> qp 19139 uid 0
Mar  6 19:33:57 qm200 qmail: 1141641237.794099 starting delivery 1: msg 141939 to local i2006000@qm200.is.koeki-u.ac.jp
Mar  6 19:33:57 qm200 qmail: 1141641237.794184 status: local 1/10 remote 0/20
Mar  6 19:33:57 qm200 qmail: 1141641237.840656 delivery 1: success: did_1+0+0/
Mar  6 19:33:57 qm200 qmail: 1141641237.840854 status: local 0/10 remote 0/20
Mar  6 19:33:57 qm200 qmail: 1141641237.841067 end msg 141939

success と出ていれば配送成功だと分かる。実際に配送されるのは 一般ユーザの ~/maildir/new ディレクトリである。一般ユーザに 戻ってこのディレクトリを確認する。

# suspend
zsh: suspended  sudo -s -H
% cd          (ホームディレクトリに戻る)
% ls -l maildir/new
-rw-------  1 i2006000  471  3  6 19:33 1141641237.19142.qm200.is.koeki-u.ac.jp

実際にこのファイルを直接見て、送った内容が正しく届いているか確認する。

% less maildir/new/*

個人のメイル配送先を決めるファイルは ~/.qmail で その中には ./maildir/ と書かれている。qmailを初めて導入する ホストのユーザのホームディレクトリには通常 ~/.qmail~/maildir/ も存在しないので、その場合手動で作らなければなら ない。それには一般ユーザで以下のようにする。

% /var/qmail/bin/maildirmake ~/maildir
% echo ./maildir/ > ~/.qmail

SMTPサーバの起動設定

ucspi-tcpのインストール

外からのメイルが届くようにSMTPサーバ(qmail-smtpd)を 起動する。そのために ucspi-tcp というパッケージを利用する。 ucspi-tcp-0.88.tar.gz/files に置いてあるので これを展開し、コンパイルする。

% cd ~/make
% tar zxpf /files/ucspi-tcp-0.88.tar.gz
% ls
netqmail-1.05/  ucspi-tcp-0.88/
% cd ucspi-tcp-0.88

ucspi-tcp-0.88 はmakeの事前準備としては、 インストールするディレクトリを指定するだけである。インストールするディレ クトリは conf-home に記述しておく。

% vi conf-home

もともと /usr/local と書かれているのでこれを /var/local に変える。修正が終わったら ZZ で保存&終了す る。

スーパーユーザに戻り、ucspi-tcp-0.88 ディレクトリに 入ってmakeする。

% fg
# pwd
/var/qmail
# dirs
0       /var/qmail
1       /home/i2006000/make/netqmail-1.05/netqmail-1.05
# pushd
/home/i2006000/make/netqmail-1.05/netqmail-1.05 /var/qmail
# cd ../../ucspi-tcp-0.88
# make setup check
# ls /var/local/bin
addcr*          finger@*        mconnect-io*    tcpclient*      who@*
argv0*          fixcrio*        rblsmtpd*       tcprules*
date@*          http@*          recordio*       tcprulescheck*
delcr*          mconnect*       tcpcat*         tcpserver*

/var/local/bin/tcpserver を使って qmail-smtpd を起動する。

tcpserver経由のsmtpd起動

smtpdの起動を管理するディレクトリを新規に作成し、そこに移動する。

# mkdir /var/qmail/qmail-smtpd
# cd !$

tcpserver用のアクセス制御ファイルを smtp という名前で作成する。

# vi smtp

smtp

127.0.0.1:allow,RELAYCLIENT=""
172.19.5.:allow,RELAYCLIENT=""
172.21.90.10:allow,RELAYCLIENT=""
:allow

アクセス制御ファイルをバイナリ形式(smtp.cdb)に変換する。

# PATH=/var/local/bin:$PATH
# tcprules smtp.cdb tmp < smtp
# ls -l
total 6
-rw-r--r--  1 root  qmail    69  3  7 11:55 smtp
-rw-r--r--  1 root  qmail  2166  3  7 11:56 smtp.cdb

qmail-smtpd 起動用シェルスクリプトを作成する。

# vi start-smtpd.sh

/var/qmail/qmail-smtpd/start-smtpd.sh

#!/bin/sh
mydir=`dirname $0`
uid=`id -u qmaild`
gid=`id -g qmaild`
cd $mydir
exec env - \
PATH=/var/local/bin:/var/qmail/bin:/bin:/sbin:/usr/bin:/usr/sbin \
tcpserver -vR -c40 -p -u $uid -g $gid -x smtp.cdb 0 \
    smtp qmail-smtpd 2>&1 | splogger qmail-smtpd &

シェルスクリプトに実行属性を付ける。

# chmod +x start-smtpd.sh

このスクリプトを起動するとSMTP(25)ポートで待ち受ける形でsmtpサーバが 上がる。起動前と起動後の待ち受け状態は netstat と telnet で確認できる。

SMTPのプロトコルコマンドについては次回実験する。

実際に外部ホスト(irsv)からメイルを送ってみる。 irsvで起動しているktermのコマンドラインからメッセージを送信する。 Mailコマンドを利用する。

irsv% Mail -s test i2006XXX@qm**.is.koeki-u.ac.jp
とどくかな届くかな。
えいやっ。
C-d

最後の行は C-d をタイプする。

システムの初期化ファイルに登録

リブート後にも起動するよう /etc/rc.local を 作成する。

# vi /etc/rc.local

/etc/rc.local

#
# rc.local
#

# Starting qmail
if [ -x /var/qmail/rc ]; then
	/var/qmail/rc; 				echo -n ' qmail'
fi

# Starting qmail-smtpd
if [ -x /var/qmail/qmail-smtpd/start-smtpd.sh ]; then
	/var/qmail/qmail-smtpd/start-smtpd.sh;	echo -n ' smtpd'
fi

目次


(C)2006 HIROSE Lab. koeki-u.ac.jp