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
についてはあまり熱心ではないらしい)