环境 :centos6.8 、 svn1.6.11
安装svn本来是很简单的事,但由于安装好windows客户端访问出现服务器没有应答的问题,困顿了一段时间,所以记录下问题。
安装svn
#yum install subversion mod_dav_svn
我的安装方法:
#检查是否安装了SVN
# rpm -qa subversion
#卸载旧版本SVN
# yum remove subversion
#安装SVN,输入官网提供的命令:
# yum install subversion mod_dav_svn
#若安装有问题,尝试将mod_auth_MysqL安上(yum install mod_auth_MysqL)
#确认已安装了svn模块
# cd /etc/httpd/modules
# ls | grep svn
mod_authz_svn.so
mod_dav_svn.so
安装完成后查看信息,如图,到此版本控制器安装完成。
最后一句,Cyrus SASL认证可用,说明在配置svn时可选用此认证方法,后文见。
配置仓库
#服务器上创建svn版本仓库:
#mkdir /svndata
#svnadmin create /svndata
#我在服务器上创建了一个svndata目录,作为版本库,目录自己指定。
命令执行完成后,在该目录下将会生成conf、db、hooks、locks等文件夹和format、README.txt文件。版本仓库的配置全在conf文件夹中,进入conf文件夹,有三个文件:authz | passwd | svnserve.conf。
编辑authz文件
为访问次仓库的人分配权限。文件中可以为每个人单独定义,一行定义一个;可以分配到组中,比如开发人员全部定义到一个组(coder)中
#vim authz
单独定义
noel=rw
noel用户具有读些权限分组定义,以
[groups]
代表节点开始。定义了三类人员,一类是程序员,一类是办公人员,还有一个老板。每个组的人用逗号分隔。
@H_403_83@
[groups]
coder=noel,harry,joe
staff=jin,sally
other=boss
然后为人员分配访问权限,可以组分配权限,可以单独为每个人分配权限。
Boss可以访问整个仓库,切具有读些权限,职员jin也具有读写权限访问整个仓库。匿名用户使用&指定。
[/]
@other=wr jin=wr &jim=r
程序员们只能访问仓库中的code文件夹,且其他人没有权限
[/code]
@coder=wr *=
以上权限分配方法记得灵活使用,权限有r=读,w=写,无权限为空。
编辑passwd文件
用于存放用户登录svn使用的密码。
格式是 用户名=密码
,一个用户一行
编辑svnserve.conf文件
这是访问SVN的控制文件,此配置文件只对于通过svn://访问的方式有效,http:// | file://等方式访问无效。每个配置指令配置文件都有说明。
我的设置如下,仅供参考:
[general]
anon-access=none 匿名无法访问
auth-access=write 认证的用户具有写权限
authz-db=authz 授权的访问者,就是之前配置的authz文件
password-db=passwd 指定访问者的密码存放位置,就是之前修改的passwd文件
[sasl]
#use-sasl=true
Sasl配置节点是可选节点,如果想用Cyrus SASL认证,svn的Cysus SASL就要可用,默认不使用此认证,即使配置了,svn不支持,那么此配置也会被忽略。
到此,svn版本仓库的配置完成,接下来就要启动服务供authz文件中的用户访问。
配置防火墙
#vim /etc/sysconfig/iptables
加入内容,因为svn提供的默认访问端口就是3690:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
或者直接使用命令,将防火墙规则追加到规则表:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
保存重启防火墙:
#service iptables restart
启动和停止svn服务:
svnserve -d -r /svndata #指定仓库位置,并启动后后台运行svn服务
Killall svnserve #停止svn服务
查看svn的状态:
ps -ef|grep svn|grep -v grep
#输出类似结果:root 12538 1 0 14:40 ? 00:00:00 svnserve -d -r /svndata
netstat -ln |grep 3690
#输出类似结果:tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
到此,可以通过svn客户端访问仓库了。
出现的问题
在做了以上配置后,windows svn客户端访问输出:
svn Error: Can't connect to host *.*.*.*': 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败
解决思路:
1、 查看服务器端的svn状态
ps -ef|grep svn|grep -v grep
查看svn是否在运行
2、 检查svn服务端,端口是否在监听
netstat -ln |grep 3690
3、 如果没有监听,或在启动的时候指定访问端口:
svnserve -d -r /svndata –listen-port 3690
4、 检查防火墙是否开放3690端口
5、 客户端能否正确链接对应端口
telnet IP 3690
我通过telnet发现输出信息:telnet: connect to address *.*.*.*: No route to host
然后执行如下命令,删除表链中的所有规则:
iptables -F
参考链接:
1、http://blog.163.com/modingfa_002/blog/static/1109254662010021112412843/
2、http://www.jb51.cc/article/p-fwpriccv-bog.html
Cyrus SASL 是 SASL(Simple Authentication Security Layer简单认证安全层,功能主要是用于SMTP认证) 的一个实现:
1、 wiki
2、开源社区