FreeBSD on VMware and file sharing
VMwareにはホストとゲストの間でファイル共有をする機能が付いている。FreeBSDのportsのemulators/open-vm-toolsは、この機能をサポートしようとしているが、現時点ではこの機能を使用するとカーネルがパニックする。したがって異なる手法でファイル共有をする必要がある。
ホストがWindowsである場合、一番手っ取り早い方法は、smbfsでmountする方法だ。しかしながらいくつかのハマりポイントがあるので、設定方法を記録する。
基本の設定方法
次のようなホストとゲストの関係を前提とする。
ホスト
ゲスト
- FreeBSD
- ユーザーはdensuke、このユーザーのログイングループもdensuke
まずは何はともあれ、mountできるかどうかをチェックする。
# mount_smbfs -E UTF-8:CP932 -I 192.168.152.1 //DENSUKE@WINHOST/Users /mnt/winhost
ここでmountに成功すれば、次のステップで自動的にマウントするよう設定し、必要なファイルが使いやすくなるよう/home/densuke以下にシンボリックリンクを張れば良い。mountできなかった場合の確認事項は後述する。
mountに成功した場合、次のステップで設定する。
- /etc/nsmb.confの追記
- /etc/fstabを修正
- その他
1. /etc/nsmb.confの追記
/etc/nsmb.confに次の内容を記入する。
[default] workgroup=WORKGROUP [WINHOST] addr=192.168.152.1 charsets=UTF-8:CP932 [WINHOST:DENSUKE] password=$$16a5a541227121b <-- 暗号化されたパスワード
暗号化されたパスワードは次のようにして作成できる。
% smbutil crypt 平文のパスワード
2. /etc/fstabの修正
この設定をして、/etc/fstabにマウントポイントを書く。
/etc/fstab
//DENSUKE@WINHOST/USERS /mnt/winhost smbfs rw 0 0
これでリブートした後も、自動的にmountされるようになる。自動的にmountした場合、日本語ファイル名の文字化けが起こると書いている人がいたが、特に問題なかった。
3. その他
このままmount_smbfsすると、ファイルのオーナーは/mnt/winhostのオーナーとグループとなる。なので、
# chown densuke:densuke /mnt/winhost
とすることで、/mnt/winhostにmountされたファイルシステムはFreeBSDではオーナーはdensuke:densukeとなる。
その上で、WINHOSTでDENSUKEが利用しているGoogleドライブのフォルダを/home/densuke/Documents/Googleにシンボリックリンクを作成する。
% cd ~/Documents/ % ln -s /mnt/winhost/densuke/Google\ ドライブ ./Google
簡単にmountできなかった場合にチェックすること。
VMwareのネットワークの設定がブリッジの場合は、上の設定でうまく行く可能性が高い。うまく行かなかった場合、FreeBSDからWINHOSTが見えるかどうかをチェックする必要がある。次のコマンドでIPアドレスが引けない場合、見えていない。
% nmblookup WINHOST
NATである場合は、ホスト側からみたVMnetが識別されていないネットワークなので、WINHOSTは見えない。VMnetだけをプライベートネットワークにしたいが、その方法がわからない。そこでWindowsでローカルセキュリティポリシーで、識別されていないネットワークをプライベートネットワークに設定してしまう。この方法が良いとは思わないが、これで動く。
また、Windows 8.1のアカウントはMicrosoftアカウントなので、日本語のディレクトリが作られるため、使いにくい。アカウントをローカルで作ってアカウント名を英文字として、Microsoftアカウントを適用する必要がある。