fuse-mruby is yet another fuse wrapper with mruby

本記事は、mruby advent calendar 2016の25日目の記事です。

今日は、こそこそ作っていた fuse-mruby が、なんとなく面白いおもちゃにはなってきたので、せっかくということで紹介したいと思います。
おや。どこかで聞いた話のようだ!

mrubyとFUSEを用いて、ファイルシステムをまるっと作る、というところを目指しています。

まだ試作品レベルで、configureもRakefileもありません。

ビルド手順はざっくり以下の通り。
お好きな設定でmrubyのビルドを行っていただき同梱の build.sh 内のパスを適宜修正後に走らせると、buildディレクトリに fuse-mruby という実行ファイルが生成されます。

続いて実際の使い方。

まずはじめにマウント先のディレクトリを作ってください。例として /tmp/hoge としましょう。
次にマウント。

1
2
# mkdir /tmp/hoge
# ./build/fuse-mruby /tmp/hoge

実行すると、即座にシェルのプロンプトが帰ってきますが実際にはバックグラウンドで実行されています。

1
2
3
4
[rhykw@desktop fuse-mruby]$ grep -F fuse-mruby /proc/mounts
fuse-mruby /tmp/hoge fuse.fuse-mruby rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
[rhykw@desktop fuse-mruby]$ ps auxwwf|grep "fuse\-mruby"
rhykw 5188 0.0 0.1 163376 1780 ? Ssl 11:43 0:00 ./build/fuse-mruby /tmp/hoge

現時点での実装では、ファイルシステムの振る舞いを記載するファイルのパスがカレントディレクトリの fuse-mruby.rb に固定されています。
配布物のままの状態で実行するとマウント先に以下のようなディレクトリ・ファイルが現れます。

1
2
3
4
5
6
7
8
9
[rhykw@desktop fuse-mruby]$ tree -aC /tmp/hoge
/tmp/hoge
├── .qmail
└── Maildir
├── cur
├── new
└── tmp

4 directories, 1 file

通常のファイルの読み書きのほかsymlinkも(たぶん)使えるのでいろいろ触ってみてください。

fuse-mrubyの実装にあたってはlibfuseのドキュメントのほか php-fuse を参考にさせていただいた部分が大きいです。

このエントリーをはてなブックマークに追加