<!doctype linuxdoc system>

<article>

<title>qmail と majordomo と distribute のインストールと設定
<author>こやま (<tt/koyama@ec.tmit.ac.jp/)
<date>1997 年 5 月 20 日

<abstract>
この文書は，Slackware 3.2(Linux 2.0.29) への qmail と majordomo と
distribute のインストールと設定をまとめたものです。qmail は MTA(Mail
Transfer Agent) で，majordomo と distribute が ML(Mailing List) のソ
フトです。以下では，133.10.32.20(ecpxb.tmit.ac.jp)を 
relay.ec.tmit.ac.jp として，practice@relay.ec.tmit.ac.jp という ML を
作成するという例を解説しています。
</abstract>
<p>
<quote>
&lsqb;編集者(松本庄司(<tt/shom@i.h.kyoto-u.ac.jp/)より：著者のこやまさんが 
LaTeX でメモされていたものを提供して下さり、私が linuxdoc-sgml に変換
しました&rsqb;
</quote>

<sect>qmail
<p>
qmail は，sendmail 等に代表される MTA の一種で，sendmail の代替物とし
て機能します。500 名規模の ML の処理に sendmail では 3〜10 時間程度か
かりますが，qmail はこれを10〜30 分程度で行うことができます。

<sect1>インストール
<p>
詳しくは <tt/INSTALL/ ファイル参照。
<p>
(1) qmail のディレクトリを決めます。qmail は，このディレクトリにすべて
のメールを queue します。このディレクトリは自マシンのディスクにする必
要があるようです。NFS 等による遠隔マシンのディスクを使うことはできませ
ん。本当の理由はわかりませんが，たぶん，速度が落ちるからでしょう。デフォ
ルトは <tt>/var/qmail</tt> です。このディレクトリを変更するには，
<tt>conf-home.h</tt> ファイルを編集してください。以下では，デフォルト
の<tt>/var/qmail</tt> ディレクトリで話を行います。このディレクトリを作
成してください。

<tscreen><verb>
# mkdir /var/qmail; chmod 755 /var/qmail
</verb></tscreen>

(2) qmail が使う user と group を登録します。詳しくは <tt/INSTALL.ids/ 
ファイル参照。以下の group を <tt>/etc/group</tt> に登録し，

<code>
qmail:*:2107:
nofiles:*:2108:
</code>

以下の user を <tt>/etc/passwd</tt> に登録します。

<code>
alias:*:7790:2108::/var/qmail/alias:/bin/true
qmaild:*:7791:2108::/var/qmail:/bin/true
qmaill:*:7792:2108::/var/qmail:/bin/true
qmailp:*:7793:2108::/var/qmail:/bin/true
qmailq:*:7794:2107::/var/qmail:/bin/true
qmailr:*:7795:2107::/var/qmail:/bin/true
qmails:*:7796:2107::/var/qmail:/bin/true
</code>

qmail は，root 権限での実行をできるだけ避けるために，これらの user と 
group を使います。これらの user と group 名を変更するには，
<tt>conf-user.h</tt> ファイルを編集してください。

(3) 以下のコマンドを実行します。

<tscreen><verb>
# make
# make man
# make setup
# make check
</verb></tscreen>

(4) qmail の各種設定は，先に設定した qmail のディレクトリ，user，group 
の変更を除き，<tt>/var/qmail/control/</tt> 以下のファイルで行います(詳
しくは <tt/INSTALL.ctl/ ファイルを参照してください)。この際に，qmail 
の再コンパイルは必要ありません。通常は，<tt>control/me</tt> ファイルを
除き，デフォルト値のままでよいので，特に設定する必要はありません。
<tt>control/me</tt> ファイルには，自マシンの FQDN を指定します。このほ
かのファイルは必要に応じて設定してください。

付属の <tt/qmail-makectl/ スクリプトを実行すれば，<tt/control/ 以下の
ファイルを簡単に設定することができます。

<tscreen><verb>
# ./qmail-makectl
</verb></tscreen>

このスクリプトは自マシンの FQDN を DNS 経由で推定し，この値を
<tt>control/me</tt> に書き込み，さらに <tt>control/locals</tt> 等の関
連するファイルに値を書き込みます。

以下に設定例を示します。

<code>
-- control/me --
relay.ec.tmit.ac.jp
-- control/defaultdomain --
ec.tmit.ac.jp
-- control/plusdomain --
tmit.ac.jp
-- control/locals --
localhost
ecpxb.tmit.ac.jp
ecpxb.ec.tmit.ac.jp
relay.ec.tmit.ac.jp
-- control/rcpthosts --
localhost
ecpxb.ec.tmit.ac.jp
relay.ec.tmit.ac.jp
----
</code>

<tt>control/me</tt> は自マシンの FQDN，<tt>control/defaultdomain</tt> 
はホスト名だけ指定されたときに付加されるドメイン名，
<tt>control/plusdomain</tt> はホスト名と ``+'' が指定されたときに付加
されるドメイン名です。

<tt>control/locals</tt> に登録されたドメインへのメールは自マシンへのメー
ルとして処理されます。<tt>control/rcpthosts</tt> には自マシンへのメー
ルとして受け取るメールのドメインを登録します。

また，<tt/concurrencylocal/ と <tt/concurrencyremote/ には，自マシンと
遠隔マシンとの間で同時に処理するメール数(SMTP 接続数)を設定します。デ
フォルト値は <tt/concurrencylocal/ が10，<tt/concurrencyremote/ が20で
す。<tt>control/concurrencyremote</tt> の上限に関してはFAQファイルを参
照してください。

(5) qmail は alias 関連の設定を <tt>/etc/aliases</tt> ではなく，
<tt/~alias/ ディレクトリと <tt/~user/ ディレクトリ以下の <tt/.qmail-*/ 
ファイルで行います(詳しくは <tt/INSTALL.alias/ ファイルを参照してくだ
さい)。

(6) 基本の alias の設定は <tt>~alias/.qmail-*</tt> ファイルで行います。
例えば，root の alias は <tt>~alias/.qmail-root</tt> ファイルに設定し
ます。以下のコマンドを実行すれば，postmaster，mailer-daemon，root の各 
alias を設定することができます。この設定で，これらのアドレスへのメール
は <tt>~alias/Mailbox</tt> へ保存されます。

<quote>
■qmail は，<tt>/usr/spool/mail</tt> ではなく，<tt>~user/Mailbox</tt> 
にメールを保存します。詳しくは <tt/INSTALL.mbox/ ファイルを参照してく
ださい。□
</quote>

<tscreen><verb>
# (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
# chmod 644 ~alias/.qmail*
</verb></tscreen>

各利用者独自の alias の設定は <tt>~user/.qmail-*</tt> ファイルで行いま
す。qmail では，各利用者が独自に複数の alias を設定することができます。
例えば，利用者 foo は，foo-group というアドレスの alias は 
<tt>~foo/.qmail-group</tt> ファイルで設定することができます。

<quote>
■qsmhook を使うことで，alias の指定を <tt>/etc/aliases</tt> で行った
り，<tt>/usr/spool/mail</tt> にメールを保存したりという sendmail 互換
の動作を qmail に指示することができますが，これは止めたほうがよいらし
いです。詳しくは <tt/INSTALL.qsmhook/ ファイルを参照してください。□
</quote>

<quote>
■一般の利用者が sendmail から qmail へ移行するときのことは，
<tt/qmail-upgrade.*/ ファイルにまとめられています。□
</quote>

<sect1>移行前のテスト
<p>
(1) qmail の動作を確認します。以下のコマンドを実行して，qmail を起動し
てください。

<tscreen><verb>
# env - PATH="/var/qmail/bin:$PATH" qmail-start splogger qmail &
</verb></tscreen>

<tt>/usr/adm/messages</tt> ファイルに保存されたログから qmail の起動を
確認してください。以下に例を示します。``running'' であれば成功，
``cannot start'' であれば失敗です。

<tscreen><verb>
Apr 28 02:17:00 ecpxb qmail: 862161420.691666 running
</verb></tscreen>

ps コマンドでも起動を確認してください。

<tscreen><verb>
# ps aux | grep qmail
qmails    1635  0.0  1.7   876   268  p0 S   02:17   0:00 qmail-send 
qmaill    1636  0.0  1.9   844   292  p0 S   02:17   0:00 splogger qmail 
root      1637  0.0  1.4   840   212  p0 S   02:17   0:00 qmail-lspawn 
qmailq    1639  0.0  1.5   836   224  p0 S   02:17   0:00 qmail-clean 
qmailr    1638  0.0  1.3   836   208  p0 S   02:17   0:00 qmail-rspawn 
root      1659  0.0  2.2   932   328  p1 S   02:23   0:00 grep qmail 
# 
</verb></tscreen>

4 つの qmail (qmail-send が qmails で，qmail-lspawn が root で，
qmail-rspawn が qmailr で，qmail-clean が qmailq) と，splogger が動い
ていれば成功です。

(2) 自マシンから自マシンへのメールのテストを行います (<tt/me/ は正しい
利用者名を使ってください)。

<tscreen><verb>
% echo to: me | /var/qmail/bin/qmail-inject
</verb></tscreen>

この結果，即座に <tt>~foo/Mailbox</tt> にメールが届いていることと，
<tt>/usr/adm/messages</tt> のログを確認してください。以下にログの例を
示します (53 と 20345 は実行するたびに変わります)。

<tscreen><verb>
qmail: new msg 53 
qmail: info msg 53: bytes 246 from <me@relay.ec.tmit.ac.jp> qp 20345 uid 666
qmail: starting delivery 1: msg 53 to local me@relay.ec.tmit.ac.jp
qmail: delivery 1: success: did_1+0+0/
qmail: end msg 53 
</verb></tscreen>

(3) 自マシンでのエラーメールのテストを行います。

<tscreen><verb>
% echo to: nonexistent | /var/qmail/bin/qmail-inject
</verb></tscreen>

以下にログの例を示します。また，エラーメールが <tt>~/Mailbox</tt> に戻っ
てきていることを確認してください。

<tscreen><verb>
qmail: new msg 53 
qmail: info msg 53: bytes 246 from <me@relay.ec.tmit.ac.jp> qp 20351 uid 666
qmail: starting delivery 2: msg 53 to local nonexistent@relay.ec.tmit.ac.jp
qmail: delivery 2: failure: No_such_address.__#5.1.1_/
qmail: bounce msg 53 qp 20357
qmail: end msg 53 
qmail: new msg 54 
qmail: info msg 54: bytes 743 from <> qp 20357 uid 666
qmail: starting delivery 3: msg 54 to local me@relay.ec.tmit.ac.jp
qmail: delivery 3: success: did_1+0+0/
qmail: end msg 54 
</verb></tscreen>

(4) 自マシンから遠隔マシンへのメールのテストを行います。

<tscreen><verb>
% echo to: koyama@ec.tmit.ac.jp | /var/qmail/bin/qmail-inject
</verb></tscreen>

以下にログの例を示します。また，メールが遠隔マシンに届いていることを確
認してください。

<tscreen><verb>
qmail: new msg 53 
qmail: info msg 53: bytes 246 from <me@relay.ec.tmit.ac.jp> qp 20372 uid 666
qmail: starting delivery 4: msg 53 to remote koyama@ec.tmit.ac.jp
qmail: delivery 4: success: 1.2.3.4_accepted_message./...
qmail: end msg 53 
</verb></tscreen>

(5) 自マシンの postmaster へのメールのテストを行います。メールが 
<tt>~alias/Mailbox</tt> に届いていることを確認してください。

<tscreen><verb>
% echo to: POSTmaster | /var/qmail/bin/qmail-inject
</verb></tscreen>

(6) 自マシンの postmaster へのメールのテストを行います。メールが 
<tt>~alias/Mailbox</tt> に届いていることを確認してください。

(7) バウンドメールのテストを行います。メールの終わりは ``.'' ではなく，
CTRL-D で指定してください。バウンドメールに関するエラーメールが 
<tt>~alias/Mailbox</tt> に届いていることを確認してください。

<tscreen><verb>
% /var/qmail/bin/qmail-inject -f nonexistent
To: unknownuser
Subject: testing

This is a test. This is only a test.
(CTRL-D)
%
</verb></tscreen>

(8) 利用者の <tt>~/.qmail-*</tt> ファイルによる alias のテストを行いま
す。例として，<tt>~me/.qmail-groups</tt> を作成します。

<tscreen><verb>
% cat > ~me/.qmail-groups
|groups >> MYGROUPS; exit 0
(CTRL-D)
</verb></tscreen>

ここで，me-groups にメールして，<tt>~me/MYGROUPS</tt> ファイルに group
id が保存されているかどうかを確認してください。

<tscreen><verb>
% /var/qmail/bin/qmail-inject me-groups < /dev/null
</verb></tscreen>
   
<sect1>sendmailからqmailへの移行
<p>
(1) マシンの起動時に，sendmail ではなく，qmail を起動するように設定し
ます。詳しくは <tt/INSTALL.boot/ ファイルを参照してください。この例で
は，起動時に実行されるスクリプト(<tt>/etc/rc.d/rc.M</tt>)で sendmail 
が起動されているとします。

<code>
# Start the sendmail daemon:
if [ -x /usr/sbin/sendmail ]; then
  echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -q 15m)..."
  /usr/sbin/sendmail -bd -q 15m
fi
</code>

この部分を以下のものに置換することにします。

<code>
env - PATH=''/var/qmail/bin:$PATH'' csh -cf 'qmail-start splogger qmail &'
</code>

(2) 実行中の sendmail を止めます。以下に sendmail を止める手順を示します。
<enum>
<item> 現在のsendmail daemon を <tt/kill -STOP/ する。
<item> ここで，sendmail の子供が存在するときは，「<tt/kill -CONT/ し，すこし待って，再度 <tt/kill -STOP/ する」という作業を子供がいる間繰り返す。
<item> 子供がすべて止まったら，<tt/kill -TERM/ し，<tt/kill -CONT/ してsendmailを止める。
</enum>

(3) qmail の sendmail 版 wrapper(sendmail のインターフェイス付き 
qmail)で，現在の sendmail を置換します。

<tscreen><verb>
# mv /usr/lib/sendmail /usr/lib/sendmail.bak
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail 
</verb></tscreen>

(4) <tt>/etc/inetd.conf</tt> を修正します。以下の行を 
<tt>/etc/inetd.conf</tt> に書き込み(これはすべて 1 行で書くこと)，
comsat に関する行をコメントアウトします。

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

(5) マシンを再起動します。あるいは inetd を <tt/kill-HUP/ し，qmail が
正しく動作していることを確認してもかまいません。

(6) sendmail で未処理のまま queue に残っているメールの処理を行います
(この処理は省略してもかまいません)。qmail の実行中であっても，
<tt/sendmail.bak -q/ (あるいは <tt/sendmail.bak -q15m/) を実行してもか
まいません。queue に残っているメールがすべて処理されるまで，これを行っ
てください(数日かかることもあります)。

<tscreen><verb>
# /usr/lib/sendmail.bak -q
</verb></tscreen>
       
(7) sendmail と binmail 等の実行許可を取り除きます(この処理は省略して
もかまいません)。ここでは，<tt/chmod 0/ を実行することにします。

<tscreen><verb>
# chmod 0 /usr/sbin/sendmail /usr/lib/sendmail.bak /usr/lib/sendmail.mx
# chmod 0 /bin/mail 
 ...
</verb></tscreen>

(8) mail が正しいメイラーを起動することを確認します(意味不明)。SVR4 の
処理は省略してもかまいません)。SVR4 では，mail から mailx へリンクを作
成すればよいでしょう(意味不明)。

<sect1>移行後のテスト
<p>
(1) SMTP のテストを行います。SMTP 経由で自マシンにメールを出すテストを
行います。自マシンの <tt>~me/Mailbox</tt> にメールが届いていることを確
認してください。

<tscreen><verb>
% telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 relay.ec.tmit.ac.jp ESMTP
helo dude
250-relay.ec.tmit.ac.jp
250-PIPELINING
250 8BITMIME
mail <me@relay.ec.tmit.ac.jp>
250 ok
rcpt <me@relay.ec.tmit.ac.jp>
250 ok
data
354 go ahead
Subject: testing

This is a test.
.
250 ok 812345679 qp 12345
quit
221 relay.ec.tmit.ac.jp
Connection closed by foreign host.
%
</verb></tscreen>

(2) 遠隔マシンから自マシンのメールのテストを行います。ほかのマシンか
ら自マシンのアカウントへメールを出してみてください。

(3) 遠隔マシンからのテストメールのテストを行います。

(4) MUA のテストを行います。mh-e 等を使って，最初は自マシンのアカウン
ト，次に遠隔マシンのアカウントにメールを出してください。

(5) 遠隔マシンから自マシンの postmaster へのメールのテストを行います。
遠隔マシンから <tt/PoStMaStEr@relay.ec.tmit.ac.jp/ へメールを出し，
<tt>~alias/Mailbox</tt> にメールが届いていることを確認してください。


<sect1>qmail の管理ツール
<p>
<descrip>
<tag><tt>/var/qmail/bin/qmail-qread</tt></tag>
  queue の内容をリストにして表示します。
</descrip>

<sect1>qmailanalog のインストールと設定
<p>
(1) qmailanalog のディレクトリを決めます。デフォルトは 
<tt>/usr/local/bin/qmailanalog</tt> です。これを変更するには，
<tt/conf-bin.h/ を編集してください。

(2) 以下のコマンドを実行します。

<tscreen><verb>
# make
# make setup
# ln -s /usr/bin/awk /usr/bin/nawk
</verb></tscreen>

(3) qmail のログがマイクロ秒単位であることを確認します。

<tscreen><verb>
849347513.939860 running
849347523.531129 new msg 19326
849347523.532347 info msg 19326: bytes 266 ...
</verb></tscreen>

(4) qmail のログを <tt>qmailanalog/matchup</tt> に処理してもらいます。

<tscreen><verb>
% awk '{$1=";$2=";$3=";$4=";$5=";print}' < /usr/adm/message \
     | /usr/local/bin/qmailanalog/matchup > out
</verb></tscreen>

(5) matchup の出力を <tt>qmailanalog/z*</tt> スクリプトで処理します。

<tscreen><verb>
% /usr/local/bin/qmailanalog/zddist < out      # メールの遅れの統計
% /usr/local/bin/qmailanalog/zfailures < out   # 失敗メールのチェック
% /usr/local/bin/qmailanalog/zrecipients < out # 受け取り先の統計
% /usr/local/bin/qmailanalog/zrxdelay < out    # 受け取り先の統計(遅れでソート)
% /usr/local/bin/qmailanalog/zsuccesses < out  # 成功時に理由の統計(意味無し)
% /usr/local/bin/qmailanalog/zdeferrals < out  # deferral時の理由の統計
% /usr/local/bin/qmailanalog/zoverall < out    # 基本統計
% /usr/local/bin/qmailanalog/zrhosts < out     # 相手のホストの統計
% /usr/local/bin/qmailanalog/zsenders < out    # 差し出し元の統計
% /usr/local/bin/qmailanalog/zsuids < out      # 差し出し元のuidの統計
</verb></tscreen>


<sect1>qmail の qlist による簡易 ML の作成
<p>
以下のコマンドを実行し，

<tscreen><verb>
% touch .qmail-ifweb .qmail-ifweb-owner
</verb></tscreen>

<tt/.qmail-ifweb-request/ ファイルに以下の内容を書き込みます。

<code>
| qlist2 ifweb relay.ec.tmit.ac.jp
</code>

<sect>majordomo と distribute
<p>
majordomo は CML(現鹿島 ML)等の ML 管理ソフトの一種です。distribute も 
ML 管理ソフトの一種ですが，最近では majordomo の機能拡張ソフトとして 
majordomo と一緒に使われることが多いようです。ここでも，majordomo を 
ML 管理ソフトとして扱い，distribute で機能拡張を行うことにします。

<sect1>majordomo のインストール
<p>
(1) majordomo の user id と group id を決めます。ここでは，user を 
majordomo(7797) に，group を daemon(2) にすることにします。
<tt>/etc/passwd</tt> と <tt>/etc/group</tt> を修正してください。

(2) majordomo をインストールするディレクトリを決めます。ここでは，
<tt>/home/mail/majordomo</tt> にインストールすることにします。

(3) <tt/Makefile/ を必要に応じて修正します。この例で修正した箇所を以下
に示します。

<code>
W_HOME = /home/mail/majordomo
W_USER = 7797
W_GROUP = 2
</code>

(4) <tt/sample.cf/ を <tt/majordomo.cf/ に cp し，このファイルを必要に
応じて修正します。この例で修正した箇所を以下に示します。

<code>
$whereami = "relay.ec.tmit.ac.jp";
$digest_work_dir = "/home/mail/majordomo/spool";
</code>

(5) 以下のコマンドを実行します。

<tscreen><verb>
# make wrapper
# make install
# make install-wrapper
# cd /path/to/majordomo; ./wrapper config-test
</verb></tscreen>


<sect1>distributeのインストール
<p>
(1) <tt/distribute-2.1-pl19.tgz/ を展開し，<tt/patch-20.gz/ を当てます。

(2) 詳しくは <tt/INSTALL.JP/ を参照してください。distribute のディレク
トリは <tt>/home/mail/distribute</tt> にしました。

(3) 必要に応じて <tt/Mailefile/ を修正します。この例で修正した箇所を以
下に示します。

<code>
DEFAULTCONFIG=\
        -DDEF_DOMAINNAME=\"relay.ec.tmit.ac.jp\" \
        -DDEF_ALIAS_CHAR_OPTION=\"b\" \
        -DDEF_SEQ_PATH=\"/home/mail/distribute\" \
        -DDEF_RECIPIENT_PATH=\"/home/mail/distribute\" \
        -DDEF_MAJORDOMO_RECIPIENT_PATH=\"/home/mail/majordomo/lists\" \
         -DDEF_ARCHIVE_PATH=\"/home/mail/distribute/archive\"
WHERE=  /home/mail/distribute/bin
</code>

(4) <tt/longstr.c/ を修正します。

<code>
#ifdef linux
  #include <bsd/bsd.h>
#endif
</code>

(5) 以下のコマンドを実行します。

<tscreen><verb>
# mkdir /home/mail/distribute
# mkdir /home/mail/distribute/bin
# mkdir /home/mail/distribute/archive
# make 
# make install
# chown -R majordomo.daemon /home/mail/distribute
# chown 4755 /home/mail/distribute/bin/*
</verb></tscreen>

(6) <tt>/etc/syslog.conf</tt> を設定し，syslogd を <tt/kill -HUP/ しま
す。

<code>
local4.info     /usr/adm/distribute.log
</code>


<sect1>majordomo と distribute の基本設定
<p>
(1) majordomo と distribute のための alias を設定します。qmail ですか
ら，alias の設定は <tt>~alias/.qmail-*</tt> ファイルで行います。以下に
設定例を示します。

<code>
-- ~alias/.qmail-majordomo --
|condredirect postmaster /usr/bin/egrep -i (折り返し)
  '^(From|Sender|Reply-To):.*(majordomo|listproc|listserv|(折り返し)
  postmaster|postmstr|admin|root|pmdf|mailer|-request)@'
|/home/mail/majordomo/wrapper majordomo
-- ~alias/.qmail-majordomo-owner --
-- ~alias/.qmail-owner-majordomo --
----
</code>

(2) <tt/~majordomo.qmail/ から <tt>~alias/.qmail-majordomo</tt> へのリ
ンクを作成します。


<sect1>新しい ML の作成
<p>
詳しくは <tt/NEWLIST/ ファイルを参照してください。ここでは，実験 ML
<tt/practice@relay.ec.tmit.ac.jp/ と実験 ML のダイジェスト版 
<tt/practice-digest@relay.ec.tmit.ac.jp/ を作成する例を示します。

(1) 新しい ML のための alias を設定します。以下に設定例を示します。

<code>
-- ~alias/.qmail-owner-practice --
&amp;koyama@ec.tmit.ac.jp
-- ~alias/.qmail-practice-approval --
&amp;koyama@ec.tmit.ac.jp
-- ~alias/.qmail-practice-request --
| /home/mail/majordomo/wrapper majordomo -l practice
-- ~alias/.qmail-practice-digest-request --
| /home/mail/majordomo/wrapper majordomo -l practice-digest
-- ~alias/.qmail-practice --
| /home/mail/distribute/bin/distribute -j -R -B A -P bulk (折り返し)
  -M practice -x practice-outgoing
-- ~alias/.qmail-practice-outgoing --
| /home/mail/majordomo/wrapper digest -r -C (折り返し)
  -l practice-digest practice-digest-outgoing
| /home/mail/distribute/bin/archive -M practice
----
</code>

以下のリンクを作成します。

<tscreen><verb>
# ln -s ~alias/.qmail-practice ~alias/.qmail-practice-digest
# ln -s /home/mail/majordomo/lists/practice-digest (折り返し)
  ~alias/.qmail-practice-digest-outgoing
# ln -s ~alias/.qmail-owner-practice ~alias/.qmail-owner-practice-arhive 
# ln -s ~alias/.qmail-owner-practice ~alias/.qmail-owner-practice-digest
# ln -s ~alias/.qmail-practice-approval ~alias/.qmail-practice-digest-approval
</verb></tscreen>

(2) 新しい ML のための設定ファイルとディレクトリを作成します。以下に例
を示します。<tt/practice/ と <tt/practice-digest/ は登録メンバのリスト
を保存するファイル，<tt/practice.archive/ と 
<tt/practice-digest.archive/ は古いメールを保存するディレクトリ，
<tt/practice.info/ と <tt/practice-digest.info/ は ML の紹介を書くファ
イルです(適当に書いてください)。
 
<tscreen><verb>
# cd ~majordomo/lists
# touch practice practice-digest
# mkdir practice-digest.archive
# mkdir /home/mail/distribute/archive/practice
# ln -s /home/mail/distribute/archive/practice practice.archive
# touch practice-digest.info practice-digest.info
# mkdir ~majordomo/spool
# mkdir ~majordomo/spool/practice-digest
# chown -R majordomo.daemon ~majordomo/lists 
# chown -R majordomo.daemon ~majordomo/spool
# chown -R majordomo.daemon /home/mail/distribute/archive/practice
</verb></tscreen>

(3) <tt/majordomo@relay.ec.tmit.ac.jp/ に lists コマンドを出してください。

<tscreen><verb>
% echo 'lists' | mail majordomo@relay.ec.tmit.ac.jp
</verb></tscreen>

すべて正しく行われていれば，<tt/majordomo@relay.ec.tmit.ac.jp/ から 
practice と practice-digest という ML が存在するという内容の返事が戻っ
てきます。

(4) lists コマンドを実行すると，<tt>~majordomo/lists</tt> ディレクトリ
に，<tt/practice.config/ と <tt/practice-digest.config/ というファイル
が作成されます。このファイルで ML の動作を設定しますので，必要に応じて
修正してください。

(5) ダイジェスト版MLのために，<tt/crontab/ の設定をします。
<tt>/usr/spool/cron/crontabs/foo</tt> に以下の行を書き込みます。foo は，
root で無ければ，誰でもかまいません。root にすると，
<tt>~alias/.qmail-majordomo</tt> の設定によって postmaster へのメール
として処理されてしまいます。

<code>
0 0,10,14,18 * * * /home/mail/majordomo/mkdigest >/dev/null 2>&amp;1
</code>

<tt>/home/mail/majordomo/mkdigest</tt> の内容は以下の通りです。

<code>
(echo To: majordomo@relay.ec.tmit.ac.jp; echo mkdigest practice-digest PASSWORD) | /var/qmail/bin/qmail-inject
</code>

これは 0 時と 10 時と 14 時と 18 時にダイジェスト版を作成するという指
示です。最後に，この <tt/crontab/ を登録します。

<tscreen><verb>
# crontab /usr/spool/cron/crontabs/foo -u foo
</verb></tscreen>

これで終わりです。

<sect1>distribute から sequencer への移行
<p>
(1) 以下のコマンドを実行します。

<tscreen><verb>
# cd ~majordomo
# cp Tools/sequencer .
# chown majordomo.daemon sequencer
# cd lists
# echo "1" > practice.seq
# touch practice.aliases
# chown majordomo.daemon practice.seq practice.aliases
# cd ~alias
# ln -s /home/mail/majordomo/lists/practice .qmail-practice-outgoing-list
</verb></tscreen>

(2) <tt>~alias/.qmail-*</tt> を修正します。

<code>
-- ~alias/.qmail-practice --
| /home/mail/majordomo/wrapper sequencer -l practice -N (折り返し)
  -h relay.ec.tmit.ac.jp practice-outgoing
-- ~alias/.qmail-practice-outgoing --
&amp;practice-outgoing-list
| /home/mail/majordomo/wrapper digest -r -C (折り返し)
  -l practice-digest practice-digest-outgoing
----
</code>

(3) <tt>~majordomo/lists/practice.config</tt> を修正します。修正箇所は
以下の通りです。

<code>
# listsコマンドで，このMLを非表示にする。
noadvertise       <<  END
/.*/
END

# メールヘッダーのreceived行を削除する。
purge_received    =   yes

# Reply-To:行を設定する。
reply_to          = practice

# 投稿者を制限する(投稿を許可するファイル名を指定)。
restrict_post     = practice:practice-digest:practice.aliases

# Subject行の変更を指示する。
subject_prefix    = [Practice $SEQNUM]
</code>

(4) 必要であれば，<tt>~majordomo/lists/practice.aliases</tt> に，投稿
を許可するメールアドレスを登録します。

(5) <tt>~majordomo/majordomo.cf</tt> を修正します。以下に修正箇所を示
します。これは Majordomo の <tt/index/ コマンドの変更です。

<code>
$index_command = "sed -e 's/.* [[]/[/g' INDEX | /bin/nkf -m"; 
</code>


(6) <tt>~majordomo/sequencer</tt> を修正します。以下に diff を示します。
これは，<tt/Subject/ 行で <tt/&lsqb;Practice *&rsqb;/ が重複するのを修
正するための変更です。

<code>
*** Tools/sequencer     Tue Mar 18 11:54:02 1997
--- sequencer   Wed Mar 19 23:41:09 1997
***************
*** 153,158 ****
--- 153,168 ----
      &amp;abort("sequencer: Can't open /tmp/sequencer.$$.in: $!");

  while (<STDIN>) {
+       # modified by nob@makioka.y-min.or.jp 961130
+       #       to delete [****] or (****) from Subject:
+       # update by hiro@dp.fcs.ts.fujitsu.co.jp 970202
+       #       to delete Re: [****] or Re: (****)
+       #                 RE: [****] or RE: (****) from Subject:
+       if (/^Subject:/) {
+               s/R[eE].*\: [\(\[].*[\]\)]/Re\:/g;
+               s/R[eE].*\:.*R[eE].*\:/Re\:/g;
+       }
+       #
      print IN $_;
  }

***************
*** 196,202 ****
                                }
                        }
                        $subject = $foo . "Message for " . $opt_l;
!                       print OUT $subject, "\n";
                }

                print OUT "Sender: $sender\n";
--- 206,214 ----
                                }
                        }
                        $subject = $foo . "Message for " . $opt_l;
!                       # modified by hiro@dp.fcs.ts.fujitsu.co.jp 970202
!                       # no Subject Mail addon Subject:
!                       print OUT "Subject: $subject\n";
                }

                print OUT "Sender: $sender\n";
</code>

</article>
