IT pass HikiWiki - [Memo2014][ITPASS] qmail のインストールと設定 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

= qmail のインストールと設定

== ソース・パッチの取得

* ディレクトリを作成した.

    # mkdir /var/qmail

* ユーザ・グループを追加した.

  * このときに, 以下のようなレスポンスが返ってくるが問題ないので先へ進めた.

      # adduser --system --ingroup nofiles --home /var/qmail qmaild
      警告: 指定されたホームディレクトリ /var/qmail はすでに存在しています。
      システムユーザ `qmaild' (UID 119) を追加しています...
      新しいユーザ `qmaild' (UID 119) をグループ `nofiles' に追加しています...
      ホームディレクトリ `/var/qmail' はすでに存在します。`/etc/skel' からのコピーを行いません。
      adduser: 警告: ホームディレクトリ `/var/qmail' は、現在作成中のユーザの所属になっていません。

      # groupadd -g 200 nofiles
      # adduser --system --ingroup nofiles --home /var/qmail/alias alias
      # adduser --system --ingroup nofiles --home /var/qmail qmaild
      # adduser --system --ingroup nofiles --home /var/qmail qmaill
      # adduser --system --ingroup nofiles --home /var/qmail qmailp
      # groupadd -g 201 qmail
      # adduser --system --ingroup qmail --home /var/qmail qmailq
      # adduser --system --ingroup qmail --home /var/qmail qmailr
      # adduser --system --ingroup qmail --home /var/qmail qmails


* ソース, glib 2.3.1 以降用のパッチの取得と展開を行った.

    # cd /usr/local/src
    # wget http://cr.yp.to/software/qmail-1.03.tar.gz
    # tar xvfz qmail-1.03.tar.gz
    # wget http://www.stackasterisk.jp/tech/systemConstruction/qmail01/qmail-glibc.patch
    # wget -U test http://www.ksknet.net/sample/qmail-date-localtime.patch

  * 二つ目の wget コマンドを実行した際に, パッチファイルの中身が正しくなかったので, 以下のコマンドを実行した,
      # wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2012/qmail/qmail-glibc.patch

* qmail-localに対するパッチ, 存在しないユーザ宛のメールを受け取らないようにするパッチ, DNS サーバーからのレスポンスが 512 バイトを超える場合にも正しく取り扱えるようにするためのパッチをそれぞれ入手した.

    # wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2012/qmail/qmail-local.patch
    # wget http://code.dogmap.org./qmail/qmail-1.03-realrcptto-2006.12.10.patch
    # wget http://www.ckdhr.com/ckd/qmail-103.patch


== パッチの適用とコンパイル

* 展開したディレクトリに移動した後, 上で取得したパッチを当てビルドする. ビルドとチェックを行った.

    # cd qmail-1.03
    # patch  < ../qmail-glibc.patch
    # patch -p1 < ../qmail-date-localtime.patch
    # patch -p1 < ../qmail-1.03-realrcptto-2006.12.10.patch
    # patch  < ../qmail-local.patch
    # patch < ../qmail-103.patch
    # /etc/init.d/qmail stop
    # /etc/init.d/tcpserver stop
    # make
    # make man
    # make setup
    # make check

* /etc/init.d/qmail stop と /etc/init.d/tcpserver stop の行について以下の様なエラーが出るが問題はないので先に進めた.

    bash: /etc/init.d/qmail: そのようなファイルやディレクトリはありません
    bash: /etc/init.d/tcpserver: そのようなファイルやディレクトリはありません


== 設定

* config スクリプトを実行した.

    # ./config

* cat コマンドで以下のように正しく情報が書き込まれているか確認した.

    # cat /var/qmail/control/defaultdomain
    scitec.kobe-u.ac.jp
    # cat /var/qmail/control/locals
    localhost
    tako-itpass.scitec.kobe-u.ac.jp
    # cat /var/qmail/control/me
    tako-itpass.scitec.kobe-u.ac.jp
    # cat /var/qmail/control/plusdomain
    ac.jp
    # cat /var/qmail/control/rcpthosts
    localhost
    tako-itpass.scitec.kobe-u.ac.jp

* 以下の項目についても確認が必要と書かれていたが, のちの作業で作成されるため, 確認は不要と思われる.

    /var/qmail/control/databytes          100000000
    /var/qmail/control/defaulthost        tako-itpass.scitec.kobe-u.ac.jp

* メールの容量制限をするため, 以下のように設定した.

    # echo 100000000 >> /var/qmail/control/databytes
    # chmod 644 /var/qmail/control/databytes

* 以下の作業を行った.

    # echo itpass.scitec.kobe-u.ac.jp >> /var/qmail/control/locals
    # echo itpass.scitec.kobe-u.ac.jp >> /var/qmail/control/rcpthosts
    # echo tako-itpass.scitec.kobe-u.ac.jp >> /var/qmail/control/defaulthost
    # chmod 644 /var/qmail/control/defaulthost

* また, epa.scitec.kobe-u.ac.jp, aoe.scitec.kobe-u.ac.jp のメールも受け取れるようにした.

    # echo epa.scitec.kobe-u.ac.jp >> /var/qmail/control/locals
    # echo epa.scitec.kobe-u.ac.jp >> /var/qmail/control/rcpthosts
    # echo aoe.scitec.kobe-u.ac.jp >> /var/qmail/control/locals
    # echo aoe.scitec.kobe-u.ac.jp >> /var/qmail/control/rcpthosts

* これらの情報を qmail-showctl(8) で確認する.

    # /var/qmail/bin/qmail-showctl

== システムのメールアドレスの転送先設定

* root 宛のメールをフォワードする先に itpadmin を指定した. なお, これ以降ログでは"_at_" は "@" に読み替える.

    # cd /var/qmail/alias
    # echo '&itpadmin_at_itpass.scitec.kobe-u.ac.jp' > .qmail-root
    # echo '&root' > .qmail-postmaster
    # echo '&root' > .qmail-mailer-daemon
    # echo '&root' > .qmail-bin
    # echo '&root' > .qmail-daemon
    # echo '&root' > .qmail-games
    # echo '&root' > .qmail-ingres
    # echo '&root' > .qmail-nobody
    # echo '&root' > .qmail-sys
    # echo '&root' > .qmail-uucp
    # echo '&root' > .qmail-mail
    # echo '&root' > .qmail-anonymous
    # echo '&root' > .qmail-www-data
    # chmod 644 .qmail-*

== インストールした実行ファイルへのパスの設定

* インストールした qmail の実行ファイル群へパスを通した.

== インストールしたマニュアルへのパスの設定

* /etc/manpath.config に以下の行を追加する.

    MANDATORY_MANPATH                  /var/qmail/man
    MANPATH_MAP        /var/qmail/bin  /var/qmail/man
    MANDB_MAP          /var/qmail/man  /var/qmail/man

== メールの配送先設定

* /etc/profileに以下を追記する.

    MAIL="$HOME/Mailbox"
    MAILDROP="$HOME/Mailbox"
    export MAIL MAILDROP

* /etc/csh.cshrcに以下を追記する.

    setenv MAIL $HOME/Mailbox
    setenv MAILDROP $HOME/Mailbox

== 起動

* 以下のコマンドを実行する.

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

* Debian の qmail パッケージから起動スクリプトを大幅に書き換えたものが
((<URL:../server/2012/qmail/qmail>)) から入手できるので, /etc /init.d/ 以下に cp し, パーミッションを設定した.

  # wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2012/qmail/qmail
  # cp ./qmail /etc/init.d/
  # cd /etc/init.d
  # chown root:root /etc/init.d/qmail
  # chmod 755 /etc/init.d/qmail

* さらに, vi などで /etc/init.d/qmail の QMAIL=/var/qmail の上に以下を追記しなければならないが, 元から書かれていたため追記しなかった.

    ### BEGIN INIT INFO
    # Provides:          qmail
    # Required-Start:    $remote_fs
    # Required-Stop:     $remote_fs
    # Should-Start:      $network $syslog
    # Should-Stop:       $network $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Start and stop qmail
    # Description:       qmail is qmail
    ### END INIT INFO

* ブート時に自動的に起動させるため, 以下のコマンドで各 /etc/rc.X ディレクトリからシンボリックリンクを貼った.

    # insserv qmail

* qmailを起動した.

    # /etc/init.d/qmail start

== 配送テスト

=== [テスト 1] ローカル配送テスト part1

* 以下のコマンドを実行した後で, ~chikuwa4/Mailbox にメールが送られることを確認した.

    $ echo to: chikuwa4 | /var/qmail/bin/qmail-inject

=== [テスト 2] ローカル配送テスト part2

* 存在しない宛先に送り, バウンスメールが ~chikuwa4/Mailbox に送られてくることを確認した.

    $ echo to: nonexistent | /var/qmail/bin/qmail-inject

  * itpadmin グループが存在しないので triple bounce となった

=== [テスト 3] リモート送り出しテスト part1

* 他のホスト上のアカウントへ送って, 届いていることを確認した.

    $ echo to: ryohori_at_gfd-dennou.org | /var/qmail/bin/qmail-inject


=== [テスト 4] リモート送り出しテスト part2

* 他のホスト上の存在しない宛先に送り, f オプションでバウンスの送り先を指定した.

    $ echo to: hoge_at_gfd-dennou.org | /var/qmail/bin/qmail-inject -f 1123430s_at_stu.kobe-u.ac.jp

* 1123430s_at_stu.kobe-u.ac.jp にバウンスが来ていることを確認した.

== sendmail の「置き換え」

* まず, exim4 を起動停止した.

   # /etc/init.d/exim4 stop

* exim のブートスクリプトは, /etc/init.d/exim4 で, /etc/rc[2-5].d/S20exim, /etc/rc{1,6}.d/K20exim からリンクが張られているので, これを無効にした.

    # insserv -r exim4
    # chmod 000 /etc/init.d/exim4
    # mv /etc/init.d/exim4 /etc/init.d/exim4.bak


* cron から exim が呼び出される処理を無効にするために, /etc/cron.daily/exim4-base の先頭の方に次の行を書き足した.

    #!/bin/sh
    # by Yasuhiro MORIKAWA, 2007-08-10. We need not exim.
    if [ ! -f /etc/exim.conf ]; then
      exit 0
    fi

* sendmailを置き換えた.

    # chmod 000 /usr/lib/sendmail
    # chmod 000 /usr/sbin/sendmail

    # mv /usr/lib/sendmail /usr/lib/sendmail.bak
    # mv /usr/sbin/sendmail /usr/sbin/sendmail.bak

    # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
    # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

* exim4 関係のパッケージを hold して, 更新されないようにした.

    # echo exim4 hold | dpkg --set-selections
    # echo exim4-base hold | dpkg --set-selections
    # echo exim4-config hold | dpkg --set-selections
    # echo exim4-daemon-light hold | dpkg --set-selections

== とりあえず用の smtp の設定

* /etc/inetd.conf に以下を追加した.

    smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd

* /etc/inetd.conf を読み直させるために次を実行した.

    # /etc/init.d/openbsd-inetd restart

* qmail の設定ファイルを作成する. chikuwa4のアカウントの設定ファイル .qmail を作成し,

    /home/ユーザ名/Mailbox

と書いた.

* 以下のコマンドを実行した.
    $ export MAIL=~/Mailbox
    $ mail

* 他のホストのアドレスで chikuwa4_at_tako-itpass.scitec.kobe-u.ac.jp へメールを送信し, Maildir の中身を確認した.