MacFUSEが使いたかったが、使い物にならないので後継のfuse4xを使うのだ

ユーザランドで動作するファイルシステムの一実装、FUSEMac実装であるMacFUSEがある。が、これは誠に残念ながら近頃放置プレイのようで、Lionでは動作しない。どころか、まともにアンインストーラーが動作せず、まかり間違ってインストールしてしまった場合、findとgrepの良い練習になる。誠におファックである。
というわけで、Macfuseを使いたい場合は、後継プロジェクトを使うのが正解。今回私の場合はパッケージ管理ツールにhomebrewを用いて、「fuse4x」を導入した。なお、homebrewの導入法は今回解説しない。その他サイト(たとえばここ)とかを参照されたい。

導入法。

home brewにあるfuse4xは、brew installだけではインストールが完了しない。幾つかの追加作業が必要となる。
まずはbrewからコンパイル、インストール:

$ brew install fuse4x

次に、コンパイルされたfuse4xのカーネル拡張をコピーし、suidを立てる:

$ sudo cp -rfX /usr/local/Cellar/fuse4x-kext/0.8.13/Library/Extensions/fuse4x.kext /System/Library/Extensions
$ sudo chmod +s /System/Library/Extensions/fuse4x.kext/Support/load_fuse4x

最後に、カーネル拡張をロードする:

kextload /System/Library/Extensions/fuse4x.kext/

以上で完了である。

最後に

使用目的

FreeBSDにおけるnullfs、Linuxにおけるbindマウント(mount --bind)を使いたかったため。ディレクトリにディレクトリをマウントできるものである。
fuseで実装されたbindfsはここにある。OSX Lion + 今回のfuse4x-0.9.0でコンパイル及び動作することを確認した。

愚痴。

fuse4xのカーネル拡張が起動時に読み込まれず、カーネル拡張の設定ファイルが悪いのかとInfo.plistの編集をしたりあーだこーだやって、疲れたとき何となくfuse4x.kextディレクトリを吹っ飛ばしてコピーし直してみたら普通に動いた。ヒストリみても作業内容変わらないし、何が原因かわからない。普段の行いも良いはずだし、思い当たることは何も無い。MacFUSEの導入からアインインストールからのfuse4x導入まで含めて半日時間潰してしまった。悲しい。

参考