Subversion サーバ を CentOS 5.5 で。

Subversion サーバは昔も家にたてていたのですが、ローカルサーバを Atom 機にしてからまだインストールしていなかったので CentOS 5.5 上に改めて構築してみました。

すぐたつと思ったら、いろいろ罠があってはまったのでメモ代わりの投稿です。 結論から言うと思った通りにたてることができませんでした。。orz

とりあえず、CentOS 5.5 に subvesion と Apache + mod_dav_svn をインストール。 mod_dav_svn は新しいものを使いたかったので、rpmforge から 1.6 系をもってきています。

[root@localhost conf.d]# rpm -q httpd
httpd-2.2.3-43.el5.centos
[root@localhost conf.d]# rpm -q mod_dav_svn
mod_dav_svn-1.6.12-0.1.el5.rf

でもって、/etc/http/conf.d/subvesion.conf を以下のようにしました。 全権限を BASIC 認証にしたのと、DocumentRoot が Apache とかぶると問題がでるようなので、新しいポートで mod_dav をたてています。

<VirtualHost *:8082>
   <Location />
      DAV svn
      SVNParentPath /home/apache/svn
      SVNListParentPath on
      DavDepthInfinity on
      Order deny,allow
      Deny from all
      Allow from 127.0.0.1
      Allow from 192.168.0.0/24
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /home/apache/passwd/.htpasswd 
      Require valid-user
   </Location>
</VirtualHost>

DocumentRoot かぶりの問題は、mod_dav_svn の FAQ に記載がありました。

Webブラウザからリポジトリを見られるようにしているんだけど、’svn checkout’ が、「301 Moved Permanently」というエラーになる。何が悪いの?

解決策としては、リポジトリの<Location>を、通常の Web 共有として既に公開されている領域とオーバーラップしないようにするか、もしくはその中へ収めるべきだ。

ここがまず一発目にはまったポイントでした。。

さてディレクティブに SVNParentPath というのがありますが、これが親ディレクトリから subversion を使う設定です。 要はプロジェクトの作成の権限をユーザがもてることになります。

てなわけで、Eclipse の Subclipse (SVNKit) からプロジェクトの共有を発行すると…。

svn: can not read HTTP status line
 PROPFIND request failed on '/'

エラー。。 なじぇ。。

http status line が読めないということで、まず SVNKit のソースを疑ったのが間違いの始まり。。 org.tmatesoft.svn.core.internal.io.dav.http の自前パーサでやっているようだったので、バグっているのかと。。

で、いろいろいじっていると、なんと本気で PROPFIND メソッドで status line が返ってきていないことが発覚。。

hiromasa@hiromasa-cube:~$ telnet 192.168.0.100 8082
Trying 192.168.0.100...
Connected to 192.168.0.100.
Escape character is '^]'.
PROPFIND / HTTP/1.1
Host: aaa
Authorization: Basic fjwi094j403fj49fj949
 
Connection closed by foreign host.

いきなりぶったぎられています。。 おかしいなぁということで、SVNParentPath の下に svnadmin create test とかして svn リポジトリをつくってそこを対象に同じ事をしてみると…

hiromasa@hiromasa-cube:~$ telnet 192.168.0.100 8082
Trying 192.168.0.100...
Connected to 192.168.0.100.
Escape character is '^]'.
PROPFIND /test HTTP/1.1
Host: aaa
Authorization: Basic fjwi094j403fj49fj949
 
HTTP/1.1 207 Multi-Status
Date: Sat, 21 Aug 2010 01:51:23 GMT
Server: Apache/2.2.3 (CentOS)
Content-Length: 2306
Connection: close
Content-Type: text/xml; charset="utf-8"
 
<?xml version="1.0" encoding="utf-8"?>
(以下略)

ちゃんと返ってくる~。 なじぇ~。 権限?ということで OPTIONS を発行してみると、、

hiromasa@hiromasa-cube:~$ telnet 192.168.0.100 8082
Trying 192.168.0.100...
Connected to 192.168.0.100.
Escape character is '^]'.
OPTIONS / HTTP/1.1
Host: aaa
Authorization: Basic fjwi094j403fj49fj949
 
HTTP/1.1 200 OK
Date: Sat, 21 Aug 2010 01:43:25 GMT
Server: Apache/2.2.3 (CentOS)
DAV: 1,2
DAV: version-control,checkout,working-resource
DAV: merge,baseline,activity,version-controlled-collection
DAV: http://subversion.tigris.org/xmlns/dav/svn/depth
DAV: http://subversion.tigris.org/xmlns/dav/svn/log-revprops
DAV: http://subversion.tigris.org/xmlns/dav/svn/partial-replay
DAV: http://subversion.tigris.org/xmlns/dav/svn/mergeinfo
DAV: <http://apache.org/dav/propset/fs/1>
MS-Author-Via: DAV
Allow: OPTIONS,GET,HEAD,POST,DELETE,TRACE,PROPFIND,PROPPATCH,COPY,MOVE,LOCK,UNLOCK
Content-Length: 0
Connection: close
Content-Type: httpd/unix-directory
 
Connection closed by foreign host.

ちゃんと Allow されているっぽい。。 なぞぞーん。。

で、ふと Apache の error_log を PROPFIND したタイミングでみてみると、、

[Sat Aug 21 11:53:30 2010] [notice] child pid 3497 exit signal Segmentation fault (11)

 

[tegaki]きゅるきゅるるるるる…、ぼぼん![/tegaki]

セグってるし。。 どうりですぐ切断されるはずです。。

てなわけで Apache が悪いのか mod_dav_svn が悪いのか、組み合わせが悪いのかちょっと分かりませんが、これ以上はぼくの手におえなそうです。 まぁアプリ的な設定が悪いわけではなさそうなのが収穫。

とりあえず SVNParent に直アクセスするのはあきらめて、プロジェクトできるたびに svnadmin create する運用にしたいとおもいます。 Eclipse にリポジトリいっぱい登録しなきゃいけないのがいたいですが、しょうがない。。

無事 Eclipse や TortoiseSVN からもみることができるようになりました。

snv01

ほいでもって、Redmine からも接続。 🙂

svn02

Eclipse の mylyn から Redmine につなげば、チケットとくくりつくようなことも可能なはずです。 もうちょっとやってみるデス。

コメントを残す