Plan 9からMac OS Xのファイルファイルシステムにアクセスする方法
普段はVMWare Fusion上でPlan 9を動かしているのだけど、Plan 9側からMac OS X側のファイルシステムにアクセスしたいことがままある。VMWareの共有フォルダ機能がPlan 9に対応しているわけもないので、u9fsをMac OS X上で動かしてみよう。 なお、Plan 9とMac OS X上に同一アカウントが存在すると仮定している。
u9fs自体はPlan 9のディストリビューションに含まれている。
$ cp -r /Volume/Plan 9/sys/src/cmd/unix/u9fs .
$ cd u9fs
$ make
$ sudo cp u9fs /usr/local/sbin
u9fsを起動するためにlaunchdの設定が必要である。/Library/LaunchDaemons/com.bell-labs.plan9.u9fs.plistというplistファイルを新規作成する。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Disabled</key> <false/> <key>Label</key> <string>com.bell-labs.plan9.u9fs</string> <key>ProgramArguments</key> <array> <string>/usr/local/sbin/u9fs</string> <string>-l</string> <string>/var/log/u9fs.log</string> <string>-a</string> <string>p9any</string> <string>-A</string> <string>/Users/oraccha/u9fs.key</string> </array> <key>UserName</key> <string>root</string> <key>inetdCompatibility</key> <dict> <key>Wait</key> <false/> </dict> <key>Sockets</key> <dict> <key>Listeners</key> <dict> <key>Bonjour</key> <false/> <key>SockServiceName</key> <integer>564</integer> </dict> </dict> </dict> </plist>
パラメータ"-A /Users/oraccha/u9fs.key"を指定しない場合は、/etc/u9fs.keyが読み込まれる。このファイルは3行からなり、順にパスワード、ユーザ名、ドメイン名を表している。
password oraccha macair
これでMac OS X側の準備ができたのでplistファイルをロードする。
$ sudo launchctl load /Library/LaunchDaemons/com.bell-labs.plan9.u9fs.plist
Plan 9側では、まずMac OS Xのネットワーク情報を/lib/ndb/localに登録しておこう。IPアドレスが192.168.182.1であれば、次のような1行を追加する。"ip/ping osx"でネットワークの疎通を確認しておこう。
ip=192.168.182.1 sys=osx dom=macair
あとは9fsを実行するだけである。成功すれば/n/osx以下にMac OS Xのファイルシステムがマウントされる。
% 9fs osx
post...!Adding key: dom=macair proto=p9sk1
user[oraccha]:
password:
!
$home/lib/profileに次のように記述しておけば、起動時にパスワードがfactotumに登録されるので、9fs実行時にパスワードを入力する手間が省ける。
echo 'key proto=p9sk1 dom=macair user=oraccha !password=password' > /mnt/factotum/ctl
また、/n/osxはMac OS Xの/になるので、次のようなショートカットを作っておいてもいいだろう。
% mkdir /mnt/shared
% bind /n/osx/Users/oraccha/Playround /mnt/shared
これとは逆に9Pプロトコルを介して、Mac OS XからPlan 9のファイルシステムアクセスする方法がある。仕掛けとしてはFUSE(Mac OS XにもMacFUSEが存在する)を利用する。この9pfuseはPlan9portに含まれており、有澤先生の「MacFUSE 9P Bridge」に詳しい。しかし使えることは使えるが、認証をうまく動かすことができなかった。9fsを実行したときにfactotumからパスワードを聞かれないのだ。ということで今のところ9pfuseは使っていない。