SVN服务器设置指南

Subversion(也称为SVN) 是一个开源的版本控制系统,它既保留了老牌版本控制系统CVS的基本思想,又避免了它的错误和局限。SVN目前已经取代CVS,成为主流的版本控制工具。很多著名的开源社区都在使用Subversion,包括Apache、FreeBSD、GNOME、GCC、Samba等等。

Subversion把目录和文件集中到版本库(repository)里,通过时间戳进行管理。版本库以树型的文件目录结构保存信息,客户端连到版本库读取、修改和更新这些目录和文件。这让版本库看起来跟一般的文件服务器没多大的区别。但是跟一般的文件系统不同,版本库会记录目录和文件所做的每一次改变。你可以通过Subversion追踪目录和文件的历史修改记录,或者恢复目录和文件到任意时间点。

本文主要介绍SVN服务器设置相关内容,如希望了解更多有关SVN常用命令的内容,请参见科威网另一篇文章《SVN常用命令》。

1. 安装SVN

CentOS和RHEL官方源中已经包含了Subversion,用一条简单的yum命令就可以很方便地安装它的稳定版:

#yum -y install subversion

 

2.创建SVN版本库(Repository)

以创建Quenywell项目为例,假设版本库创建于/var/svn目录下:

#mkdir /var/svn
#svnadmin create --fs-type fsfs /var/svn/quenywell

这样你就有了一个Subversion版本库:

#ls -l /var/svn/quenywell
total 32 
drwxr-xr-x  6 root root 4096 Aug  2 17:14 . 
drwxr-x---. 9 root root 4096 Aug  2 17:14 .. 
drwxr-xr-x  2 root root 4096 Aug  2 17:14 conf 
drwxr-sr-x  6 root root 4096 Aug  2 17:14 db 
-r--r--r--  1 root root    2 Aug  2 17:14 format 
drwxr-xr-x  2 root root 4096 Aug  2 17:14 hooks 
drwxr-xr-x  2 root root 4096 Aug  2 17:14 locks 
-rw-r--r--  1 root root  229 Aug  2 17:14 README.txt

注意:/var/svn/quenywell只是普通文件系统路径,和使用SVN客户端访问版本库的路径是不一样的,不要在客户端上直接使用此路径访问版本库。

 

3.配置http访问方式

首先安装Apache的mod_dav_svn模块:

#yum -y install mod_dav_svn

然后按照下列步设置:

1).设置subversion.conf文件

安装包会在/etc/httpd/conf.d/下创建一个配置文件subversion.conf。编辑此文件,增加以下内容:

DAV svn
SVNParentPath /var/svn
AuthzSVNAccessFile /var/svn/quenywell/conf/authz
AuthType Basic
AuthName "Quenywell SVN repository"
AuthUserFile /etc/svnpwdfile
Require valid-user

2).配置AuthUserFile

AuthUserFile可以放在任何Apache可以访问的位置。本例中放在/etc目录下,文件名为svnpwdfile。
创建文件svnpwdfile:

#touch /etc/svnpwdfile

增加测试用户user01, user02,并设置访问密码为12345678:

htpasswd -b /etc/svnpwdfile user01 12345678
htpasswd -b /etc/svnpwdfile user02 12345678

3).配置SVN版本库访问权限

本例中AuthzSVNAccessFile文件位于/var/svn/quenywell/conf/authz。配置authz文件:

#增加两个用户组pm和dev
[groups]
pm = user01
dev = user02

# pm组对根目录有读写权限,dev组对根目录只有只读权限
[/]
@pm = rw
@dev = r

# pm组对trunk目录有读写权限,dev组对trunk目录只有只读权限
[/trunk]
@pm = rw
@dev = r

# pm组和dev组对branches目录都有读写权限
[/branches]
@pm = rw
@dev = rw

# pm组对tags目录有读写权限,dev组对tags目录只有只读权限
[/tags]
@pm = rw
@dev = r

4).设置版本库文件系统权限

允许Apache对版本库进行读写:

#chown -R apache:apache /var/svn/quenywell

如果有开启SELinux:

#chcon -R -t httpd_sys_content_t /var/svn/quenywell

5).重启Apache

# /etc/init.d/httpd restart

6).创建版本库文件夹

初始版本库根文件夹是空的,可以用以下命令创建文件夹:

$svn mkdir -m "Making the trunk dir" http://quenywell.com/repos/quenywell/trunk
$svn mkdir -m "Making the branches dir" http://quenywell.com/repos/quenywell/branches
$svn mkdir -m "Making the tags dir" http://quenywell.com/repos/quenywell/tags

 

7).使用https访问方式

如果需要避免使用明文传送SVN数据,可以给Apache开启https访问方式。或者使用以下的svn+ssh访问方式。

4.配置svn+ssh访问方式

svn+ssh方式有两个好处:

1.传输过程中帐号密码和数据都是通过ssh加密的,不用担心被截获
2.使用系统自带帐号,减少帐号密码维护成本

还是以创建Quenywell项目版本库为例:

1).创建版本库:

#svnadmin create --fs-type fsfs /var/svn/quenywell

2).建立quenywell用户组,把所有需要访问此版本库的用户加入这个组

#groupadd quenywell
#usermod -aG quenywell user01
#usermod -aG quenywell user02

3).设置版本库的文件系统权限

#chgrp -R quenywell /var/svn/quenywell
#chmod -R g+w /var/svn/quenywell

4).设置版本库访问权限

1.启用authz权限控制:

编辑/var/svn/quenywell/conf/svnserver.conf,在[general]小节中加入三行

anon-access = none
auth-access = write
authz-db = /var/svn/quenywell/conf/authz

2.设置/var/svn/quenywell/conf/authz文件

#增加两个用户组pm和dev
[groups]
pm = user01
dev = user02

# pm组对根目录有读写权限,dev组对根目录只有只读权限
[/]
@pm = rw
@dev = r

# pm组对trunk目录有读写权限,dev组对trunk目录只有只读权限
[/trunk]
@pm = rw
@dev = r

# pm组和dev组对branches目录都有读写权限
[/branches]
@pm = rw
@dev = rw

# pm组对tags目录有读写权限,dev组对tags目录只有只读权限
[/tags]
@pm = rw
@dev = r

5).创建版本库文件夹

$mkdir -p quenywell/trunk
$mkdir -p quenywell/branches
$mkdir -p quenywell/tags
$svn import quenywell svn+ssh://user01@quenywell.com/var/svn/quenywell -m “initial import”

5.配置svn协议访问方式

Subversion自带svnserve程序,可以通过运行svnserve守护程序支持svn协议访问方式。
以创建Quenywell项目版本库为例:

1).创建版本库:

#svnadmin create --fs-type fsfs /var/svn/quenywell

2).设置版本库访问权限

1.启用authz权限控制:

编辑/var/svn/quenywell/conf/svnserver.conf,在[general]小节中加入以下几行

anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

2.设置/var/svn/quenywell/conf/passwd文件

设置版本库用户和密码:

user01 = 12345678
user02 = 12345678

3.设置/var/svn/quenywell/conf/authz文件

#增加两个用户组pm和dev
[groups]
pm = user01
dev = user02

# pm组对根目录有读写权限,dev组对根目录只有只读权限
[/]
@pm = rw
@dev = r

# pm组对trunk目录有读写权限,dev组对trunk目录只有只读权限
[/trunk]
@pm = rw
@dev = r

# pm组和dev组对branches目录都有读写权限
[/branches]
@pm = rw
@dev = rw

# pm组对tags目录有读写权限,dev组对tags目录只有只读权限
[/tags]
@pm = rw
@dev = r

3).开启svn守护程序

开启svnserve守护程序并允许随系统启动:

#/etc/init.d/svnserve start
#chkconfig svnserve on

4).创建版本库文件夹

$mkdir -p quenywell/trunk
$mkdir -p quenywell/branches
$mkdir -p quenywell/tags
$svn import quenywell svn://user01@quenywell.com/var/svn/quenywell -m “initial import”

5).注意事项

svnserve的默认监听端口是TCP 3690,你可能需要设置你的防火墙以允许对TCP 3690端口的访问。以下是配置IPTables防火墙的参考例子:

#iptables -A INPUT -p tcp --dport 3690 -m state --state NEW,ESTABLISHED -j ACCEPT

如果需要了解更多IPTables防火墙规则,请阅读《常用IPTables防火墙规则范例
由于svn协议使用明文传输数据,且使用此协议连接版本库时需要使用特定端口,所以在信息安全管理比较严格的生产环境中可能没法使用这种访问方式。

(完)


除非注明,科威网文章均为原创。转载请以链接形式标明本文地址。
本文地址:http://quenywell.com/how-to-set-up-svn-subversion-server/

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注