WebDAVサーバ

iBookでMacOS X使ってると、液晶を開くとすぐにSleepから復帰するのは大変便利なのですが、このときSleep前にマウントしていたネットワークドライブがマウント解除されるのがとても鬱陶しい。WebDAVでマウントすれば、Sleepから復帰してもマウントが継続するはずなんで、これはぜひやってみたい。Apacheのモジュールを入れたらいいはずなんでまずは挑戦。

debian.dodes.orgからWebDAVのパッケージlibapache-mod-dav_1.0.3-3_sh4.debをダウンロード。これをLANDISKに転送し、
dpkg-deb -x libapache-mod-dav_1.0.3-3_sh4.deb .
で展開してlibdav.soを /usr/local/apache/libexec にmvする。 /usr/local/apache/conf/httpd.confに
LoadModule dav_module libexec/libdav.so
AddModule mod_dav.c
を追加する。これでうまくいくと思ったのですが、現実はそう甘くは無かった。apachiを再起動するとなにやらライブラリが足りないとのエラーが出ます。結局、以下のライブラリを追加する必要がありました。

これだけ追加するとライブラリ不足のエラーは出なくなりましたが、今度は
Syntax error on line 247 of /usr/local/apache/conf/httpd.conf:
Cannot load /usr/local/apache/libexec/libdav.so into server: /usr/local/apache/l ibexec/libdav.so: undefined symbol: ap_ctx_get
という訳の判らないエラーが出ます。Webで調べてみると、LANDISKに付属のapacheのビルド方法と、debianから持ってきたmod_davのバイナリのビルド方法が異なるためということが判明。要はこのmod_davはLANDISKのapacheでは使えないようです。やはりLANDISKの開発環境は必要な訳だ。

LANDISKの開発環境を整えるには、

の2通りの方法があります。どちらも2chに方法が紹介されています。 まずは、安直にVirtualPCに適当なlinuxをインストールし、クロス開発環境を構築したのですが、さすがに、クロス環境では ./configure;make だけではアプリケーションはまともにビルドできないことが判り、LANDISK自身に開発環境をインストールしてしまいました。ここでビルドしたmod_davが以下です。

開発マシンとしては非力に見えるLANDISKでも、充分実用的なスピードでビルドができます。68k macでNetBSDを動かすよりも、またはiBookG4/800上のVirtualPC 6.0でcuiでlinuxを動かすよりも体感的には高速です。

mod_davをインストールしただけでは日本語のファイル名が文字化けするので、mod_encodingもビルドし追加インストールし、WebDAV環境は完成です。

debian.dodes.orgに置いてあるmod_davとmod_encodingのsh4用バイナリは、LANDISKのhttpdでは使えません。自分でビルドするのがめんどい場合は、以下のバイナリを使ってください。

/usr/local/apache/conf/httpd.confのmod_davとmod_encodingに関する設定は以下のようにしました。
LoadModule dav_module         libexec/libdav.so
LoadModule encoding_module    libexec/mod_encoding.so
AddModule mod_dav.c
AddModule mod_encoding.c

Alias /DAV "/mnt/hda3/share/LANDISK/DAV"
<IfModule mod_dav.c>
  DAVLockDB /mnt/hda3/var/lock/DAVLock
  DAVMinTimeout 600
  <Directory "/mnt/hda3/share/LANDISK/DAV">
    AllowOverride FileInfo AuthConfig Limit
    Options MultiViews Indexes
    DAV On
  </Directory>
</IfModule>

<IfModule mod_encoding.c>
  EncodingEngine On
  NormalizeUsername On
  SetServerEncoding UTF-8
  DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
</IfModule>

この設定でWindows/Classic Mac/MacOS X 混在環境でも日本語ファイル名の文字化けは起こりませんが、LANDISK内では日本語ファイル名はUTF-8で扱われます。私の場合、SambaやnetatalkでCAPエンコーディングを設定しているので、Sambaやnetatalk経由でコピーした日本語ファイル名のファイルは、WebDAV経由では文字化けしてしまいます。逆にWebDAV経由でコピーした日本語ファイル名のファイルをSambaやnetatalk経由でアクセスしても、当然ダメ。netatalkがUTF-8を扱えるようになれば解決なんだけど...


   前(Webサーバの改造) 目次 次(アプリケーションサーバ)