玄箱を有効利用するために、最初に何をしようか・・・と考えて、玄箱で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 件のコメント:
コメントを投稿