次世代プロトコルWebDAVの可能性[中編]
WebDAVクライアント/サーバ環境の構築
− 次世代プロトコル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 |
で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コマンドをフルパスで指定 |
ここまでうまくいったら、次は設定である。configureで失敗する場合は、後述の「インストールのトラブルシューティング」を参照してほしい。
■WebDAVを有効化するための設定
mod_davのインストールが終了した時点で、以下の行がhttpd.confファイルに追加されていることを確認する。
LoadModule dav_module libexec/libdav.so |
これが確認できたら、いよいよWebDAVを使うための設定を行う。例では、Webサーバ上の/pagesでDAV機能を有効にする。この場合、httpd.confに以下のような記述を追加すればよい。
<Location /pages> |
このほか、ロックデータベースを格納する場所を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 |
などとしておいて、GETとOPTIONS以外のメソッドについては認証を行うようにしてある。
また、http://www.webdav.org/mod_dav/install.htmlに設定の例がいくつか掲載されているので参考にしてほしい。その中の1つを参考に解説すると、httpd.conf中での以下のような設定が挙げられる。
<Location /pages> |
このように設定すると、GET、HEAD、OPTIONS以外のメソッドはユーザーwakatonoとして認証が必要となる。
■インストールのトラブルシューティング
mod_davの./configure実行時に、環境によっては以下のようなエラーを出力してconfigureが停止してしまうことがある。
checking for dynamic Apache module
support (via APXS)... found at /usr/local/apache/bin/apxs |
このようなときのトラブルシューティングについて、エラーメッセージ中の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 = '
'; |
となっている行(式の右辺は違うことがある。筆者の場合は q()となっていた)を探し、この部分を
my $CFG_CFLAGS_SHLIB = '-fpic
-DSHARED_MODULE'; |
と変更することで対処可能になることがある。
そのほか、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 |
とすれば問題なくインストールされる(注)。
注:とはいっても、環境によっては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クライアントがあるかを示す。もちろん、これだけということはないので、自分の用途に合ったものを探し出すなり、なければ作るなりすればよいだろう。