wdfsとFUSEを使ったファイル共有

 ハードディスクの中にあるさまざまなデータの同期を気にせずに、デスクトップ、ノート、テスト機と複数のマシンを絶えず渡り歩く私は、ドキュメントを一元管理してどこからでもアクセスできるようにしている。そんな私が使っているのが wdfs というFUSE用のWebDAVファイルシステムだ。

 ファイルを1つの場所にまとめておけば、同期や差し替えについて心配せずに済む。変更したファイルを間違って上書きしてしまうこともなく、バックアップも1か所だけ取ればよい。

 WebDAVとは、HTTPを拡張して分散オーサリングおよびバージョン管理(Distributed Authoring and Versioning)を可能にしたものだ。WebDAVは、Apacheシステムでは通常mod_davで実装され、多くのWebホスティング会社からオプションとして提供されているので、独自のWebDAVサーバを簡単に実行できる。HTTPS上で動作し、セキュリティ性もあるが、他のサーバアカウントや.htaccessとは別にユーザ名とパスワードの組み合わせをユーザ単位で設定する必要がある。そのため、マシンごとに別のWebDAVアカウントを設定してファイルの変更履歴をきめ細かく追跡することもできる。

 なお、この記事ではWebDAVサーバの設定方法には触れない。参考になる情報はもう十分に揃っているし、wdfsのすばらしさはFUSEモジュールによってそうした細かい部分が抽象化される点にあるからだ。設定を終えたWebDAVサーバは、wdfsを使ってLinuxファイルシステムに直接マウントできる(マシン起動時の自動マウントも可能)。

FUSEとwsdsの設定

 wdfsを利用するには、まずFUSEをインストールする必要がある。このところFUSEは広い範囲でサポートされており、ほとんどのLinuxディストリビューションに正式パッケージが用意されているはずだ。これまでFUSEを使ったことがない場合は、適切に設定を行う必要がある。

 FUSEでは、「fuse」グループによってFUSEのマウント/アンマウントが許可されているユーザを識別する。そのため、「sudo usermod -a -G fuse <ユーザ名> 」を実行して自分のアカウントをfuseグループに追加しておく。続いて「sudo modprobe fuse」でFUSEのカーネルモジュールをロードする。

 使っているLinuxディストリビューションにwdfsパッケージが用意されていなければ、プロジェクトのWebサイトから最新のtarballを入手する。またFUSE以外に、専用の依存関係モジュールとしてWebDAVクライアントライブラリneonが必要になる。wdfsのコンパイルとインストールは「./configure; make; sudo make install」という基本的な手順で行えるはずだ。

 wdfsのコンパイルとインストール、それにFUSEモジュールのロードが済んだら、WebDAVのリモート共有フォルダのマウント先となるローカルディレクトリを作成する。基本的なマウントコマンドは「wdfs http://mywebdavserver.biz/foo ~/thelocalmountpoint -o username=<ユーザ名> -o password=<パスワード> 」のようになる。Webブラウザの場合と同様、リモートの共有ディレクトリでHTTPSを使用していれば「https://」形式のURLも使える。また、サーバがHTTPまたはHTTPSの標準ポートで稼働していない場合はコロンの後ろにポート番号を追加すればよい。

 wdfsを共同編集作業に使う場合は、先ほどのコマンドに「-o locking=n 」(nは0、1、2、3のいずれか)を追記すれば、共有フォルダのファイルロックを有効にできる。デフォルトでは、ファイルロックを行わないモード0になっている。モード1は最も単純で、ファイルを開くとロックされ、閉じるとロックが解除される。モード2ではファイルに書き込んでから閉じるまでがロック状態になり、モード3では共有フォルダがアンマウントされるか指定した時間が過ぎるまでファイルがロックされる。このタイムアウトの値はデフォルトで5分になっているが「-o locking_timeout=<秒数> 」というオプションを使って変更できる。

 Subversionユーザであれば、「-o svn_mode」オプションの追加により、ファイルの改訂箇所の参照に使われる独特のSubversionモードを有効にできる。そのほか、リモートサイトのSSL証明書を自動的に受け入れる「-o accept_sslcert」や、リモートWebサーバによるリダイレクトを防ぐ「-o no_redirect」というオプションもある。どちらも、スクリプトを書いてユーザの操作なしにwdfsの処理を実行する場合に役立つ。

 wdfsによる手動マウントも悪くないが、いつも同じ共有フォルダを使うつもりなら、自動マウントにするとよいだろう。そのためには「/etc/fstab」ファイルに「wdfs#http://mywebdavserver.biz/foo /mnt/thelocalmountpoint fuse users 0 0」という1行を追加するだけで済む。また、この自動マウント用fstabエントリの「users」のすぐ後ろに、カンマ区切りのwdfsオプション(「username=nate,password=natessecretpassword,acceptsslcertなど)を指定することもできる。

その他のツールとの比較

 wdfsを起動して実行すると、ローカルのファイルシステムとほぼ同じように共有フォルダが使える。唯一の目立った違いは書き込みが遅くなることだが、これはどんなWebDAV実装やリモートファイルシステムでも同じだ。

 私がほかのWebDAV手法よりもwdfsを好む理由の1つに、細かな設定の多くを気にせずに使えることが挙げられる。ファイルマネージャのGNOMEやKDEでもWebDAV共有フォルダをマウントできるが、そうしたGUIツールを使うには、キーボードとログイン操作が必要になる。fstabを利用してwdfsでWebDAV共有フォルダをマウントすれば、どちらも不要だ。

 cadaver、nd、(Emacsユーザ向けの)eldavといったコマンドライン形式のWebDAVツールもある。WebDAVをたまにしか使わない場合は、こうしたクライアントツールが有用だろう。また、fusedavというWebDAVを扱った古いFUSEモジュールもある。wdfsで想定外の問題が生じた場合には、こちらを使えばよい。

 数年前、FUSEを利用した別のリモートファイルシステムsshfsについて記事を書いたことがある。特にSSLによる暗号化を利用してWebDAVサーバを稼働させる場合には、sshfsでもwdfsと同様の利点の多くが得られる。一方、wdfsには、幅広い商用Webホスティングサービスと連携できるという利点がある。もちろん、優れたWebホストはどれもSSHアクセスに対応しているが、WebDAVを利用すれば、メインアカウントとは別のユーザ名とパスワードを使って共有フォルダを管理できるほか、アカウント空間の特定のサブディレクトリだけを共有できる。セキュリティの観点からは、こうした運用ができたほうが好ましい。また、万一の際には、MacやWindowsマシンからも簡単にWebDAV共有フォルダにアクセスできる。

 gobbyや登場したばかりのAbiCollabなど、アプリケーションレベルのリモート編集ツールもある。これらのツールは、複数のユーザによる質の高い共同編集に使えるが、基本的なテキストおよび文書処理用に作られているため、その他の形式のドキュメントには対応していない。

 ローカルサーバ上の必要なファイルをすべてNFSで共有すれば、家じゅうのデスクトップPCとノートPCからアクセスできるが、外出先からは利用できない。また、最近のLinuxデスクトップ環境はいずれもGUI形式のファイルマネージャでWebDAVをサポートしているが、ファイルシステム自体でWebDAVが利用できれば、より多くのアプリケーションが使え、シェルやスクリプトによるアクセスができて、管理もずっと楽になる。複数のマシンでファイルを同期させるのにうんざりしているなら、WebDAVとwdfsを使うことで面倒な手間を減らせるはずだ。

Linux.com 原文(2008年9月3日)