IT pass HikiWiki - [Memo2008][EPA]tako作業メモ(納多)(080723) Diff

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

{{toc}}

((<[Memo2008][EPA]tako作業メモ(納多)(080424)>)) から続く.

= qmail

qmail に新たに qmail-realrcptto パッチを適用するため,
qmail の再インストールを行う

== qmail-realrcptto パッチの解説

((<qmail-realrcptto パッチ|URL:http://code.dogmap.org./qmail/>))
は, あて先が有効であるかを確認する機能を qmail に付加するパッチである.

これを適用することにより,
存在しないアドレスへのメール (SPAM など) を拒否することができ,
サーバへの無用な負荷を避けることができる.
(参考: http://ya.maya.st/mail/lwq.html#smtp-reject  )

== qmail の再インストール

  # cd /usr/local/src

念のため, tar.gz ファイルの展開からやり直すことにする.

  # rm -r qmail-1.03
  # tar zxfv qmail-1.03.tar.gz
  # cd qmail-1.03

パッチを当てていく.

  # patch -p1 < ../qmail-1.03-realrcptto-2006.12.10.patch
  patching file Makefile
  patching file qmail-qmtpd.c
  patching file qmail-smtpd.c
  patching file realrcptto.c
  
  # patch -p1 < ../qmail-date-localtime.patch
  patching file date822fmt.c
  
  # patch -p0 < ../qmail-glibc.patch
  patching file error.h
  patching file dns.c
  patching file cdb_seek.c

  # patch -p0 < ../qmail-local.patch
  patching file qmail-local.c

再インストールのためサービスを停止する.

  # /etc/init.d/qmail stop

インストールを行う.

  # make
  # make man
  # make setup
  ./install
  install: fatal: unable to write .../bin/splogger: text busy
  make: *** [setup] Error 111

tcpserver が停止していなかったため上書きできなかったようだ.

  # /etc/init.d/tcpserver stop

  # make check

OK. サービスを再開する.

  # /etc/init.d/qmail start
  # /etc/init.d/tcpserver start


== 宛先の有効性をチェックしたくない場合

宛先の有効性をチェックしたくない場合には

  # echo '#' > /var/qmail/alias/.qmail-default

とすればよい.

=== 動作テスト

外部から存在しないアドレス, 例えば hoge_at_tako.epa.scitec.kobe-u.ac.jp にメールを送る.

tako:/var/log/mail.log に受信した内容が追記されていた.


今度は宛先の有効性をチェックしないでみる.

  # echo '#' > /var/qmail/alias/.qmail-default

再び, 外部から存在しないアドレスにメールを送る.
アドレスが存在しないことを伝えるエラーメールが帰ってきた.
tako:/var/log/mail.log には何も追記されていない.


設定を元に戻す.

  # rm /var/qmail/alias/.qmail-default

みたび, 外部から存在しないアドレスにメールを送る.
最初のように, tako:/var/log/mail.log にメールを受信した内容が追記されていた.



= qpopper

qpopper は APOP をサポートする POP3 サーバである.

== qpopper のインストール

最新版である qpopper 4.0.13 をインストールする.

  # cd /usr/local/src
  # wget ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper4.0.13.tar.gz
  # tar zxfv qpopper4.0.13.tar.gz
  # cd qpopper4.0.13

ビルドの前に, qpopper を動作させるためのユーザ pop を作成する.

  # adduser --system --ingroup mail --no-create-home --shell /bin/false --disabled-password --home /nonexistent pop
  Warning: The home dir you specified does not exist.
  Adding system user `pop' (UID 117) ...
  Adding new user `pop' (UID 117) with group `mail' ...
  Not creating home directory `/nonexistent'.

  # vipw

上の行を下の行にする ('Post Office Owner' と追記しただけ)

pop:x:117:8::/nonexistent:/bin/false
pop:x:117:8:Post Office Owner:/nonexistent:/bin/false

ちなみに, ユーザ ID とグループ ID は
システムによって順に割り振られていくので,
いつも上記のようになるとは限らない.

=== ビルド

以下のコマンドを打つ.

  # ./configure \
  --prefix=/usr/local/qpopper \    # インストール場所
  --enable-apop=/usr/local/qpopper/pop.auth \   # APOP の設定ファイルの場所
  --enable-popuid=pop \   # qpopper を動作させるユーザ
  --enable-shy \          # qpopper のバージョン番号を隠蔽
  --enable-nonauth-file=/usr/local/qpopper/popusers \  # 接続拒否ユーザを書いたリストの場所
  --without-pam \    # POP3 に PAM による認証を行わない
  --with-gdbm        # データベースの取り扱いに GDBM を使う

configure の設定オプションについては
./configure --help コマンドで参照できる.

APOP のみにするため,
popper/Makefile を編集する.
OS_DEFS の行を以下のように変更する.

  OS_DEFS         =    -DLINUX -DUNIX -DAPOP_ONLY

make する.

  $ make
  (略)
  pop_user.c: In function 'pop_user':
  pop_user.c:149: error: 'DBM' undeclared (first use in this function)
  pop_user.c:149: error: (Each undeclared identifier is reported only once
  pop_user.c:149: error: for each function it appears in.)
  pop_user.c:149: error: 'db' undeclared (first use in this function)
  pop_user.c:153: error: 'datum' undeclared (first use in this function)
  pop_user.c:153: error: expected ';' before 'key'
  pop_user.c:332: error: 'key' undeclared (first use in this function)
  pop_user.c:345: error: 'value' undeclared (first use in this function)
  make: *** [pop_user.o] Error 1

DBM が宣言されていない, ということは, gdbm が怪しい.

  # apt-get install gdbm

gdbm なるパッケージはないようだ.
debian のパッケージ検索をしてみると, libgdbm-dev なるものがあるようだ.

  # apt-get install libgdbm-dev

configure をやり直す.

  # make

今度はエラーなく完了.

2007 年度の構築ドキュメントにおける, バージョン 4.0.9 のインストールでは,
「qpopper の Makefile はディレクトリの作成を行ってくれないため, 自前で箱は用意した後に make install する.」
とあるが, 何もせず

  # make install

と実行しても普通に /usr/local/qpopper ディレクトリ以下は作られていた
(構築ドキュメントの修正は既に完了).

しかし, 以下のメッセージが現れた.

  (略)
  Installed popper as /usr/local/qpopper/sbin/popper
  /bin/sh: line 1: @/usr/bin/install: No such file or directory
  /bin/sh: line 3: @echo: command not found
  /bin/sh: line 5: /usr/local/qpopper/sbin/popauth: No such file or directory
  /bin/sh: line 6: @echo: command not found
  make[1]: *** [install] Error 127
  make[1]: Leaving directory `/usr/local/src/qpopper4.0.13/popper'
  make: *** [install] Error 2

/usr/local/qpopper/sbin/popper の存在は確認したが,
/usr/local/qpopper/sbin/popauth は見つからない.


popper/Makefile より, 関係がありそうなところを以下に引用する:

  (略)
  install: popper ${pop_auth}
        @if [ ! -d ${installdir} ]; then \
                mkdir -m 0755 ${installdir}; \
                chown root:wheel ${installdir}; \
        fi
        @${INSTALL} -s -m 0755 -o root popper ${installdir}/popper
        @echo "Installed popper as ${installdir}/popper"
        @if [ "x${poppassd}" != "x" ]; then \
                cd ${password_dir} && ${MAKE} install ;\
        fi

        @if [ "x${pop_auth}" != "x" ]; then \
                @${INSTALL} -s -m 4755 -o ${apop_uid} -g 0 ${pop_auth} \
                        ${installdir}/${pop_auth}; \
                @echo "Installed popauth as ${installdir}/${pop_auth} " \
                  "with uid ${apop_uid}"; \
            ${installdir}/${pop_auth} -init -safe; \
            @echo "Initialized popauth database"; \
        fi
  (略)

上に引用したものの後半部において,
'@' がなぜかコマンドの一部と解釈されてしまっているようだ.

  # cp popper/Makefile popper/Makefile.org

上に引用したものの後半部において,
'@' を消去してみる.

  # make install

前にエラーが出た箇所は以下のように出力された.

  Installed popper as /usr/local/qpopper/sbin/popper
  if [ "xpopauth" != "x" ]; then \
                  /usr/bin/install -c -s -m 4755 -o pop -g 0 popauth \
                          /usr/local/qpopper/sbin/popauth; \
                  echo "Installed popauth as /usr/local/qpopper/sbin/popauth " \
                    "with uid pop"; \
              /usr/local/qpopper/sbin/popauth -init -safe; \
              echo "Initialized popauth database"; \
          fi
  Installed popauth as /usr/local/qpopper/sbin/popauth  with uid pop
  Initialized popauth database
  make[1]: Leaving directory `/usr/local/src/qpopper4.0.13/popper'

コマンドが陽に表示されたが, うまく実行されたようだ.
/usr/local/qpopper/sbin/popauth の存在も確認.



inetd に登録を行う.

  # vi /etc/inetd.conf

以下の行を追加する.

  pop3    stream  tcp     nowait  root    /usr/lcoal/qpopper/sbin/popper popper -s

inetd を再起動する.

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

== パスの設定

インストールした qpopper の実行ファイル群, マニュアル群へパスを通す.

=== 実行ファイルへのパスの設定

((<[EPA]パスの設定>)) の <一般ユーザ用コマンドのパス> に /usr/local/qpopper/sbin を追加する.
(大抵, sbin はシステム用コマンドがインストールされる場所であるが, 一般ユーザが使用する pop_auth もインストールされているため, 一般ユーザ用コマンドのパスとして登録する).

=== マニュアルへのパスの設定

/etc/manpath.config に以下の行を追加する. 詳しくは
((<[EPA]パスの設定#man 関連のパスの設定>)) を参照のこと.

  MANDATORY_MANPATH                           /usr/local/qpopper/man
  MANPATH_MAP        /usr/local/qpopper/sbin  /usr/local/qpopper/man
  MANDB_MAP          /usr/local/qpopper/man   /usr/local/qpopper/man

== popauth の使い方の例

APOP を使うようにする.
  $ popauth
      または
  # popauth -u (ユーザ名)

登録しているユーザ全員を表示する
  # popauth -list ALL

ユーザ testuser を削除する
  # popauth -delete testuser

== 動作確認

ユーザ chikuwa1 で qpopper による APOP の動作確認を行う
まず APOP で使用するパスワードを設定する.

  $ popauth
  Changing only APOP password for mondo1.
  New password: (パスワードを入力)
  Retype new password: (パスワードを入力)

  $ sudo -s

  # mail chikuwa1
  Subject: test of APOP
  test [Enter]
  [Ctrl + D]
  Cc: [Enter]

ユーザ chikuwa1 になると,

  You have new mail in /home/chikuwa1/Mailbox

というメッセージが現れた.
メールがメールスプール /home/chikuwa1/Mailbox にあることを確認.

最後に, APOP 対応のメーラーからメールを受け取れるか確認する.

メーラーからのログインには成功するが, Mailbox のメッセージが
手元に来ない.
設定を確認する必要あり.

((<[Memo2008][EPA]tako作業メモ(納多)(080724)>)) へ続く