2004年05月31日 月曜日

自宅サーバ設置 その4

基本的なサービスで最後に残っている大物であるメールサーバを設置する。基本的には、qmailのドキュメント通りに進めればよろしい。

インストール前の準備

qmailのインストール前にqmailが使うアカウントを準備する。djbdnsに比べて多いので注意。 (僕も1カ所設定を間違えていたので。) /etc/passwdはvipwで編集すること!

qmail:*:9990:
nofiles:*:9991:
alias:*:9990:9991::0:0::/var/qmail/alias:/bin/true
qmaild:*:9991:9991::0:0::/var/qmail:/bin/true
qmaill:*:9992:9991::0:0::/var/qmail:/bin/true
qmailp:*:9993:9991::0:0::/var/qmail:/bin/true
qmailq:*:9994:9990::0:0::/var/qmail:/bin/true
qmailr:*:9995:9990::0:0::/var/qmail:/bin/true
qmails:*:9996:9990::0:0::/var/qmail:/bin/true

qmailのインストール

qmailのインストール自身は簡単で、DNSで運用したいサーバのMXレコードを設定してある状態にしてからやるといろいろ問題がなくて進めやすい。今回はdjbdns立ち上げ時にMXレコードを登録しておいたので、このまま作業を進める。
今回は広瀬さんが作成しているanti-badmailパッチとFujiwaraさんによるIPv6パッチがあたったものを使用する。
% cvs -d :pserver:anonymous@yatex.org:/qmail co -r v6-anti-badmail qmail
% cd qmail
% mkdir /r/var/qmail
% ln -s /r/var/qmail /var/qmail
% make setup check

各種設定

起動するまでしなければならない(した方がよい)設定を以下に列挙する。
アドレスエイリアスの作成
RFC2142で定義されているDNS/SMTP/HTTP等の問い合わせ用アドレスを生成する。/var/qmail/aliasに.qmail-postmaster、.qmail-hostmaster、.qmail-admin、.qmail-rootなどを作っておけばよい。これらのアドレスの設定は単純に適当なアドレスにforwadingでよい。
sendmailコマンドの置き換え
システム標準のsendmailコマンドをqmailのラッパーコマンドに置き換える。ついでにシステム側でsendmailが起動しないように設定しておくこと。FreeBSDの場合は/usr/sbin/sendmailを/var/qmail/bin/datemailに置き換える。(datemailのシンボリックリンクをsendmailにする訳だ。)
動作定義ファイルの設定
qmailの動作定義ファイル群(/var/qmail/control/*)の設定を行う。今回はその中のlocals、plusdomain、defaultdomain、me、rcpthosts、defaulthostを編集。設定すべき内容に関する説明は制御ファイルのドキュメントを参照。(基本的にはmeを設定すればとりあえず動く。)

起動スクリプトの作成

daemontool用のrunコマンドを作成。sendとsmtpdについてサービス起動スクリプトとログ収拾スクリプトを書く。こんな感じ。

#!/bin/sh
exec env - \
PATH="/var/qmail/bin:/usr/local/ucspi/bin:/usr/local/daemontools/bin:/usr/local/bin:$PATH" \
qmail-start ./Maildir/
#!/bin/sh
exec env - \
PATH="/var/qmail/bin:/usr/local/daemontools/bin:$PATH" \
setuidgid qmaill \
multilog t s1000000 ./main
```bash /var/qmail/smtpd/run
#!/bin/sh
exec env - \
PATH="/var/qmail/bin:/usr/local/bin/UCSPI:/usr/local/bin/DT:$PATH" \
envuidgid qmaild softlimit -d250000 \
tcpserver -vR -c40 -x /var/qmail/smtpd/smtp.cdb -U 0 smtp qmail-smtpd 2>&1
#!/bin/sh
exec  setuidgid qmaill \
multilog t ./main '-*' '+* * status: *' =status

起動

ここまで起動したら、qmailを起動できるようになる。daemontoolを使うので/var/qmai/sendと/var/qmail/smtpdのシンボリックリンクを/serviceに作ればメールサーバが起動する。あとはメールのやりとりをしてうまく動いているか確認してみれば良い。非常にざっくりとした説明で実際の自分の設定とも違うのだが、流れはこんな感じである。

もっと読む

2004年05月30日 日曜日

今日はウィンドウショッピングのはずが…

今日は某氏が来ていたので、写真屋の魔のトライアングルゾーンにでかけることになった。まず1件目の中野のフジヤカメラにて、なぜか変な値段がついたEF 24mm F1.4Lを発見。僕はこのレンズを昨年11月に普通の中古の流通価格(約13万円)で購入したのであるが、ここにはなぜか8万円と言う値札がついて置いてある。外見に傷が若干あって、フードが欠品。他は特に異常が無い模様。レンズは非常に綺麗。ということで、衝動買いをする様を見てしまった。(本当は中望遠を探しに来ていたらしいのだが、目的を見失うのはよくあるものだ。)
予想外の展開を見たあとで、新宿のMapCameraに行ったのであるが、ここでは大きな発見は無かった。(高いし、実に在庫が寂しい。) なんだか煮え切らないので、さらに勢いで目黒の三宝カメラに行ったわけだが、そこで_妙なものを発見!!!_ レンズを見に行ったはずなのに、妙な商談を開始する羽目に。結構な頻度で謎の在庫情報を送ってくる恐るべき三宝カメラさんとキヤノンの戦略にはめられてます。詳細は次回に続くと言うことで。
今回の事件でとメインフィルムが全部世代交代してしまって再条件だしをすることになってしまっているので、これを機に銀塩から引退してしまってデジタル一本にします。本当はEF 200mm F1.8L USMを探しに行ったのだけども…

Apache ハンドブック

HTTPサーバのApacheのマニュアルを探していたのだが、なかなか目に見える形にないことと、よく使うソフトだからある程度書籍にまとまっているマニュアルに相当するものを購入して良かろうと言うことで、購入。この本は完全にマニュアルと言って良い。Nuts and Shellの動物本シリーズの体裁なので僕としては読みやすい本なのだが、いかんせん_分厚くて、でかい。_ 全く何とかならないのか…(昔のサイズが良かったなぁ。厚さはともかく。)
まぁ普通の人(僕もそのはずだけども)は、Apache2.0だけで間に合うものと思われる。(このページがあるんだったらこんな高い本を買う必要もなかった…)

Rechard Blum / qmail メールサーバの構築

qmailの解説書の中ではちゃんとまとめっていて、この本だけでdjb-tool全体を完結しているので、便利な本じゃなかろうか。(Unix Userの広瀬さんの記事で十分すぎると思うのだけども。) この本はqmailにとどまらず、ちゃんとdaemontooldjbdnsの丁寧に書かれているので、数年は持ちそうな本である。(djb-tool自身がずっとアップデートが無い、熟成されたソフトだと思うので。)

もっと読む

2004年05月29日 土曜日

EF 85mm F1.2LUSM修理完了・顛末

22日の日記で若干続報が入ったが、水曜日にキタムラより「修理完了しました」というお知らせがあったので、早速取りに出かける。修理内容はAFの回転ムラと言うことでUSMの修理とカビ取りであった。使っていて全く気がつかなかったが、_実はUSM壊れてたのかぁ_と意外な修理報告であった。たぶん部品代はUSM関係の修理代と思われる。
気になるレンズを見ると、まるで埃がなく恐ろしいほど美しい状態になっている! なんと買った時より数段綺麗になってしまった。前玉も綺麗になっているので、おそら光学系が全て入れ直しになっている模様。USMも交換されているから、_全くの新品になった_と考えて良かろう。今回の修理はこれまでの経緯の如く超破格のお値段でやっていただいたので、キヤノンさんには頭が上がりそうにないのである。
いったん全く違うレンズになってしまったので、試写してAFを確認してみた。絞り開放でピントは思い通り(と言っても難しいが)の場所に来ているいるようなので、OKとすることとした。良かった良かった。

防湿庫購入

さすがに梅雨入り後のレンズの管理を考えると気が遠くなってきたし、修理費が10万円を超えそうなレンズしか持っていないので、防湿庫を購入して、その中にレンズを保管することにする。お値段は3万円。修理費を考えれば安いものだ。物は来週週末に届く予定。

自宅サーバ設置 その4

昨日の夜中から今日にかけてdjbdnsの設定を行った。いろいろ躓いたが、結局こんな感じで設定を進めればよい。

djbdnsの設定

ますdjbdnsのインストールから。実際はコンパイル・インストールされちゃっていたが、ドキュメント通りmakeすればOK。(インストール先を変える時はconf-homeの内容を編集。) まずは環境設定。djbdnsを起動するために以下に示す必要なグループとユーザーを追加する。 /etc/passwdはvipwで編集すること!

dns:*:9800:
dns:*:9800:9800::0:0::/var/dns:/bin/nologin
dnslog:*:9801:9800::0:0::/var/dns:/bin/nologin

dnscacheの設定・起動

次にdnscache-confコマンドでキャッシュサーバ動作環境を設定する。dnscache-confの引数は、キャッシュ用アカウント、ログ取得用アカウント、daemontoolサービスディレクトリ(ここは/var/dns/dnscacheとする)である。
# dnscache-conf dns dnslog /var/dns/dnscache
この段階で/var/dnscacheはdaemantoolのサービスディレクトリとして設定されているので、
# ln -s /var/dns/dnscache /service/dnscache
とすれば、dnscacheは起動する。

tinydnsの設定・起動

次にdnscache-confコマンドでキャッシュサーバ動作環境を設定する。tinydns-confの引数は、DNS用アカウント、ログ取得用アカウント、daemontoolサービスディレクトリ(ここは/var/dns/tinydnsとする)、DNSサーバとして公開するIPアドレス(ここではxxx.yyy.zzz.aaaとする)である。
# tinydns-conf dns dnslog /var/dns/tinydns xxx.yyy.zzz.aaa
この段階で/var/tinydnsはdaemantoolのサービスディレクトリとして設定されているので、
# ln -s /var/dns/tinydns /service/tinydns
とすれば、tinydnsは起動する。Bindで言うところのゾーンファイルは/var/dns/tinydns/rootディレクトリの中にあるdataファイルを編集し、/var/dns/tinydns/rootディレクトリにてmakeコマンドを実行してtinydns用データベースファイル(data.cdb)を生成すればよい。ゾーンファイルの書き方はtinydnsの説明書をよく理解して書きましょう。

某氏登場

前の会社の某Legioss氏が遊びに来た。ここ2ヶ月の当たり障りのない範囲でいろいろな話、近況を聞くことができた。さすがに2ヶ月程度じゃ何にも変わらないのう。

もっと読む

2004年05月28日 金曜日

自宅サーバ設置 その3

今日はApacheのための準備をして chroot空間(/home/r/)のライブラリ群の設定。めんどくさい場合はchrootしたい環境の下にmake worldをして適当に削る。この場合の作業はざっくりこんな感じ。

# D=/home/r
# cd /usr/src
# mkdir -p $D
# make world DESTDIR=$D
# cd /usr/src/etc
# make distribution DESTDIR=$D

と言う感じ。うちのマシン(Celeron 1GHz)だとだいたいmake worldが3時間程度の模様。(make worldみたいな操作は寝ている間にがんばってもらう。) 終わったところで、chroot環境として動いてもらわねばならないので、/r/dev以下を生成する。FreeBSDの場合はDevfsになっているので、こんな感じにする。
# mount -t devfs devfs /r/dev
# devfs rule -s 10 delset
# devfs rule -s 10 add hide
# devfs rule -s 10 add path null unhide
# devfs rule -s 10 add path zero unhide
# devfs rule -s 10 add path random unhide
# devfs rule -s 10 add path uraondom unhide
# devfs -m /r/dev rule -s 10 applyset
/r/dev以下はnullとzeroとrandomとurandomのみにしてあとは隠すと言うルール。実際はこのコマンドは装置起動時もしくはデーモンの起動スクリプトで実行するのがよい。/r/etc以下は

all:  spwd.db passwd
spwd.db:        master.passwd
master.passwd:  /etc/passwd
        cat $> \
        |grep -v '^#' \
        |awk -F: \
        '{printf "%s:*:%s:%s::0:0:%s:%s:%s\n",$$1,$$3,$$4,$$5,$$6,$$7}' \
        > $@
        chmod og-r $@
spwd.db:        master.passwd
        pwd_mkdb -d . $>
passwd: master.passwd
        pwd_mkdb -d . -p $>

と言う内容のMakefileをつくっておいて、
# cd /r/etc
# make
とすると、chroot 環境に必要なパスワード情報を取り込むようになる。

Apache起動

ここまで準備したことにより、Apacheを起動できる算段となった。Apacheは普通にインストールしてchrootする環境下(/home/r/に丸ごとコピーするのが手っ取り早いと思う。ApacheもDaemontoolで管理することにするため、以下のようなrunスクリプトを書く。(Daemontoolの使い方は前日の日記を参照。)

#!/bin/sh
APACHE=/usr/local/apache2
PATH=/usr/local/daemontools/bin:$PATH
exec env - PATH=/usr/local/bin:$APACHE/bin:$PATH \
pgrphack chroot /home/r httpd -DFOREGROUND

あとは/serviceに登録するとApacheが起動する。

Apacheのユーザーディレクトリ

ここのユーザーがWebページをもてるように若干の工夫をする。ざっくりと以下のような操作をユーザー作成時に行う。hogeというユーザーを作る時は、
# mkdir /home/r/hoge
# cp -pr /home/hoge/http /home/r/hoge && rm -rf /home/hoge/http
# chown -R hoge:ogwk /home/r/hoge
# ln -s /home/r/hoge/http /home/hoge/http
と言う具合に、chroot空間側にユーザーがファイルを置く空間を作って、シンボリックリンクを張る。これに対応するApacheの設定(httpd.conf)を抜粋して書くと

<Directory "/home/*/http">
  Options Indexes ExecCGI FollowSymLinks SymlinksIfOwnerMatch
  AllowOverride All
</Directory>
UserDir http

となる。ここまで設定を行って、実際に表示できるかどうか試してみること。

もっと読む

2004年05月27日 木曜日

自宅サーバ設置 その2

今日からDNSサーバ、メールサーバ、Webサーバと言ったコアになるサービスの立ち上げを行う。DNSはdjbdns、メールサーバはqmailと言う感じでdjbが作ったサービスで固めることにした。HTTPサーバは言わずともしれたApacheを選択。

daemontool

daemontoolはdjb謹製のデーモン管理ツールである。デーモンの起動/停止/設定ファイルの読み直しなどの操作を統一的に扱えるようにできたり、ログローテーションができたり、必要なデーモンが常時起動しているか監視できるツールである。一昨日までの対応でdaemontoolは使えるようになっているので、あとはざくざくサービスを登録すればよいと言うわけだ。

準備

こんな起動スクリプト(FreeBSDの場合)を/etc/rc.d/に入れておけばdaemontoolはサーバ起動時に自動的に起動する。

#!/bin/sh
#
## daemontools by djb
#
DTdir=/usr/local/daemontools/bin
case "$1" in
 start)
    if [ -x $DTdir/svscan -a -d /service ]; then
        env - PATH=$DTdir\:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin \
        csh -cf 'svscan /service &' ; echo -n ' daemontools'
    fi ;;
 stop)
    $DTdir/svc -d /service/*
    (sleep 1; killall svscan)& ;;
esac

ただし上のスクリプトを読めば分かるように、/serviceを作らないとdaemontoolは使えるようにならないので、早速/serviceを作成する。/ ディレクトリにファイルを作るのに抵抗を感じないわけではないが、djb-toolを使うという時点で自分のポリシーよりもdjb先生の方法論を優先すべきだろう。ということで_躊躇なくディレクトリを作る。_(どうせこのディレクトリにはシンボリックリンクしか置かないし。気にしない。)
mkdir /service
chmod 755 /service

daemontoolを使ったデーモン管理の基礎

daemontoolを使ってサービスを起動してみる。とりあえずさくっと設定できそうなcannaを例にしてみる。ますcannaのディレクトリ(/usr/local/cannaとする)にデーモン管理用ディレクトリを作る。(サービスの名前と同名の方が都合がよい。)
# cd /usr/local/canna/
# mkdir /usr/local/canna/canna
ここで作成した管理用ディレクトリ(/usr/local/canna/canna)にサービスを起動するrunスクリプトを作る。cannaの場合はこんな感じ。

#!/bin/sh
/bin/rm -f /tmp/.iroha_unix/IROHA
PATH=/usr/iekei/Canna/bin
exec 2>&1
exec cannaserver -d

更にデーモンが吐き出すログを取りたい時はログ管理用のディレクトリを作る。

# cd /usr/local/canna/canna/log
# mkdir /usr/local/canna/canna/log

ここにもrunスクリプトを置く

#!/bin/sh
exec setuidgid bin multilog t ./main

ここでサービス登録といきたいところだが… /usr/local/canna/canna/run を実行してcannaserverが立ち上がるかどうか確認する。もしうまく立ち上がったらなOKで、サービスを登録しよう。サービスの登録は簡単で/usr/local/canna/canna/のシンボリックリンクを/serviceに作るだけでおしまいで、5秒以内にcannnaserverが自動的に起動される。

# ln -s /usr/local/canna/canna/ /servece/canna

ログの見方や管理コマンドの使い方は追々お勉強。こんな感じでサービスを登録していけば良いので、daemontoolを使うことで、サービスの起動や終了やメンテのための一時停止などはLinuxでもBSDでも他でも統一的にあつかえる。何とも便利だと思うのである。(まぁ良いラッパーと言うことになるのかな。)

もっと読む