ファイルサーバーとiBookをNFSでつなげてみる

UNIX同士でファイル共有するスタンダードな方法である、NFSによる接続に挑戦してみました。今まではファイルサーバーの文字コードがEUCで、MacOSXがUTF-8だったので、たぶん文字コードの違いによる問題が発生するんじゃないかと試さずにいました。
このたびサーバーのOSを、文字コードにUTF-8を使うFedora Core 1Fedora JP Project)にアップデートしたので、これは試してみなければ!となったわけです。

Sambaを介したファイル共有が最近うまくいってないので、方式を変えればうまくいくんじゃないだろうかという期待もあります。

結論から言えば、大成功でした。普通に共有できるというのがこんなに気持ちの良いものかと、あらためてファイルを共有できることのありがたさを感じました。

終わってみればたいした作業ではないのですが、初心者の私には一日がかりの内容でしたので、メモとしてここに書いておきます。

Fedora Core 1がサーバーになり、iBookがクライアントになります。まずはサーバーの設定から。Linux JF ProjectLinux NFS HOWTOを参考にしました。また、/etc/exportsの設定の詳細はこちら
Linux NFS HOWTOの通りにやってサーバーの準備はOK。たた、/etc/exportsのmap_static指定は使用できませんでした。なんででしょう?これ、リナザウからNFSでつなげようとしたときに使いたかったのですが・・・
ちなみに/etc/exportsはこんなかんじ。
/home/common 192.168.0.*(rw,root_squash,sync)
/home/commonはSambaを使ってWindows機向けに公開している共有フォルダです。
次はクライアントとなるiBookの設定です。これは、MYCOM PC WEBのコラム、OS X ハッキング!第12回14回あたりが参考になります。
設定はすべてNetInfoマネージャで行います。まず、IPアドレスのかわりにサーバー名で各種アクセスが出来るようにします。UNIXでいうところのhostsファイルへの登録ですね。しなくてもいいですが、IPアドレスをいちいち打たなくて良くなるので便利です。
machinesに新しく項目を作り、以下のようにします。
name サーバーの名前
ip_address サーバーのIPアドレス
この状態でターミナルを起動し、
ping さきほど登録したサーバー名
とします。これでpingが通れば、今の設定が正常に出来たということです。
続けて、NFSサーバーへ接続する試験をします。
sudo mount -t nfs -o rw,resvport,intr,hard サーバー名:/home/common share
/home/commonはサーバーの公開フォルダを指定します。shareにはクライアント側の空のフォルダを指定します(あらかじめ準備しておきます)。-oはオプション指定です。普通はこんな感じのオプション指定でいいと思います。
これで接続できればいいのですが、たぶんエラーが出てしまうことでしょう。実は、クライアント側のユーザーID、グループIDが、サーバー側に存在していないといけないのです。Fedora Core 1では、普通にユーザーを作成すればユーザーIDとグループIDはそれぞれ500になります。対するMacOSXではそれぞれ501になります。双方に一つずつしかユーザーを作成していない場合は、IDが一致しません。もしサーバー側に二つ目のユーザーがいるとすると、そのユーザーのアクセスとして扱われます。これはこれで問題です。
ちゃんと運用するためにはこれを一致させなければいけないのですが、とりあえずそれを無視して接続できるようにします。とにかく接続を成功させて、少なくともサーバー側の設定がOKであるというのを確認します。
サーバーの/etc/exportsをこのようにします。
/home/common 192.168.0.*(rw,all_squash,sync,anonuid=500,anongid=500)
all_squashとanonuid、anongidの指定で、NFSによるアクセスをすべて、ユーザーIDが500、グループIDが500のユーザーからのものとして置き換えるように設定しています。/usr/sbin/exportfs -raコマンドでこの変更を反映させれば、iBookからの先ほどのコマンドで、接続が成功するはずです。
成功した場合はメッセージも何も表示されません。ls shareとして、/home/commonの内容が表示されればOKです。以降shareフォルダーへのアクセスは、/home/commonへのアクセスと同じことになります。
うまくいったら、いったん接続を切ります。
sudo umount share
ここまでできたら、起動時に共有フォルダへ自動接続するための設定をします。再びNetInfoマネージャを起動し、/にmountsを作り、mountsの中にも新しく項目を作ります。中身はこんなかんじ。
name さっき設定したサーバー名:/home/common
vfstype nfs
opts rw,resvport,intr,net,hard
optsのnetは、Finderのネットワークからアクセスできるようにするための設定です。再起動をして、Finderのネットワークにサーバーが表示されればOKです。
でも、共有フォルダの中身を見ようとすると、アクセス権がどうのこうのといわれて見ることが出来ません。どうやら、Finderから見るためにはサーバーのIDとクライアントのIDがちゃんと一致していないといけないようなのです。NFSサーバーがアクセスを遮断しているわけではなく、Finderが勝手にアクセスできないと判断してしまっているようです。これではいくら/etc/exportsで設定をしても意味がありません。
残された手段は正攻法のみ。サーバー側かクライアント側、どちらかのIDを変更します。私の場合はサーバー側をいじると大仕事になってしまうので、iBookのユーザーIDを変更することにしました。ここからはかなり怖い作業です。失敗すると自分のファイルが見えなくなってしまいます。念のため、管理者アカウントをひとつ作っておくといいでしょう。
ユーザーIDの変更もNetInfoマネージャで作業します。変更前にNFSへの接続は切っておきます。自動接続した場合の切り方がわからないので、NetInfoマネージャから設定を削除し、再起動します。(ターミナルからps ax | grep autoとして、/usr/sbin/automount -f -m /Network -nslというののプロセスをkillすればいいかもしれません)
再起動したらNetInfoマネージャのusersのなかから自分のユーザー名をさがし、その中にあるユーザーIDを変更します。ついでにグループIDも変更できればいいのですが、ユーザーIDを変えてしまったせいで変更が出来ません。別の管理者アカウントから作業すれば一発で出来るのでしょうが。
つぎに、ターミナルに既存ファイルのユーザーIDを変更するコマンドを入力します。(¥はバックスラッシュです)
sudo find / -user 501 -exec chown 500 {} ¥;
グループIDも同時に変更できた場合は
sudo find / -user 501 -exec chown 500:500 {} ¥;
かなり時間がかかります。しばらく応答が無くなったように思えても、ひたする待ち続けます。このとき、共有フォルダに接続したままだと、そちらのファイルまで変更しようとしてしまいます。要注意です。
グループIDを同時に変更できなかった場合は、上記のコマンドを実行した後、ログインし直してNetInfoマネージャでグループIDを変更して
sudo find / -group 501 chown 500:500 {} ¥;
とします。先ほど同様にかなり時間がかかる作業ですから、別アカウントでログインし、ユーザーIDとともに変更した方が良いかもしれません。
これが出来たら再びNetInfoマネージャに自動接続の登録をして再起動します(再起動しなくても、sudo automount -m /Network -nslでいけるかも)。これで、Finderから無事にアクセスできるはずです。あとはサーバーの/etc/exportsを元に戻しておけば出来上がりです。
やってみたところ、信じられないほど快適にアクセスできます。今までのSamba経由の接続は何だったのかと思うほどです。かなり手順が多いですが、Sambaの設定よりはもしかしたら簡単かもしれません。一応、iBook側の設定はほとんどGUIで出来るようになってますし。分かりにくいですけど。IDの変更もGUIから出来れば楽なのですが。
それよりなにより、Finderがおかしな挙動をしなければ・・・
Finderの挙動から推察するに、サーバー側でIDのマッピングを行っても、Finderではアクセスできないような気がします。NISなどを用いれば良いんでしょうか。さすがにこれ以上は手間がかかりすぎてチャレンジできませんです。
また、サーバーが認識できない状況で(ネットワークにつながっていないとか)共有フォルダへアクセスしようとすると、しばらく沈黙した後に、接続を解除するか聞いてきます。ここで解除しないと、Finderを強制終了しなければならなくなります。ちゃんと解除しておけば、サーバーが再び認識できるようになったときに共有フォルダへアクセスできるようになります。
もし解除せず、Finderを強制終了したりすると、再起動するか、automount -m /Network -nslとして、さらにそれのプロセスをkillしてあげないと共有フォルダが見えなくなっていまいます。このへんの資料って詳しいものが見つけられなかったので、ほんとうにこれで良いのか分かりませんけど。再起動が一番確実です。
このような、認識不能に陥った後の再接続などちょっと不明な点もありますが、それを差し引いても快適な環境です。いいですね、これ。ついつい意味もなくフォルダを開いてしまいます。

コメント

zenback

このブログの人気の投稿

夢のようだ・・・

アップルのソフトウェア・アップデート画面の用語のわかりづらさはなんとかならないものか

DuraSpeedとかHuaweiの電源管理とか、やめてくれ