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