本文描述了在CentOS 7/Ubuntu 20上配置SVN的HTTP访问的方式。
安装必要的包
- CentOS
yum install -y httpd subversion mod_dav_svn
- ubuntu
apt install -y apache2 libapache2-mod-svn
创建SVN仓库
mkdir -p /var/lib/svn
cd /var/lib/svn
svnadmin create devops
chown -R apache:apache devops
进行SELINUX相关设置
如果开启了SELINUX,则需执行如下两条命令:
chcon -R -t httpd_sys_content_t devops
setsebool httpd_unified=1
注:setsebool httpd_unified=1这个设置可以解决这样的错误:Can’t open file ‘/var/lib/svn/devops/db/txn-current-lock’: Permission denied
创建SVN仓库的用户及设置用户权限
cd /var/lib/svn/devops/conf
修改svnserve.conf文件,取消如下行前的注释并改成相应的值:
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
将默认的passwd文件改名,创建htpasswd格式的用户名密码文件passwd
mv passwd passwd.default
htpasswd -cm passwd yourname
htpasswd -m passwd myname
修改authz文件,配置用户和组对仓库下各目录的访问权限,文件内容示例如下:
[groups]
devops = yourname,myname
[/]
@devops = rw
[/system]
@devops = rw
[/vnetoss]
@devops = r
yourname = rw
添加httpd配置文件
cd /etc/httpd/conf.d
touch svn.conf
修改svn.conf文件内容如下:
<Location /devops>
DAV svn
#SVNParentPath /var/lib/svn
SVNPath /var/lib/svn/devops
# Limit write permission to list of valid users.
#<LimitExcept GET PROPFIND OPTIONS REPORT>
# Require SSL connection for password protection.
# SSLRequireSSL
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /var/lib/svn/devops/conf/passwd
AuthzSVNAccessFile /var/lib/svn/devops/conf/authz
Satisfy all
Require valid-user
SVNAdvertiseV2Protocol Off
#</LimitExcept>
</Location>
开启httpd服务并添加防火墙放行策略
systemctl enable httpd
systemctl start httpd
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
测试服务及排障
- 打开浏览器,访问http://192.168.100.100/devops,看看有无问题
- 在Windows系统上安装tortoisesvn客户端,checkout版本库后,提交一个README.md文件试试
- 如果无法正常访问(如403错误)或正常提交,可以看看服务器上/var/log/httpd下的access_log和error_log内容,看看是否之前的一些步骤有遗漏。
- 提交时报错:svn: E175002: Unexpected HTTP status 400 ‘Bad Request’ on ‘xxx/!svn/me’,可以通过在apache配置文件中加上
SVNAdvertiseV2Protocol Off
来解决。