安装以centos为例:
- 安装apache包:可以下载源码包编译安装或者直接yum install
`yum -y install httpd #必须`
- 安装和配置apache SVN模块:
yum -y install mod_dav_svn
会自动安装mod_dav_svn及其依赖包:mod_dav_svn-1.6.11-9,neon-0.29.3-2,pakchois-0.4-3.2,subversion-1.6.11-9
- 创建svn目录
mkdir -p /storage/svn/
svnadmin create /storage/svn/project1
- 建立svn帐号并设置密码:
htpasswd -c /storage/svn/conf/passwd user
- 分配svn帐号权限:
vim /storage/svn/conf/authz
[groups]
admin = john, kate
devteam1 = john, rachel, sally
devteam2 = kate, peter, mark
docs = bob, jane, mike
training = zak
# 为所有库指定默认访问规则
# 所有人可以读,管理员可以写,危险分子没有任何权限
[/]
* = r
@admin = rw
# 允许开发人员可以完全访问他们的项目版本库
[proj1:/]
@devteam1 = rw
[proj2:/]
@devteam2 = rw
[bigproj:/]
@devteam1 = rw
@devteam2 = rw
trevor = rw
# 文档编写人员对所有的docs目录有写权限
[/trunk/doc]
@docs = rw
# 培训人员可以完全访问培训版本库
[TrainingRepos:/]
@training = rw
- 配置svn数据仓库文件系统权限:
chown -R apache.apache /storage/svn/
chcon -R -t httpd_sys_content_t /storage/svn/ #注意 设置selinux权限,非常重要,不然密码文件不能被apache访问
- 配置svn数据仓库checkout地址:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn/>#注意:不能为/svn,否则SVNListParentPath可能失效
DAV svn
SVNListParentPath on
SVNParentPath /storage/svn
AuthType Basic
AuthName "Authorization"
AuthUserFile /storage/svn/conf/passwd
AuthzSVNAccessFile /storage/svn/conf/authz
Require valid-user
</Location>
说明:
<Location /svn/> //意味着可以通过像这样的URL(http://MyServer/svn)来访问Subversion版本库
DAV svn //告诉Apache哪个模块负责服务像那样的URL--在这里就是Subversion模块
SVNListParentPath on //在Subversion 1.3及更高版本中,这个指示器使得Subversion列出由SVNParentPath //指定的目录下所有的版本库
SVNParentPath D:SVNdata //告诉Subversion在目录D:SVNdata下寻找版本库
AuthType Basic //启用基本的验证,比如用户名/密码对
AuthName "Subversion repositories" //当一个验证对话框弹出时,告诉用户这个验证是用来做什么的
AuthUserFile D:SVNdatapasswd //指定D:passwd用为密码文件用来验证用户的用户名及密码
AuthzSVNAccessFile D:svnaccessfile //指定D:svnaccessfile来限定各个用户或组在版本库中目录的访问权限
Require valid-user //限定用户只有输入正确的用户名及密码后才能访问这个路径
- 重启apache,使配置生效
service httpd reload
或者service httpd restart
搭建过程中遇到的两个坑是:
- 未设置selinux权限导致apache不能访问passwd文件,密码不能验证。参见http://stackoverflow.com/questions/1225594/apache-13-permission-denied-in-users-home-directory
中第二个回答。 - svnlistparentpath on 失效,原因竟然是/svn/ 不能忽略后面的/
心得:
多看看日志apache的error.log日志,根据错误类型进行修改
参考文章: