FreeBSD: 2006年4月アーカイブ

qmail の自動起動

自動起動スクリプトを作ります(BreeBSD)
# ee /usr/local/etc/rc.d/qmail.sh
--------------------------------------------
#!/bin/sh

#
# qmail.sh startup / shutdown for qmail systems
#

PATH=/var/qmail/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
export PATH

pidfile=/var/run/qmail-send.pid

case $1 in
start)
exec env - PATH=${PATH} \
nohup qmail-start ./Maildir/ splogger qmail 1>/dev/null 2>&1 &
echo $! > ${pidfile}
echo "qmail start"
;;

stop)
kill `cat ${pidfile}`
rm -f ${pidfile}
echo "qmail stop"
;;

*)
echo "usage: $0 {start|stop}"
exit 1
esac

exit 0
--------------------------------------------

これをchmodで744に設定
# chmod 744 /usr/local/etc/rc.d/qmail.sh

ユーザーにログインしてMaildirを作成
> cd
> /var/qmail/bin/maildirmake ./Maildir/

ユーザーを自動的に作成したときもMaildirを用意したい時は
# cd /usr/share/skel
# /var/qmail/bin/maildirmake ./Maildir/

ここでちょっと再起動(ちゃんと起動するかな?)
#reboot

 今日はqmailの起動までやってみます。まず既存のsendmailが動作しているか確認

# ps -aux | grep sendmail
root 431 0.0 1.7 3416 2136 ?? Ss 3Apr06 1:11.59 sendmail: accepting conn
smmsp 435 0.0 1.6 3296 1948 ?? Is 3Apr06 0:01.63 sendmail: Queue runner@0

動作していたのでkillします。

# kill -9 431
# kill -9 435

さらにPIDファイルも削除
# rm /var/run/sendmail.pid

ここでFreeBSDで起動時にsendmailが立ち上がらないようにrc.confを書き換え
# vi /etc/rc.conf

sendmailに関しては記述がなかったので下記を追加しました。

sendmail_enable="NONE"

まだ、キューが残っていたら解消するため下記コマンドを実行
# /usr/sbin/sendmail -q

既存sendmailを退避してアクセス権を0にする
# mv /usr/sbin/sendmail /usr/sbin/sendmail.org
# chmod 0 /usr/sbin/sendmail.org

qmailへのシンボリックリンクの作成
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

起動スクリプトをコピー
# cd /usr/local/src/qmail-1.03
# cp home /var/qmail/rc

試しにqmailを起動してみる。
# csh /var/qmail/rc &
[1] 94206

正常に起動されたかpsで確認
# ps -aux | grep qmail
qmails 94206 0.0 0.5 1236 564 p0 I 3:59PM 0:00.04 qmail-send
qmaill 94207 0.0 0.5 1196 564 p0 I 3:59PM 0:00.00 splogger qmail
root 94208 0.0 0.4 1196 520 p0 I 3:59PM 0:00.00 qmail-lspawn ./Mailbox
qmailr 94209 0.0 0.4 1196 520 p0 I 3:59PM 0:00.00 qmail-rspawn
qmailq 94210 0.0 0.4 1192 524 p0 I 3:59PM 0:00.00 qmail-clean

確認できたのでとりあえず終了
# kill 94206

今日はここまで。

 インストールが完了したので早速設定に入ります。

まずはtest.netでメールを使用するのでソースから下記コマンドを発行
# ./config-fast test.net
Your fully qualified host name is test.net.
Putting test.net into control/me...
Putting test.net into control/defaultdomain...
Putting test.net into control/plusdomain...
Putting test.net into control/locals...
Putting test.net into control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to test.net.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

次に、postmaster,mailer_daemon,root宛てのメールをuser1に転送設定。
# cd /var/qmail/alias/

# echo "user1@test.net" > .qmail-postmaster
# echo "user1@test.net" > .qmail-mailer_daemon
# echo "user1@test.net" > .qmail-root

BSD6.0の場合最初から新規作成ファイルのアクセス権が644だったのですが、他のOSだと違う場合があるのでchmodを発行
# chmod 644 .qmail-postmaster .qmail-mailer_daemon .qmail-root

今日はこれだけしかやってません。この後既存のsendmailを追い出してqmailを起動します。

 この前のサイトのお陰で必要なパッチの入手が出来たので早速インストールまでやってみます。
まずは、必要なディレクトリとグループ・ユーザーの作成。
# mkdir /var/qmail
# pw groupadd nofiles -g 81
# pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent -u 81
# pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent -u 82
# pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent -u 83
# pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent -u 84
# pw groupadd qmail -g 82
# pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent -u 85
# pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent -u 86
# pw useradd qmails -g qmail -d /var/qmail -s /nonexistent -u 87

tarボールは予め/usr/local/srcにコピーしましたので移動して解凍・パッチ適用・インストール
# cd /usr/local/src
# tar zxf qmail-1.03.tar.gz
# cp qmail-date-localtime.patch.txt qmail-1.03/qmail-date-localtime.patch
# cd qmail-1.03
patch -p1 < qmail-date-localtime.patch
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|This patch causes the various qmail programs to generate date stamps in
|the local timezone. I find GMT too annoying to convert from/to. I make
|no warranties that it will work in your timezone, however it works for me.
|
|Works with qmail 1.01 to 1.03.
|
|To apply this patch, cd into the qmail source directory and type...
| patch -s -p1 < patch-to-patch-file
|
|--- qmail-1.03.orig/date822fmt.c Tue Apr 15 15:05:23 1997
|+++ qmail-1.03/date822fmt.c Fri Apr 18 00:39:41 1997
--------------------------
Patching file date822fmt.c using Plan A...
Hunk #1 succeeded at 1.
Hunk #2 succeeded at 13.
done

qmail等のDJBではmake→make installと同等の機能を下記コマンドで行います。
# make setup check

インストールされた内容を確認
# ls -l /var/qmail
total 16
drwxr-sr-x 2 alias qmail 512 Apr 10 02:52 alias
drwxr-xr-x 2 root qmail 1024 Apr 10 02:52 bin
drwxr-xr-x 2 root qmail 512 Apr 10 02:52 boot
drwxr-xr-x 2 root qmail 512 Apr 10 02:52 control
drwxr-xr-x 2 root qmail 1024 Apr 10 02:52 doc
drwxr-xr-x 10 root qmail 512 Apr 10 02:52 man
drwxr-x--- 11 qmailq qmail 512 Apr 10 02:52 queue
drwxr-xr-x 2 root qmail 512 Apr 10 02:52 users

 まずは、必要な環境とtarボールを準備しないといけないのですが、qmailの配布元ftpが消えている…。現在は何処で配布してんだろう?まだまだ検索中です。
 初めてqmailを導入するというのに前途多難な予感…。

と思ったら公式(http://cr.yp.to/qmail.html)経由でダウンロードできました。
ファイル名削ってアクセスするとおかしくなっていただけでした。

qmailのダウンロード
ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz

 qmail導入は予定通りですが、ちょっとした事情でマルチドメイン構成での構築が必要になりました。因みに同IPでのマルチドメイン構成です。(別IP対応が望ましいところですが、今回はわざと同IPで構築)。今までsendmailでうまく処理が出来なかったのでqmailで挑戦。

自動起動の準備
元々FreeBSDの初期インストール時にbindがインストールされていたためBIND用ユーザーが存在するか確認

# grep bind /etc/passwd
bind:*:53:53:Bind Sandbox:/:/usr/sbin/nologin

# grep bind /etc/group
bind:*:53:

自動起動用にrc.confに下記を追加

# ee /etc/rc.conf
named_enable="YES"
named_program="/usr/local/sbin/named"
named_flags="-u bind"
named_pidfile="/var/run/named/named.pid"

pidファイルの場所を変更(記述なしだと/var/run/直下)
# ee /etc/named.conf
pid-file "/var/run/named/named.pid";

既存bindの残骸を削除
# rm -rf dev
# rm -rf etc
# rm -rf var
# rm -rf /etc/namedb

BINDはrootではなく専用ユーザー(bind)で使用するためパーミッションの問題を解決する
# mkdir /var/run/named
# chown bind:bind /var/run/named

これで行けるかと思ったら、全く起動の気配なし、さらに/etc/rc.d/namedを発見。
これは既存BINDの物だった為削除して作り直し

#!/bin/sh
case "$1" in
'start')
/usr/local/sbin/named -u bind
;;
'stop')
kill `cat /var/run/named/named.pid`
rm -f /var/run/named/named.pid
;;
*)
echo "Usage: $0 { start | stop }"
exit 1
;;
esac
exit 0

ここで何度rebootしてもbindが起動しない。/var/log/messages見ても起動かけた形跡すらなし。

このBINDはソースコンパイル物なので/usr/local/etc/rc.d/named.shとしての導入が正解でした。
/etc/rc.d/namedだと何度試みても起動しないのでハマった。この辺の仕組みが良くわからないなぁ。

ここで追試としてrc.confでNOにしてrebootしたらどうなるのだろうか?

# ps -aux | grep named
bind 504 0.0 2.6 4076 3224 ?? Is 4:05AM 0:00.03 /usr/local/sbin/named -u
root 556 0.0 0.2 348 228 p0 R+ 4:06AM 0:00.00 grep named

起動しましたー!!!えぇ!?何それ!?rc.confの意味無さすぎ…。

参考:

このアーカイブについて

このページには、2006年4月以降に書かれたブログ記事のうちFreeBSDカテゴリに属しているものが含まれています。

前のアーカイブはFreeBSD: 2006年3月です。

次のアーカイブはFreeBSD: 2006年5月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.1