木曜日, 6 4 月 2006

WebDAVでファイル共有 この記事(WebDAVでファイル共有)を「はてなブックマーク」に追加 この記事をクリップ! この記事(WebDAVでファイル共有)を「del.icio.us」に追加

« rcorder | Main | 画像→HTML変換ツール »
同じネットワーク内でファイルを共有する場合
個々のPCでフォルダを公開するかSambaなどのファイルサーバを使えばいいけど
共有したい相手が離れたネットワークにいる場合はこの方法は使えない。
こういう場合はWebDAVを使うと簡単便利です。
WebDAVはWebサーバのプロトコルを拡張しファイル共有を行えるようにしたもので
Webサーバにアクセスできる環境であれば問題なく使えるのでネットワークが離れていても大丈夫。
今回apache2.0系に設定する機会があったのでそのときの備忘録を書いておきます。

まずはhttpdのインストールから。
$ ./configure --enable-module=so --enable-dav
$ make
# make install
これで一応インストールは完了で使えるようにはなるけど、このままだと日本語名のファイルを置いた場合に
ファイル名が文字化けしてしまうためmod_encodingを別途インストールする。

まずWebDAV Resources JPから mod_encoding-20021209.tar.gzmod_encoding.c.apache2.20040616を落としてくる。
で、mod_encoding-20021209.tar.gzを展開後、中のmod_encoding.cをmod_encoding.c.apache2.20040616と差し替える。
$ tar zxvf mod_encoding-20021209.tar.gz
$ cp mod_encoding.c.apache2.20040616 mod_encoding-20021209/mod_encoding.c
次にアーカイブに同梱されているiconv_hookライブラリをコンパイル、インストールする。
$ cd mod_encoding-20021209/lib
$ ./configure
$ make
# make install
その後、mod_encodingのコンパイル、インストール。
$ cd .
$ ./configure --with-apxs=/usr/local/apache2/bin/apxs
$ make
# make install
このインストール時に
cp: cannot stat `mod_encoding.so': No such file or directory
とかエラーが出る場合は手動でmod_encoding.soファイルを作ります。
$ gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook
# make install
これでインストールは完了。
次にhttpd.confをWebDAVが使用できるように書き換える。
LoadModule encoding_module  modules/mod_encoding.so

<IfModule mod_encoding.c>
  EncodingEngine    on
  NormalizeUsername on
  SetServerEncoding     UTF-8
  DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
  AddClientEncoding "cadaver/" EUC-JP
</IfModule>

DavLockDB /usr/local/apache2/logs/DavLock
<Directory "/usr/local/apache2/htdocs/webdav">
  Dav on
</Directory>
これでWindowsの[マイネットワーク]→[ネットワークプレースの追加]で
http://xxx.xxx.xxx.xxx/webdav/を指定してやると共有フォルダが見られるようになります。

でも最初この設定でファイルを置いてみようとすると
[error] The locks could not be queried for verification against a possible "If:" header.  [500, #0]
[error] Could not open the lock database.  [500, #400]
[error] (13)Permission denied: Could not open property database.  [500, #1]
と言われてしまって何が悪いのか調べてみるとDavLockDBで指定するのはファイルではなく
作られるファイルのプレフィックスだということに気付きました。
つまり/usr/local/apache2/logs/DavLockをtouchで作ってnobody所有にしても意味がなく
そのディレクトリに対して書き込む権限が必要だ、ということです。
で、DavLockDBを/tmp/DavLockに変えてやることによって無事動作するようになりました。

ただこの状態だと認証もないし暗号化もされていないのでBASIC認証を掛けてSSLにも対応させるべきですね。
この辺の設定は通常のApacheと同じ方法で出来るので楽チンです。
VPNもいいけど手軽にファイルを共有するならWebDAVがオススメです。
Posted by tsujitako at 11:59 午後 in Linux/