Apache Subversion はApacheライセンスで公開されているオープンソースの集中型のバージョン管理システムです。バージョン管理システムを使うことで、いつでも過去のバージョンのファイルを見たり戻したり、2つの時点の差分を確認すること簡単に可能になります。
FreeBSD 9.x プラットフォームでの Apache Subversion 1.8.x サーバーを特にローカルネットワーク内のみの運用を前提にセットアップを行うものとします。
1. セットアップ前に決めておくこと
Subversionの管理者はセットアップを始める前に以下の点を決めておく必要があります。
通信プロトコル
Subversionではsvn系とhttp系のプロトコルが選択でき特長をまとめると以下のような表になります。
プロトコル
パスワードのセキュリティ
通信データのセキュリティ
CPU負荷
svn
あり(CRAM-MD5)
なし
低い
svn+ssh
あり(SSH)
あり(SSH)
高い
https(WebDAV)
あり(SSL,TLS)
あり(SSL,TLS)
高い
svnの場合はssh、WebdDAVの場合は SSLやTLSでパスワードも通信データも暗号化して通信を行う事ができますが、Subversionを稼動させるサーバーのCPU負荷が高くなります。ローカルネットワーク内で使用する場合には svnプロトコルを選ぶことが多いでしょう。本手順では svn プロトコルを使用します。
クライアントはsvn://で始まるURL によってsvnserve サーバと通信します。CRAM-MD5方式で認証を行いますので、ネットワークに平文のパスワードが流れることはありません。
リポジトリストア方式
Subversionではリポジトリストアのストア方式は2つ選択があって、Berkeley DB に保存する方式(BDB)と独自の形式で構成した通常のフラットファイルの形にデータを保存する方式(FSFS)で、デフォルトは FSFSとなっています。Berkeley DB リポジトリはトランザクションの途中で異常終了するとロックが残ってしまいリポジトリが固まってしまう問題があり、管理コマンドで復旧は出来るとはいえ手間がかかるので、この問題が発生しないFSFSを使用する事にします。
2. Subversionのインストール
cd /usr/ports/devel/subversion
make config
[X] FREEBSD_TEMPLATE FreeBSD Project log template
[X] P4_STYLE_MARKERS Perforce-style conflict markers
make install
svnユーザーが自動で追加されます。
3. Subversionの設定
vi /etc/rc.conf
svnserve_enable="YES"
svnserve_flags="-d --listen-port=3690"
4. リポジトリの設定
リポジトリを作成する
sudo svnadmin create /home/svn/repos/subversion
chown -R svn:svn /home/svn/repos
FSFS方式でリポジトリを作成します。
アクセスコントロールを設定する
svnserve.conf ファイルで認証されていない匿名ユーザと、認証されたユーザのアクセス権限を設定する事ができます。匿名ユーザは anon-access 、認証されたユーザにはauth-access変数に、次のアクセスタイプを指定します。
設定値
説明
none
アクセス不可
read
読み取りのみ可能
write
読み取りと書き込みが可能
より細かくリポジトリのファイルパス毎にアクセス制御を行うことも出来ます。この場合はauthz-db 変数で指定するファイルで設定します。
vi /home/svn/repos/subversion/conf/svnserve.conf
[general]
anon-access = none
realm = yosbits.com
[sasl]
use-sasl = true
ユーザを登録する
svnserve.conf ファイルでpassword-db変数にパスワードファイル名を指定して、パスワードファイルに以下の書式でユーザー名とパスワードのペアを記述します。
<ユーザー名>=<パスワード>
svnservのパスワードファイルでパスワードを管理する場合、Subversionの管理者がユーザーのパスワードを直接管理する事になります。
5. 運用手順
svnserv 起動
/usr/local/etc/rc.d/svnserv start
svnserv 停止
/usr/local/etc/rc.d/svnserv stop
6. 関連文書