ADSLでお気軽自宅サーバ

ADSLが安くなってきたんで自宅でサーバを上げたいって人は結構いると思います。 このページでは、自宅でお気軽にサーバを上げるにはどうすればいいのかを説明していきます。 サーバの環境ですがこれは私の環境で書いていきます。

以下の説明では、機械のIPアドレスを192.168.1.32と192.168.1.33, ドメイン名はmoroo.nanako.jpとします。

機械の準備

機械
IBM ThinkPad 560X
OS
Plan9 Revision 4

NICはEtherLink IIIが推奨されています。

3C589D 1020-102F IRQ15

こういう至って普通の構成で最終的には自宅でWebサーバ、メールサーバを立ち上げるところまで説明します。なお、DNSも同じ機械で設定します。

ADSLモデムの準備

外部からの問い合わせに返答するためにはグローバルIPアドレスが割り当てられてなければなりません。通常このグローバルIPアドレスはADSLモデム(ADSLモデムにはモデムにルータの機能を追加したものや、ブリッジとして動作するものなどいくつかの形態があります。以下では簡単のために全てADSLモデムと呼びます)のインターネット側に割り当てられています。外部からの問い合わせに返答する場合、NATを使用して内部のIPアドレスに変換してやる必要があります。

NATの設定は下記の様にします。80番のtcpポートは、Webサーバ、53番のudpポートはDNSです。

portprotocolIP
80tcp192.168.1.32
53udp192.168.1.33

設定ファイルの準備

設定ファイルを格納するフロッピーを1枚用意します。本ページから下記のファイルを全てダウンロードしておきます。このドキュメントを置いてあるサーバの制限で、拡張子.txtをつけてありますが、拡張子は削除して保存して下さい。

plan9.ini
起動ファイル
tpauth
カーネルの設定ファイル
kbd.c
日本語配列キーボードファイル
local
内部ネットワークの設定ファイル
external
外部ネットワークの設定ファイル
auth
認証サーバの認証ファイル
cpurc
起動ファイル

IPアドレス、ドメイン名、機械の名前、DNSサーバを各自の環境に合わせて書き換え、書き換えた物をフロッピーに保存します。

ダウンロード

ここからBootable Floppy イメージを取得します。いくつか質問項目がありますので下記の様に回答します。

Boot device
First floppy drive
Hard Disk
そのまま
Ethernet(s)
3COM Etherlink III PCMCIA (3C589)
IRQ 10
Addr 300
Video
Generic 800X600 LCD

freebsd.orgとかからrawriteを拾ってきてFloppy Imageを作ります。

作成したフロッピーで起動します。なお、以下キーボードがUSキーボードの設定になってますので、キーボード表面の刻印と違っているものがあります。これは後で変更します。

起動をすると、メッセージが出てきてグラフィカルウィンドウが立ち上がります。左上のウィンドウに設定を行うための質問が出てきます。まず、partdiskでpartdiskを選択。sdC0を選択。d p1でp1を削除。d p2でp2を削除。a p1 0 1024で全パーティションをPlan9に割り当て。t p1 PLAN9でp1をPlan9に設定。wで書き込み。qで終了

prepdiskを選択。/dev/sdC0/plan9に割り付け。あとで認証サーバに変更するときのために、デフォルトの設定からswapパーティションの最後のセクタを切り取って、nvramを作っておきます。

,9fat 0 20482
,fs 20482 4052569
,swap 4052569 4128705
>>> d swap
>>> p
  9fat                  0 20482      (20482 sectors, 10.00 MB)
  fs                20482 4052569   (4032087 sectors, 1.92 GB)
  empty          4052569 4128705   (76136 sectors, 37.17 MB)
>>> a swap 4052569 4128704
>>> a nvram 4128704 4128705
>>> p
  9fat                  0 20482      (20482 sectors, 10.00 MB)
  fs                20482 4052569   (4032087 sectors, 1.92 GB)
' swap           4052569 4128704   (76135 sectors, 37.17 MB)
' nvram          4128704 4128705   (1 sectors, 512 B )

wで書き込み。qで終了

mountfsを選択。/dev/sdC0/fsを選択。

configdistを選択。Distributionをnetで選択

confignetを選択。

etherを選択。選択できない場合は、イーサカードの設定が変です。

manualを選択。環境によってはDHCPでもいいです。192.168.1.32/255.255.255.0を与えます。ゲートウェーは192.168.1.1

downloadを選択。しばらく待ちましょう

copydistを選択。またしばらく待ちましょう

bootsetupを選択。で、エラーになるので、別ウィンドウを開き、9fat:を実行し、/n/9fatをマウント

Enable boot methodでplan9を選択。

finishを選択

フロッピーをいれたままReturnを押す。すると、Feel free to turn off your computerと言われる。これで、電源を落とせます。フロッピーは抜いて下さい。

アップデート

配付された物より新しい物が配付されているかもしれないので、アップデートします

ベル研のサーバに接続して、最新のパッチを当てます。ここでユーザ登録します。ユーザ名とパスワードを覚えておいて下さい。

/usr/glenda/bin/rc/pullを実行すると、最新の状態に更新されます。

ユーザ作成

このところでユーザを作っておきましょう。新しいユーザをjunとします。disk/kfscmd allowを実行しておいて下記の様にします

disk/kfscmd 'newuser jun'

リブートして作成したユーザでログインし、

disk/kfscmd allow
/sys/lib/newuser
mail -c
を実行してユーザディレクトリを作成します。あとでCPUサーバにするので、bootesとnoneの2つのユーザも作っておきます。

カーネルの構築

rebootします。ユーザはbootesで立ち上げます。rebootしたら、先ほど作っておいたフロッピーをドライブに刺しておきます。

cpu/authサーバ用のカーネルを作成します。この時に、ついでにキーボードの配列もJIS配列に変更します。変更するための方法は大阪府立大学の方法を取りました。

ウィンドウを開いて、次の様にしてカーネルを作ります

a:
mkdir cpu
cd cpu
cp /n/a:/tpauth .
cp /n/a:/kbd.c .
bind -bc . /sys/src/9/pc
cd /sys/src/9/pc
mk 'CONF=tpauth'
disk/kfscmd allow
9fat:
cp 9tpauth /n/9fat/9tpauth

カーネルが2つになったので、立ち上げ時にどちらか選択できる様に設定したplan9.iniと入れ替えます。

cp /n/a:/plan9.ini .

ネットワーク他の設定

ネットワークファイル、認証ファイル、起動の設定を行っておきます。

cd /lib/ndb
cp /n/a:/local .
cp /n/a:/external .
cp /n/a:/auth .
cd /rc/bin
cp /n/a:/cpurc .

SSHキーの作成

SSHのキーを作成します。

aux/ssh_genkey
chgrp -u bootes /sys/lib/ssh/hostkey.*

認証サーバの設定

認証サーバの場合、il566とtcp567のサービスを停止します。Plan9ではサービスの起動は/rc/serviceに記述されたtcp*, il*で設定します。認証関係は/rc/bin/service.authです。

cd /rc/bin/service.auth
mv authsrv.il566 il566
mv authsrv.tcp567 tcp567

nvramに適当なものを書いて次回の立ち上げ時に聞いてくる様にします

echo boo > /dev/sdC0/nvram

CPUサーバの設定

この機械は、CPUサーバと認証サーバを兼ねていますのでCPUサーバとしての設定を追加します。

cd /rc/bin/service
echo '#!/bin/cpu -R' >il17010
echo '#!/bin/cpu -R' >tcp17010
chmod +x *17010

cronの設定

cronのログを下記の様にして作成できる様にします

cd /sys/log
touch cron
chgrp -u sys cron
chmod a+aw cron

再起動

rebootします。bootするカーネルを聞いてきますので、tpauthを選びます。先ほどnvramの内容を変更しておいたので、authid, authdom, secstore key, passwordを聞いてきます。authidには、bootesを与えて下さい。authdomはこの機械の属するFQDNを与えます。secstore key, passwordは適当な秘密のパスワードを与えます。

bad nvram key
bad authencation id
bad authencation domain
authid: bootes
authdom: moroo.nanako.jp
secstore key: password1
password; password2
kfs...version...time...

ユーザの設定

ユーザの設定を行います。ユーザの設定は、auth/changeuserコマンドを使います。ここで、bootesも含めてユーザの登録を行います。また、キューにたまったメールの配送をcronでupasが実行します。このため、upasのパスワードの登録も必要となります。

auth/changeuser bootes
Password: password
Confirm password: password
assign Inferno/POP secret? (y/n) y
make it the same as the plan 9 password? (y/n) y
Expiration date (YYYYMMDD or never)[return = never]: 
Post id: 
User's full name:Bootes
Department #: 
User's email address: bootes@moroo.nanako.jp
Sponsor's email address: 

user bootes installed for Plan 9

Webサーバの立ち上げ

Plan9 4th Editionで動作するWebサーバには、ベル研究所が配付している物と、愛知大学の有沢さんが配付している物の2つがあります。 ここでは、ベル研の配付している物の設定を行います

httpdの設定

webサーバの使用する名前空間の定義は、/lib/namespace.httpdで行います。名前空間は、コンソールが立ち上がった状態が起点となります。今回の設定では単純に/usr/web以下にwebドキュメントを展開しているとします。

この場合、httpdは/usr/webを/にbindするので、/lib/namespace.httpdには空のファイルを置いておくだけになります。

httpdはアクセスされたリクエストごとに/sys/lib/httpd.rewriteに記述されている書き換えを行います。もし、バーチャルホストを行うのであれば、これを書き換えます。特に何もしないのであればnamespace.httpdと同じく空のファイルを置いておきます。

httpdの起動は、cpurcで行います。

アクセス制限を行うときは、そのディレクトリに.httploginファイルを置きます。ファイルの中身は下記のような物です。

'Test Web'
foo bar

Test Webがアクセス制限時に表示される名前、fooがユーザ名、barがパスワードです。パスワードは暗号化しない平文で置きます。実は、アクセスの可否を判断しているのは、同じディレクトリレベルにあるものだけです。従って、下位のディレクトリも保護するためには、.httploginをコピーして置かなければなりません。

CGIは/bin/ip/httpdの下に置きます。/lib/namespace.httpdを書き換えて、適当なディレクトリからbindするのがよいでしょう。

CGIへのアクセスは、常に、http://サーバー/magic/foo の様に行います。fooがCGIのファイルです。

メールサーバの立ち上げ

メールサーバの設定では、自分自身にMXレコードを向かせます。そのためには、/lib/ndb/externalのDNSの設定にmx=の設定がある必要があります。また、 NATの設定で、SMTPのポートを設定しておく必要があります。

portprotocolIP
25tcp192.168.1.32

メールの設定ファイルは、/mail/libにあります。設定例を下記に置いておきます。このドキュメントを置いてあるサーバの制限で、拡張子.txtをつけてありますが、拡張子は削除して保存して下さい。

blocked
Spamフィルタ。とりあえずは全部コメントアウトしておいていいです。
names.local
ローカルの別名ファイル。デフォルトではpostmasterへ配送されるメールをglendaに配送する様になっています。
remotemail
メールの配送時に使われるスクリプト。fd=の設定を変更します。
smtpd.conf
メール配送に使われるスクリプト。defaultdomain, ourdomainsの設定を自分のドメインに合わせて設定します。
patterns
Spamフィルタ。とりあえずほっておいていいです。
rewrite
受信したメールの配送ファイル。自分のドメインの設定に合わせて変更します。

これで当初の目的を達しました

補記:Pegasusでのインストール

プログラムを取ってきます。

mkdir pegasus
cd pegasus
hget http://plan9.aichi-u.ac.jp/netlib/pegasus-1.2.tgz > pegasus-1.2.tgz

展開&makeをします

gunzip pegasus-1.2.tgz
tar xf pegasus-1.2.tar
cd pegasus-1.2
cd httpd
mk lib
mk
disk/kfscmd allow
mkdir /usr/local
mkdir /usr/local/bin
mkdir /usr/local/bin/386
mk install
disk/kfscmd disallow

インストール先の準備をします

mkdir /usr/web
cd /usr/web
mkdir doc
mkdir etc
mkdir mnt

おまけ

今回の設定を行うためにいろいろやってみた内容がここにあります。リンクも切れているところがありますし、内容が間違っているところもあります。ご参考にどうぞ。

参考リンク