at posts/single.html

Subversion 環境

次に、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に行を追加していけばいいみたい。

関連する日記