アットウィキロゴ

Convenience > 20080105

Convenience

私的メモです。仲間に公開している WebFolder の構築の仕方を忘れないように備忘録。

WevDAV

HTTP の拡張である WebDAV の導入方法です。 日本語化に際して、導入手順が複雑なので纏めました。
自己責任で参考にしてください。

Fedora Core 6 での動作検証

導入関しては自己責任でお願いします。

Fedora Core 6 の WebDAV で日本語が利用できるようにパッケージしました。 Fedora Core で利用することよりも Apache 2.2 で利用できるようにすることを目的としています。他のディストリビューションでも導入可能だと思います。

動作検証環境

  • Fedora Core 6
    • kernel 2.6.18
    • glibc-2.5-3
    • Apache 2.2
    • apxs が必要です。
      Fedora では httpd-devel をインストールしておけば問題ありません。

変更箇所

このページの下に添付してある mod_encoding-20040430a.tar.gz に対して以下の変更を加えています。変更後の mod_encoding-20061118.tar.gz は、このページの下に添付してあります。

iconv を利用

iconv_hook を利用せずに iconv を利用します。

mod_encoding.c 中の以下をコメントアウト
#include <ap_compat.h>
mod_encoding.c 中の以下をコメントアウト
#include <iconv_hook/iconv.h>
mod_encoding.c に以下を追加。上記のコメントアウトした直後あたりでOK。
#include <regex.h>
#include <iconv.h>

QUERY STRING 対応

QUERY STRING のパッチがあたっていますが、動かない箇所を修正しました。

mod_encoding.c ソースにある以下の関数を置換
ap_pstrdup ⇒ apr_pstrdup
ap_pstrcat ⇒ apr_pstrcat

コンパイルおよびインストール

$ ./configure --with-apxs=/usr/sbin/apxs
$ make
$ gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall
$ su
# cp mod_encoding.so /etc/httpd/modules/

今回、パッチのみの提供はしていません。mod_encoding-20061118.tar.gz をご利用ください。iconv_hook も含まれていますが、利用していません。

iconv_hook を利用しなくなったので、取り扱いが可能な日本語文字に若干の違いがあるかもしれません。

Apache の設定

Apache 2.2 の設定ファイル(httpd.conf) の記載は 2.0 の場合と同じで問題なく利用できています。ただ、httpd.conf のモジュール構成が 2.2 でが大きく変わっているので注意が必要です。

古い情報

動作検証環境

  • kernel-2.4.22
  • glibc-2.2.4
  • Apache 2.0.49
    Apache はDSO対応でコンパイルしてあるものとして説明します。

必要な作業

必要なファイル

Apache 2 には標準で WebDAV の機能があります。ただし、標準の WebDAV では日本語のファイル(ディレクトリ)名が正しく扱えません。このような URI エンコーディングに関する問題を解決するために mod_encoding が存在します。

WebDAV Resources JPから以下のファイルを入手します。

  • mod_encoding-20021209.tar.gz
    >apache 1.3 に対応した mod_encoding

-mod_encoding.c.apache2.20020611a-2 (これより新しいのが出ています)

apache 2.0 対応のための差分ファイル

  • mod_encoding.c.apache2.20040616
    >apache 2.0 対応のための mod_encoding 2004/06/16 版

また、以下のパッチを使用します。(このページに添付してあります。)

  • mod_encoding-20020611a-safequery.patch
    >WebDAV 以外のすべてのURIに mod_encoding の動作が影響してしまいます。このパッチをあてると、リクエストURI中の ? 以降にある QUERY_STRING の文字コード変換はしなくなります。(2004/06/16 版に対しても利用可能でした。)
  • iconv_hook-20040430.patch
    >iconv_hook は mod_encoding-20021209.tar.gz に含まれていますが、メモリリークのバグがあります。これを解決するパッチです。

パッチあて作業

  • mod_encoding-20021209.tar.gz の展開
    mod_encoding-20021209.tar.gz を展開します。これは Apache 1.3 用の mod_encoding であることに注意してください。
    $ tar zxvf mod_encoding-20021209.tar.gz
    
  • Apache 2.0 用の差分ファイル
    展開して出来たディレクトリ mod_encoding-20021209 に取得しておいた mod_encoding.c.apache2.20040616 を mod_encoding.c としてコピーします。
    $ cp mod_encoding.c.apache2.20040616 mod_encoding-20021209/mod_encoding.c
    
  • mod_encoding.c の修正
    $ vi mod_encoding-20021209/mod_encoding.c 23 行目が以下のようにコメントにされています。
    /* #include <ap_compat.h> */
    
    以下のように修正します。
    #include <ap_compat.h>
    
  • mod_encoding の影響範囲を限定するパッチ
    WebDAV を稼働させている Apache では 通常の URI に含まれる文字列までエンコードされてしまいます。WebMail や Wiki などを稼働させている場合、それらが正しく動作しなくなる場合があります。そこで、リクエストURI中の ? 以降にある QUERY_STRING はエンコードしないパッチをあてます。(2004/06/16 版 に対して使った場合は offset 56 lines と表示されますが正常に適用可能です。) http://www.namazu.org/ml/namazu-win32-users-ja/msg01596.html にて投稿のあったパッチです。
    $ cp mod_encoding-20020611a-safequery.patch mod_encoding-20021209/
    $ cd mod_encoding-20021209/
    $ patch < mod_encoding-20020611a-safequery.patch
    
  • iconv_hook のパッチ
    iconv_hook は WebDAV で「丸付数字」や「()株」などの特殊文字を扱えるようにするライブラリです。mod_encoding-20021209.tar.gz に含まれていますが、メモリリークをするバグがあります。 これを解決するパッチが webdav-jp の ML で公開されていたので纏めました。
    このページに添付してある iconv_hook-20040430.patch を mod_encoding-20021209/lib/ へコピーしてください。その後、パッチをあてます。
    $ cd lib
    $ cp "パッチを保存したディレクトリ"/iconv_hook-20040430.patch ./
    $ patch < iconv_hook-20040430.patch
    

ここまでで必要なパッチあては完了です。ここまでのパッチをあてたファイルをアーカイブして、このページに mod_encoding-20040430.tar.gz として添付しておきました。なお、このファイルは私がいろいろなパッチをあてたもののアーカイブでありWebDAV Resources JPがリリースしているものではありません。このファイルについてWebDAV Resources JPへの問い合わせなどはしないように注意してください。

2004/06/16 版 に対してパッチをあてたファイルを、mod_encoding-20040430a.tar.gz として添付します。

コンパイルおよびインストール

  • iconv_hook のコンパイルおよびインストール
    $ ./configure
    $ make
    $ su
    # make install
    
  • iconv_hook の認識
    iconv_hook はデフォルトで /usr/local/lib へインストールされます。ディストリビューションによっては、このパスが共有ライブラリの在処として認識されていません。共有ライブラリとして認識させるには /etc/ld.so.conf に /usr/local/lib を追加します。追加後は以下のコマンドで反映されます。
    # /sbin/ldconfig
  • mod_encoding のコンパイルおよびインストール
    $ cd ..
    $ ./configure --with-apxs=/usr/local/apache2/bin/apxs --with-iconv-hook=/usr/local/include
    $ make
    
    libtool の不具合で mod_encoding.so の生成に失敗します。手で mod_encoding.so を生成します。
    $ gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook
    $ su
    # cp mod_encoding.so /usr/local/apache2/modules/mod_encoding.so
    

Apache の設定

モジュールの組み込みを httpd.conf へ追加します。

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule encoding_module modules/mod_encoding.so

同じく httpd.conf の下部に WebDAV の設定を追加します。以下の httpd.conf はあくまでも例ですので注意してください。
(BASIC認証をし、SSL以外の接続を許可しない設定の例です。)

Alias /hoge "/home/userdocs/hoge"
<IfModule mod_dav.c>
    DavLockDB /var/lock/dav/DavLock
    DAVMinTimeout 600
    <Location /hoge>
        DAV On
        SSLRequireSSL
        AuthType Basic
        AuthName "DAV"
        AuthUserFile "/usr/local/apache2/conf/.htpasswd"
        Require user hogehoge
    </Location>
</IfModule>

このとき、WebDAV のロックファイルを格納するディレクトリと WebDAV でファイルを保存するディレクトリを作成するのも忘れないようにします。

# mkdir /home/userdocs/hoge
# chown -R apache /home/userdocs/hoge
# chgrp -R apache /home/userdocs/hoge
# mkdir /var/lock/dav/
# chown -R apache /var/lock/dav/
# chgrp -R apache /var/lock/dav/

同じく httpd.conf の下部に エンコード の設定を追加します。

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

その他の注意事項

Excel ファイルを WebDAV 上において、それを直接編集していると、ファイルの内容が全くなくなって見えることがあります。ファイルが破壊されたように思いますが、実際は壊れていません。 Excel のファイルをロックする機能が特殊(だと思う。。。)なのと、IE のキャッシュが影響しているようです。 WebDAV 上の Excel ファイルが壊れたと思ったら、IE のキャッシュを削除すれば問題なく先のファイルも開くことができます。 IE を立ち上げて、[ツール]-[インターネットオプション]-[全般] にある、[インターネット一時ファイル]の[ファイルの削除] を試してみてください。

Win32 向けのバイナリ

  • 上記のパッチをあてたWin32向けのバイナリを作ってみました。以下の URI を参考にして作成しました。
    http://www.geocities.co.jp/Hollywood-Miyuki/8444/webdav/webdav.html
    バイナリは mod_encoding_win32_20040608.zip としてこのページに添付してあります。
    Apache 2.0.49 + Windows 2000 な環境でビルドしました。

タグ:

+ タグ編集
  • タグ:
最終更新:2010年08月25日 16:45