連載
» 2002年11月02日 00時00分 UPDATE

実用qmailサーバ運用・管理術(13):qmailをより使いこなすTips(インストール関連編) (1/2)

本連載の総仕上げとして、アフターフォローや小ネタを含めたTipsを紹介する。今回はインストール関連編として、RPMを中心とした話題を集めてみた。

[鶴長鎮一,@IT]

 「実用qmailサーバ運用・管理術」を締めくくるに当たり、いままで紹介し切れなかったことをTipsとして2回にわたって紹介します。前回のトラブルシューティングと同様、すべてを網羅することはできないので、実際の運用で使われる頻度が高そうなものを見ていきましょう。

RPMでインストールしたい その1

 本連載では、パッケージの導入をソースからインストールする方法で説明してきました。しかし、最近のLinuxディストリビューションにはRPMなどのパッケージ管理ツールが備わっており、パッケージの依存性が崩れてしまうなどの懸念からかソースからのインストールを嫌う方もいるようです。qmailをソースからインストールしてもパッケージの依存性を損なうことはありませんが、パッケージ管理ツールで一元管理できるメリットも捨て難いものです。そこで、現在最も普及しているパッケージ管理システムであるRPM(Red Hat Package Manager)を例に見ていきましょう。

 RPMといっても、実はバージョンによって実行するコマンドや用意するファイルが違ってきます。ここではバージョン4以上を前提にします(バージョン3の場合は、注を参照ください)。RPMのバージョンは、以下の方法で確認できます。

# rpm --version
RPM バージョン 4.1

qmailインストールの前に

 1つのサーバに2つのMTAは要らないので、sendmailを削除します。残しておくとqmailのインストールの際にエラーが発生します()。

注:qmailをインストールすると、/var/qmail/bin/sendmailをリンク元として/usr/lib/sendmailが作成されます。

# rpm -e sendmail

 場合によっては依存関係を無視する必要があります。

# rpm -e --nodeps sendmail

 PostfixがデフォルトのMTAとして動作している場合もあるため、これを削除するかサービスの自動起動をntsysvなどのコマンドで解除しておきます。

RPMによるqmailのインストール

 次にqmailのRPMファイルを入手してインストールするわけですが、ビルドされたRPMが公開されていない()ため、SRPMを入手してrpmbuildを実行し、ビルド済みRPMファイルを作成する必要があります。

注:公開されているqmail-1.03-109memphis.src.rpmは、実際にはmakeまで終了しているバイナリで構成されています。

# rpm -Uvh http://www.qmail.org/rpms/var-qmail/qmail-1.03-109memphis.src.rpm
注:src.rpmファイルをローカルに保存し、そこからインストールすることも可能です。

# rpmbuild -ba /usr/src/redhat/SPECS/var-qmail.spec
注:Red Hat Linuxの場合。Turbolinuxでは/usr/src/turbo/、/var/src/rpmとなるなど、ディストリビューションによって異なります。

注:rpm バージョン3の場合は、# rpm -ba /usr/src/redhat/SPECS/var-qmail.spec

 rpmbuildが終わったら、ビルド済みRPMファイルをインストールします。ただし、ここで作成したRPMファイルにはqmail-date-localtime.patchが適用されていないため、ヘッダに記録される日付・時間情報がローカルタイムになりません。qmail-date-localtime.patchを適用するには、後述の「RPMでインストールしたqmailにパッチを当てるには」を参照してください。

# rpm -Uvh /usr/src/redhat/RPMS/i386/qmail-1.03-109memphis.i386.rpm
注:パスはRed Hat Linuxの場合。

 ここまでの操作で「./config-fast ホスト名」()まで実行してくれるため、ほとんど手を加える必要はありません。ただ、Maildir形式でメッセージを保存する場合は/var/qmail/rcファイルを編集します。

注:ホスト名には「hostname -f」の値が使われます。

#!/bin/sh

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

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail ←./Mailboxから書き換え
/var/qmail/rc

 確認のため配信テストを行います。

# /var/qmail/rc &
# echo to: root@host.example.jp | /var/qmail/bin/qmail-inject

RPMによるtcpserverのインストールと設定

 以上の作業で、xinetdやinetdを使ってqmailを動作させることはできますが、qmailといえばやはりucspi-tcpパッケージに含まれるtcpserverです。ucspi-tcpはビルドされたRPMファイルが用意されているため、checkpassword-0.90-1と併せて入手・インストールします。

# rpm -ivh http://www.qmail.org/rpms/qmail-run/ucspi-tcp-0.88-003memphis.i386.rpm
# rpm -ivh http://www.qmail.org/rpms/qmail-addons/checkpassword-0.90-1memphis.i386.rpm

 残りの作業は第1回 qmailによるSMTPサーバの構築の「tcpserverのインストールとcdbの作成」以降と同じように行います。

 まず、次のような/etc/tcp.smtpファイルを用意し、

192.168.0.:allow,RELAYCLIENT="" ←環境に合わせて変更 127.:allow,RELAYCLIENT=""
/etc/tcp.smtp

以下のようにしてcdbファイルを作成します。

# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

 cdbファイルを作成したら、rcスクリプトを用意します。

#!/bin/sh
#
# qmail: /var/qmail
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin

[ -f /var/qmail/rc ] || exit 0

case "$1" in
  start)
        # Start daemons.
        echo "Starting qmail."
        csh -cf '/var/qmail/rc &'
        #For SMTP
        tcpserver -v -u 108 -g 502 -x /etc/tcp.smtp.cdb \ ←ユーザーID:108、グループID:502を使用
        0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
        #For POP3
        tcpserver -v 0 pop3 /var/qmail/bin/qmail-popup ホスト名.ドメイン名 /bin/checkpassword \ ←環境に合わせて書き換え
        /var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger pop3d3 &
        echo
        touch /var/lock/qmail
        ;;
  stop)
        # Stop daemons.
        echo "Shutting down qmail."
        PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
        if [ ! -z "$PID" ] ;  then
            /bin/kill ${PID} 1> /dev/null 2>&1
        fi
        echo
        rm -f /var/lock/qmail
        ;;
  *)
        echo "Usage: S99qmail {start|stop}"
        exit 1
esac

exit 0
リスト1 /etc/init.d/qmail(ファイルのダウンロード
注:コピー&ペーストする場合は、行末に余分な空白文字が挿入されていないか確認しましょう。

# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc2.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc2.d/K99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/K99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/K99qmail

 qmailのrcスクリプトを用意したら、ipchainsやiptablesでSMTPやPOP3がブロックされていないか確認し、サービスを開始します。また、ユーザーのためのMaildirディレクトリを用意することをお忘れなく。

# /var/qmail/bin/maildirmake ~ユーザー名/Maildir
# chown -R ユーザー名 ~ユーザー名/Maildir

RPMでインストールしたい その2

 「RPMでインストールしたい その1」では、最後のrcスクリプトを第1回 qmailによるSMTPサーバの構築と同様に手動で作成する必要がありました。

 しかし、rcスクリプトまで面倒を見てくれるRPMパッケージもあります。http://www.qmail.org/rpms/には、qmail-runパッケージが用意されています。ただ、このパッケージが提供するものは、正確にはrcスクリプトではなく第9回 daemontoolsによるロギングとプロセス監視で紹介したsvscanによるqmailプロセスの常駐化です。そのため、qmail-runを利用するには次のパッケージもインストールする必要があります。

  • functions-4-2
  • daemontools-0.76
  • runlevelconf-0.07
  • dt-run-11.06

各種パッケージのインストール

 「RPMでインストールしたい その1」の手順でqmail-1.03-109memphis.i386.rpmとucspi-tcp-0.88-003memphis.i386.rpmのインストールまで済んでいるものとします。次に必要なRPMファイルをインストールしますが、順番に注意しましょう。最後にqmail-runパッケージをインストールするようにします。

rpm -Uvh http://www.qmail.org/rpms/qmail-run/functions-4-2.noarch.rpm
rpm -Uvh http://www.qmail.org/rpms/qmail-run/daemontools-0.76-2memphis.i386.rpm
rpm -Uvh http://www.qmail.org/rpms/qmail-run/runlevelconf-0.07-002memphis.noarch.rpm
rpm -Uvh http://www.qmail.org/rpms/qmail-run/dt-run-11.06-001memphis.noarch.rpm
rpm -Uvh http://www.qmail.org/rpms/qmail-run/qmail-run-11.06-001memphis.noarch.rpm
注:RPMファイルをローカルに保存し、そこからインストールすることも可能です。

各種設定の実施

 svscanが実行されるように、/etc/inittabに設定を数行追加します。追加する場所にも注意しましょう。

### stop dt-run ←追加
rK:016:wait:/var/service/dt-run/dt-runlevel.init stop ←追加
sK:016:wait:/var/service/dt-run/dt-svscan.init stop ←追加
### End stop dt-run ←追加

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

### start dt-run ←追加
sS:2345:wait:/var/service/dt-run/dt-svscan.init start ←追加
r2:2:wait:/var/service/dt-run/dt-runlevel.init start ←追加
r3:3:wait:/var/service/dt-run/dt-runlevel.init start ←追加
r4:4:wait:/var/service/dt-run/dt-runlevel.init start ←追加
r5:5:wait:/var/service/dt-run/dt-runlevel.init start ←追加
### End start dt-run ←追加
/etc/inittab

 編集したら/etc/inittabファイルを再認識させます。その後、svscanプロセスが起動していることを確認します。

# init q
# /var/service/dt-run/dt-svscan.init status
/var/service/svscan: up (pid 835) 24 seconds, normally down

 ここからは第9回 daemontoolsによるロギングとプロセス監視で説明したとおり、svscanに監視させたいプロセスを/serviceディレクトリに登録する必要があります。add-service.shスクリプトを利用することで手順を省略できます。まず、デフォルトで登録可能なサービスを見てみましょう。

# /command/add-service.sh list
axfrdns
dnscache
fingerd
ftpd
httpd
proftpd
rlogind
rshd
rsync
qmail(
qmail-pop3d(
qmail-smtpd(
qmail-qmtpd(
qmail-qmqpd(
pickdns
rbldns
rblsmtpd(
telnetd
tinydns
walldns
wuftpd
※:今回のインストールで利用可能なもの

 ここで表示されるサービスの実体は/var/serviceにあります。

# ls /var/service/
dt-run    qmail        qmail-qmqpd  qmail-smtpd  runlevelconf
multilog  qmail-pop3d  qmail-qmtpd  rblsmtpd     svscan

 qmail-qmqpdやrblsmtpdなど、興味をそそるものも用意されていますが、まずはいままでの定石どおりqmail、qmail-smtpd、qmail-pop3dを常駐サービスに加えることにします。

 次に、デフォルトの設定で変更や追加が必要な個所に修正を加えます。「RPMでインストールしたい その1」で、/var/qmail/rcを編集してメッセージをMaildir形式で保存するようにしました。ここでは、/var/service/qmail/defaultdelivery/rcファイルを設定します。

QMAIL_BIN=/var/qmail/bin
# Using qmail-local to deliver messages to ~/Mailbox by default.

./Maildir/ ←./Mailboxから書き換え
/var/service/qmail/defaultdelivery/rc

 tcprulesで使用するリレーコントロールファイル(cdbファイル)を/var/service/サービス名ディレクトリに用意します。tcp.smtpファイルの記述については、第1回 qmailによるSMTPサーバの構築を参照してください。

●qmail-smtpd用tcp.smtp.cdbファイルの準備

192.168.0.:allow,RELAYCLIENT="" ←ネットワーク環境に合わせて変更
127.:allow,RELAYCLIENT=""
/var/service/qmail-smtpd/tcp.smtp

 上記のようなファイルを用意し、以下の手順でcdbファイルを生成します。

# cd /var/service/qmail-smtpd
# /usr/local/bin/tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp

●qmail-pop3d用tcp.smtp.cdbファイルの準備

192.168.0.:allow,RELAYCLIENT="" ←ネットワーク環境に合わせて変更
127.:allow,RELAYCLIENT=""
/var/service/qmail-pop3d/tcp.smtp

 同じくtcp.smtpファイルを用意し、cdbファイルを生成します。

# cd /var/service/qmail-pop3d
# /usr/local/bin/tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp

 ちなみに、cdbファイルは/var/service/サービス名/runファイル中のCDB変数で指定されています。

CDB="/var/service/qmail-pop3d/tcprules.cdb"
/var/service/qmail-pop3d/runの場合

 multilogでログを記録する際のファイルサイズの制限、ローテーションファイルの個数の設定は、次のファイルで行います。

1,000,000 ←ログファイルの最大サイズ
/var/service/multilog/filesize

10 ←古いログファイルをいくつまで残すかを指定
/var/service/multilog/fileno

 準備が整ったらadd-service.shスクリプトを使い、サービスを追加します。add-service.shの引数にqmail、qmail-pop3d、qmail-smtpdの3つを指定します。

# /command/add-service.sh qmail qmail-pop3d qmail-smtpd
Creating /command/qmail.init ...
Adding qmail to runlevels 2,3,5
Runlevel 2:
Running rlc-add...
Running rlc-doit; might take a while...
Runlevel 3:
Running rlc-add...
Running rlc-doit; might take a while...
Runlevel 5:
Running rlc-add...
Running rlc-doit; might take a while...
Creating the link /service/qmail
Creating /command/qmail-pop3d.init ...
(以下略)

 登録されたサービスに対するリンクファイルが/serviceディレクトリに作成されていることを確認します。

# ls -l /service/
合計 0
lrwxrwxrwx  1 root  root     18 10月 22 05:21 qmail -> /var/service/qmail
lrwxrwxrwx  1 root  root     24 10月 22 05:21 qmail-pop3d -> /var/service/qmail-pop3d
lrwxrwxrwx  1 root  root     24 10月 22 05:21 qmail-smtpd -> /var/service/qmail-smtpd

 それぞれのサービスの状態は、

# /command/svstat /service/サービス名

でも確認できます。

 /commandディレクトリにはそれぞれのサービスに対してinitファイルが作成されているため、そちらを使用します。

# /command/qmail.init status
/service/qmail: up (pid 692) 635 seconds
# /command/qmail-smtpd.init status
/service/qmail-smtpd: up (pid 768) 641 seconds
# /command/qmail-pop3d.init status
/service/qmail-pop3d: up (pid 728) 649 seconds

 以上で作業は終了です。複数のパッケージを導入するためコマンド1つで完了とはいきませんが、ソースからインストールするよりは負担が軽くなります。エラーが出てしまうと、どこでエラーが発生しているかを調べるのに手間が掛かるという側面もありますが、落ち着いてもう1度エラーメッセージを確認しましょう。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。