次世代プロトコルWebDAVの可能性[中編]


WebDAVクライアント/サーバ環境の構築
次世代プロトコルWebDAVの可能性[中編]

さらに発展が期待できるWebDAVだが、すでに使える実装は存在する。ここではLinuxによるWebDAVサーバの構築と、サーバにアクセスするためのクライアント環境の整備について解説する。

WebDAVサーバ環境の構築

 WebDAVの機能を実装しているプロダクトはいろいろあるが、今回はオープンソースのWebサーバであるApacheで、WebDAV機能を提供するためのモジュールであるmod_davを使えるようにしてみよう。

 mod_davは、純粋にRFC 2518に記述された範囲の実装である。ファイルの読み書き/作成/削除およびフォルダ(コレクション)の作成/削除を行うことはできても、それ自身がセキュリティ関連の機能を持っているわけではない。そこで必要となるのが別の規約の利用である。例えば、Apacheに実装されているBASIC認証などのセキュリティ機能を用いることが挙げられる。それだけでは不安という人は、SSLやssh、Zebedeeなど、すでに確立された暗号化通信の手段を利用することが可能である。

 以下ではRed Hat Linux 6.2を念頭に置いて解説するが、あえてRPMは使わず、tarアーカイブからのインストール方法で説明する。最近のLinux系OSであれば同様の手順で問題はないだろう。

コラム Windows 2000をサーバにする場合
 MicrosoftのWindows 2000上で動作するIIS 5.0でもWebDAV機能は利用可能である。機能の利用方法は、Microsoftのサイト(http://www.microsoft.com/JAPAN/developer/library/jpiis/core/wcwbdav.htm)に必要十分な記述があるので参考にしてほしい。

mod_davのインストール

 mod_davのインストール手順を大ざっぱに述べると、以下のようになる。

1.Apacheの構成をチェックする

 DSO(Dynamic Shared Object)が利用可能であればmod_davのコンパイル→インストールのみでOKだが、そうでない場合はApacheをDSO利用可能にする必要がある。また、スタティックにmod_davを組み込むことも可能だが、以後の構成変更などを考えると特段の理由がない限りはDSOを使った方がよいだろう。

 筆者の試験環境では以下のようにしてApacheをconfigureしたが、適宜必要なパラメータを追加/変更するなどして試してほしい。

$ ./configure --enable-module=most --enable-shared=max

 configureがうまくいけば、

$ make
$ su root
# make install

でApacheのインストールは終了する。

2.mod_davのアーカイブを入手する

 mod_dav-1.0.2-1.3.6.tar.gzはhttp://www.webdav.org/mod_dav/より入手できる。2001年9月現在のバージョンは1.0.2だ。

 なお、Apacheのバージョンは1.3.6以降が対象である。Apache 1.2.xでも動かせるが、バグフィックスなどの関係もあるので、最新のバージョンにしておいた方が望ましい。

3.コンパイルとインストール

 mod_davのアーカイブを入手したら、適当なディレクトリで展開してコンパイルおよびインストールを行う。

$ ./configure --with-apxs=apxsコマンドをフルパスで指定
$ make
$ su root
# make install

 ここまでうまくいったら、次は設定である。configureで失敗する場合は、後述の「インストールのトラブルシューティング」を参照してほしい。

WebDAVを有効化するための設定

 mod_davのインストールが終了した時点で、以下の行がhttpd.confファイルに追加されていることを確認する。

LoadModule dav_module         libexec/libdav.so
AddModule mod_dav.c

 これが確認できたら、いよいよWebDAVを使うための設定を行う。例では、Webサーバ上の/pagesでDAV機能を有効にする。この場合、httpd.confに以下のような記述を追加すればよい。

<Location /pages>
    DAV On
</Location>

 このほか、ロックデータベースを格納する場所をDAVLockDBディレクティブで指定する。例えば、

DAVLockDB /usr/local/apache/var/DAVLock

とhttpd.confに記述することで、/usr/local/apache/var/というディレクトリにロックデータベースファイルを作成する。このディレクトリは、Userディレクティブで指定するユーザー(編注)でApacheが書き込める設定になっている必要があるので注意してほしい。

編注:httpd.confのUserディレクティブ参照。デフォルトはnobodyになっている。

 ここまでの設定でDAVによるアクセスが可能になるわけだが、これだけだと利用上の不具合がある。このままでは、だれでもDAVアクセスOK(ファイル作成OK)状態なので、/pagesに対応するディレクトリ配下に対して.htaccessなどを使ってアクセス制限をかけておく必要がある。例えば、筆者が自宅で利用しているWebDAVサーバでは、.htaccessの中に

AuthUserFile     /home2/wakatono/htpwd/user.pwd
AuthGroupFile    /dev/null
AuthName         DAVhome
AuthType         Basic
<Limit HEAD PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
           Require user wakatono
</Limit>

などとしておいて、GETとOPTIONS以外のメソッドについては認証を行うようにしてある。

 また、http://www.webdav.org/mod_dav/install.htmlに設定の例がいくつか掲載されているので参考にしてほしい。その中の1つを参考に解説すると、httpd.conf中での以下のような設定が挙げられる。

<Location /pages>
    DAV On
    AllowOverride None
    Options None
    <LimitExcept GET HEAD OPTIONS>
        require user wakatono
    </LimitExcept>
</Location>

 このように設定すると、GET、HEAD、OPTIONS以外のメソッドはユーザーwakatonoとして認証が必要となる。

インストールのトラブルシューティング

 mod_davの./configure実行時に、環境によっては以下のようなエラーを出力してconfigureが停止してしまうことがある。

checking for dynamic Apache module support (via APXS)... found at /usr/local/apache/bin/apxs
configure: error: Your APXS installation is broken and cannot be used.
Please see http://www.webdav.org/mod_dav/install.html#apxs for more information.

 このようなときのトラブルシューティングについて、エラーメッセージ中のURLを参照すると、PHPのFAQを見るようにという旨の指示がある。PHPをビルドするときにもmod_davと同様の現象が発生する可能性があり、PHPのFAQにはその対処方法が掲載されているのだ。

 PHPのFAQ(http://www.php.net/manual/en/faq.build.php#AEN63052)には、以下のように記述されている(原文は英語なので、簡単に邦訳してある)。

 apxs(編注)中の、

my $CFG_CFLAGS_SHLIB  = ' ';
my $CFG_LD_SHLIB      = ' ';
my $CFG_LDFLAGS_SHLIB = ' ';

となっている行(式の右辺は違うことがある。筆者の場合は q()となっていた)を探し、この部分を

my $CFG_CFLAGS_SHLIB  = '-fpic -DSHARED_MODULE';
my $CFG_LD_SHLIB      = 'gcc';
my $CFG_LDFLAGS_SHLIB = q(-shared);

と変更することで対処可能になることがある。

 そのほか、Red Hat Linux 6.1/6.2などではapxsの内容が不正な状態になてっていることがあるので、

my $CFG_LIBEXECDIR    = 'modules';        # substituted via APACI install

という行を探し、

my $CFG_LIBEXECDIR    = '/usr/lib/apache'; #        substituted via APACI install

に変更すればOKになることがある。

 これでもダメならば、Apacheの再構成/再インストールをした方がよいだろう。

編注:apxsは、例えば/usr/sbin/apxsや/usr/local/apache/bin/apxsなどにある。Apacheのインストール方法などによって場所が異なるため、localeなどで検索した方が早いだろう。

クライアント環境の整備

 WebDAVを利用するためには、クライアントもそれに対応したものが必要になる。クライアントとして最も利用されるであろうWindows、そしてUNIX(Linux)それぞれについて、順番に見ていこう。

Windowsは標準機能のWebフォルダで

 ここでは、一番お手軽と思われるWindows 9xやWindows 2000のWebフォルダ機能を用いることにしよう。cadaverなど、UNIX環境で利用できるクライアントについては後述する。

 ここで取り上げる設定は、Windows 2000 Professionalのものだが、Windows 98などでも似たような手順で設定できる。

画面1 マイネットワークで[ネットワークプレースの追加]をクリック

 [ネットワークプレースの追加]をクリックして、[ネットワークプレースの追加ウィザード]を起動(画面1)。

画面2 WebDAVの設定を行ったURLを入力

 「ネットワークプレースの場所を入力してください」にURLを入力する(画面2)。

画面3 デフォルト名でも構わないが、分かりやすい名前にしておくと使いやすい

 WebDAVでの接続が可能であればこの画面になる。必要であればネットワークプレース名を変更し、[完了]ボタンを押せば設定は終了(画面3)。

画面4 Webフォルダにファイルをコピーしたところ。ローカルドライブと同じ感覚で操作できる

 作成したWebフォルダに対して、ファイルをコピーしてみよう(画面4)。

 なお、古いバージョンのWebフォルダを利用しているときに、大きなファイルをWebフォルダ内に作成すると途中でエラーが発生してしまうことがあった。しかし、Internet Explorer(以下IE)のバージョンを新しいものに置き換える(筆者はIE 5.5 SP2)ことによって、事象の再発はなくなった。

UNIX用クライアント、cadaver

 Windowsでは、Webフォルダを利用することでWebDAVリソースを取り扱うことが可能であるが、UNIX系のOSではどのようにするのか? という問題が出てくる。UNIX用クライアントの実装はいくつかあるが、ここではCによる実装を主に取り上げたい。

 cadaverは、コマンドラインによる利用を想定したWebDAVクライアントである。2001年9月14日時点の最新版は0.17.0で、http://www.webdav.org/cadaver/でソースコードのアーカイブ類が入手可能である。

 cadaver 0.17.0のアーカイブはhttp://www.webdav.org/cadaver/cadaver-0.17.0.tar.gzになる。上記のアーカイブを入手して展開し、作成されたディレクトリ(cadaver-0.17.0)配下に移動して、

$ ./configure
$ make
$ su root
# make install

とすれば問題なくインストールされる()。

:とはいっても、環境によってはconfigureで失敗することがある。筆者の環境では、libexpatはあるがxml関係のヘッダがないというエラーが出たことがある。このような場合は、cadaverのexpatライブラリを利用するようにconfigureパラメータで与えるなり、一時的にexpatライブラリを見えなくするなりして対処してほしい。そのほか、Apache 2.0のCVS snapshotを使っているとコンパイルできなくなることもある。

 cadaverの起動も簡単で、

$ cadaver http://www.foo.bar/DAV/

とすれば、URLで示した(この場合はhttp://www.foo.bar/DAV)WebDAVサーバに接続される。cadaverで利用可能なコマンド一覧を表4に示す。

コマンド名
説明
ls [path] 現在のコレクションにある内容を表示する
cd path 指定したコレクションに移動する
pwd 現在どこのコレクションにいるかを表示する
put local [remote] 指定したローカルファイルをアップロードする
get remote [local] 指定したリソースをダウンロードする
mget remote... 複数のリソースをダウンロードする
mput local... 複数のファイルをアップロードする
edit resource 指定したリソースを編集する(環境変数EDITORで設定したエディタが起動される)
less remote... 指定したリソースをページャで表示する(環境変数PAGERで設定したページャが起動される)
mkcol remote... サーバ上にコレクションを作成する
cat remote... 指定したリソースを表示する
delete remote... コレクションでないリソースを削除する
rmcol remote... コレクションおよびその中に含まれるリソースを削除する
copy source... dest sourceで指定したリソースをdestにコピーする
move source... dest sourceで指定したリソースをdestに移動する
lock resource 指定したリソースをロックする
unlock resource 指定したリソースのロックを解除する
discover resource リソースのロック情報を表示する
steal resource リソースのロックトークンを奪い取る
showlocks 自分がかけたロック一覧を見る
chexec [+|-] remote リソースに対する実行権を変更する
propget resource [propname] 指定したリソースのプロパティを取得する。propnameが指定された場合は、propnameに設定された値を取得する
propset resource propname 指定したリソースのプロパティ名propnameに値valueを設定する(only dead property)
set [option] [value] オプションを指定する、もしくはオプション設定を見る
open URL 指定したURLに対して接続する
close 現在のコネクションを切断する
quit プログラム終了する
unset [option] [value] オプション設定を解除する
lcd [directory] ローカルのワーキングディレクトリを移動する
lls [options] ローカルのディレクトリリストを表示する
lpwd ローカルのワーキングディレクトリを表示する
help [command] ヘルプを表示する
表4 cadaverコマンド一覧。なお、rmはdelete、mkdirはmkcol、mvはmove、cpはcopy、moreはless、bytとexitはquitの別名定義である

そのほかのWebDAVクライアント

 以下に、そのほかどんなWebDAVクライアントがあるかを示す。もちろん、これだけということはないので、自分の用途に合ったものを探し出すなり、なければ作るなりすればよいだろう。



次世代プロトコルWebDAVの可能性[前編]

次世代プロトコルWebDAVの可能性[中編]

次世代プロトコルWebDAVの可能性[後編]