CentOS4 をEUCで動かしているサーバにapache1.3でWebDavをインストールする手順。
自分のためのも記録として残しておく。主に http://www.futurewave.co.jp/linux/webdav.html を参考
mod_encodingをインストール
ソースをダウンロード
iconv_hookをコンパイル
$ tar xvfz mod_encoding-20021209.tar.gz
$ cd mod_encoding-20021209/lib
$ ./configure
$ make
$ su
# make install
mod_encodingをコンパイル
$ cd mod_encoding-20021209/
$ ./configure --with-apxs=/usr/local/apache/bin/apxs --with-iconv-hook=/usr/local/include/iconv_hook
$ make
$ su
# make install
ソースをダウンロード
mod_dav-1.0.3-1.3.6-l10n.diffはサーバへファイルを保存するときの文字コードをEUCにするために必要
ソースの展開とパッチ
$ tar zxvf mod_dav-1.0.3-1.3.6.tar.gz
$ cd mod_dav-1.3.0-1.3.6
$ patch -p1 < mod_dav-1.0.3-1.3.6-l10n.diff
mod_dav-1.0.3-1.3.6-l10n.diffを当てるとmod_encoding-20021209/libにあるiconv_hook_default.c、iconv_hook_ja_auto.c、iconv_hook_mssjis.c 、identify_encoding.cを使う事になる。configureが作成するmakefileがこれらを参照できるようにMakefile.inを編集
SRCS = ・・・
iconv_hook_default.c \
iconv_hook_ja_auto.c \
iconv_hook_mssjis.c \
identify_encoding.c
を
SRCS = ・・・
../mod_encoding-20021209/lib/iconv_hook_default.c \
../mod_encoding-20021209/lib/iconv_hook_ja_auto.c \
../mod_encoding-20021209/lib/iconv_hook_mssjis.c \
../mod_encoding-20021209/lib/identify_encoding.c
に変更。その後に
$autoconf
/etc/ld.so.confを編集
configureのテストで/usr/local/lib/libiconv_hook.so.1.oを参照できずに失敗する。LDFLAGS=’-L/usr/local/lib -liconv_hook’を指定してもだめ。/etc/ld.so.confを編集する必要がある。下の行を追加
/usr/local/lib
そのあと、
# ldconfig
を実行してキャッシュを更新
コンパイル
$ ./configure CFLAGS=-I/usr/local/include/iconv_hook LIBS='-L/usr/local/lib -liconv_hook' --with-apxs=/usr/local/apache/bin/apxs
$ make
$ make install
httpd.confを編集
認証もするべきなのだけど、今回は省略。
# モジュール読み込み
LoadModule dav_module libexec/libdav.so
LoadFile /usr/local/lib/libiconv_hook.so.1
LoadModule encoding_module libexec/mod_encoding.so
AddModule mod_dav.c
AddModule mod_encoding.c
## for WebDav
# WebDAVとして公開するディレクトリ
alias /dav /usr/local/dav
<Location /dav>
DAV On
</Location>
<IfModule mod_dav.c>
# ロックDBの場所
DAVLockDB logs/DAVLock/lockfiles
# apache側のタイムアウトは10分
DAVMinTimeout 600
# サーバ側のエンコーディング 保存されているファイルの漢字コード
DAVServerEncoding EUC-JP
</IfModule>
<IfModule mod_headers.c>
Header add MS-Author-Via "DAV"
</IfModule>
<IfModule mod_encoding.c>
EncodingEngine on
# WindowsXPでホスト名を除いて認証させる
NormalizeUsername on
# サーバ側のエンコーディング 保存するファイルの漢字コード
SetServerEncoding EUC-JP
DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
AddClientEncoding "Microsoft .* DAV 1.1" ASCII MSSJIS UTF-8
AddClientEncoding "Microsoft .* DAV" UTF-8 MSSJIS
AddClientEncoding "(Microsoft .* DAV $)" UTF-8 MSSJIS
AddClientEncoding "(Microsoft .* DAV 1.1)" MSSJIS UTF-8
AddClientEncoding "Microsoft-WebDAV*" UTF-8 MSSJIS
AddClientEncoding "RMA/*" MSSJIS
AddClientEncoding "xdwin9x/" MSSJIS
AddClientEncoding "cadaver/" UTF-8 EUC-JP
AddClientEncoding "Mozilla/" EUC-JP MSSJIS UTF-8
</IfModule>
はまったこと。
- mod_dav-1.0.3-1.3.6-l10n.diffのパッチと<IfModule mod_dav.c>ディレクティブでDAVServerEncoding を指定しなとサーバから読み込んだときに正しく表示されない。
- /etc/ld.so.confを編集しないとmod_davのconfigureが失敗する。
今後の課題
このサーバにはmediawikiを同居させたいのだが、mod_encodingの副作用でページ名をUTF-8で渡されるのだがmod_encodingがEUCに変換するで、日本語のページを表示できない。http://www.namazu.org/ml/namazu-win32-users-ja/msg01596.html のパッチを当てればいいのだが、mediawikiはindex.php?wiki名ではなくindex.php/wiki名になっているので、副作用を回避できない。