svn
初心者

【SVN】サーバにSVNを導入しよう

More than 1 year has passed since last update.

先日、会社のサーバにSVNを導入したときに実施した手順をメモしたものです。
サーバへSVNを導入するところから、apacheを使用したリポジトリの公開、利用できるユーザの登録と
アクセス権限の設定について記載していきます。
ここまでの手順を踏めば、あとはtrunkに管理したいファイルをインポートすることでバージョン管理ができるはず。

今回導入した環境
CentOS (バージョンは失念 6?)
apache導入済み。

1.SVNの導入

rootユーザで以下のコマンドを入力。以降の手順もすべてrootユーザで行います。
これでサーバ上でのリポジトリの作成、ファイルのインポートはできるようになります。

# yum install subversion

2.リポジトリの作成

まずリポジトリのディレクトリを作成します。
今回は複数のリポジトリを管理する運用としたいため、ルートディレクトリとなるreposディレクトリを作成後、その下にリポジトリとするtestディレクトリを作成しました。

つぎにSVNコマンドでtestリポジトリを作成します。
(今回は参考サイトに倣ってhomeディレクトリ下にリポジトリを作成しましたが、どこにリポジトリを作成するのが一般的なんでしょう?var?)

# mkdir -p /home/svn/repos/test
# svnadmin create /home/svn/repos/test

3.リポジトリの編成

作成したtestリポジトリ配下にtrunk,branches,tagsディレクトリを作成します。
コミットも発生するので、-m でコミットメッセージも記載します。

# svn mkdir file:///home/svn/repos/test/trunk -m "create"
# svn mkdir file:///home/svn/repos/test/branches -m "create"
# svn mkdir file:///home/svn/repos/test/tags -m "create"

4.mod_dav_svnの導入

webDAVを導入し、リポジトリを公開します。
これにより、複数のユーザがapache経由でリポジトリとやりとりをすることができるようになります。

# yum install mod_dav_svn

5.リポジトリのパーミッション変更

Apacheプロセスがリポジトリにアクセスできる様にパーミッションを変更します。

# chown -R apache:apache /home/svn/repos/

6.subversion.confの設定

subversion設定ファイル(/etc/httpd/conf.d/subversion.conf)に対して以下の設定を行います。
今回は以下の文言を設定ファイルの末尾に追記する形で設定しました。

<Location /svn/repos>
  DAV svn
  SVNParentPath "/home/svn/repos/"
  SVNListParentPath on
</Location>

ちなみに各場所でなにを設定しているかというと、

  • <Location /svn/repos> subversionのRootディレクトリ以下をどのようなURLで表示させるかを指定します。左記の設定なら、http://localhost/svn/repos となります。

  • DAV svn お決まりの文言。

  • SVNParentPath リポジトリのルートフォルダを指定します。   

  • SVNListParentPath on ブラウザでリポジトリにアクセスした際、リポジトリ配下をリスト表示させるかを指定します。

7.確認

ここまでの手順を踏むことによって
ブラウザで http://IPアドレス/repos/リポジトリ名 にアクセスすることで
リポジトリを確認することが可能となります。

この状態でも複数人による運用は可能ですが、
だれでも参照・更新ができてしまうのでセキュリティの面で大変よろしくありません。
次にユーザ登録とアクセス権限の設定を行います。

8.BASIC認証方式の設定

ブラウザでリポジトリの確認ができたら、subversion.confの「SVNListParentPath on」より下に設定を追記していきます。

<Location /svn/repos>
  DAV svn
  SVNParentPath "/home/svn/repos/"
  SVNListParentPath on
  AuthType Basic
  AuthName "Subversion repository"
  AuthzSVNAccessFile /etc/subversion/conf/authzsvn.conf
  AuthUserFile /etc/subversion/conf/authuser.conf
  Require valid-user
</Location>

各設定項目の内容は以下の通り。

  • AuthType 認証タイプ。Basicを指定することによって、Basic認証になります。
  • AuthName 認証画面に表示される認証名。この値で固定です。
  • AuthzSVNAccessFile SVNフォルダ(svn/repos配下)のアクセス許可の設定ファイル名
  • AuthUserFile ユーザ名とパスワードが記載されているファイル名を指定します。
  • Require valid-user アクセスを許可するユーザを指定。「valid-user」はパスワードファイルに含まれているすべてのユーザに許可することを意味する。

記載の順序は不問のようです、

9.ユーザ作成

下記のコマンドを実行し、ユーザを追加していきます。
(手順では省略していますが、subversion以下のディレクトリとファイルは予め作成しておきます。)

# htpasswd /etc/subversion/conf/authuser.conf (ユーザーID)

コマンド実行後、パスワードの入力が求められるので
2回入力します。

10.ユーザのリポジトリ権限登録

authzsvn.confファイルにユーザIDとそれに紐づく権限を記載していきます。
基本的な記載方法は以下の通り。

 [ディレクトリパス]
 (ユーザーID) = (参照権限)

[ディレクトリパス]はSVNParentPath で設定したディレクトリパスより配下のディレクトリのうち、どのディレクトリに対する権限を設定するか記載するところ。
[/]とすると、ルートディレクトリとなり、SVNParentPathに設定したディレクトリパスより下となります。
[/test]とすると、testリポジトリに限定した権限設定となります。

参照権限については、以下の表にまとめました。

参照権限 内容
r  参照権限を付与
w  書き込み権限を付与。
rw 参照・書き込み権限を付与。
未記入  参照・書き込み権限を付与しません。

例えば、ルートディレクトリ配下に対し、user1に参照・書き込み権限を付与、user2に参照権限を付与、user3に権限を付与しない場合は以下のようになります。

[/]
user1=rw
user2=r
user3=

11.apacheを再起動する

すべての設定が完了したら、設定読み込みのためにapacheを再起動します。

# /etc/rc.d/init.d/httpd restart

12.動作確認

ブラウザで http://IPアドレス/repos/リポジトリ名 にアクセスすると、BASIC認証画面が表示されます。
以上で複数人での運用を想定したSVNの設定は完了です。

参考サイト

Subversionの導入 - Linux編 1/4
Subversion - ユーザー作成手順 [ファイル管理] - Qiita
リポジトリごとにアクセス許可を設定する