Subversion 環境
2005-09-23
次に、Subversion の環境を作る。
- 閲覧は Web から
- 更新は svn+ssh
という構成にする。
Apache2.0 (閲覧用)
まず、デフォルトで Apache 1.3 が入っていたので、 2.0 に入れ替える。
$ sudo pkg_delete apache1.3
$ pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-stable/All/apache-2.0.54_4.tbz
次に、Subversion を入れる。
インストール時に設定を変えるには、make の引数で指定するのが ports の流儀らしい。 graphite.dを参考にしながら、以下の手順でインストールする。
# cd /usr/ports/devel/subversion
# make clean
# make WITH_MOD_DAV_SVN=YES WITH_APACHE2_APR=YES
(中略)
You should build `www/apache2' with db4 support to use subversion with it.
Please rebuild `www/apache2' with option `WITH_BERKELEYDB=(db4|db41|db42)' and try again.
Or you can disable db4 support. Only 'fs' repository backend will be availible.
To disable db4 support, define WITHOUT_BDB.
Apache 側にも BerkeleyDB の設定がいるらしい。 でも、Subversionのファイルシステムは fsfs を使うつもりなので、BerkeleyDB を使わないようにして、再度コンパイル。
# make WITH_MOD_DAV_SVN=YES WITH_APACHE2_APR=YES WITHOUTBDB=YES
# make install
インストールが終わると、リポジトリを作ったりソースを入れたり。
# mkdir /usr/local/var/svn
# svnadmin create /usr/local/var/svn/pukiwiki
# svn import pukiwiki-cvs \
file:////usr/local/var/svn/pukiwiki/current \
-m 'importing pukiwiki-20050923 vendor drop'
次に、ただのにっきを参考に Apache からリポジトリを参照できるようにする。
# cd /usr/local/etc/apache2/Includes
# vi dav_svn.conf
<Location />
<IfModule mod_dav.c>
Dav svn
SVNParentPath /usr/local/var/svn
</IfModule>
<LimitExcept GET PROPFIND OPTIONS REPORT>
Deny from all
</LimitExcept>
</Location>
Apache を起動しようとすると、エラーがでてしまった。
# /usr/local/sbin/apachectl start
Syntax error on line 275 of /usr/local/etc/apache2/httpd.conf:
Cannot load /usr/local/libexec/apache2/mod_dav_svn.so into server:
/usr/local/libexec/apache2/mod_dav_svn.so: Undefined symbol "dav_xml_get_cdata"
dav_module が有効になっていないことが原因らしいので、 httpd.conf を修正。
# vi /usr/local/etc/apache2/httpd.conf
LoadModule dav_module libexec/apache2/mod_dav.so
再度起動すると、Web上からリポジトリを参照できるようになった。
svn+ssh (更新用)
公式ドキュメントを読むと、 ssh 経由で svnserve を起動するらしい。 何か特別な設定がいるのかと思ったけど、手元のマシン (colinux + Debian) でいきなり接続してみたら、何もせずに繋がってしまったのでビックリした。 そういうものなのね。
$ svn list svn+ssh://dev.machu.jp/usr/local/var/svn/pukiwiki/
trunk/
vendor/
しかも、 Windows 機の TortoiseSVN からも、認証すら不要で繋がってしまった。
svn+ssh://dev.machu.jp/usr/local/var/svn/pukiwiki/
SSH には PuTTY の鍵を使っているらしく、それで見た目は勝手に繋がった(裏ではSSH接続してる)んだろうけど、こうもすんなり動くと逆に不安になったりもする(笑)。
…と、ここまでやったところで、僕の場合はWebからの閲覧って別に必要ないことに気がついてしまった。
追記
リポジトリのパスをルートから書くのは面倒だしセキュリティ的にもよくないので、ドキュメントを参考に、特定のディレクトリしか公開しないようにする。
まずは、 svn 接続専用のユーザ (svn) を作成し .ssh/authorized_keys を以下のように作成する(実際は一行)。
command="svnserve -t --tunnel-user=machu -r /usr/local/var/svn"
ssh-dss AAAAB(中略)M6BA== ****@machu.jp
これで、
svn+ssh://svn@dev.machu.jp/pukiwiki/
で接続できるようになる。 複数ユーザでリポジトリを共有する時は、authorized_keysに行を追加していけばいいみたい。