Custom Search

JITAKU_SVR_Wiki

SVN

SVNは一言で言うと『バージョン(世代)管理ツール』になる。
特に開発をしている人たちにはほぼ必須に近いツール?

色々と調べたり、人から聞いた実体験だと、SVNは小~中規模で使われるツールだそうだ。

SVNをlinux上のコマンドラインで使うことももちろん可能だが、おそらく開発エンジニアにコマンドラインだけでやっている人はかなり少ないのでは・・・?
ということで、SVNをapache経由(webdav)を使用して、簡単に操作できるように構築。

SVNをapache経由で構築

apacheのインストール

# yum -y install httpd

# rpm -qa |grep httpd

詳細は省略

mod_dav_svnのインストール

# yum install mod_dav_svn



設定ファイルの編集

yumでmod_dav_svnをインストールすると以下に設定ファイルが出来上がる。

# ls /etc/httpd/conf.d/subversion.conf

このファイルをバックアップを取って編集。

# mv /etc/httpd/conf.d/subversion.conf /etc/httpd/conf.d/subversion.conf.org

# vi /etc/httpd/conf.d/subversion.conf
※コメントアウトされている部分が非常に邪魔だったので、自分で作成

# LoadModule
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location "/stuff">
   DAV svn
   SVNPath /var/www/svn/stuff
   AuthzSVNAccessFile /etc/httpd/conf.d/authzsvn.file

   AuthType Basic
   AuthName "Authorization Realm"
   AuthUserFile /etc/httpd/.htpasswd
   Require valid-user
</Location>

詳細は下記

一応ここまででapache関係の設定は終了。

■subversion.confについて
LoadModuleでmoduleがあるパスを指定する。
Locationでリポジトリを指定する。

DAV svn 		- Subversionを利用するために必ず指定する。
SVNPath			- リポジトリを作成したディレクトリへのパス。
				  →DocmentRootのパスではなく、サーバ上のディレクトリを指定する。
SVNParentPath 	- 主にリポジトリを複数運用する場合に用いる。
				  →リポジトリの親ディレクトリを指定する。

今回はリポジトリを個別で作成し、それぞれにアクセス権限を設ける。

AuthzSVNAccessFile
アクセスコントロール設定ファイル
→以下で説明


・Basic認証
AuthzSVNAccessFileのユーザコントロールに紐付くので必須項目
Basic認証の詳細は省略

 AuthType Basic
 AuthName "Authorization Realm"
 AuthUserFile /etc/httpd/.htpasswd
 Require valid-user

一人目のユーザ作成
# htpasswd -c /etc/httpd/.htpasswd root

以降のユーザ作成
# htpasswd /etc/httpd/.htpasswd hoge

SVNリポジトリの作成

リポジトリ ・・・ ファイルの各バージョンをデータベースに保持しており、このデータベースを一般にリポジトリと呼ぶ。
(yumなどで使うリポジトリの意味と同じ)

・subversion.confで設定したパスにリポジトリを作成する。

# mkdir /var/www/svn

# cd /var/www/svn

# svnadmin create --fs-type fsfs stuff

# chown -R apache.apache stuff
svnadminでリポジトリのファイルシステムを今回は指定

authzsvn.fileを作成

名前は任意。
ただし、/etc/httpd/conf.d/****.confという風にファイルの末尾に.confを使用すると、httpd.confから読み込もうとするので、避けること。
authzsvn.fileにはアクセスコントロールをするための記述がある。

# vi authzsvn.file

[groups]
#開発者
developers=root,foo,bar,hoge

#管理者
manager=root,hoge

[stuff:/]
#groups以外は読み書き禁止
@developers = rw
@manager = rw
* =

[stuff:/trunk]
#開発者は読み書き可能
@developers = rw

[stuff:/branches]
#管理者は書き込みも可能
@manager = rw

[stuff:/tags]
#管理者は書き込みも可能
@manager = rw
■authzsvn.fileについて
groupsの定義
小規模であれば各ディレクトリごとにユーザのアクセス権限を書いても問題ないのだが、
大規模になってくると、ユーザ一人一人を定義していくのが大変なのでgroupsとして定義する。
ここでは
"developers"にdevelopers=root,foo,bar,hoge
"manager"にroot,hogeを所属させる。

[stuff:/]
@developers = rw
@manager = rw
* =
→リポジトリ全体に対してdevelopersに所属しているユーザは読み込み、書き込みが可能

[stuff:/trunk]
@developers = rw
→trunkに対してはdevelopersに属しているユーザは読み、書き可能

[stuff:/branches]
@manager = rw
→brabchesの読み、書きはmanagerに属しているユーザのみ可能

[stuff:/tags]
@manager = rw
→tagsの読み、書きはmanagerに属しているユーザのみ可能

r=read
w=write
(none)=権限なし
→"* ="のような記述のこと

apacheの再起動して、ブラウザから確認する

・apache再起動

# /etc/init.d/httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]

・SVNをブラウザ確認
http://(サーバのIPアドレス)/stuff

↓エラーが出ている状態

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<D:error xmlns:D="DAV:" xmlns:m="http://apache.org/dav/xmlns" xmlns:C="svn:">
<C:error/>
<m:human-readable errcode="2">Could not open the requested SVN filesystem</m:human-readable>
</D:error>

error_log

[Thu Apr 26 08:13:03 2012] [error] [client 10.60.1.44] (20014)Internal error: Can't open file '/var/www/stuff/format': No such file or directory
[Thu Apr 26 08:13:03 2012] [error] [client 10.60.1.44] Could not fetch resource information.  [500, #0]
[Thu Apr 26 08:13:03 2012] [error] [client 10.60.1.44] Could not open the requested SVN filesystem  [500, #2]
[Thu Apr 26 08:13:03 2012] [error] [client 10.60.1.44] Could not open the requested SVN filesystem  [500, #2]

リポジトリの作り方が失敗していたので、再度作成しなおすことで成功。

http://(サーバのIPアドレス)/stuff
※以下のような文字が出ていればOK

stuff - Revision 0: /

Powered by Subversion version 1.6.11 (r934486).

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-12-17 (木) 16:50:41 (702d)