|
GmailFS は Google の Web メールサービス Gmail のディスク領域を Linux のファイルシステムとしてマウント、操作可能にしてしまうプログラムです。 こうゆう冗談は本来のカーネルモジュールとして書くことも理論的には可能ですが、そのために費す労力は冗談どころでは済まないため、実際にやる人はまずいません。しかし Linux には FUSE (Filesystem in USErspace) というカーネルモジュールがありまして、これを使うとファイルシステムがユーザランドのプログラムとして書けてしまうんです。FUSE のインターフェースに沿ってデータを入出力するように作れば、それがどんな冗談であってもファイルシステムとしてちゃんと認識され動作します。 GmailFS は Python を使って書かれています。作者の Richard Jones さんはこれを2、3日で書き上げたみたいです。どうやって2、3日で Web メールをファイルシステムに仕立てたのか知りたい人はぜひ Python をマスターしましょう。 以下に Gmail のインストールと使い方を解説します。なお Python はバージョン 2.3.x を使う必要があります。手元の Linux に古いバージョンしか入っていない場合は システム標準の Python とは別のバージョンをインストールする方法 を参考にインストールしてください。あ、それから Gmail のアカウントはもちろん必要です。 ダウンロードするプログラム
FUSE のインストール普通に configure して make するだけです。configure の途中で表示されるカーネルのソースのバージョンが使用しているカーネルと一致していることを確認してください。 # cd /usr/local/src/fuse-1.3 # ./configure hecking kernel source directory... /lib/modules/2.6.8-1.521/build checking kernel source version... 2.6.8-1.521 # make # make install Python FUSE bindings のインストールFUSE の Python ラッパーモジュールです。setup.py を使ってインストールします。 # cd /usr/local/src/fuse-python # python setup.py install libgmail のインストールファイルを直接 Python のモジュールディレクトリにコピーします。 # cd /usr/local/src/libgmail-0.0.8 # cp libgmail.py constants.py /usr/lib/python2.3/site-packages GmailFS のインストールPython のプログラムを /usr/local/bin と /sbin にそれぞれコピーします。 # cd /usr/local/src/gmailfs # cp gmailfs.py /usr/local/bin # cp mount.gmailfs /sbin マウントしてみる次のようにオプションを付け、スーパーユーザ権限で mount を実行します。 # mount -t gmailfs -o noauto,username=yasusii,password=xxxxxxxx,\ fsname=zOIRRa /usr/local/bin/gmailfs.py /mnt # df Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/hda2 38898796 13038436 23884368 36% / /dev/hda1 101086 12902 82965 14% /boot none 124124 0 124124 0% /dev/shm gmailfs 1024000 0 1024000 0% /mnt うまくマウントできたら、ファイルをコピーしたり、ディレクトリを掘ったり、シンボリックリンクを作成したり好きにしてください。実行パーミッションを付けて gmailfs 上に置いたプログラムを直接実行することも可能です。また umount /mnt を実行するとマウントは解除されます。 一般ユーザによるマウントsudo を使ってマウントする方法のほか、/etc/fstab に user オプションを追加してマウントの許可を与えることも可能です。 ただしいずれの場合も、すべてのファイルの uid、gid がともに 0 となります。つまり一般ユーザが作成、コピーしたファイルが自動的に root 所有のファイルとなってしまいます。このへん詳しく調べてないのですが、どうも FUSE 側が uid, gid のマッピングにまだ対応していないみたい(つか、セキュリティ的に対応される見込みなし?)。 複数ユーザが使用するマシンで一般ユーザによるマウントを許可すると致命的なセキュリティホールとなるので注意してください。 sudo を使わない方法は、まず /sbin/mount.gmailfs 76行目の fusermount 実行部分から -x オプションを削除します。
os.system("fusermount -n gmailfs -l -c -x %s %s %s %s" % (
mountpoint, pypath, mountpoint, odata))
さらに /etc/fstab に次のようなエントリを追加することで一般ユーザ権限でのマウントが可能になります。マウントポイントはマウントを実行するユーザが所有するディレクトリにしておく必要があります。
仕組みについてちょっとだけ勘違いする人がいるといけないので念のため書いておきます。Gmail 自体は単なる Web メールですから HTTP 経由でメールを送信したり閲覧するためのインターフェースしか用意されていません。GmaiFS が Gmail のディスクに直接アクセスできるわけではありません。 GmailFS はユーザによるファイル操作をメールの送信、閲覧、削除(Trash への移動)をおこなう HTTP リクエストに変換しているだけです。早い話、ファイルを1個コピーするとその情報を記述したメールが自分あてに送られるわけです。はっきり言ってアホですが、普通アホと呼ばれるようなことを真剣に追求するのが Hack というものです。 ディスク情報を記述したメールは次のような3本立てになっています。
ファイルやディレクトリを作成すると1番と2番のメールが作成した数だけ送信されます。通常ファイルの場合のみ3番のメールも送信されます。 普通の UNIX ファイルシステムとは違い、ディレクトリは「i ノードとファイル名の対応表を実体として持つファイル」にはなっていません。2番のメールはファイル毎に独立しています。たとえば特定ディレクトリにあるファイルの一覧を得る場合、2番のメールのサブジェクト・パターンを持ちかつ path の値がマッチするものを探し出すことになります。ディレクトリの親子関係を自力で辿るより Gmail の検索機能を使ってマッチするものを探す方が早いのでこうゆう構造になってるんでしょう。 上記処理に該当する部分はこんなかんじ。
folder = _getMessagesByQuery(
self.ga,'subject:path=__startpath__'+fspath+'__endpath__')
最終更新 2004-09-13 14:17:52 |
GmailFS は Google の Web メールサービス Gmail のディスク領域を Linux のファイルシステムとしてマウント、操作可能にしてしまうプログラムです。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
© 2004-2010, Yasushi Iwata