exim4 関連のパッケージを確認する.
$ dpkg --list | grep exim
exim4 4.72-6+squeeze2 metapackage to ease Exim MTA (v4) installation exim4-base 4.72-6+squeeze2 support files for all Exim MTA (v4) packages exim4-config 4.72-6+squeeze2 configuration for the Exim MTA (v4) exim4-daemon-light 4.72-6+squeeze2 lightweight Exim MTA (v4) daemon |
exim 関連パッケージをアンインストールする.
# aptitude remove exim4 exim4-base exim4-config exim4-daemon-lightbsd-mailx パッケージもアンインストールされるが気にせず続行する.
exim4 の起動スクリプトを無効にする.
# chmod 000 /etc/init.d/exim4 # mv /etc/init.d/exim4 /etc/init.d/exim4.bak
cron から呼び出されないようする.
# vim /etc/cron.daily/exim4-base以下を加える
# by TOYODA Eizi, 1999-09-22. We need not exim. if [ ! -f /etc/exim.conf ]; then exit 0 fi |
# mkdir /work # mkdir /work/netqmail # cd /work/netqmail
netqmailのソースをダウンロード, 解凍する.
netqmail をパッケージから入れると qmail の動作に使われるプログラムが今 まで通りの /var/qmail 以下ではなく, /var/lib/qmail 以下に入ってしまう. これにより起動スクリプト等を大きく書き換える必要が出てきたため, 今回は netqmailをソースから導入することにした.# wget http://www.qmail.org/netqmail-1.06.tar.gz # tar zxf netqmail-1.06.tar.gzlocaltime ゾーン対応 patch 取得, patch あて
# wget -U "wwget" http://www/ksknet.net/sample/qmail-date-localtime.patch # cd netqmail-1.06 # patch -p1 < ../qmail-date-localtime.patch
# make # make setup check
qmail 制御ファイルに設定を書き込む.
詳細は文献 2を見よ.
制御ファイルは /var/qmail/control/ 以下にあり,
制御ファイルの詳細は
qmail-control
に記述されている.
パッケージでインストールしたので自ホスト名の設定などは自動でされているがもしされていなかったら以下のコマンドで設定する.
# cd /var/qmail/control/ # ./config
このスクリプトは,ホスト名を DNS 検索し, それぞれの制御ファイルへ以下の情報を書き込む.
/var/qmail/control/defaultdomain -> ep.sci.hokudai.ac.jp /var/qmail/control/locals -> localhost usuzumi.ep.sci.hokudai.ac.jp /var/qmail/control/me -> usuzumi.ep.sci.hokudai.ac.jp /var/qmail/control/plusdomain -> ac.jp /var/qmail/control/rcpthosts -> localhost usuzumi.ep.sci.hokudai.ac.jp |
DNS に登録がなされていないと正しく動作しないことに注意されたい.
yellow によって, ep.sci.hokudai.ac.jp の MX を向けられてい
る場合,
「
別ホストあてのメイルも受け取りたい」に従って
ローカル処理すべきドメイン名に ep.sci.hokudai.ac.jp を追加する.
# echo ep.sci.hokudai.ac.jp >> /var/qmail/control/locals # echo ep.sci.hokudai.ac.jp >> /var/qmail/control/rcpthosts
また,「 ホスト名を隠したい」に従って,ドメイン部のないアドレスにつける ホスト名を設定する.
# echo ep.sci.hokudai.ac.jp > /var/qmail/control/defaulthost # chmod 644 /var/qmail/control/defaulthost
databytes と queuelifetime を作る.
# echo 10000000 > /var/qmail/control/databytes # chmod 644 /var/qmail/control/databytes # echo 259200 > /var/qmail/control/queuelifetime # chmod 644 /var/qmail/control/queuelifetime
設定がちゃんとされているか確認する. (詳細はqmail-showctl(8))
# /var/qmail/bin/qmail-showctl
それぞれのファイルには最終的に以下のように書き込まれていればよい.
/var/qmail/control/databytes -> 10000000 /var/qmail/control/defaultdomain -> ep.sci.hokudai.ac.jp /var/qmail/control/defaulthost -> ep.sci.hokudai.ac.jp /var/qmail/control/locals -> localhost usuzumi.ep.sci.hokudai.ac.jp ep.sci.hokudai.ac.jp /var/qmail/control/me -> usuzumi.ep.sci.hokudai.ac.jp /var/qmail/control/plusdomain -> ac.jp /var/qmail/control/queuelifetime -> 259200 /var/qmail/control/rcpthosts -> localhost usuzumi.ep.sci.hokudai.ac.jp ep.sci.hokudai.ac.jp |
以前, gate 登録システムによって DNS 登録を行った直後に
サーバの構築を行ったことがあるがエラーが出力された.
これは DNS の逆引きができなかった事が原因となっていた.
(DNS の逆引きは EP サーバではサービスしていない.
しばらくすると北大大計の DNS サーバで逆引きできるようになる)
このような場合,DNS 検索をしないスクリプトを用いて設定を行う.
# ./config-fast usuzumi.ep.sci.hokudai.ac.jp
システムのアドレスを設定する.
# cd /var/qmail/alias # echo '&epmail' > .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-system # echo '&root' > .qmail-toor # echo '&root' > .qmail-uucp # echo '&root' > .qmail-usenet # echo '&root' > .qmail-anonymous # echo '&root' > .qmail-mail # echo '&epwww' > .qmail-www # echo '&epdns' > .qmail-dns # chmod 644 .qmail-*
以上により,
postmaster, mailer-daemon, bin, daemon, games, ingres,
nobody, system, toor, uucp, usenet, anonymous, mail
あてのメールは root に転送され,root あてのメールは epmail に転送される.
詳細は dot-qmail(5) .
面倒な人ようにエイリアスアドレスの設定をしてくれるシェルスクリプトを書いた.
alias.sh
メールサーバに持ってきてルートで実行して欲しい.
# chmod u+x alias.sh # ./alias.sh
/var/qmail/bin 以下のコマンドにパスを通す.
bash ユーザのために /etc/profile の PATH= の行を編集し,/var/qmail/bin を付け加える.
# vim /etc/profile
PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/var/qmail/bin" |
csh ユーザのために,/etc/csh.cshrc を編集し,同様に付け加える.
# vim /etc/csh.cshrc
setenv PATH /usr/local/bin:/usr/bin:/bin:/var/qmail/bin |
/etc/manpath.config を編集し以下の赤い部分を付け加える.
# vim /etc/manpath.config
#MANDATORY_MANPATH /usr/src/pvm3/man ... ... MANDATORY_MANPATH /usr/local/man MANDATORY_MANPATH /var/qmail/man ... # *PATH* *MANPATH* ... ... ... MANPATH_MAP /opt/sbin /opt/man MANPATH_MAP /var/qmail/bin /var/qmail/man ... # *PATH* *CATPATH* ... ... ... MANDB_MAP /opt/man /var/cache/man/opt MANDB_MAP /var/qmail/man /var/qmail/man
Mailbox へ配送するために /etc/profile に以下を書き加える.
# vim /etc/profile
MAIL="$HOME/Mailbox" MAILDROP="$HOME/Mailbox" export MAIL MAILDROP |
同様に /etc/csh.cshrc に以下を書き加える.
# vim /etc/csh.cshrc
setenv MAIL $HOME/Mailbox setenv MAILDROP $HOME/Mailbox |
なお,各ユーザのホームディレクトリのパーミッションは
755 でないとメール配送時にエラーが出るらしい.
qmail が自動で起動していなければ手動で起動する.
# /etc/init.d/qmail start
起動したか確かめる qmail 関係が存在すれば動いている
$ ps aux | grep qmail
文献 6 に従い,配送テスト (ローカル配送,リモート送り出しテスト) を行う. 以下ではルートを抜け自分のアカウントで作業を行う.
自分に送る準備をする.
$ echo ./Mailbox > ~/.qmail $ touch ~/Mailbox
自分へメールを送ってみる.
hoge は自分のユーザ名に変え,以下のコマンドを実行する.
~hoge/Mailbox にメールが送られることを確認.
$ echo to: hoge | /var/qmail/bin/qmail-inject
確認する
$ lv ~/Mailbox
存在しない宛先に送ってみる. バウンスメールが~hoge/Mailbox に送られてくるのなら OK.
$ echo "to: nonexisten" | qmail-inject $ lv ~/Mailbox
他のホスト上のアカウントへ送ってみる.届いていれば OK . 届かなければ,/var/log/syslog を参照して原因を追求する.
$ echo to: hoge@gfd-dennou-org | /var/qmail/bin/qmail-injectもし届いていなければ
# lv /var/log/syslog
http://jaist.dl.sourceforge.net/sourceforge/checkpw/より,checkpw-1.02.tar.gz を取得,展開.
checkpw-0.80/INSTALL に従ってコンパイルする.
$ tar zxvf checkpw-1.02.tar.gz $ cd chekpw-1.02/ $ make # make setup check
/bin/checkapoppw ができる.
/etc/inetd.conf を編集する.
# vim /etc/inetd.conf
以下を一行で追加する.
pop-3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup grey.ep.sci.hokudai.ac.jp /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir |
inetd のプロセス番号を探す.
$ ps aux | grep inetd
hoge xxxx 0.0 0.0 1956 608 ? Ss Oct19 0:00 /usr/sbin/inetd ※ ↑ ※ これがプロセス番号 |
inetd を再起動する
# kill -HUP xxxxkill コマンドの主要なシグナルの意味は以下
HUP | 終了後再起動 |
KILL | 強制終了 |
TREM | 通常終了(デフォルトだとこれ) |
# vim /etc/xinetd.conf以下を追加する.
service pop3 { socket_type = stream wait = no user = root server = /var/qmail/bin/qmail-popup server_args = grey.ep.sci.hokudai.ac.jp /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir } |
再起動する.
# /etc/init.d/xinetd restart
すでに ~/Mailbox へ配送するための環境変数は設定した.
apop によるメールの読み出しは EP サーバでは maildir 形式を用いる.
はじめに,環境変数 MAILDIR を設定する.
環境変数の設定は ~/Mailbox への配送でも行ったが,
bash は /etc/profile,csh は /etc/csh.cshrc に書き込む.
/etc/profile に次の 1 行を加える.
# vim /etc/profile
MAILDIR="$HOME/Maildir/" export MAILDIR |
/etc/csh.cshrc には次の 1 行を加える.
# vim /etc/csh.cshrc
setenv MAILDIR $HOME/Maildir/ |
次に配送テストのために一般ユーザで次の設定を行う.
mildirmake のスクリプトを取得する. 現 mail サーバから取得する.
# scp hoge@grey.ep.sci.hokudai.ac.jp:/var/qmail/bin/maildirmake /var/qmail/bin/
Maildir を作成する
$ /var/qmail/bin/maildirmake ~/Maildir
次に ~/Maildir への配送を qmail に指示する (.qmail へ配送先ディレクトリを記述する).
$ echo ./Maildir/ >> ~/.qmail $ chmod 600 ~/.qmail
.qmail のパーミッションは,600 か 644 でなければならない.
要は,実行許可が出ていないことと
オーナー以外に書き込みが許可されていないことが要求される.
以上の作業は各ユーザごとに行わねばならないが, /etc/skel/ 以下 に, .qmail や Maildir/ を置いておけば, adduser コマンドを用いてアカウ ントを新規に作ったときにできるホームディレクトリ内にこれらは自動で入る. こうすることによって, 新規にアカウントを取得する一般ユーザは, 以上の作 業が不要になる.
~/Maildir/.password ファイルを作る. APOPPASSWORDの部分は自分で考えた適切なパスワードに変えること.
$ echo 'APOPPASSWORD' > ~/Maildir/.password $ chmod 600 ~/Maildir/.password
この中身(APOPPASSWORD)が, apop でメールを読むときの認証パスワードとなる. パーミッションを600としないとapopが働かない.
grey の外のホストから apop 対応メーラー(例. Thunderbird)を用いて apop サーバを grey に指定して grey 上の自分のアカウントあてに届いたメールを読んでみる.
以前は UW-IMAP を用いていたが, 2011年より機能が不安定になった. よって, Dovecot を使用する.
Dovecot をパッケージからインストールする
# apt-get install dovecot-imapd
Dovecot の設定は /etc/dovecot/conf.d 以下のファイルで行う.
# cd /etc/dovecot/conf.d
以下のように各ファイルにおいて設定する. 必要な部分のコメントアウトを外して設定する(なお, 初めからコメントアウトされている値はデフォルトの値となっている).
# vim 10-auth.conf
disable_plaintext_auth = no #平文でのログインを許す |
# vim 10-mail.conf
mail_location = mbox:~/:INBOX=~/Mailbox #保存形式 |
# vim 10-master.conf
service imap-login |
# vim 10-logging.conf
log_timestamp = "%Y-%m-%d %H:%M:%S "#ログファイルの行最初の部分 |
# vim auth-passwdfile.conf
passdb args = scheme = CRAM-MD5 username_format = %u /etc/dovecot.cram-md5 #パスワードの認証方法. dovecot.crma-md5というパスワードファイルからパスワードを読み込む |
dovecot を再起動する.
# /etc/init.d/dovecot restart
パスワードファイルである /etc/dovecot.cram-md5 を書く.
これが CRAM_MD5 の認証データベースファイルとなる. 以下がその書式.であり, passwd ファイルと同じ形式で書く.
[acount]:{パスワードの形式(plainなら平文,CRAM-MD5ならCRAM_MD5で暗号化されたパスワード}[PASSWORD]:[uid]:[gid]::[home] |
[acount]には自分のアカウント名.
PASSWORDが imap 用パスワード. そのまえの{}によって書き方が変わる.
[uid] と [gid] にはそれぞれ自分の uid と gid を入れる.
最後の[home]は自分のホーム領域のパス.
具体的に書いてみる.
# vim /etc/dovecot.cram-md5
以下を書く. 今回は平文方式で書く.
# CRAM-MD5 authentication database # Entries are in form <user>:{plain}<password>:<uid>:>gid<::>Home dir< # or <user>:{CRAM-MD5}<cram_md5 password>:<uid>:>gid<::>Home dir< # Lines starting with "#" are comments mondo1:{plain}xxxxxx:40001:40001::/home/mondo1 |
# chmod 600 /etc/dovecot.cram-md5
赤く強調されているところが実際のパスワードとユーザ情報である. xxxxxxxはパスワード.
このままだと /etc/dovecot.cram-md5 に直接見える形でパスワードが書かれてしまう. しかし, このパスワードを暗号化して書くこともできる.
なお, これをやるときは以前に書いた{plain}でのパスワードは消すこと.
# pass=`doveadm pw -s CRAM-MD5 -p xxxxxx` # echo "mondo1:${pass}:40001:40001::/home/mondo1" >> /etc/dovecot.cram-md5
doveadm pw は引数を暗号化するコマンドである. それを用いてdovecot.cram-md5 に直接暗号化したパスワードを書き込んでいる. 以前は dovecotpw を用いていたが使えなくなってしまったため, 今回は doveadm -pw を用いる.
/etc/dovecot.cram-md5 の所有者を dovecot にする.
# chown dovecot:dovecot /etc/dovecot.cram-md5
パーミッションを変更する.
# chmod 600 /etc/dovecot.cram-md5
CRAM_MD5 の認証データベースファイル /etc/dovecot.cram-md5 の書き込みには root 権限が要る.
そのため imap 認証のパスワードを各ユーザが編集することはできない.
そこで apop 認証パスワード ~/Maildir/.password を読み出して
/etc/cram-md5.pwd を生成するスクリプト dovecotpwdbg
を書いた.
これを root 権限で定期的に実行すれば(遅れはあるものの)/etc/dovecot.cram-md5 が更新される.
$ wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2014/dvlop/script/dovecotpwdbg $ sudo -s # cp dovecotpwdbg /etc/cron.daily/dovecotpwdbg
今回からdovecotの暗号化に dovecotpw が使えなくなり, 代わりに doveadm を使う このため, dovecotpwdbg の一部を書き換える.書き換えたものは http://www.ep.sci.hokudai.ac.jp/~epmail/y2014/dvlop/script/dovecotpwdbg 以下に置いておく
# emacs /etc/con.daily/dovecotpwdbg
パーミッションを755にするのを忘れないこと!
(以前の構築作業では追加したスクリプトに対して実行許可を与えるのを忘れて
エラーが出ることが多かった)
# chmod 755 /etc/cron.daily/dovecotpwdbg
より頻繁にこのデータベースを更新するために cron を用いる. root で以下作業を行う.
# crontab -e
以下の 1 行を追加する.
50 * * * * /etc/cron.daily/dovecotpwdbg |
パスワードファイル /etc/dovecot.cram-md5 は新しいものにどんどん書き換えられるため,一定時間でパスワードが消えることに注意.
ここでは UW-IMAP の購読リスト.mailboxlist から Dovecot の購読リスト .scbscriptions への変更の仕方を書く. 一度 UW-IMAP から Dovecot へ変更しているならばもう行う必要はない.
購読リスト変換スクリプトuw2dovecot.shを取得する.
$ wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2011/dvlop/script/uw2dovecot.sh # cp uw2dovecot.sh /etc/dovecot/
パーミッションを変更する
# chmod 774 /etc/dovecot/uw2dovecot.sh
実行する
# /etc/dovecot/uw2dovecot.sh
usuzumi の外のホストから, imap 対応メーラー(例. Thunderbird)を用いて imap サーバを usuzumi に指定して, usuzumi 上の自分のアカウントあてに届いたメールを読んでみる. メーラの設定や.qmail の設定などは読み書きのするためのメールサーバでの準備を参照.
imap でのメール読みだしは ~/Mailbox から行なわれる.
ここでテストメール受信を行なうため, 管理者自身のホームディレクトリの ~/.qmail を編集する.
~/.qmail を編集. ./Mailbox を追加する. (ただし過去に.qmail に./Mailbox を追加した場合はやらない)
$ echo "./Mailbox" >> ~/.qmail
メールが ~/Mailbox へ配送されるようになる.
dovecot は ntpdate 等で時刻を調節する際に,5 秒ほどずれているとサービスを停止してしまう.そのため,cron.daly でntpdate を実行させる場合にはdovecot が停止してもrestart できるようにする.具体的には/etc/cron.daily/ntpdate に以下の行を追加する.
/etc/init.d/dovecot restart > /dev/null 2>&1 |
パソコンのメールソフトを使ってメールを利用するユーザは多いと考えられることから
mail が smtp 要求を受けるべきは
qmail の FAQ 5.4「特定のクライアントにだけリレーとして使わせたい」
(文献 1)に従って作業を行う.
この FAQ では tcpserver を使うやり方と tcp-wrappers を使うやり方の二つが述べられている.
tcpserver の導入によって, 同時に多くの smtp 要求を受け付けられ
接続の記録が取れるようになる (文献 2) という利点から
tcpserver を使うことにする.
tcpserver をソースからインストールする。今回はソースからインストールしたがパッケージからインストールする方が望ましい.
ソースとパッチをダウンロードする.
# wget http://cr.yp.to/ucspi-tcp-0.88.tar.gz # wget http://www.qmail.org/rpms/patches/ucspi-tcp-0.88.errno.patch
解凍とパッチあてを行う.
# tar zxf ucspi-tcp-0.88.tar.gz # cd ucspi-tcp-0.88 # patch < ../ucspi-tcp-0.88.errno.patch
インストールする
# make # make setup check
qmaild の UID と GID を確認する.
$ id qmaild
tcpserver を起動する.
# tcpserver -u xxxx -g yyyy /var/qmail/bin/qmail-smtpd &
xxxx には qmaild の UID を, yyyyには nofiles の GID を入力する.
telnet によって smtp の配信テストを行う(参考 [1.7]文献-7)
# apt-get install telnet $ telnet 127.0.0.1 25
Trying 127.0.0.1 25 Connected to 127.0.0.1. Escape character is '^]'. 220 usuzumi.ep.sci.hokudai.ac.jp ESMTP 打つ-> helo lemon.ep.sci.hokudai.ac.jp 250 usuzumi.ep.sci.hokudai.ac.jp 打つ-> mail <mondo4@usuzumi.ep.sci.hokudai.ac.jp> 250 ok 打つ-> rcpt <mondo4@usuzumi.ep.sci.hokudai.ac.jp> 250 ok 打つ-> data 354 go ahead 打つ-> Subject: testing 打つ-> 打つ-> This is a test. 打つ-> . 250 ok 812345679 qp 12345 打つ-> quit 221 usuzumi.ep.sci.hokudai.ac.jp Connection closed by foreign host. % |
メールが届いている確認する.
$ lv ~/Mailbox以下があれば良い.
From mondo1@usuzumi.ep.sci.hokudai.ac.jp Thu Apr 05 04:22:27 2015 Return-Path: <mondo1@usuzumi.ep.sci.hokudai.ac.jp> Delivered-To: mondo1@usuzumi.ep.sci.hokudai.ac.jp Received: (qmail 4986 invoked from network); 5 Apr 2015 13:22:09 +0900 Received: from unknown (HELO lemon.ep.sci.hokudai.ac.jp) (127.0.0.1) by localhost with SMTP; 9 Spt 2012 13:22:09 +0900 Subject: testing This is a test. |
smtp 中継(smtpを使ったメールの送信)を許可するホストを指定する. まず, 文献 1 に従って,
/etc/tcp.smtp を書く.
# vim /etc/tcp.smtp
例えば,133.87.52.40 という IP アドレスのホストからの smtp 中継を許可するためには,
次の 1 行目のように書く. 2 行目の 127. はローカルホストを指す. これは常に書くこと.
133.87.52.40:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT="" |
次に以下のコマンドを実行する.tcp.smtp を元に /etc/tcp.smtp.cdb ができる.
# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
usuzumi を reboot して tcpserver の起動を確認する.
# reboot # ps aux | grep smtp
qmaild 4137 0.0 0.0 6000 660 ? S Sep14 0:00 /usr/bin/tcpserver -R -H -u 64011 -g 65534 -x /etc/tcp.smtp.cdb 0 smtp /usr/sbin/qmail-smtpd |
先ほど /etc/tcp.smtp に書いた IP アドレス(ここでは, 133.87.52.40)を持つパソコンから
メーラー (例. Thunderbird) を使って, smtp サーバを usuzumi に設定し,
usuzumi 以外の任意のサーバにあるアカウント宛のメールを発信してみる.
/var/log/syslog に残るログは, 以下のようなものとなる事を確認する.
Mar 6 10:28:29 usuzumi smtpd: 1141608509.874210 tcpserver: status: 1/40 Mar 6 10:28:29 usuzumi smtpd: 1141608509.874295 tcpserver: pid 1896 from 133.87.45.145 Mar 6 10:28:55 usuzumi smtpd: 1141608535.898609 tcpserver: ok 1896 usuzumi.ep.sci.hokudai.ac.jp:133.50.160.52:2 Mar 6 10:28:55 usuzumi smtpd: 1141608535.952798 tcpserver: end 1896 status 0 Mar 6 10:28:55 usuzumi smtpd: 1141608535.952857 tcpserver: status: 0/40 |
gate-system から登録 IP アドレス一覧を受け渡してもらい /etc/tcp.smtp.cdb を自動生成する.
そのために, 標準入力から IP アドレスリストを読み込み,
/etc/tcp.smtp を書くスクリプトを書いた.
これを /usr/local/sbin/list-2-tcp とする. root への実行許可を忘れずに.
$ wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2014/dvlop/script/list-2-tcp $ sudo -s # cp ./list-2-tcp /usr/local/sbin/list-2-tcp # chmod 755 /usr/local/sbin/list-2-tcp
/usr/local/sbin/tcp_smtp_cdb を以下のスクリプトのように書く. root への実行許可を忘れずに. gate の ip データベース更新時には, gate-system によってこのスクリプトが呼び出される.
tcp_smtp_cdb$ wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2014/dvlop/script/tcp_smtp_cdb $ sudo -s # cp ./tcp_smtp_cdp /usr/local/sbin/tcp_smtp_cdb # chmod 755 /usr/local/sbin/tcp_smtp_cdb
gate-ip-show, gate-ip-list は gate-system のコマンドである.
inetd から呼び出されていた pop の受付を tcpserver に移すには
/etc/inetd.conf の pop の行をコメントアウトした上で
tcpserver 起動スクリプト /etc/init.d/qmail に pop の行を加えて
(一行で)再起動する.
# vim /etc/inetd.conf
pop-3 の設定のところをコメントアウトする
#pop-3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup grey.ep.sci.hokudai.ac.jp /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir |
inetd を止める
# ps aux | grep inetd # kill -HUP xxxx
xxxxは inetd のプロセスIDである.
# vim /etc/xinetd.conf以下のようにコメントアウトする.
#service pop3 #{ #socket_type = stream #wait = no #user = root #server = /var/qmail/bin/qmail-popup #server_args = grey.ep.sci.hokudai.ac.jp /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir #} |
再起動する.
# /etc/init.d/xinetd restart
smtp と同様に pop も /etc/init.d/qmail に起動スクリプトを記入する.
# vim /etc/init.d/qmail
sh -c "start-stop-daemon --start --quiet --user qmaild \
--pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \
--exec /usr/bin/tcpserver -- -R -H \
-u `id -u qmaild` -g `id -g nobody` -x /etc/tcp.smtp.cdb 0 smtp \
$rblsmtpd /usr/sbin/qmail-smtpd 2>&1 \
| $logger &"
の文を以下のように書き直す.
sh -c "start-stop-daemon --start --quiet --user qmaild \ --pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \ --exec /usr/bin/tcpserver -- -R -H \ -u `id -u qmaild` -g `id -g nobody` -x /etc/tcp.smtp.cdb 0 smtp \ $rblsmtpd /usr/sbin/qmail-smtpd 2>&1 \ | /var/qmail/bin/splogger smtpd 3 > /dev/null 2>&1 &" |
さらにその文の下に以下を追加する.
sh -c "start-stop-daemon --start --quiet --user root \ --pidfile /var/run/tcpserver_pop3d.pid --make-pidfile \ --exec /usr/bin/tcpserver -- -v \ -u 0 -g 0 0 pop-3 /var/qmail/bin/qmail-popup grey.ep.sci.hokudai.ac.jp \ /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir 2>&1 \ | /var/qmail/bin/splogger pop3d 3 > /dev/null 2>&1 &" |
また,
stop)
echo -n "Stopping mail-transfer agent: qmail" $rblmsg
if [ "`pidof /usr/sbin/qmail-send`" ] ; then
start-stop-daemon --user qmails --stop --quiet --oknodo --exec /usr/sbin/qmail-send
start-stop-daemon --user qmaild --stop --quiet --oknodo --pidfile /var/run/tcpserver_smtpd.pid --exec /usr/bin/tcpserver
の下に以下を追加する.
start-stop-daemon --user root --stop --quiet --oknodo --pidfile /var/run/tcpserver_pop3d.pid --exec /usr/bin/tcpserver |
qmail を再起動する
# /etc/init.d/qmail restart
動いているか確認する
# ps aux | grep tcp
以下のようになっていれば大丈夫
/usr/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u 64011 -g 65534 0 smtp /usr/sbin/qmail-smtpd /usr/bin/tcpserver -v -u 0 -g 0 0 pop-3 /var/qmail/bin/qmail-popup usuzumi.ep.sci.hokudai.ac.jp /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir |
http://www.ezmlm.org/から http://cr.yp.to/software/ezmlm-0.53.tar.gz を取得,展開する. ezmlm-0.53/INSTALL に従って作業を行う.
$ wget http://cr.yp.to/software/ezmlm-0.53.tar.gz $ tar zxvf ezmlm-0.53.tar.gz $ cd ezmlm-0.53 $ make
auto-str エラー とでたら, error.h の
extern int errno; を
#include <errno.h> に書き換える.
ezmlm-manage.c エラー もしくは
ezmlm-return.c エラー とでたら,
先頭に #include "log.h"
を書き込む.
$ vim ./error.h
extern int errno; を以下に書き換える
#include <errno.h> |
$ vim ./ezmlm-manage.c
先頭に以下を追加する
#include "log.h" |
$ vim ./ezmlm-return.c
先頭に以下を追加する
#include "log.h" |
$ make $ make man # make setup
qmail のコマンドにパスを通したのに習って
/usr/local/bin/ezmlm/ 以下の ezmlm のコマンドバイナリ群にパス通す.
(具体的には PATH=... の行に/usr/local/bin/ezmlm を追加するだけ)
.
bash にパスを通す
# vim /etc/profile
PATH=...の一番最後に:でつないで以下を書く
/usr/local/bin/ezmlm |
反映する.
$ source /etc/profile
csh にもパスを通す
# vim /etc/csh.cshrc
setenv PATH の一番最後に:でつないで以下を書く
/usr/local/bin/ezmlm |
メーリングリスト(ML)を作成する.詳細はezmlm-make の man 参照.
メーリングリストである testlist を作成する.
$ ezmlm-make ~/testlist ~/.qmail-testlist username-testlist usuzumi.ep.sci.hokudai.ac.jp
testlistには適当なメーリングリストの名前を,usernameには適当な作業ユーザのアカウント名を入れる.
次に作成した ML に ML 主催者が手動で購読者を追加する.詳細は ezmlm-sub の man 参照.
$ ezmlm-sub ~/testlist username@usuzumi.ep.sci.hokudai.ac.jp
登録が終了したら ML へ投稿してみる.先程登録したアドレスへ届くか確かめる.
$ echo subject:testing | qmail-inject usrname-testlist@usuzumi.ep.sci.hokudai.ac.jp
次に ML の自動処理コマンドを確かめる.
始めに投稿アーカイブから記事を取り出すコマンドを試す. 記事が送られてくるかを確認する.
ep ドメインの MX が張られていない場合は /var/qmail/control/defaulthost をホスト名までいれた
ドメイン(フルドメイン)にする必要がある.
$ qmail-inject username-testlist-get.1@ep.sci.hokudai.ac.jp < /dev/null
次に ML 参加者による自動登録抹消を試す. 確認メールが送られてくるので その指示に従い登録抹消する. ep ドメインの MX が張られていない場合 /var/qmail/control/defaulthost をホスト名までいれたドメイン(フルドメイン)にする必要がある.
$ qmail-inject username-testlist-unsubscribe@ep.sci.hokudai.ac.jp < /dev/null
Mailbox に来たメールに従って登録を消す.
$ lv Mailbox
メールの内容の以下の部分に従う.
removed from this mailing list, please send an empty reply to this address: username-testlist-uc.1318325352.njdckeaplgokjdbinace-username=usuzumi.ep.sci.hokudai.ac.jp@usuzumi.ep.sci.hokudai.ac.jp |
$ qmail-inject username-testlist-uc.1318325352.njdckeaplgokjdbinace-username=usuzumi.ep.sci.hokudai.ac.jp@usuzumi.ep.sci.hokudai.ac.jp < /dev/null
登録を抹消できたかどうかの確認は ML 登録アドレス一覧を見る. 詳細は ezmlm-list の man を見よ.
$ ezmlm-list ~/testlist
http://www.ezmlm.org/archive/0.40/ezmlm-idx-0.40.tar.gz
を取得,展開する.
いつの間にか本家がなくなっていた(2012/04/05 現在)のでネット上から取得したファイルをサーバに挙げておいた
ezmlm-idx-0.40.tar.gzこれを使ってほしい.
ezmlm-idx-0.40/INSTALL.idx に従って作業する. (2011/10/12 での最新版は 7.1.1 だが今回は 0.40 を使用する)
$ wget http://www.ep.sci.hokudai.ac.jp/~epmail/y2011/script/ezmlm-idx-0.40.tar.gz $ tar zxvf ezmlm-idx-0.40.tar.gz
ezmlm をビルドした時のディレクトリに持っていく.
$ cp -r ezmlm-idx-0.40/* ezmlm-0.53/ $ cd ezmlm-0.53/
パッチを充てる
$ patch < idx.patch
crontab のありかを調べる.
$ which crontab
/usr/bin にあれば先へ進む. 違う場所にある場合は conf-cron にありかを書き込む.
/usr/bin/crontab |
MySQL(解説は http://www.mysql.com/)
を使うか否かを決定.
ここでは使わないこととして先に進む. 使う場合にはこの段階でやるべき作業がある.
$ make clean $ make; make man $ make jp
最後の行は使用言語を選ぶものである. jp は日本語を意味する.
これによって自動管理要請に ezmlm が応えてユーザに送る文言
が日本語になる.
MySQL を使わない場合は以下を実行する(使う場合には異なる作業が要る).
# make std # make # make setup
ユーザ eztest を作って ezmlm-idx のコマンドバイナリ群が実行できるか確かめる
(ezmlm-testコマンド).
ezmlm-test を実行する前に ezmlm-idx のコマンドバイナリ群に
パスが通っているかを確認されたい.
テストユーザを作成する.
$ chmod 755 ezmlm-test $ sudo -s # adduser eztest # su eztest eztest@:$ source /etc/profile eztest@:$ cd ezmlm-0.53/ eztest@:$ ./ezmlm-test
以下のように出たら成功.
testing ezmlm-idx: ezmlm-idx-0.40 Using FQDN host name: usuzumi.ep.sci.hokudai.ac.jp ezmlm-make (1/2): OK Using RDBMS support: No. testing for qmail: >=1.02 ezmlm-reject: OK ezmlm-[un|is]sub[n]: OK ezmlm-send (1/2): OK ezmlm-tstdig: OK ezmlm-weed: OK ezmlm-make (2/2): OK ezmlm-clean (1/2): removed mod queue entry 3 that wasn't due |
ここで su eztest と行ったが sudo コマンドを用いる場合はデフォルトでは環境変数 $HOME が
ログインしたユーザとなったままとなり正しく実行されないので -H オプションをつけて実行する.
テストユーザを削除する.
# userdel -r eztest
最終更新日:2015/11/20 (多田 直洋) | Copyright © 2001-2014 epcore |