FreeBSD 6.0,Apache2.2,Subversion のめも

以下をためしたつもり。

  • ファイルシステムベースの DAV のインストール
  • Subversion ベースのDAV のインストール
  • 日本語ファイル名が扱えるように (mod_encoding)
  • Apache2.0, 2.2 で試行
    • mod_encoding 以外は apache2.0 と同じ.

インストール

ファイルシステムベースのDAV はapache2 以降ならデフォルトで入っている。

% portinstall /usr/ports/www/mod_dav

設定

''http.conf'' の ''LoadModule'' ''dav_module'', ''dav_fs_module'' がコメントアウトされたら外す。

''http.conf'' に以下を追加

Alias /webdav "/home/www/webdav"
<Directory "/home/www/webdav">
    DAV on
    DAVMinTimeout 1800
    Options Indexes
    IndexOptions FancyIndexing
    AuthType Basic
    AuthName "Please Input ID and Password"
    AuthUserfile "/usr/local/webdav.passwd"

    Require valid-user

    Order allow,deny
    Allow from all
</Directory>
DAVLockDB /usr/local/var/apache2/DAVLock

必要なファイル/ディレクトリを作成

% mkdir /home/www/webdav
% mkdir /usr/local/var/apache2
% chown www:www /home/www/webdav
% chown www:www /usr/local/var/apache2

% htpasswd -c /usr/local/webdav.passwd webdav
password: ********

日本語のファイル名を扱えるように。

コンパイル&インストール

ports ''www/mod_encoding'' はコンパイルエラー。apache13 用か。
http://webdav.todo.gr.jp/download/ から ''mod_encoding.apache2.20020611a-2'' を ダウンロード

  • ''<MOD_ENCODING>/mod_encoding.c'' を置きかえる。
% cd <MOD_ENCODING>
% cp mod_encoding.apache2.20020611a-2 mod_encoding.c
% ./configure
% make
または
% cd /usr/ports/www/mod_encoding
% make check-sanity fetch checksum extract patch
% cp mod_encoding.apache2.20020611a-2 work/mod_encoding-xxxxx/mod_encoding.c
% make

これではまだ mod_encoding.so ができない。
このファイルの依存関係にある、iconv_hook をインストールする。

% cd <MOD_ENCODING>/lib
% ./configure
% gmake
% gmake install

インストールできたら共有ライブラリを作成。

% cd <MOD_ENCODING>
% gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook 
% make install
http.conf の設定

以下を追加する。

LoadModule encoding_module       libexec/apache2/mod_encoding.so

<IfModule mod_headers.c>
   Header add MS-Author-Via "DAV"
</IfModule>

<IfModule mod_encoding.c>
   EncodingEngine on
   NormalizeUsername on
   SetServerEncoding UTF-8
   DefaultClientEncoding JA-AUTO-SJIS-MS SJIS

   AddClientEncoding "cadaver/" EUC-JP
</IfModule>
ポートが変になる?

現在以下のようにポートをフォワードしている。

VMWare[192.168.x.y:80] -> [localhost:10080] 

localhost でブラウザから localhost:10080 を開くと mod_encoding の on/off 時でポート番号の表示が異なる。表示とは、サーバの情報(ディレクトリ表示やエラーメッセージの最後の行の表示) のことで殆ど実害はない。

ただし、wiliki はこの影響をモロに受けるようで、現在は、''192.168.x.y'' にアクセスしている。

apache2.2 について

マクロや型名に違いがあるためコンパイルできない。以下の4つの先頭に ''AP_'' をつけるといいのかな。適当。

  • ''regx_t'' -> ''ap_regex_t''
  • ''REG_EXTENDED'' -> ''AP_REG_EXTENDED''
  • ''REG_ICASE'' -> ''AP_REG_ICASE''
  • ''REG_NOSUB'' -> ''AP_REG_NOSUB''
--- mod_encoding.c.apache2.20040616     Sun Dec  4 06:52:38 2005
+++ mod_encoding.c      Sun Dec 11 22:25:08 2005
@@ -232,7 +232,7 @@


   for (i = 0 ; i < encmap->nelts ; i += 2) {
-    if (ap_regexec((regex_t *)list[i], lookup, 0, NULL, 0) == 0) {
+    if (ap_regexec((ap_regex_t *)list[i], lookup, 0, NULL, 0) == 0) {
       apr_array_cat(encs, (apr_array_header_t *)list[i + 1]);
       return encs;
     }
@@ -290,7 +290,7 @@
   /* register useragent with UserAgent: pattern */
   if (*args && (arg = ap_getword_conf_nc(cmd->pool, &args))) {
     *(void **)apr_array_push(conf->client_encoding) =
-      ap_pregcomp(cmd->pool, arg, REG_EXTENDED|REG_ICASE|REG_NOSUB);
+      ap_pregcomp(cmd->pool, arg, AP_REG_EXTENDED | AP_REG_ICASE | AP_REG_NOSUB);
   }

   /* register list of possible encodings from above useragent */

他にも警告がたくさん出る。修正したかったら、右辺を''(char *)'' でキャストすればたいてい消える。

mod_dav_svn

apache を再コンパイル。''www/apache20'' をオプション付きでインストール

  • ''WITH_BERKELEYDB=db42'' (もしくは db43)

''devel/subversion'' を 以下のオプション付きでインストール

  • ''WITH_MOD_DAV_SVN=yes''
  • ''WITH_SVNSERVE_WRAPPER=yes''
  • ''APR_CONFIG=apr-1-config''
  • ''APU_CONFIG=apu-1-config''
  • ''APR_APU_DIR=/usr/local/bin''
  • ''APXS=/usr/local/sbin/apxs''

オプションは環境変数か,pkgtools.conf の MAKE_ARGS によって与えてもいい。

http.conf の設定

以下が追加されていることを確認。dav_module が2回読みこまれるようなら後の方をコメントアウト

LoadModule dav_svn_module     libexec/apache2/mod_dav_svn.so
LoadModule authz_svn_module   libexec/apache2/mod_authz_svn.so
svn リポジトリの作成

ここに格納されていく。

% svnadmin create /home/svn/repos
% chown -R www:www /home/svn/repos
設定

ファイルシステムベースでの管理と異なる点は (1) 〜 (4) の4点

  1. DAV の種類
  2. svn リポジトリの場所。webdav データはここで版管理される。
  3. Webブラウザ から閲覧するためのスタイルシート
  4. WEBDAVクライアントから webdav を使うために必要。クライアントから行った、ファイルの追加、削除、移動1つ1つが1つのリビジョン単位として扱われる(辺りがautoversioning なのかな)。
<Location /webdav>
  DAV svn # (1)
  SVNPath /home/www/repos # (2)
  SVNIndexXSLT "/svnindex.xsl" # (3)
  SVNAutoversioning on # (4)
  AuthType Basic
  AuthName "Please Input ID and Password"
  AuthUserfile "/usr/local/user.passwd"

  <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
  </LimitExcept>
</Location>

おわり.

参考にしたページ