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
となる。ここまで設定を行って、実際に表示できるかどうか試してみること。