Logo address

Plan9 NFS サーバの構築法

目次

2003/01/11 改訂
NFS は UNIX の標準ネットワークファイルサーバのプロトコルであるが、以下のような問題があり、現在では使われなくなりつつある。

最後の問題点に関しては Plan 9 は独自の工夫をおこない、解決している。

[1] Export 先とマップファイルの指定

Plan9 の CPU サーバ ar が UNIX ホスト kenvenus に対してエキスポートする場合の例を以下に示す。ここでは2つのホストに対して異なる方法を使ってみた。読者はマニュアル (nfsserver(8))も参照して欲しい。
!9fs tcp!ken
.+      ken     /n/ken/etc/passwd   /n/ken/etc/group
.+      venus\.aichi-u\.ac\.jp    /n/venus/passwd       /n/venus/group

!の行は nfsserver が起動された時に実行されるコマンドである。このコマンドは CPU サーバのディレクトリ /n/ken に UNIX ホスト ken のファイルシステムをマウントする。その結果 /n/ken/etc/passwd/n/ken/etc/group にマップファイルが現れる。(/n/ken は予め作成しておく事。) ken に対してはユーザ ID のマップ情報をこの時に取り込んでいる。
venus に対してはマップ情報はあらかじめファイルサーバがファイルとして持っている。(/n/venus/passwd/n/venus/group) この場合、後に述べる u9fs を UNIX ホストで動かす必要はない。

Plan9のマニュアルにはこの例の venus.aichi-u.ac.jp ようにホスト名としてフルネームを書く例しか載っていない。ところがフルネームを書くべきか、それとも単に venus 書くべきかは厳格に区別されている。この区別は /sys/log/nfs にも反映している。
例えば /sys/log/nfs を覗くとフルネームで指定されるべきホストは

	plan9 Jun 12 10:23 host=202.250.165.19, port=829, root="9fs"...
	plan9 Jun 12 10:23 auth: 897614811 venus.aichi-u.ac.jp u=0 g=0
のように、フルネームで書かれている。従って実際に UNIX ホストからマウントし /sys/log/nfs を見れば判別できる。筆者にはこの違いがどこから発生したか分かっていない。ken はサーバと同一セグメントにあり、venus は異なるセグメントにある。この違いが原因なのかどうか...
マップファイルにはパスワード情報はいらない。'*' (アステリスク)記号で置き換えるのがよい。
筆者は、UNIX クライアントがマウント要求を出した時にサーバがダイナミックに /etc/passwd/etc/group を読みに行くメカニズムが存在すればもっと使い易くなると思う。誰かやってみませんか?

[2] Export するファイルサーバの指定

CPUサーバから
	aux/nfsserver -a il!9fs -c /lib/ndb/nfs
	aux/portmapper
を実行する。但しこれは UNIX クライアントだけを対象とする場合であり、PC を対象とする場合には
	aux/nfsserver -a il!9fs -c /lib/ndb/nfs
	aux/pcnfs
	aux/portmapper
を実行する。この例で il!9fs9fs は筆者の Plan9 のファイルサーバの名称である。
CPUサーバがローカルなファイルシステム(kfs)をサービスする場合には次のようにする。(筆者が自宅の Plan9 端末 pc で NFS のサービスを行っている例である)
	srvfs  pc /
	aux/nfsserver  -f/srv/pc -c/lib/ndb/nfs
	aux/portmapper

[3] UNIX ホストの設定

UNIX ホスト ken のように、ken のファイルシステムを Plan9 のCPU サーバにマウントさせる場合には u9fs の設定が必要になる。Plan9 側からはユーザ bootes の名前でマウントしに行くので ken には ユーザ bootes の登録と bootes のホームディレクトリの .rhosts に CPU サーバの名称と bootes の名前が必要である。(ネットに流れる u9fs の解説にユーザ none も必要であるかのような言い方が見られるが誤りである。) u9fs の設定に関しては u9fs の解説を見る。この例の venus のように既にマップ情報を CPU サーバが持っている場合には u9fs は不要である。
nfsserver は現在の版では認証を行わない。ユーザ none でサービスを行い、読みとりだけを許している。Plan9 の NFS サーバはかってはパスワードによる認証メカニズムを持ち、書き込みのアクセスを許していたが、どうやら手の打ちようがないらしい。そこで認証をあきらめたようだ。(それでも家庭内のネットワークでは書き込みアクセスは欲しい機能である。オプションで残しておいて欲しかった。)
UNIX クライアントが ar のマウントを行うには
bash$ /etc/mount -o soft,intr ar:9fs /n/ar
pc のマウントを行うには
root# mount_nfs -2 -o soft,intr pc:/srv/pc /n/pc
ここに /n/ar/n/pc はマウント先のディレクトリでありあらかじめ準備しておく。なお、後者の例は MacOSX での実験である。この -2 は NFS のバージョン 2 を意味している。最新のバージョンは 3 であるが Plan9 の nfsserver は対応していない。(ベル研も nfsserver についてはあまり熱心ではないらしい)