CentOS 6.5安装配置SVN服务器

​项目要用SVN来管理,所以需要给服务器安装SVN服务器端。

这里仅使用svn://协议来访问SVN服务器,不启用sasl。

客户端系统都是Windows,使用起来很简单,这里就不用说了。

本文仅针对1.6.11版本。在1.7.14版本上测试时,发现创建的用户无效,客户端checkout时不提示输入用户名,指定用户名也没用,只能使用匿名登录,不知道为什么。

一、安装

# 检查是否安装了低版本的SVN
rpm -qa subversion
# 卸载旧版本SVN
yum remove subversion
# 安装SVN
yum install subversion
# 检验已经安装的SVN版本信息
svn --version

二、创建和配置代码库

创建代码库

SVN软件安装完成后需要建立SVN库

$ svnadmin create /opt/svn/repository

如果目录不存在,svnadmin会建立此目录。执行上面的命令后,将自动建立起repository库,查看/opt/svn/repository文件夹发现包含了conf, db, format, hooks, locks, README.txt等文件,说明一个SVN库已经建立。

进入上面生成的文件夹conf下,有以下几个文件authz, passwd, svnserve.conf。其中authz是权限控制,可以设置哪些用户可以访问哪些目录,passwd是设置用户和密码的,svnserve.conf是设置svn相关操作的。

svnserve.conf

这个文件控制svnserve的配置。包含两个selection:[general]和[sasl],由于不使用sasl,所以仅需要考虑如何设置[general]即可。

[general]
#匿名访问的权限,可为none,read,write
anon-access = none
#授权用户的权限,可为none,read,write
auth-access = write
#密码数据文件的路径,如不以/开头,则为相对路径
password-db = passwd
#访问控制文件的路径,如不以/开头,则为相对路径
authz-db = authz
#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字,不同的代码库需要不同的realm
realm = the 1st repository

密码数据文件

[users]
yankz = password

这样就建立了用户yankz,密码是password。可参照此建立多个用户,一行一个。

访问控制文件

[aliases]可以来设置别名,这里没用到;[groups]用来设定小组;其他selection用来设置每个目录的具体权限。

[groups]
admin = yankz,houyf,taoxd,ljying
[/]
yankz = rw
@admin = r
* =
[/ljying]
ljying = rw
@admin = r
* =
*

这里设置的是thor小组包含四个成员,根目录yankz具有读写权限,admin其他成员具有读权限,其他人没有权限。ljying目录,ljying具有读写权限,admin其他成员具有读权限,其他人没有权限。

三、启动和停止

执行“svnserve -d -r /opt/svn/repository”就可以启动了,默认使用3690端口。

如果已经有svn在运行,可以换一个端口运行

svnserve -d -r /opt/svn/repository --listen-port 3391

这样配置,每个端口仅有一个版本库,可以通过这种方式运行多个svnserve。

执行“killall svnserve”就停止了所有的svnserve。如果要停止某个svnserve,就先用“ ps -ef | grep svnserve”获取对应的pid,用“kill -9 pid”停止。

四、多版本库控制

除了通过使用不同的端口来运行多个svnserve,还有另一种方式。

如果svnserve的启动参数-r 所指定的目录直接指定到版本库,例如上面的情况,此时一个svnserve只能为一个版本库工作。

现在某目录下通过svnadmin create创建多个版本库,并-r指定到这些版本库的上级目录,如“svnserve -d -r /opt/svn”,这种情况,一个svnserve可以为多个版本库工作。

使用类似这样的“svn://192.168.0.1/project1” 即可访问project1,这样的“svn://192.168.0.1/project2 ”即可访问project2。

另外,如果某个访问控制文件需要同时对多个版本库进行控制,就应该指定具体的库,每个目录必须写成[版本库的名字:路径]的形式,像这样:

[groups]
admin = user1
[project1:/]
@admin = rw

五、防火墙配置

在 /etc/sysconfig/iptables 中添加以下内容:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT

然后重启防火墙:

service iptables restart

六、参考

Centos搭建SVN服务器三步曲

权限文件authz配置