Plan9 NFS サーバの構築法
目次
2003/01/11 改訂
NFS は UNIX の標準ネットワークファイルサーバのプロトコルであるが、以下のような問題があり、現在では使われなくなりつつある。
- UDP を使用していること
- 認証メカニズムに問題があること
- 管理が困難であること
[1] Export 先とマップファイルの指定
Plan9 の CPU サーバar が UNIX ホスト ken と venus に対してエキスポートする場合の例を以下に示す。ここでは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!9fs の 9fs は筆者の 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 についてはあまり熱心ではないらしい)