OSXのFUSEとか、その周辺の話題

今更、FUSEに興味を持ったので色々調べてみる。どうも、FUSEに勢いがあったのは2008年くらいだろうか。

しかし、情報がほとんど海外の英語サイトばっかりで疲れるな。

MacFUSEが停滞して、OSXFUSEFUSE4Xに別れたけどどうやらOSXFUSEが主流になってる模様。

 

spotlightFSやiTunesFSに人気があるみたいだが。独自ファイルシステムをどうやって作るのか調べてみる。

 

fuse: FUSE API documentation

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の方が解説資料が多い様なのでそっちをみる。

 

Wiki Pages - 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.miTunesFileSystem.mが中心クラスだが、前述のHelloFSとはかなり毛色が違っている感じがする。OSXFUSE(のiTunesFS)の場合、FUSEObjectFileSystemクラスを継承している。

なんだろうな、この違いは。これ以上は、Xcodeプロジェクトをダウンロードして追っかけないと辛い。

まあ、iTunes Music Library.xmlを読み込んで処理しているのは分かったから、Stackroomあたりにも転用しやすいな。

 

最後に気になるのが、独自ファイルシステム作ってもspotlightで検索できなきゃ意味ないじゃん。といった疑問だが、なんとか出来るらしいな。もちろん確証はないが。

 

https://github.com/osxfuse/osxfuse/wiki/FAQ#45-i-am-trying-to-access-a-fuse-for-os-x-volume-but-i-keep-getting-accesspermission-denied-errors-i-am-doing-this-as-root---what-is-going-on-is-not-everything-allowed-as-root

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

 

 

 

 

参考サイト

 

FUSEによる独自ファイルシステムの開発

http://www.ibm.com/developerworks/jp/linux/library/l-fuse/

LinuxによるOpenAFSファイルシステム作成例の記事が載っています。

 

fuse - 詳解ファイルシステム

http://seesaawiki.jp/w/linuxfs/d/fuse

→各種ファイルシステムの案内。

 

OSXFUSEとSSHFSでリモート資源を透過的にSFTP接続する - drk7jp

http://www.drk7.jp/MT/archives/001974.html

OSXでのOSXFUSE導入手順の説明。

 

Home - FUSE for OS X

http://osxfuse.github.io/

→OSXFUSEのHP

 

FUSE for OS X · GitHub

https://github.com/osxfuse

→OSXFUSEのソースコード関連

 

Fuse4X – The Easiest and Fastest Way to Create File Systems for Mac OS X

http://fuse4x.github.io/

→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