その上で、*.mc の .mc を .cf に変えた名前を指定
して
./Build を実行します。
cd sendmail-8.14.3/cf/cf
vi netbsd-proto.mc
./Build netbsd-proto.cf
sendmail.cf と submit.cf を /etc/mail に写す(用意する)
ttyp0:makoto@yoshimi 11:56:15/060728(...cf/cf)> sudo cp netbsd-proto.* /etc/mail/
ttyp0:makoto@yoshimi 11:56:17/060728(...cf/cf)> \
(cd /etc/mail;
sudo ln -s netbsd-proto.cf sendmail.cf);
sudo cp -p submit.?? /etc/mail/
最近は
/usr/pkg/share/sendmail/cf
に README があり、その説明のように、このディレクトリに
sendmail.mc の名前で置いて、
t-105@makoto 21:39:22/120120(..sendmail/cf)% sudo make install-cf CF=netbsd-proto
rm -f netbsd-proto.cf
m4 ../m4/cf.m4 netbsd-proto.mc > netbsd-proto.cf || ( rm -f netbsd-proto.cf && exit 1 )
echo "### netbsd-proto.mc ###" >>netbsd-proto.cf
sed -e 's/^/# /' netbsd-proto.mc >>netbsd-proto.cf
chmod 444 netbsd-proto.cf
/usr/bin/install -c -o makoto -g users -m 0444 netbsd-proto.cf /etc/mail/sendmail.cf
/usr/bin/install -c -o makoto -g users -m 0444 submit.cf /etc/mail/submit.cf
t-105@makoto 21:43:08/120120(..sendmail/cf)%
もし、
makoto 09:38:57/160124(..sendmail/cf)% sudo make install-cf CF=netbsd-proto
rm -f netbsd-proto.cf
m4 ../m4/cf.m4 netbsd-proto.mc > netbsd-proto.cf || ( rm -f netbsd-proto.cf && exit 1 )
echo "### netbsd-proto.mc ###" >>netbsd-proto.cf
sed -e 's/^/# /' netbsd-proto.mc >>netbsd-proto.cf
chmod 444 netbsd-proto.cf
/usr/bin/install -c -o pbulk -g users -m 0444 netbsd-proto.cf /etc/mail/sendmail.cf
install: unknown user pbulk
*** Error code 1
Stop.
のようになった時には
makoto 09:38:57/160124(..sendmail/cf)% sudo make install-cf CF=netbsd-proto CFOWN=your_login
のように CFOWN を指定します。
/etc/mailer.conf を設定する
sudo cp /usr/pkg/share/examples/sendmail/mailer.conf /etc/mailer.conf
(または)
sudo ln -sf /usr/pkg/share/examples/sendmail/mailer.conf /etc/mailer.conf
もし自分の機械の名前以外にも受取りたい機械の名前があれば、
/etc/mail/local-host-names に自分の機械名を書いておく。
そうでない時には空の譜を作っておく。(sudo touch /etc/mail/local-host-names)
ttypc:root@bologna 11:51:44/070404(/etc/mail)# echo bologna > /etc/mail/local-host-names
ttypc:root@bologna 11:51:58/070404(/etc/mail)#
/etc/rc.d/sendmail を用意する
sudo cp /usr/pkg/share/examples/rc.d/sendmail /etc/rc.d ;
sudo cp /usr/pkg/share/examples/rc.d/smmsp /etc/rc.d
/var/spool/clientmqueue を用意する
sudo mkdir /var/spool/mqueue ;
sudo mkdir /var/spool/clientmqueue ;
sudo chown smmsp.smmsp /var/spool/clientmqueue ;
sudo chmod 770 /var/spool/clientmqueue ;
これは既にある場合もあります。持主が smmsp になっているか確認します。
ttypc:makoto@bologna 11:53:42/070404(/etc/mail)> sudo ls -ldn /var/spool/clientmqueue
drwxrwx--- 2 1001 1001 512 Apr 3 14:10 /var/spool/clientmqueue
ttypc:makoto@bologna 11:53:45/070404(/etc/mail)> id smmsp
uid=17(smmsp) gid=17 groups=17
ttypc:makoto@bologna 11:53:50/070404(/etc/mail)>
上記に示したのは 17 であるべきものが 1001 となっているので、良くない例です。
/etc/rc.conf に sendmail の行を追加する
sudo -s;
echo sendmail=YES >> /etc/rc.conf ;
echo smmsp=YES >> /etc/rc.conf ;
echo postfix=NO >> /etc/rc.conf
exit;
/usr/pkg/libexec/sendmail 以下の許可を確認する
ttypc:makoto@bologna 11:58:48/070404(/etc/mail)> ls -l /usr/pkg/libexec/sendmail
total 1508
-r-xr-sr-x 1 root tinyproxy 683376 Mar 20 23:25 sendmail*
-r-xr-xr-x 1 root wheel 75381 Mar 20 23:25 smrsh*
これは良くない例です。group が smmsp になっていません
次のように言われるかも知れません。
Program mode requires special privileges, e.g., root or TrustedUser.
この文字が表示されるのは二通り考えられます。
一つは次に示した修正で直る場合。もう一つは、sendmail の処理 (process) を起動
するのが必要なのに、起動していない場合です。起動していないと /usr/bin/mail
が直接 /var/spool/mqueue を書きに行って上記の文字を表示することがあります
(この項 2011/11/25 追記)
その場合は次のように修正します。
ttypc:makoto@bologna 11:59:06/070404(/etc/mail)> \
sudo chgrp smmsp /usr/pkg/libexec/sendmail/sendmail
ttypc:makoto@bologna DING!/070404(/etc/mail)> sudo chmod 2555 /usr/pkg/libexec/sendmail/sendmail
ttypc:makoto@bologna 12:01:14/070404(/etc/mail)> ls -l /usr/pkg/libexec/sendmail
total 1508
-r-xr-sr-x 1 root smmsp 683376 Mar 20 23:25 sendmail*
-r-xr-xr-x 1 root wheel 75381 Mar 20 23:25 smrsh*
ttypc:makoto@bologna 12:01:17/070404(/etc/mail)>
sendmail を仮に起動して見る
dl320@makoto 09:47:38/100127(..cf/cf)% /usr/sbin/sendmail -bt -v -d0
Version 8.14.4
Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETINET6 NETISO NETUNIX NEWDB NIS PIPELINING
SCANF SOCKETMAP STARTTLS TCPWRAPPERS USERDB XDEBUG
/etc/mail/sendmail.cf: line 0: cannot open: No such file or directory
上記は /etc/mail/sendmail.cf が用意されていない場合です。おそらく上記 5.
の段階を飛ばしてしまったかと思われます。
sendmail.cf が用意してあれば、次のようになるはずです。
dl320@makoto 09:51:48/100127(..cf/cf)% /usr/sbin/sendmail -bt -v -d0
Version 8.14.4
Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETINET6 NETISO NETUNIX NEWDB NIS PIPELINING
SCANF SOCKETMAP STARTTLS TCPWRAPPERS USERDB XDEBUG
============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = dl320
(canonical domain name) $j = dl320.example.com
(subdomain name) $m = example.com
(node name) $k = dl320.example.com
========================================================
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
>
(最後は ^D で抜けます)
postfix を止め sendmail と smmspを起動する
sudo /etc/rc.d/postfix stop;
sudo /etc/rc.d/sendmail start;
sudo /etc/rc.d/smmsp start
/etc/mail/aliases
に次のような行を追加し、newaliases をしておきます。
root: your_email@example.com
メールを送って見る
echo test mail from root | mail -s 'test mail for this machine' root
echo test mail from root | mail -s 'test from root' address@example.com
二つ目の例を実行する時には address@example.com には実在の宛先を使って下さい。
上で root に送っていますが、
次のどちらかが必要です。
- /etc/mail/aliases に 「root -> 誰か」の設定か、
- imap 上に root 口座 (local mailer に imapd を使っている場合)
can not write to queue directory /var/spool/clientmqueue/ (RunAsGid=0, required=1000): Permission denied
というようなことがあるかも知れません。
上の場合ですと、実行 uid (/usr/pkg/libexec/sendmail/sendmail の持主
が 0 で、/var/spool/clientmqueue の group が 1000 になっていて、
合わない、ということになります。
(持主を変更した場合には s bit が落ちてしまいますので、それも復活しておきます)
dl02@makoto 04:32:11/100301(..cf/cf)% sudo chown root.smmsp /usr/pkg/libexec/sendmail/sendmail
dl02@makoto 04:32:48/100301(..cf/cf)% sudo chmod 2555 /usr/pkg/libexec/sendmail/sendmail
dl02@makoto 04:32:52/100301(..cf/cf)% ls -l /usr/pkg/libexec/sendmail/sendmail
-r-xr-sr-x 1 root smmsp 603690 Jan 10 20:59 /usr/pkg/libexec/sendmail/sendmail
実際に送られたかどうかを確認する
第一段階は /var/log/maillog を見ることです。
送られたメールが /var/mail/root に入っているかも知れません。
相手、上の例では address@example.com のサーバの設定によっては、
(こちらの機械の名前を挙げて)、それは DNS に登録されていない名前だから
受取らないと言うことがあるかも知れません。
もし今設定している機械が NAT (Network Address Translation) ルータの内側で、
外から見える名前になっていない等、それが本当であれば、回避方法の一つは
sendmail.cf や submit.cf の最初の方にある j マクロの行、
# my official domain name
# ... define this only if sendmail cannot automatically determine your domain
#Dj$w.Foo.COM
この三行目の # を外し、Djmail.example.com 等のように書換えることです。
(変更した場合には、その後、
sudo /etc/rc.d/sendmail restart;
sudo /etc/rc.d/smmsp restart;
とする必要があります)