バージョン履歴

akaDAV とは

akaDAV サーバ機能を実現するための Python モジュールであり、パッケージにはコンパクトな WebDAV サーバアプリケーションも含まれています。

akaDAV および akaDAV を組み込んだ Twisted Web サーバは次のような特徴を持っています。

現バージョンには以下の制限がありますが、順次サポートしていく予定です。

ダウンロード

SourceForge のプロジェクトページからソースコードがダウンロードできます。

インストール

akaDAV を動かすにあたって次のソフトウェアが必要です。akaDAV をインストールする前にこれらをインストールしてください。

Python バージョン2.3以上
http://python.org/
Twisted 1.3
http://twistedmatrix.com/products/download
PyXML
http://pyxml.sourceforge.net/

リクエストの文字コードとしてシフトJISやEUC-JP使用するクライアントをサポートするには次のいずれかの日本語コデックをインストールする必要があります。なおPython 2.4.x には CJKCodecs が標準で添付されてます。

JapaneseCodecs
http://www.python.jp/Zope/download/JapaneseCodecs
CJKCodecs
http://cjkpython.berlios.de/index-ja.html

SSL を使う場合

pyOpenSSL
http://pyopenssl.sourceforge.net/

上記各プログラムをインストールした後、akaDAV の tar アーカイブを展開、そのディレクトリに移動して次のように実行します。

python setup.py install

サーバアプリケーションの起動

次のようなディレクトリやユーザの構成を前提に WebDAV サーバアプリケーション akadavsvr.py の設定と起動方法を解説します。ディレクトリ構成やユーザ名は使う環境に合わせて適宜読みかえてください。

まずシステムにユーザ akadav を登録し ホームディレクトリ /home/akadav の下にサーバが使用する次のディレクトリとファイルを作成してください。

/home/akadav/htdocs
Apache の DocumentRoot に相当する Web コンテンツ用のディレクトリです。http://hostname/ でアクセスできるようにします。
/home/akadav/yasusii
ユーザ yasusii 専用の WebDAV フォルダです。http://hostname/yasusii/ でアクセスできるようにします。
/home/akadav/murako
ユーザ murako 専用の WebDAV フォルダです。http://hostname/murako/ でアクセスできるようにします。
/home/akadav/share
ユーザ yasusii と murako の両方がアクセスできる共有フォルダです。http://hostname/share/ でアクセスできるようにします。
/home/akadav/users
WebDAV の BASIC 認証に使用するパスワードファイルです。akpasswd コマンドを使って作成します。akpasswd は Apache の htpasswd と互換のコマンドです。パスワードファイルを新規に作成する場合は -c オプションを使用します。
akpasswd -c /home/akadav/users yasusii
-c を指定するのは最初だけです。 2人目以降のユーザを追加する場合はオプションを付けずに実行します。
akpasswd /home/akadav/users murako
/var/log/akadav
ログ用のディレクトリです。このディレクトリは root だけに書き込み権限を与えてください。
/var/run
pid ファイルを置くディレクトリですが、Linux や FreeBSD の場合標準で存在するため、新たに作成する必要はありません。

次にアーカイブの application ディレクトリからサーバ起動スクリプト akadavsvr.py を /home/akadav にコピーした後、エディタで設定を変更します。現バージョンでは設定を Python スクリプト内に直接書き込むようになっているため、間違った記述をすると Python の文法エラーなどが発生するので注意してください。将来のバージョンでは設定ファイルを単なるテキストファイルとして分離する予定です。

# アクセスログのパス
SITE_ARGS.update({"logPath": "/var/log/akadav/access.log"})

# WebDAV リクエストの文字コードに utf-8 以外を使用するクライアントのた
# めの設定です。辞書のキーに「UserAgent を判別するための正規表現」、
# 値には「そのエージェントが使用するエンコーディング」を指定します。
# サンプルの設定がコメントアウトされていますが、これらを有効にする場合、
# 行頭に余計な空白を入れないように注意してください。
SITE_ARGS.update({"agentEncodings": {
    r"Microsoft .* DAV 1\.1$": "cp932",
    r"xdwin9x/": "cp932"}})

# サーバが使用する TCP ポート
PORT = 80

# サーバプロセスが使用する UID(ユーザ akadav の UID)
APP_ARGS.update({"uid": 503})
# サーバプロセスが使用する GID(ユーザ akadav の GID)
APP_ARGS.update({"gid": 503})

# DocumentRoot(スタティックな HTML 用のディレクトリ)
ROOT = "/home/akadav/htdocs"

# WebDAV フォルダの内容は次のように記述します。
# 名前:
#   URL で使用する名前です。"abc" とした場合、Web フォルダの URL は
#   http://hostname/abc/ となります。
# パス名:
#   サーバ内で実際に WebDAV ファイルを保存するディレクトリのパス名。
# パスワードファイル:
#   akpasswd で作成したパスワードファイルのパスを記述します。
# ユーザのリスト
#   パスワードファイルに登録したユーザのうち、このフォルダへのアクセス許可
#   を与えるユーザを ["ユーザ1", "ユーザ2"....] の形式で指定します。
#
CHILDREN = [
    # (名前, パス名、パスワードファイル、[ユーザのリスト])
    ("yasusii", "/home/akadav/yasusii", "/home/akadav/users", ["yasusii"]),
    ("murako", "/home/akadav/murako", "/home/akadav/users", ["murako"]),
    ("share", "/home/akadav/share", "/home/akadav/users", ["yasusii", "murako"])
    ]

ファイルの修正が完了したら root 権限で次のコマンドを実行するとサーバが起動します。

twistd --logfile=/var/log/akadav/error.log \
       --pidfile=/var/run/akadav.pid \
       -oy /home/akadav/akadavsvr.py

WebDAV クライアントから接続する場合の URL は ユーザ yasusii の場合 http://hostname/yasusii/ となります。接続がうまくいかない場合は /var/log/akadav/error.log に何かエラーが出力されていないか確認してください。

サーバの終了には kill コマンドを使用します。

kill `cat /var/run/akadav.pid`