cygwinでSubversion+WebDAV

haradats2006-05-04


自分でメンテナンスしているwebページの管理には、iTunesサーバと化しているMac miniにインストールしたCVSを使っている。CVSの後継として開発されているSubversionに興味があったので、Mac miniWindows XPのノートにsubversionのパッケージをいれてみた(ここまではportとcygwinのパッケージ管理を使えば何も考えずにできる)。SubversionにはCVSにはないいくつかの利点があるが、中にWebDAV対応があり以前から興味を持っていた。そこで連休の時間を利用してWebDAVWindows XPのノートにインストールしてみることにした。

ApacheSubversionはいずれもwin32対応のバイナリが提供されているから、環境の構築はそれぞれwin32を利用するか、cygwinのパッケージを導入するかで組み合わせは4通りだ。パフォーマンス的にはwin32用のほうが有利なようだが、僕はApacheを含めてサーバ周りはcygwinのほうに入れておく使い方が好きなので*1、今回もその形態で挑戦した。cygwin, WebDAV, subversionの組み合わせなんていかにも誰でもやっていそうなものだが、検索してみると同じ環境で動作させたとか、その内容を書いたところがなかったのでメモしておこう。

元々XPのcygwinにはApache 1.3が入っていたので、まずcygwinのsetupを使って、Apache 1.3をアンインストールして、Apache2をインストールする。subversionは既に導入済みだったがupdateして、さらにsubversion-apache2という名前のApache2 (WebDAV)用のパッケージを新規にインストールした。

% cygcheck -c apache2 subversion subversion-apache2
Cygwin Package Information
Package              Version        Status
apache2              2.0.55-1       OK
subversion           1.2.3-1        OK
subversion-apache2   1.2.3-1        OK

以下行った作業の環境(前提):

  • C:\cygwincygwinがインストールされている。
  • C:\homeはcygwin環境で/homeとしてアクセスできるようマウントされている。(設定ファイルの中でCドライブやWindowscygwinのパス表記の違いを意識しなくて良いようにするため)
  • subversionおよびsubversion-apache2がcygwin環境にインストールされている。
  • subversionはC:\home\svn\reposとしてレポジトリの初期化が行われている。
  • subversionでレポジトリにbranch, tags, trunkという名前でsvn mkdirを行い、trunkには既存のデータをimport済みである。

この段階でApache2を起動すると正常につながり、telnet localhost 80等でつないでみると、"Server: Apache/2.0.55 (Unix) DAV/2 SVN/1.2.3"とレスポンスが返る。

SuvbersionのレポジトリをWebDAV経由で見せるためのC:\cygwin\etc\apache2\httpd.conf(cygwinからは/etc/apache2/httpd.conf)の基本設定は以下となる。


    DAV svn
    SVNParentPath "/home/svn"

httpd.confのLoad moduleのリストには、WebDAV関連で以下の2エントリーが含まれていたが、これだけでは"DAV svn"の解釈ができず、Apacheを起動しても"Unknown DAV provider: svn"というエラーになり失敗する。

LoadModule dav_module lib/apache2/mod_dav.so
...
LoadModule dav_fs_module lib/apache2/mod_dav_fs.so

そこで、cygwinの"subversion-apache2"パッケージを導入すると、/lib/apache2/mod_dav_svn.soが展開されるが、httpd.confの修正までは自動化されていないので手で行う必要がある。httpd.confのLoadModuleに以下の行を追加する。当然ながら"/lib/apache2/mod_dav_svn.so"の部分は実際にcygwinから見えるパスを記入しなければならない(cygwinの環境からはC:\cygwin\libは/libに見える)。

LoadModule dav_svn_module /lib/apache2/mod_dav_svn.so

これで、IEから"http://127.0.0.1/svn/repos/trunk"として、レポジトリの内容を参照でき、IEの「ファイルを開く」で、Webフォルダとしても参照できるようになった。

このままだとApache2(WebDAV)経由でネットワークから参照はできるが、更新ができない。そこでLocationを以下のように書き換えた。SVNParentPathの部分は、バージョン管理の対象がひとつならSVNPathとする。


    DAV svn
    SVNAutoversioning on
    SVNParentPath "/home/svn"
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile "/etc/subversion/passwd"
    
      Satisfy Any
      Require valid-user
    

認証用のファイルはどんな名前でどこに置いても良いが、今回はcygwinで/etc/subvresionというディレクトリを作成し、"htpasswd2 -c /etc/subversion/passwd username"コマンドによりpasswdというファイルを作成し、アカウントを登録した。これでやりたかった事が実現できた。

WebDAVを使う利点のひとつはhttpsの利用だが、cygwinでパッケージとして提供されているApache2ではsslが含まれていない(知らなかった)。

% /usr/sbin/httpd2.exe -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c

そのため、httpsでアクセスできるようにするためには、opensslとApache2のソースを落としてコンパイルし(バイナリとして配付されているのと同じバージョンであればmod_dav_svnは自分でコンパイルする必要はない)、証明書の作成とhttpd.confの設定を行わなければならない。実際やってみたが相当に面倒だ。

参考:

下記雑誌で鵜飼文敏さんが書かれている特集記事、「CVS/Subversion, リビジョン管理のことはじめ」が主要な機能をカバーしていながら記述が簡潔で非常にわかりやすい。

Debian GNU/Linux Expertデスクトップユーススペシャル

Debian GNU/Linux Expertデスクトップユーススペシャル

*1:最大の利点は設定ファイル等でWindowsのドライブ名を意識しないで使える点だ。