Redhat Enterprise互換のLinuxディストリビューション CentOS に、Subversionをインストールします
また、apacheで外部公開し、アクセス制御も行う設定をします
※以前書いた記事を本サイトに転記したものです
目次
- 構築する環境
- subversion導入
- subversionを使ってみる
- リポジトリの作成
- リポジトリの編成/ソースの追加
- タグの作成/ブランチの作成
- WebDAVでのリポジトリ公開
- WebDAVアクセス認証
構築する環境
Redhat Enterprise互換ディストリビューションであるCentOS上に、Subversionサーバを構築します
構築したSubversionサーバへはWebDAV経由でリポジトリへのアクセスを行える様にします
また、利用ユーザ(グループ)毎に細かいアクセス制限ができる様にします
WebDAVを使うという事で、apache2の導入も必要になります
ここではapache2の導入が終わっていることを前提での手順を記載します
subversion導入
yumにて導入を行います。
$ sudo yum install subversion
これでインストールは完了です
引き続き、リポジトリを作ったり、WebDAVで公開したり、アクセス認証の設定等を行っていきます
subversionを使ってみる
Subversionのインストールが完了しましたので、実際に使ってみようと思います
「sample」というプロジェクトのソースをsubversionで管理する様にします。(リポジトリ名もsample)
なお、sampleプロジェクトは以下の様なディレクトリ/ファイル構成とします。
sample +--src/ + aaaa.c + bbbb.c + include/ +aaaa.h +bbbb.h
また、リポジトリの編成は以下の様にします。
sample/trunk : 開発の主系 sample/branches : ブランチのコピーを保持 sample/tags : タグのコピーを保持
リポジトリの作成
リポジトリの作成場所は、/home/svn/repos/sampleとします。
ディレクトリを作成後、リポジトリをcreateします。
$ sudo mkdir -p /home/svn/repos/sample $ sudo svnadmin create /home/svn/repos/sample
リポジトリの編成/ソースの追加
リポジトリの編成及びソースの追加を行います。
編成
sampleリポジトリにtrunk,branches,tagsディレクトリを作成します。
$ sudo svn mkdir file://localhost/home/svn/repos/sample/trunk -m "create" $ sudo svn mkdir file://localhost/home/svn/repos/sample/branches -m "create" $ sudo svn mkdir file://localhost/home/svn/repos/sample/tags -m "create"
ソースの追加
sampleプロジェクトのソース一式が/tmp/sample/以下にあると仮定します。
開発の主系であるtrunkにソース一式をインポートします。
$ sudo svn import /tmp/sample file://localhost/home/svn/repos/sample/trunk -m "import trunk branches and tags."
タグの作成/ブランチの作成
タグ/ブランチとはソースのある時点でのスナップショットです。
例えば、「バージョン1.5」の時点での全ソースを後から取得したい場合にあらかじめバージョン1.5時点でのスナップショットを作成しておけば、いつでも取り出せます。
なお、subversionではタグ/ブランチの区別はありません。(ブランチは、最終的にtrunkにマージされるはず・・)
要は「どう使うか」です。
リポジトリの構成で、タグはtags、ブランチはbranchesと決めたので、それぞれの所に以下を実行してtrunkのある時点でのスナップショットを作成します。
$ sudo svn copy file://localhost/home/svn/repos/sample/trunk file://localhost/home/svn/repos/sample/tags/release-1.5 -m "Release 1.0"
これで、Release1.5のタグが作成されました。
WebDAVでのリポジトリ公開
これまでの設定で、SVNリポジトリは使える様になりましたので、WebDAVでリポジトリを公開すべく、追加で設定を行います。
この設定を行うことにより、http://localhost/svn/sample/trunk/ といったURLでリポジトリにアクセスできる様になります
mod_dav_svnの導入
yumにて導入を行います。
$ sudo yum install mod_dav_svn
mod_dav_svnの設定
apache2用のsubversion設定ファイル(/etc/httpd/conf.d/subversion.conf)に対して以下の設定を行います。
ファイルがない場合は新規に作成します
DAV svn SVNPath /home/svn/repos/sample
リポジトリのパーミッション変更
Apacheプロセスがリポジトリにアクセス(読み込み・書き込み)ができる様に適切にパーミッションを変更します
$ sudo chown -R apache:apache /home/svn/repos/sample
SELinux用対策
SELinuxが有効(Enforcing)の場合、/home/svn/repos以下に対して、ラベルを付与しアクセス可能となる様にします
$ sudo chcon -R -h -t httpd_sys_content_t /home/svn/repos
apache2の再起動
pache2を再起動し、設定を有効にする
$ sudo /etc/rc.d/init.d/httpd restart
動作確認
ブラウザで、http://ホスト名/svn/sample/ にアクセスすると、リポジトリが表示されます。
WebDAVアクセス認証
WebDAVでのリポジトリ公開の設定では、全ての人がリポジトリの参照及び更新ができてしまいます。
これではまずいので、細かい認証の設定例を記載します。
authzsvn.confの作成
home/svn/repos/sample/authzsvn.confを以下の様な内容で作成します
[groups] #開発者 developers = foo, bar #管理者 manager = foo [/] #すべての人が読み込み可能 * = r [sample:/trunk] #開発者は読み書き可能 @developers = rw [sample:/branches] #管理者は書き込みも可能 @manager = rw [sample:/tags] #管理者は書き込みも可能 @manager = rw
上記設定の場合、リポジトリ管理者をfoo , 開発者をfoo,barとして定義してます。
その他(匿名ユーザ)は読み込み専用とし、foo,barはtrunk下の読み書き可能、fooユーザはbranches及びtags下の読み書きが可能となります
匿名アクセスの設定例
すべての人に対して自由にアクセスすることを許します。ユーザは匿名で扱われます。
apache2用のsubversion設定ファイル(/etc/httpd/conf.d/subversion.conf)を以下の様に再定義します。
DAV svn SVNPath /home/svn/repos/sample # our access control policy AuthzSVNAccessFile /home/svn/repos/sample/authzsvn.conf
認証つきアクセスの設定例
すべての人に対して認証を求めます。
apache2用のsubversion設定ファイル(/etc/httpd/conf.d/subversion.conf)を以下の様に再定義します。
DAV svn SVNPath /home/svn/repos/sample # our access control policy AuthzSVNAccessFile /home/svn/repos/sample/authzsvn.conf # only authenticated users may access the repository Require valid-user # how to authenticate a user AuthType Basic AuthName "Subversion repository(sample)" AuthUserFile /home/svn/repos/sample/.htpasswd
なお、認証ファイル(/home/svn/repos/sample/.htpasswd)の作成は以下のようにして行います。
$ sudo /usr/bin/htpasswd -c /home/svn/repos/sample/.htpasswd foo
認証つき/匿名の両方でアクセスする場合の設定例
読み込み時は匿名でアクセスするが、更新時に認証を聞いてくる様な設定です。
apache2用のsubversion設定ファイル(/etc/httpd/conf.d/subversion.conf)を以下の様に再定義します。
DAV svn SVNPath /home/svn/repos/sample # our access control policy AuthzSVNAccessFile /home/svn/repos/sample/authzsvn.conf # try anonymous access first, resort to real # authentication if necessary. Satisfy Any Require valid-user # how to authenticate a user AuthType Basic AuthName "Subversion repository(sample)" AuthUserFile /home/svn/repos/sample/.htpasswd
特定ディレクトリ以下のみ参照不可とする
Subversionを使って会社間で共同開発する場合、見られたくないドキュメント等があると思います
ここでは、特定ディレクトリ以下についてのみ特定グループの人は参照不可とする為の設定を行います(ディレクトリの存在そのものが知られる事はありません)
Windowsの場合も設定するファイルは同じですので、表記のパス名をWindows用に読み替えてください
想定するディレクトリ構成
以下の様なディレクトリ構成を仮定し、「local」ディレクトリ以下は協力会社には見えない様に設定します
sample +trunk +--src + aaaa.c + bbbb.c : : : : +--docs + 設計書.xls : : +--local <-- (*)ここから下を不可視にする。 + 見積書.xls : :
authzsvn.confの設定
協力会社のグループを「partner」として設定し、authzsvn.confを以下の様に設定します。(リポジトリ名は「sample」です)
[groups] #開発者のアカウント (staff1,staff2,staff3というアカウントを定義) developers = staff1, staff2, staff3 #管理者のアカウント (oresamaというアカウントを定義) manager = oresama #協力会社のアカウント (other1,other2というアカウントを定義) partner = other1, other2 [/] @manager = rw [sample:/trunk] @developers = rw @manager = rw @partner = rw # 協力会社(@partner)は、/trunk/local以下のアクセスは拒否 [sample:/trunk/local] @partner =
これで、trunk/local以下は協力会社からは存在さえ気付かれないはずです。