Plan 9からMac OS Xのファイルファイルシステムにアクセスする方法

普段はVMWare Fusion上でPlan 9を動かしているのだけど、Plan 9側からMac OS X側のファイルシステムにアクセスしたいことがままある。VMWareの共有フォルダ機能がPlan 9に対応しているわけもないので、u9fsをMac OS X上で動かしてみよう。 なお、Plan 9Mac 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/osxMac OS Xの/になるので、次のようなショートカットを作っておいてもいいだろう。

% mkdir /mnt/shared
% bind /n/osx/Users/oraccha/Playround /mnt/shared

これとは逆に9Pプロトコルを介して、Mac OS XからPlan 9ファイルシステムアクセスする方法がある。仕掛けとしてはFUSEMac OS XにもMacFUSEが存在する)を利用する。この9pfuseはPlan9portに含まれており、有澤先生の「MacFUSE 9P Bridge」に詳しい。しかし使えることは使えるが、認証をうまく動かすことができなかった。9fsを実行したときにfactotumからパスワードを聞かれないのだ。ということで今のところ9pfuseは使っていない。