[俺日記]

うぎゅー / 2003-06-29 (日)

これまでqmailをMac OS Xで使うための駄文をつらつらと書いて来た。
こんだけ大きな間違いは初めてだ。
#発覚している中では、な(笑)。
うぎゅー、となってしまった。1週間も気が付かずに放置してたし。
しかも気が付いたのが朝髭そってる時。なんでだよ(笑)
というわけで、インストールしようとして失敗した人、(いたら)ごめんね。

[俺日記]

qmail on Mac OS X(not Mac OS X Server) 8回目/dnscacheを設定する。 / 2003-06-19 (木)

まず今回はMac OS XのGUIに戻ります。

ネットワークの設定を開きますと、内蔵 EthernetとかAirMacとか内蔵モデムとか表示されている「表示」というメニューがあります。このメニューの一番下には「ネットワークポート設定」という項目がありますので、それを選びます。チェックボックスとポートの名前が左側のボックスに、「新規...」「複製」「削除...」の三つのボタンが右に配置されています。ここで、内蔵イーサネット(何でもいいですけど、今使ってる奴)を選択して「複製」ボタンを押します。名前を付けろ、と要求されますので、何でもいいので適当に付けましょう(名前は重要でないです)。

さて、表示メニューで今複製した奴を選んで下さい。ここでIPアドレスを10.0.0.100に設定します、あとはコピー元と同じで構いません。終わったら「今すぐ適用」ボタンを押して保存します。

これでひとつのネットワークポートに二つのIPアドレスを持たせる作業は終了です。Terminalに戻りましょう。

dnscacheの設定には/usr/local/bin/dnscache-confを使います。終わり(嘘)。←しつこい
dnscache-confを単独で実行すると

% /usr/local/bin/dnscache-conf
dnscache-conf: usage: dnscache-conf acct logacct /dnscache [ myip ]

と表示されます。tinydns-confとほぼ同じですね。tinydnsと同様、

acct=dnscacheを実行するアカウント
logacct=dnscacheのログを取るアカウント
/dnscache=dnscacheが使うディレクトリ
myip=dnscacheが使うIPアドレス

です。こいつらを与えてやると、dnscache-confが最低限の設定をやってくれると言う寸法です。つーことで、

acct=dnscache
logacct=dnslog
/dnscache=/var/dnscache
ip=10.0.0.100

で設定しましょう。dnslogはtinydnsの使い回しです。tinydnsと同様、任意の名前で構いません。注意点も一緒です。

ではグループとユーザの作成です。shellをroot権限で動かしましょう。

% sudo ${SHELL}

グループをNetInfoに登録します。

# niload group . <<END
dnscache:*:532:
END

ユーザを登録します。

# niload passwd . <<END
dnscache:*:7503:532::0:0::/noexistent:/sbin/nologin
END

tinydnsのときとほとんど同じですね。登録したら、確認します。

# nidump group .|grep dnscache
dnscache:*:532:
# nidump passwd .|grep dnscache
dnscache:*:7503:532::0:0::/noexistent:/sbin/nologin

確認できたら、

# dnscache-conf dnscache dnslog /var/dnscache 10.0.0.100

と入力します。たぶん実行自体は一瞬で終わると思います(何も表示されません)。

では/var/dnscacheに移動しましょう。

# cd /var/dnscache

/var/dnscacheの中はこんな感じ。
drwxr-sr-x 7 root wheel 238 Jun 18 13:29 env/
-rw-r--r-- 1 root wheel 8 Jun 18 13:29 env/CACHESIZE
-rw-r--r-- 1 root wheel 8 Jun 18 13:29 env/DATALIMIT
-rw-r--r-- 1 root wheel 11 Jun 18 13:29 env/IP
-rw-r--r-- 1 root wheel 8 Jun 18 13:29 env/IPSEND
-rw-r--r-- 1 root wheel 19 Jun 18 13:29 env/ROOT
drwxr-sr-x 5 root wheel 170 Jun 18 13:29 log/
drwxr-sr-x 2 dnslog dnslog 68 Jun 18 13:29 log/main/
-rwxr-xr-x 1 root wheel 50 Jun 18 13:29 log/run*
-rw-r--r-- 1 dnslog dnslog 0 Jun 18 13:29 log/status
drwxr-sr-x 4 root wheel 136 Jun 18 13:29 root/
drwxr-sr-x 3 root wheel 102 Jun 18 13:29 root/ip/
-rw------- 1 root wheel 0 Jun 18 13:29 root/ip/127.0.0.1
drwxr-sr-x 3 root wheel 102 Jun 18 13:29 root/servers/
-rw-r--r-- 1 root wheel 164 Jun 18 13:29 root/servers/@
-rwxr-xr-x 1 root wheel 141 Jun 18 13:29 run*
-rw------- 1 root wheel 128 Jun 18 13:29 seed

./envの中にはenvdirコマンドによってdnscacheに渡される環境変数が入っています。ファイル名が変数名、中身がその値です。ここには5つファイルがあります。IPはdnscacheがリクエストを待ち受けるIPアドレスです。

# cat env/IP
10.0.0.100

ROOTはdnscacheを動かすときにdnscacheがchrootするディレクトリです。

# cat env/ROOT
/var/dnscache/root

こんな感じですね。IPSEND,DATALIMIT,CACHESIZEはデフォルトで問題ないと思いますので、今回はいじりません。いじりたい人はここじゃなく他で調べた方がいいと思います:-)

./rootには2つのディレクトリがあります。
./root/ipには127.0.0.1という名前の空ファイルがあります。dnscacheは、ここにあるファイルの名前に一致するIPアドレスからのリクエストにしか返答しません。つまり、デフォルトでは自分自身(127.0.0.1)にしか返答しないわけです。今回は他のクライアントにも返答しますから、クライアントのIPアドレスを登録してやりましょう。登録は空ファイルを作るだけなので、簡単です。

# cd /var/dnscache/root/ip
# touch 10.0.0.101 10.0.0.102 ...

このように、全部のマシンの分ファイルを作ってもいいのですが、マシンを増やしたときにまた作業いなきゃいけません。それが面倒だ、という時は

# touch 10.0.0

とすることで、10.0.0で始まるIPアドレスからのリクエストを受け付けるようになります。ちなみに、今回の例だと

# touch 10

でもOKです。これだと10で始まるIPアドレスなら何でもOKになります。

./root/serversには@という名前のファイルがあります。これはDNS問い合わせの基点となるルートサーバのIPアドレスが書かれているのですが、実は最近変更になったサーバがあります。djbdnsのパッケージに含まれている@ファイルの内容は古いんで、これは更新しましょう。

# /usr/local/bin/dnsq ns . a.root-servers.net|grep additional|sort|awk '{print $5}' > /var/dnscache/root/servers/@

また、*.dyndns.example.jpの問い合わせが外に行かないように設定します。dnscacheは、@の他にファイルがあると、そのファイル名をドメイン名に含む問い合わせをそのファイルの中に書かれているIPアドレスに問い合わせます。そうでない場合はルートネームサーバを使って通常通りの解決を行います。今回は

dyndns.example.jp宛の問い合わせは10.0.0.101で受けるので、

# echo 10.0.0.101 > dyndns.example.jp
# echo 10.0.0.101 > 10.in-addr.arpa

とします。これで、*.dyndns.example.jpの問い合わせと、10.x.y.zの問い合わせは外ではなく10.0.0.101に行くようになります。

さて、これで設定が出来ました。dnscacheを稼動してみましょう。

# ln -s /var/dnscache /service

最大5秒待つとdaemontoolsがdnscacheを起動してくれます。

# svstat /service/dnscache /service/dnscache/log
/service/dnscache: up (pid 18042) 14 seconds
/service/dnscache/log: up (pid 18041) 14 seconds

秒数が0または1でpidが毎回変わるようだと失敗しています。設定を見直しましょう。秒数が順調に増えていれば起動していると思われます。

起動出来ていればroot権限での作業は終了です。CTRL+Dを入力してroot権限のシェルを終了させましょう。

ちゃんと名前が引けるかどうか確認してみましょう。

% dig @10.0.0.100 apple.com mx

(略)
;; ANSWER SECTION:
apple.com. 3h59m41s IN MX 10 mail-in2.apple.com.
apple.com. 3h59m41s IN MX 20 mail-in1.apple.com.
apple.com. 3h59m41s IN MX 30 mail-in.asia.apple.com.
apple.com. 3h59m41s IN MX 30 mail-in.euro.apple.com.
(略)

引けたかな?引けるのを確認したらネットワークの設定にあるDNSサーバのIPアドレスを10.0.0.100にして、ブラウザやメーラで接続出来るか確認してみましょう。

さて、次回はいよいよqmailのインストールです。気合い入れて行くぜー。←やる気無さげ

[俺日記]

qmail on Mac OS X(not Mac OS X Server) 7回目/tinydnsを設定する。 / 2003-06-18 (水)

tinydnsの設定には/usr/local/bin/tinydns-confを使います。終わり(嘘)。
tinydns-confを単独で実行すると

% /usr/local/bin/tinydns-conf
tinydns-conf: usage: tinydns-conf acct logacct /tinydns myip

なんて表示されますね。これは、

acct=tinydnsを実行するアカウント
logacct=tinydnsのログを取るアカウント
/tinydns=tinydnsが使うディレクトリ
myip=tinydnsが使うIPアドレス

です。こいつらを与えてやると、tinydns-confが最低限の設定をやってくれると言う寸法です。つーことで、

acct=tinydns
logacct=dnslog
/tinydns=/var/tinydns
ip=10.0.0.101

で設定しましょう。任意の名前で構いませんが、その場合は以下の説明を読み替えてください。その場合は、エディタにでもコピーして置換すると間違いが少ないと思います。

まずはグループとユーザの作成です。niloadというコマンドを使って、NetInfoにグループとユーザを登録します。

まずshellをroot権限で動かしましょう。

% sudo ${SHELL}

グループをNetInfoに登録します。

# niload group . <<END
tinydns:*:530:
dnslog:*:531:
END

次に、ユーザを登録します。

# niload passwd . <<END
tinydns:*:7501:530::0:0::/noexistent:/sbin/nologin
dnslog:*:7502:531::0:0::/noexistent:/sbin/nologin
END

530,531,7501,7502は任意の数字で構いませんが、他のグループ・ユーザのIDと重複しない事と、ここで同じ数字が入っているところは必ず一致させておく必要があります。

nidump passwd .

または

nidump group .

でそれぞれユーザ・グループの設定が確認できます。/etc/passwdや/etc/groupに書く必要はありませんし、書いても反映されませんのでご注意を。

登録したら、確認します。

# nidump group .|grep dns
tinydns:*:530:
dnslog:*:531:
# nidump passwd .|grep dns
tinydns:*:7501:530::0:0::/noexistent:/sbin/nologin
dnslog:*:7502:531::0:0::/noexistent:/sbin/nologin

確認できたら、

# tinydns-conf tinydns dnslog /var/tinydns 10.0.0.101

と入力します。たぶん実行自体は一瞬で終わると思います(何も表示されません)。

では/var/tinydnsに移動しましょう。

# cd /var/tinydns

/var/tinydnsの中はこんな感じ。
drwxr-sr-x 4 root wheel 136 Jun 17 10:13 env/
-rw-r--r-- 1 root wheel 11 Jun 17 10:13 env/IP
-rw-r--r-- 1 root wheel 18 Jun 17 10:13 env/ROOT
drwxr-sr-x 5 root wheel 170 Jun 17 10:13 log/
drwxr-sr-x 2 dnslog dnslog 68 Jun 17 10:13 log/main/
-rwxr-xr-x 1 root wheel 50 Jun 17 10:13 log/run*
-rw-r--r-- 1 dnslog dnslog 0 Jun 17 10:13 log/status
drwxr-sr-x 9 root wheel 306 Jun 17 10:13 root/
-rw-r--r-- 1 root wheel 44 Jun 17 10:13 root/Makefile
-rwxr-xr-x 1 root wheel 77 Jun 17 10:13 root/add-alias*
-rwxr-xr-x 1 root wheel 79 Jun 17 10:13 root/add-childns*
-rwxr-xr-x 1 root wheel 76 Jun 17 10:13 root/add-host*
-rwxr-xr-x 1 root wheel 74 Jun 17 10:13 root/add-mx*
-rwxr-xr-x 1 root wheel 74 Jun 17 10:13 root/add-ns*
-rw-r--r-- 1 root wheel 0 Jun 17 10:13 root/data
-rwxr-xr-x 1 root wheel 98 Jun 17 10:13 run*

./logはログが置かれるディレクトリです。tinydnsの場合は、中を見ることはあってもいじることはまずないので省略。ログを見るときは

# tail -f /var/tinydns/log/main/current | tai64nlocal

とするとリアルタイムで見られます。リアルタイムで見ないなら

# tai64nlocal < /var/tinydns/log/main/current | less

などとするといいでしょう。

./envの中にはenvdirコマンドによってtinydnsに渡される環境変数が入っています。ファイル名が変数名、中身がその値です。ここには二つファイルがあります。IPはtinydnsがリクエストを待ち受けるIPアドレスです。

# cat env/IP
10.0.0.101

ROOTはtinydnsを動かすときにtinydnsがchrootするディレクトリです。

# cat env/ROOT
/var/tinydns/root

こんな感じですね。とくにいじる必要はありませんが、tinydnsを動かすIPアドレスを変更するときは変更する必要があります(tinydns-confを使ったほうが楽ですね)。

./rootには最初7つファイルがあります。この中で一番大事なのは、tinydnsが提供する情報を収めたdataという名前のファイルです。./rootでmakeを実行するとMakefileにしたがって、dataからdata.cdbというファイルが作られます。
主なデータは./rootにあるadd-*スクリプトで生成することが出来ます(もちろん手動でもOKです)。dataは単なるテキストなので、viなどのエディタで直接編集することも可能ですし、sed/awk/perl/rubyなどのスクリプトで編集するのも簡単です。

ということで、さくさく登録しましょう。
なお、ネットワークの諸設定ですが、今回は以下のような構成であると仮定して行います。適当に読み替えたりエディタで置換して:-)作業してください。

IPアドレス=10.0.0.0/255.0.0.0(クラスA)
ドメイン名=dyndns.example.jp
で、登録するホストは
10.0.0.101=server.dyndns.example.jp
10.0.0.201=client1.dyndns.example.jp
10.0.0.202=client2.dyndns.example.jp
10.0.0.203=client3.dyndns.example.jp
10.0.0.204=client4.dyndns.example.jp
10.0.0.205=client5.dyndns.example.jp
の6つ。
また、

DNSコンテンツサーバ=10.0.0.101=server.dyndns.example.jp
SMTP&POPサーバ =10.0.0.101=server.dyndns.example.jp
DNSキャッシュサーバ=10.0.0.100=dnscache.dyndns.example.jp

とします。10.0.0.100はserver.dyndns.example.jpのマシンの内蔵イーサネットポートを複製したもの(次回以降解説)で、DNSキャッシュサーバとして稼動させるためにあります。

# cat <<END >data
.dyndns.example.jp::server.dyndns.example.jp:259200
+10.in-addr.arpa::server.dyndns.example.jp:259200
@dyndns.example.jp::server.dyndns.example.jp::86400
+dyndns.example.jp:10.0.0.101:86400
=server.dyndns.example.jp:10.0.0.101:86400
=dnscache.dyndns.example.jp:10.0.0.100:86400
=client1.dyndns.example.jp:10.0.0.201:86400
=client2.dyndns.example.jp:10.0.0.202:86400
=client3.dyndns.example.jp:10.0.0.203:86400
=client4.dyndns.example.jp:10.0.0.204:86400
=client5.dyndns.example.jp:10.0.0.205:86400
END

まぁこんな感じでしょうか。
なお、2行目は10.0.0.0/255.0.0.0なネットワークなので10.in-addr.arpaですが、たとえば192.168.0.0/255.255.255.0だったら
.0.168.192.in-addr.arpa〜
になります。

あとは/var/tinydns/rootでmakeを実行するだけです。

# make

dataを編集したら必ずmakeを実行しましょう。でないとせっかくの変更が反映されません。ちなみに、makeを実行するのはtinydnsを起動していても大丈夫です。

さて、設定が出来たらtinydnsを稼動してみましょう。

# ln -s /var/tinydns /service

最大5秒待つとdaemontoolsがtinydnsを起動してくれます。

# svstat /service/tinydns /service/tinydns/log
/service/tinydns: up (pid 17042) 4 seconds
/service/tinydns/log: up (pid 17041) 4 seconds

秒数が0または1でpidが毎回変わるようだと失敗しています。設定を見直しましょう。秒数が順調に増えていれば起動していると思われます。

# dig @10.0.0.101 dyndns.example.jp ns
# dig @10.0.0.101 dyndns.example.jp mx
# dig @10.0.0.101 client1.dyndns.example.jp a

ちゃんと引けてますかね?次回はDNSキャッシュサーバdnscacheを設定します。

[俺日記]

qmail on Mac OS X(not Mac OS X Server) 6回目/daemontoolsを設定する。 / 2003-06-13 (金)

前回の引きで『次はtinydnsの設定です。』なんて書いていたが、考えてみるとまだdaemontoolsが動いていないじゃないか。ということで今回はdaemontoolsを設定〜。

daemontoolsは、ものの本やwebを見ると、rc.なんとかのスクリプトを修正してー、とかなんとか書いてあるが(と言うか、/etc/inittabか/etc/rc.localがあれば、package/installの最後に実行されるpackage/runで動くように設定されているはず)、Mac OS X的にはStartupItemsに登録するのが正しい姿だろう。とか正論吐いてるふりしてrcとかinittabを知らない事を正当化する事にする。

実は、ぐるりが昔djbdnsをインストールする時にDjbdns Mac OS X How-toというページを参考にしてやったんだが、その後でインストールしたqmailでエラーが発生してしまったので結局自分で書き直したスクリプトがあるので、それを使うことにする。なお、改変・再配布も自由お好きにどうぞ。改良したらぐるりにも教えてください。なお、この日記に従ってインストールした場合、素直にsvscanbootを使うとエラーになる(表示されないけど)ので、そのためのパッチも用意したので、あわせて当てる事にする。

% cd ${HOME}/Desktop
% curl -L -O http://gururi.com/qmail/daemontools_sss.tgz
% curl -L -O http://gururi.com/qmail/svscanboot.patch
% sudo ${SHELL}
password:
# mkdir -p /Library/StartupItems
# cd /Library/StartupItems
# tar zxpvf ${HOME}/Desktop/daemontools_sss.tgz
# cd /usr/local/bin
# cat ${HOME}/Desktop/svscanboot.patch|patch
patching file svscanboot
# /Library/StartupItems/Daemontools/Daemontools start(あるいはMacを再起動する。)

1行目でDesktopに移動している。${HOME}と書いてるのは、チルダを書くとSafariで文字化けするからだ(2バイトのチルダになってしまう)。
2〜3行目はスクリプトとパッチをダウンロードしている。いずれもDesktopにダウンロードする。
4〜5行目はシェルをroot権限で動かしている。案外知らない人が多いんだよなぁ。こうすると、「rootになる」んではなく、あくまで「シェルをroot権限で動かす」ので、$HOMEやその他の環境変数ももとのユーザのままです。なので、cdだけ入力しても~rootではなく、「あなたの」ホームディレクトリに移動します。お間違い無きよう。
6〜7行目、標準状態では/Library/StartupItemsは存在しないので作成して移動している。
8行目、/Library/StartupItemsでSystemStarterScriptを展開する。
9〜11行目で/usr/local/binに移動して、svscanbootを修正している。
最後にdaemontoolsを起動する。スクリプトとディレクトリがDaemontoolsになっているのは、単に他のスクリプトにあわせただけで深い意味は無い。突っ込み入れないように>信者の人

これでdjbのプログラムをインストールする下準備は整った。次は今度こそdjbdnsの設定。でもたいした事はしない。ぐるりんちではDynamic DNSを使っている都合上、ローカルネットワーク以外からの問い合わせは想定していない内部用のDNSしか立てないのでそのつもりでよろしく。

tar zvpf daemontools_sss.tgzの結果。
drwxr-xr-x 2 root wheel 0 Jun 12 23:58 Daemontools
-rwxr-xr-x 1 root wheel 562 Jun 13 00:02 Daemontools/Daemontools
drwxr-xr-x 2 root wheel 0 Jun 12 23:58 Daemontools/Resources
drwxr-xr-x 2 root wheel 0 Jun 13 00:03 Daemontools/Resources/English.lproj
-rw-r--r-- 1 root wheel 309 Jun 13 00:05 Daemontools/Resources/English.lproj/Localizable.strings
drwxr-xr-x 2 root wheel 0 Jun 13 00:02 Daemontools/Resources/Japanese.lproj
-rw-r--r-- 1 root wheel 315 Jun 13 00:02 Daemontools/Resources/Japanese.lproj/Localizable.strings
-rw-r--r-- 1 root wheel 340 Jun 12 10:42 Daemontools/StartupParameters.plist

[変更] .Macのアドレスを自鯖に。curlに-Lオプション(302に追随する)を追加。


[俺日記]

ありえない日々2 / 2003-06-09 (月)

今日は篠原さんのラジオの日だ!と思っていたら今日はおやすみ......ショボーン....
#そういや先週「次は6/15」って言ってた気がする。