svnserveデーモンを起動させるための設定方法。 ここではローカルネットワーク内からのアクセスのみを許可する条件で設定を行う。
svnserveの設定
まずはsvnserveを動作させるためのユーザ(ここではsvnとする)を作成する。
useradd svn
続いてリポジトリを格納するルートディレクトリ(ここでは/srv/repos)を作成する。 svnserveが書き込めるようにオーナをsvnにしておく。
mkdir /srv/repos
chown -R svn:svn *
/etc/servicesにsvnのサービス名と使用ポート番号が記述されていることを確認する(もしなければ追記する)。
svn 3690/tcp subversion # Subversion protocol
svn 3690/udp subversion
/etc/hosts.allowに下記の内容を追記し、内部ネットワークからの接続のみを許可する。
svnserve : 192.168.0. 127.0.0.1
また、iptablesなどを使ってファイヤーウォールの設定がされている場合は、3690番のポートを忘れずに空けておくこと。
続いて、inetdもしくはxinetdでsvnserveを起動するための設定を行う。
xinetd経由でsvnserveを起動する場合
xinetdの設定をするために、/etc/xinetd.d配下にsvnというファイルを作成し、下記の内容を書き込む。
service svn
{
disable = no
socket_type = stream
wait = no
user = svn
server = /usr/bin/svnserve
server_args = -i -r /srv/repos
log_on_failure += USERID
only_from = 192.168.0.0/24 127.0.0.1
}
設定項目の意味は次の通り。
- user
- svnserveを実行するユーザ。
- server
- svnserveへのフルパス。
- server_args
- svnserveに渡す引数。 「-r /srv/repos」でリポジトリのルートディレクトリを/srv/reposに設定している。
- log_on_failure
- 接続に失敗した場合、ユーザ名をログに記録する。
続いて、chkconfigコマンドを使ってsvnserveを起動できるようにする。
# svnserveを起動するようにする
chkconfig --add svnserve
# 設定が反映されているか確認する
chkconfig --list svnserve
上記のコマンドを打ったあと、次のように表示されればOK。
svnserve: on
起動設定が整ったところで、xinetdを再起動する。
service xinetd restart
telnetでsvnserveに接続して、次のようなメッセージが表示されればsvnserveが正常に動作していることが確認できる。
$ telnet localhost svn Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. ( success ( 1 2 ( ANONYMOUS ) ( edit-pipeline svndiff1 absent-entries ) ) ) Connection closed by foreign host.
inetd経由でsvnserveを起動する場合
/etc/inetd.confにsvnserveの起動パラメータを追記する。 xinetdの場合と同様、「-r /srv/repos」でリポジトリのルートディレクトリを/srv/reposに設定している。
svn stream tcp nowait svn /usr/sbin/tcpd /usr/bin/svnserve -i -r /srv/repos
起動設定が整ったところで、inetdを再起動する。
/etc/init.d/openbsd-inetd restart
telnetでsvnserveに接続して、次のようなメッセージが表示されればsvnserveが正常に動作していることが確認できる。
$ telnet localhost svn Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. ( success ( 1 2 ( ANONYMOUS ) ( edit-pipeline svndiff1 absent-entries ) ) ) Connection closed by foreign host.
リポジトリの作成・設定
まずはリポジトリを作る。 ここではsandboxというリポジトリを/srv/reposに作成する。
# svnになる
su svn
# svnadmin createでリポジトリを作成
svnadmin create /srv/repos/sandbox
続いて、リポジトリのアクセス設定を行う。 リポジトリを作成すると自動的にconfディレクトリが作成される。 その中に次の三つのファイルが作成される。
- svnserve.conf
- svnserve経由でのリポジトリへのアクセス制限。 ユーザ設定ファイル・アクセス設定ファイルの指定など。
- passwd
- ユーザとパスワードの指定。
- authz
- ユーザごとのアクセス設定。
まずはsvnserve.confの設定例。
[general]
anon-access = none # Anonymous(匿名)ユーザのアクセスを許可しない
auth-access = write # 認証済みユーザには書き込み権限を与える
password-db = passwd # パスワードファイルをpasswdとする
realm = sandbox # リポジトリの説明(適当でOK)
anon-access、auth-accessに設定できる値は次の三つ。
- none
- アクセスを許可しない
- read
- 読み込み権限を与える
- write
- 読み込み、書き込みの両方の権限を与える
続いてpasswdの設定例。 リポジトリにアクセスするユーザの数だけ「ユーザ名=パスワード」の形式で記述する。
[users]
smdn=password
authzについては省略。 passwdファイルの編集が終わったら、アクセス権限をsvnだけに設定して、他のユーザからアクセスできないようにする。
cd /srv/repos/sandbox/conf
chmod 600 passwd
chown svn:svn passwd
ここまでで設定は完了。 作成したリポジトリをチェックアウトできるようになる。
$ svn co svn://localhost/sandbox/ ./sandbox 認証領域: <svn://localhost:3690> sandbox 'smdn' のパスワード: (passwdで指定したパスワードを入力) リビジョン 0 をチェックアウトしました。 $ svn info ./sandbox パス: sandbox URL: svn://localhost/sandbox リポジトリのルート: svn://localhost/sandbox リポジトリ UUID: a3c65e7f-1127-41a2-baf2-0f721aaea87c リビジョン: 0 ノード種別: ディレクトリ 準備中の処理: 特になし 最終変更リビジョン: 0 最終変更日時: 2009-11-21 05:08:44 +0900 (土, 21 11月 2009)