DebianにFUSE・FuseFSを入れるまで
自分の手元のDebianでFUSEのRubyバインドであるFuseFSを使いたくなったため、ココにメモ。んなに難しくなかった。
この記事ではrootが、FuseFSのサンプルを動かせるようになるまでをつらつら書いております。
環境
とりあえず環境を示しておく。最近Debianを使い出したので新しいDebian。(日本語ガッ!
# uname -a Linux debian 2.6.18-5-686 #1 SMP Wed Oct 3 00:12:50 UTC 2007 i686 GNU/Linux # whoami root # pwd /root
自分が行なった手順
動きさえすればいいという方はココを飛ばして、下のまとめへ
aptitudeという便利なものがあるのでそれでFuseFSを入れれば終わりじゃないか?と推測・実行
# aptitude install libfusefs-ruby
・・・・・・・
・・(イロイロ)
・・・・・・・
んで付いてくるサンプルでも動かしてテストしてみましょう。
# cd /usr/share/doc/libfusefs-ruby1.8/exsamples # ls # ruby hello.rb mnt demo.rb dictfs.rb hello.rb openurifs.rb railsfs.rb sqlfs.rb yamlfs.rb #
それぞれのファイルで、1つのサンプルになっております。それぞれどんなサンプルかは以前記事で書いたので参照していただけると喜びます(僕が。
当然このままでは上手く行きません。(でないとこんな記事にしません)
# mkdir mnt # マウント先のディレクトリを用意 # ls mnt (何も無い) # ruby hello.rb mnt fuse: failed to exec fusermount: No such file or directory /usr/lib/ruby/1.8/fusefs.rb:13:in `for_fd': no implicit conversion from nil to integer (TypeError) from /usr/lib/ruby/1.8/fusefs.rb:13:in `run' from hello.rb:20
FUSEを使ったプログラムをマウントするためにはfusermountってのが必要なんですね。これは"fuse-utils"ってパッケージの中に入ってます。
# aptitude install fuse-utils # ruby hello.rb mnt fusermount: failed to open /dev/fuse: No such file or directory /usr/lib/ruby/1.8/fusefs.rb:13:in `for_fd': no implicit conversion from nil to integer (TypeError) from /usr/lib/ruby/1.8/fusefs.rb:13:in `run' from hello.rb:20
まだ出ます。これは、、、、実はよく理屈が分かっていませんが、fuseがモジュールとして読み込まれていない。との事なので。。。
# modprobe fuse # ruby hello.rb mnt (プロンプトが返ってこない) (ctrl+cでプロセスを中断) # ruby hello.rb mnt & # ls mnt hello.txt # 何も無いはずのmntの中にテキストファイルががが! # cat mnt/hello.txt Hello, World! #
といった感じ。
アンマウントする時は。。。
# fg (プロンプトが返ってこない) (ctrl+cでプロセスを中断) #
でかまわない。
まとめると
インストールからサンプルの起動の流れを書くと。。。
# aptitude install libfusefs-ruby fuse-utils # modprobe fuse # cd /usr/share/doc/libfusefs-ruby1.8/exsamples/ # mkdir mnt # ruby hello.rb mnt &
だろか。
問題・不満
- /dev/fuse を自動で作ってくれない(fuse-utilsのドキュメントをみると。。。仕様っぽい?)
- 一般ユーザはサンプルプログラム使えない(アドホックな解法はこちら)