ADSLが安くなってきたんで自宅でサーバを上げたいって人は結構いると思います。 このページでは、自宅でお気軽にサーバを上げるにはどうすればいいのかを説明していきます。 サーバの環境ですがこれは私の環境で書いていきます。
NICはDNSの解決のために2枚必要です。
3C589D 1020-102F IRQ15 3CXE589ET 1030-103F IRQ9
こういう至って普通の構成で最終的には自宅でWebサーバを立ち上げるところまで説明します
Windows環境でNICのIOアドレスやIRQを調べておきます。2枚NICを刺すので、あらかじめ1枚の設定を変更しておきます。今回は、IOアドレス0x310, IRQ 15に変えておきました。
ここからBootable Floppy イメージを取得します。
その前に、EtherLinkIIIのIRQ/Addrを調べておきます。Windows MEなどで調べると後で痛い目をみます。DOSで調べましょう。また、PCMCIA 0に刺しておかないとダメです。
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に割り付け。デフォルトのままでOK。
,9fat 0 20482 ,fs 20482 4052569 ,swap 4052569 4128705
w
で書き込み。q
で終了
mountfsを選択。/dev/sdC0/fsを選択。
configdistを選択。Distributionをnetで選択
confignetを選択。
etherを選択。選択できない場合は、イーサカードの設定が変です。
manualを選択。環境によってはDHCPでもいいです。192.168.1.40/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と言われる。これで、電源を落とせます。
NICを2枚さしますので、この時点で2枚目のNICを刺して接続します。
と思ったのですが、2枚だと後がめんどいのでとりあえず1枚刺しで設定してから2枚に移行します
Plan9でrebootします。user[none]を聞いてきますので、glendaを選んでおきます。この時点で存在するユーザはglendaだけです。
disk/kfscmd allowを実行して、このシステムに対する全権を取得しておきます。
下記の様に入力してplan9.iniを修正する準備をします
disk/kfscmd allow 9fat: cd /n/9fat sam plan9.ini
samはエディタです。ether0の記述を参考に、ether1の記述をしておきます。
ether0=type=3C589 port=0x300 irq=10 media=10BaseT //EtherLink III D ether1=type=3C589 port=0x310 irq=15 media=10BaseT //EtherLink III B
/rc/bin/termrcの下記のコメントをはずします。また、設定を追加します。デフォルトでは2枚目のNICをマウントしないのでその設定を追加します。
if(! test -e /net/ipifc/0/ctl) ip/ipconfig -g 192.168.1.1 ether /net/ether0 add 192.168.1.32 255.255.255.0 >/dev/null >[2=1] bind -a '#l1' /net ip/ipconfig -g 192.168.1.1 ether /net/ether1 add 192.168.1.33 255.255.255.0 >/dev/null >[2=1] #if(test -e /net/ipifc/0/ctl) # ndb/dns -rf $NDBFILE ndb/dns -r
disk/kfscmd haltを発行して一旦停止して^t^trで再起動します。下記の様に2つめのNICが認識されています。
#l0: xcur10BaseT 3C589 #l0: 3C589: 10Mbps port 0x300 irq 10: 0020AFFAD7B7 #Y1: 3Com Corporation;3C589D;TP/BNC LAN Card Ver. 2a;00002; irq 10, port 240 #l1: xcur10BaseT 3C589 #l1: 3C589: 10Mbps port 0x310 irq 15: 0060088B00C8
ネットワーク関係のデータベースを設定します。データベースは/lib/ndb/localです。 DNSサーバ、NICのMACアドレス、NICのIPアドレス、ドメイン名などは環境に合わせて変えて下さい。
# # files comprising the database, use as many as you like, see ndb(6) # database= file=/lib/ndb/local file=/lib/ndb/common ipnet=moroohome ip=192.168.1.0 ipmask=255.255.255.0 dns=dns.nifty.com ipgw=192.168.1.1 ip=192.168.1.32 ether=0060088b00c8 //EtherLink III D proto=il sys=tp560x dom=tp560x.moroo.nanako.jp ip=192.168.1.33 ether=0020affad7b7 proto=il dom=tp560xalt.moroo.nanako.jp dom=dns.nifty.com ip=202.248.37.74
この時点でのplan9.ini, termrc, localを下記に置いておきます。
ベル研のサーバに接続して、最新のパッチを当てます。ここでユーザ登録します。ユーザ名とパスワードを覚えておいて下さい。質問に答えると、ダウンロードするコマンドが表示されます。このコマンドを実行すると先ほど入力したユーザ名とパスワードを聞いてきますので答えてやれば自動的に最新の物を持ってきます
このところでユーザを作っておきましょう。disk/kfscmd allowを実行しておいて下記の様にします
disk/kfscmd 'newuser jun'
リブートして作成したユーザでログインし、
disk/kfscmd allow /sys/lib/newuser mail -cを実行してユーザディレクトリを作成します。あとでCPUサーバにするので、bootesとnoneの2つのユーザも作っておきます。
前述の様に、Thinkpad 560Xの日本国内版のキーボードは、US版の配列と違います。そこで、キーボードの設定を変更します。変更するための方法は現時点では下記の2つがあります。愛知大学の方においてある方法は、起動時にキーボードの設定を選択できるなどより望ましいのですが、残念ながらVersion 3のものですので、今回は大阪府立大学の方においてある方法、すなわち、単純にキーボードの設定を変更する方法を用いました。
パッチを当てたkbd.cを下記に置いておきます。
下記の様にしてカーネルを作り直し、置き換えます
mkdir kbd cd kbd hget http://kbd.c > kbd.c bind -bc . /sys/src/9/pc cd /sys/src/9/pc mk 'CONF=pcdisk' disk/kfscmd allow 9fat: cp 9pcdisk /n/9fat/9pcdisk
ここまでで作成したものはterminalサーバです。terminalサーバは、認証を行いませんのでインターネットサービスを行うのに不向きです。インターネット上のサーバにするのが目的ですので、これからCPUサーバへ変更します。
まず、CPUサーバ自体の所有者を作成します。先にbootesを作っておきましたので、このユーザを所有者にします。
bootesでログインして、cpurcを書き換えます。ndb/csの設定の直前にipconfigの設定を追加します。また、sysnameの設定をipconfigの設定の前に持っていきます。keyfsの設定のコメントをはずします。il566プロトコルで使用するための名前の変更に関するコメントをはずします。また、cpuサーバでrioを使うためにいくつかの設定をします。設定されたcpurcを下記に置いておきます。ここの記述だとcpuサーバでもrioを動かせる様に書いてありますが、実際には'#i'が設定できないため動かせません。
SSHのキーを作成します。
aux/ssh_genkey chgrp -u bootes /sys/lib/ssh/hostkey.*
ネットワークの設定に認証サーバを追加します。追加した例はここです。
下記の様にして確認してみるのはいいことです。
ndb/ipquery ip your.ip.add.ress auth ndb/ipquery ip your.ip.add.ress cpu ndb/ipquery ip your.ip.add.ress ntp
/lib/ndb/authを書き換えます。書き換えた例はここです。
認証サーバの場合、il566とtcp567のサービスを停止します。Plan9ではサービスの起動は/rc/serviceに記述されたtcp*, il*で設定します。認証関係は/rc/bin/service.authです。
cd /rc/bin/service.auth mv authsrv.il566 il566 mv authsrv.tcp567 tcp567
ここでカーネルのコンパイルを行いますが、デフォルトの認証サーバカーネルではデバイスがサポートされていません。そこで、デバイスを追加した認証サーバカーネルの設定を作成します。作成した例はここです。
作成したカーネルのコンフィグレーションをtpauthとします。下記の様にしてカーネルを作ります。この時に、キーボード設定を書き換えるのを忘れない様に。Plan9の場合、/sys/src/9/pcを触らなくてもカーネルを作ることができます。
cd mkdir cpu cd cpu cp どこか/tpauth . cp ../kbd/kbd.c . bind -bc . /sys/src/9/pc cd /sys/src/9/pc mk 'CONF=tpauth' 9fat: cp 9tpauth /n/9fat
swapから最後の1セクタを切り取り、nvramとします
term% cd /dev/sdC0 term% disk/prep plan9 9fat 0 20482 (20482 sectors, 10.00 MB) fs 20482 4052569 (4032087 sectors, 1.92 GB) swap 4052569 4128705 (76136 sectors, 37.17 MB) >>> 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
nvramに適当なものを書いて次回の立ち上げ時に聞いてくる様にします
echo boo > /dev/sdC0/nvram
timesyncの設定をntpサーバに変更します。また、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も含めてユーザの登録を行います
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
il17007を起動する様にします。
disk/kfscmd allow mv /bin/service/_il17007 /bin/service/il17007
/lib/ndb/localにauthdomの記述を追加します。作成した/lib/ndb/localをここに置いておきます。
factotumを追加します。この設定が必要か不明です
auth/factotum -g 'dom=moroo.nanako.jp proto=p9sk1 user=bootes !password=xxxxxxx' auth/factotum -g 'dom=moroo.nanako.jp proto=p9sk1 user=jun !password=xxxxxxx'
Plan9 4th Editionで動作するWebサーバには、ベル研究所が配付している物と、愛知大学の有沢さんが配付している物の2つがあります。 ここでは、ベル研の配付している物の設定を行います
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
がパスワードです。パスワードは暗号化しない平文で置きます。
CGIは/bin/ip/httpdの下に置きます。/lib/namespace.httpdを書き換えて、適当なディレクトリからbindするのがよいでしょう。
CGIへのアクセスは、常に、http://サーバー/magic/foo の様に行います。fooがCGIのファイルです。
これで当初の目的を達しました
グローバルIPが1個しか配付されず、かつ、ADSLルータの内側の機械でDNSを使おうとすると工夫がいります。
この図のような構成の場合、ADSLモデムの部分でNATの設定を行い、下記の書き換えを行う様に通常はします。
port | protocol | IP |
---|---|---|
80 | tcp | 192.168.1.32 |
53 | udp | 192.168.1.32 |
DNSでの問題点は、このNATの書き換えにあります。ドメインmoroo.nanako.jpへの問い合わせは、ADSLモデムのグローバルIPアドレス(200.1.2.3)に行きます。ADSLモデムはこの問い合わせをNATの設定に従って、192.168.1.32(tp560x)に振り替えます。tp560xは、自分が知っているアドレスの場合は、返答を行いますが、自分が知らないアドレスの場合は、DNSサーバに問い合わせます。DNSサーバは、問い合わせが自ドメインかどうかを知らないので、他の機械からの問い合わせと同じく、ADSLモデムのグローバルIPアドレス(200.1.2.3)に問い合わせます。ADSLモデムは、先ほどと同じく、NATで書き換えてtp560xに問い合わせを行ってしまい、無限ループに陥ります。
tp560xが、DNSへの問い合わせを行わない様にすれば、無限ループは避けられますが、この場合、tp560x上でDNSを利用することができません
この問題を解決するために、IPアドレスを複数割り当て、一つのIPアドレスをDNS専用に使用します。Plan9の場合、IPアドレス毎に提供するサービスを限定できますので、DNSへの問い合わせを処理するIPアドレスを追加し、このIPアドレスへの問い合わせでは、自分自身が知らない場合にDNSに問い合わせをさせない様にします。
cpurcの設定で/net.alt以下にIPドライバを追加し、IPアドレスを設定します。そして、問い合わせをこのIPアドレスで処理する様にします。
bind -a '#I' /net.alt ip/ipconfig -g 192.168.1.1 -x /net.alt ether /net/ether0 add 192.168.1.33 255.255.255.0 >/dev/null >[2=1] ndb/cs -x /net.alt -f /lib/ndb/external ndb/dns -rs -x /net.alt -f /lib/ndb/external
ADSLモデムのNATの設定は下記の様にします。
port | protocol | IP |
---|---|---|
80 | tcp | 192.168.1.32 |
53 | udp | 192.168.1.33 |
外部からの問い合わせに対する返答は、/lib/ndb/externalで設定します。
# # files comprising the database, use as many as you like, see ndb(6) # database= file=/lib/ndb/external file=/lib/ndb/common dom=moroo.nanako.jp soa= refresh=3600 ttl=3600 ns=210.229.24.71 mb=moroo@nanako.jp mx=nu13d.moroo.nanako.jp ip=210.229.24.71 dom=nu13d.moroo.nanako.jp ip=210.229.24.71 dom=tp.moroo.nanako.jp