今更、FUSEに興味を持ったので色々調べてみる。どうも、FUSEに勢いがあったのは2008年くらいだろうか。
しかし、情報がほとんど海外の英語サイトばっかりで疲れるな。
MacFUSEが停滞して、OSXFUSEとFUSE4Xに別れたけどどうやらOSXFUSEが主流になってる模様。
spotlightFSやiTunesFSに人気があるみたいだが。独自ファイルシステムをどうやって作るのか調べてみる。
http://fuse.sourceforge.net/doxygen/index.html
上が、FUSE本家のAPI説明。いきなり死にそうな高度な内容となっているが、下にあるサンプルのhello.cは非常に簡単になっている。
fuse: /home/mszeredi/fuse/example/hello.c File Reference
http://fuse.sourceforge.net/doxygen/hello_8c.html
処理の流れは、まずKernelと通信するためにfuse_main()を呼び出す。このとき、自身が持っている関数をfuse_operations構造体に設定して返す。helloc.cの場合、四つしか無いようだ。あとは、その関数を書くだけ。readonlyのファイルシステムなら比較的簡単に作れそうだ。
hello.cの一部抜粋
static struct fuse_operations hello_oper = {
.getattr = hello_getattr,
.readdir = hello_readdir,
.open = hello_open,
.read = hello_read,
};
int main(int argc, char *argv[])
{
return fuse_main(argc, argv, &hello_oper, NULL);
}
OSXFUSEは、OSX独自の処理がObjective-Cでサポートされている。カスタムアイコンとか拡張属性とか。前身のMacFUSEの方が解説資料が多い様なのでそっちをみる。
https://code.google.com/p/macfuse/w/list
DEVELOPER_OBJC_HOWTO - macfuse - Writing a File System in Objective-C Using MacFUSE.framework (略)
https://code.google.com/p/macfuse/wiki/DEVELOPER_OBJC_HOWTO
→YTFS(youtubeFS)での作成例
filesystems/filesystems-objc/HelloFS at master · osxfuse/filesystems · GitHub
https://github.com/osxfuse/filesystems/tree/master/filesystems-objc/HelloFS
→OSXFUSEでのHelloFSの作成例
Objective-Cの場合、本家FUSEとは大分異なる。自身はcocoaのapp形式で作成し、これが作成したGMUserFileSystemインスタンスにマウント要求を行う事で処理が開始される(たぶん、まだOSXFUSEインストールしてないから確信は無い)。大半はテンプレート的な処理なので、作るならコピペでいいか。
さて、下が本命のiTunesFSのソースコード。
[iTunesFS] Index of /branches/OSXFUSE
http://svn.mulle-kybernetik.com/viewvc.cgi/iTunesFS/branches/OSXFUSE/?diff_format=l
iTunesLibrary.mとiTunesFileSystem.mが中心クラスだが、前述のHelloFSとはかなり毛色が違っている感じがする。OSXFUSE(のiTunesFS)の場合、FUSEObjectFileSystemクラスを継承している。
なんだろうな、この違いは。これ以上は、Xcodeプロジェクトをダウンロードして追っかけないと辛い。
まあ、iTunes Music Library.xmlを読み込んで処理しているのは分かったから、Stackroomあたりにも転用しやすいな。
最後に気になるのが、独自ファイルシステム作ってもspotlightで検索できなきゃ意味ないじゃん。といった疑問だが、なんとか出来るらしいな。もちろん確証はないが。
https://github.com/osxfuse/osxfuse/wiki/FAQ#46-can-i-enable-spotlight-on-a-fuse-for-os-x-file-system
Spotlight problem - Mountain Lion, OSXFUSE 2.54, BC 1.1 (8c6606a) « Boxcryptor Forums
https://forums.boxcryptor.com/topic/spotlight-problem-mountain-lion-osxfuse-254-bc-11-8c6606a
参考サイト
http://www.ibm.com/developerworks/jp/linux/library/l-fuse/
→LinuxによるOpenAFSのファイルシステム作成例の記事が載っています。
http://seesaawiki.jp/w/linuxfs/d/fuse
→各種ファイルシステムの案内。
OSXFUSEとSSHFSでリモート資源を透過的にSFTP接続する - drk7jp
http://www.drk7.jp/MT/archives/001974.html
→OSXでのOSXFUSE導入手順の説明。
→OSXFUSEのHP
→OSXFUSEのソースコード関連
Fuse4X – The Easiest and Fastest Way to Create File Systems for Mac OS X
→Fuse4XのHP
Network Autonomy: 自分で作るネットワークストレージ (2)
http://networkautonomy.blogspot.jp/2009/11/2.html
→rcbfsの作成記事
[Mac OS X] Spotlightのインデックスを制御する(mdutil) - Life with IT
http://l-w-i.net/t/macosx/spotlight_001.txt