2006年1月17日火曜日

FreeBSDと玄箱との間でNFS

玄箱を有効利用するために、最初に何をしようか・・・と考えて、玄箱でNFSを使えるようにしました。



NFSの設定に関しては、以下のサイトの情報を参考にしました。







■ 玄箱にNFSを追加インストール



デフォルトでは、玄箱でNFSは使えません。NFSを使うために、プログラムを追加インストールしなくてはいけないそうです。それくらい、最初から入れておいてもよさそうな気もしますが・・・逆に使わないかもしれないものは入れておくな、というポリシーもありますが・・・



NFSのプログラムは、玄箱添付のCD-ROMのなかの、binaryというフォルダに入っています。なんだか、いろいろはいってますねぇ。

autoconf-2.13.tar.gz
automake-1.4p4.tar.gz
binutils-2.10.91.0.2.tar.gz
bison-1.28.tar.gz
bzip2-1.0.2.tar.gz
diff-2.7.tar.gz
flex-2.5.4.tar.gz
g++-2.95.3.tar.gz
gcc-2.95.3.tar.gz
gdb-5.1.tar.gz
gettext-0.10.35.tar.gz
glibc-2.2.3.tar.gz
libgdbm-1.7.3.tar.gz
libstdc++2.10-2.95.3.tar.gz
m4-1.4.tar.gz
make-3.79.1.tar.gz
nfs.tar.gz
ntp-4.0.99g.tar.gz
openssh-3.0.2p1.tar.gz
openssl-0.9.6e.tar.gz
openssl.tar.gz
patch-2.5.4.tar.gz
perl-5.6.1.tar.gz
portmap-5beta.tar.gz
python-2.0.tar.gz
texinfo-4.0b.tar.gz
textutils-2.0.tar.gz
xinetd-2.3.3.tar.gz

このうち、つぎの2つをインストールします。

nfs.tar.gz
portmap-5beta.tar.gz

インストールといっても、tar.gzファイルをルートディレクトリから展開するだけです。



(1) Windowsパソコン上で、CD-ROMの内容をごっそりと玄箱の共有フォルダ「share」へコピーしておきます。



このshareというフォルダは、玄箱にログインすると、/mnt/shareに見えます。



(2) 玄箱にログインします。



(3) 以下のようなコマンドで、ファイルを展開します。

cd /
tar zxvf /mnt/share/binary/nfs.tar.gz
tar zxvf /mnt/share/binary/portmap-5beta.tar.gz

■ 玄箱をNFSサーバにする



まずは、玄箱をNFSサーバにしてみました。



● /etc/exportsの設定



どのフォルダを公開するかを指定する/etc/exportsファイルを作成します。



よい子はマネをしてはいけませんが、私は、こんな大胆なことをしてしまいました。

root@KURO-BOX:/# cat /etc/exports
/       192.168.0.0/255.255.255.0(rw,no_root_squash)
/mnt    192.168.0.0/255.255.255.0(rw,no_root_squash)

すべてのファイルがLAN側のすべてのマシンから、NFSアクセスできるようになっていて、しかも、クライアントのroot権限でファイルを読み書きできてしまいます。



ノーガード戦法みたいな?



セキュリティ面で非常に危険なので、管理の腕に自信がある人以外は、絶対にやっちゃいけません。



それにしても、exportsファイルの書式って、OSごとに少しずつ違っていて、とくにLinuxは独特な感じで、かなりわかりづらいですね・・・



あ、そうそう、書き忘れていましたが、玄箱のファイルシステムは、こんな感じになっています。

root@KURO-BOX:/# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hda1              2063504    178864   1779820  10% /
/dev/hda3             76462784    213140  76249644   1% /mnt

//mntという2つのパーティションがあります。



● NFSサーバのデーモンが自動起動するようにする



上記に示した、参考にしたウェブサイトのとおりにしました。



以下の一連のコマンドを実行します。

ln -s /etc/init.d/portmap /etc/rc.d/rcS.d/S41portmap
ln -s /etc/init.d/portmap /etc/rc.d/rc0.d/K10portmap
ln -s /etc/init.d/portmap /etc/rc.d/rc6.d/K10portmap
ln -s /etc/init.d/nfs-common /etc/rc.d/rc2.d/S19nfs-common
ln -s /etc/init.d/nfs-common /etc/rc.d/rc3.d/S19nfs-common
ln -s /etc/init.d/nfs-common /etc/rc.d/rc4.d/S19nfs-common
ln -s /etc/init.d/nfs-common /etc/rc.d/rc5.d/S19nfs-common
ln -s /etc/init.d/nfs-common /etc/rc.d/rc0.d/K81nfs-common
ln -s /etc/init.d/nfs-common /etc/rc.d/rc6.d/K81nfs-common
ln -s /etc/init.d/nfs-user-server /etc/rc.d/rc2.d/S25nfs-user-server
ln -s /etc/init.d/nfs-user-server /etc/rc.d/rc3.d/S25nfs-user-server
ln -s /etc/init.d/nfs-user-server /etc/rc.d/rc4.d/S25nfs-user-server
ln -s /etc/init.d/nfs-user-server /etc/rc.d/rc5.d/S25nfs-user-server
ln -s /etc/init.d/nfs-user-server /etc/rc.d/rc0.d/K25nfs-user-server
ln -s /etc/init.d/nfs-user-server /etc/rc.d/rc6.d/K25nfs-user-server

これで、玄箱の電源を入れなおせば、自動でNFS関連のデーモンが起動します。



電源を入れなおさずに、今すぐにNFSサーバを動かすには、以下のコマンドを実行します。

/etc/init.d/portmap start
/etc/init.d/nfs-common start
/etc/init.d/nfs-user-server start



■ FreeBSDをNFSクライアントにする



FreeBSDでは/etc/rc.conf

nfs_client_enable="YES"

と書いてあれば、FreeBSDマシンはNFSクライアントになれます。書かれていなければ、書いて、

/etc/rc.d/nfsclient

を実行すればOKなはずです。このシェルスクリプトを読んでも、とくに重要そうな処理はやっていないので、もしかすると、なんにもしなくても、NFSマウントはできるのかもしれません。



● 玄箱のNFSサーバの確認



玄箱がNFSサーバとして使えるようになっているかは、showmount -eコマンドで確認できます。



showmount -eは、FreeBSDでも玄箱でも実行できます。



FreeBSD # showmount -e 192.168.0.41
Exports list on 192.168.0.41:
/                                  192.168.0.0/255.255.255.0
/mnt                               192.168.0.0/255.255.255.0





root@KURO-BOX:/# showmount -e 192.168.0.41
Export list for 192.168.0.41:
/mnt 192.168.0.0/255.255.255.0
/    192.168.0.0/255.255.255.0



トラブル発生時は、rpcinfo -pでも、手がかりとなるいろいろな情報が得られます。



FreeBSD # rpcinfo -p 192.168.0.41
   program vers proto   port  service
    100000    2   tcp    111  rpcbind
    100000    2   udp    111  rpcbind
    100024    1   udp   1024  status
    100024    1   tcp   1024  status
    100003    2   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100005    1   udp    781  mountd
    100005    2   udp    781  mountd
    100005    1   tcp    784  mountd
    100005    2   tcp    784  mountd



● 玄箱をNFSマウント



「mount -t nfs 玄箱のIPアドレス:/パス」というコマンドでマウントできます。

FreeBSD# mount -t nfs 192.168.0.41:/mnt /mnt

これで、玄箱の/mntディレクトリが、FreeBSDの/mntディレクトリにマウントされます。別に両者が同じパス名である必要はないです。



うまくいかない場合、たとえば、こんな風になってしまう場合もありました。

FreeBSD# mount -t nfs 192.168.0.41:/mnt /mnt
[udp] 192.168.0.41:/mnt: RPCPROG_MNT: RPC: Timed out
(おなじメッセージが続く)

これの原因は、玄箱で名前引きができていないのが原因でした。たぶんNFSサーバが/etc/exportsで、アクセス許可をチェックするときに、IPアドレスから名前を引くはずなので、そこでうまくいっていなかったのでしょう。



名前引きが失敗していたのは、/etc/resolv.confファイルが原因でした。最初、玄箱をDHCPでIPアドレスを取得するようにして動かしていたときに、自動で/etc/resolv.confファイルが作成されていました。しかし、そこに指定されていたDNSサーバは、プロバイダのDNSサーバのアドレスで、そんなので192.168.0.???のようなプライベートネットワークアドレスがひけるわけがないので、タイムアウト処理か何かしていたみたいです。



とりあえず、玄箱では、/etc/resolv.confファイルは削除してしまいました。必要ならば、玄箱の/etc/hostsにかけばいいんじゃないでしょうか。ちなみに玄箱の/etc/nsswitch.confでは、

hosts:          files dns

となっていました。





● 使い終わったらアンマウントする



玄箱の電源を落とす前に、FreeBSDで、

umount /mnt

を実行してアンマウントします。そうしないと、いわゆるNFSがささった状態におちいります。

kernel: nfs server うんたら:/mnt: not responding

みたいな、メッセージを延々とみせられることになり、いくつかのコマンドが反応しなくなったり、いろいろ問題がおきます。



こうなってしまったら、もう一度玄箱の電源をいれるのがよいでしょう。



★ 玄箱がFreeBSDをNFSマウントする



今度は逆に、FreeBSDをNFSサーバにして、玄箱からNFSマウントしてみます。



■ FreeBSDをNFSサーバにする



たいていはおまじないで、/etc/rc.confにこんなのを書いてあります。

nfs_client_enable="YES"
nfs_server_enable="YES"
rpc_lockd_enable="YES"
rpc_statd_enable="YES"
rpcbind_enable="YES"

statd、lockdは、なくても動くし、ないと問題が起こる場合もあるし、あると問題がある場合もあります(笑)。NFSって、むずかしいですね。





rc.confを書き換えたあとは、できれば再起動したほうが安全だと思いますが、たぶん、

/etc/rc.d/rpcbind start
/etc/rc.d/nfsd start

を実行すれば、うまくいけるかもしれません。



● /etc/exportsファイルの作成



FreeBSDでも、/etc/exportsファイルを作成します。
書式は/etc/exportsファイルに例が載っているので、参考になるでしょう(わかりにくいかな?)。たとえば、こんなかんじ。

/home -alldirs -maproot=root 192.168.0.41

/etc/exportsファイルを書き換えたときは、おまじないとして、こんなのを実行します。

FreeBSD# kill -HUP `cat /var/run/mountd.pid `

これは、mountdプログラムに/etc/exportsファイルを再読み込みさせるためのおまじないです。



■ 玄箱でNFSマウント



こんなかんじになります。



root@KURO-BOX:~# mount -t nfs 192.168.0.21:/home /home



192.168.0.21は、FreeBSDのIPアドレスです。



同様に、使い終わったらアンマウントしましょう。





☆ ☆ ☆ ☆ ☆ 



autofs、amdを使った方法は、また後日。





0 件のコメント:

コメントを投稿