cygwinでSubversion+WebDAV
自分でメンテナンスしているwebページの管理には、iTunesサーバと化しているMac miniにインストールしたCVSを使っている。CVSの後継として開発されているSubversionに興味があったので、Mac miniとWindows XPのノートにsubversionのパッケージをいれてみた(ここまではportとcygwinのパッケージ管理を使えば何も考えずにできる)。SubversionにはCVSにはないいくつかの利点があるが、中にWebDAV対応があり以前から興味を持っていた。そこで連休の時間を利用してWebDAVをWindows XPのノートにインストールしてみることにした。
ApacheやSubversionはいずれも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:\cygwinにcygwinがインストールされている。
- C:\homeはcygwin環境で/homeとしてアクセスできるようマウントされている。(設定ファイルの中でCドライブやWindowsとcygwinのパス表記の違いを意識しなくて良いようにするため)
- 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デスクトップユーススペシャル
- 作者: 技術評論社書籍編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2004/08
- メディア: 単行本
- クリック: 9回
- この商品を含むブログ (26件) を見る