环境:
a. 系统为centos 6.0
b. 分为svn协议和http协议方式
c. 使用svnadduser同时更新svn协议的密码文件和http协议的密码文件

1. 安装

 
  
  1. # 安装subversion  
  2. yum install subversion  
  3. # 安装apache  
  4. yum groupinstall   
  5. # 安装mod_dav_svn模块  
  6. yum install mod_dav_svn 

"Web Server"组中包含httpd的安装包

2. 配置apache

 
  
  1. vi /etc/httpd/conf/httpd.conf  
  2. # 设置监听地址  
  3. Listen 192.168.1.11:8080  
  4. # 设置ServerName  
  5. ServerName 192.168.1.11:8080 

3. 建立Svn

 
  
  1. mkdir -p /data/subversion  
  2. cd /data/subversion  
  3. svnadmin create shell  
  4. chown -R apache:apache shell  
  5. # 权限文件和认证文件都放在以下目录  
  6. mkdir /data/subversion/conf 

一定要改变所创建的Svn目录的拥有者为Web服务器运行的用户,否则出现不能写入这些权限错误,这里为apache

4. 使用svn协议

a. 编辑svn项目的配置文件,这个文件在用svnadmin创建的目录的conf子目录下

 
  
  1. vi /data/subversion/shell/conf/svnserve.conf  
  2. # 匿名用户不能访问,认证用户具有写权限  
  3. anon-access = none 
  4. auth-access = write 
  5. # 设置权限和密码文件  
  6. password-db = /data/subversion/conf/passwd  
  7. authz-db = /data/subversion/conf/authz  
  8. # 认证登陆提示信息  
  9. realm = linuxjcq shell 

b. 创建权限文件和用户名文件

 
  
  1. cd /data/subversion/conf  
  2. # 配置权限:  
  3. vi authz  
  4. # 添加组,可以根据项目需要分成管理员组,只读组,也可以按具体的子目录来分组,进行权限控制  
  5. # 组成员用逗号分隔  
  6. [groups]  
  7. admin = jcq 
  8.  
  9. # 我想/data/subversion所有项目的svn库都使用同样的权限,所以使用[/path/to/access]的形式,如果想对具体项目进行权限控制可以使用[项目名:/path/to/access]  
  10. [/]  
  11. @admin = rw 
  12. * = 
 
  
  1. # 配置用户名和密码  
  2. vi passwd  
  3. jcq = xxxxxx 
  4. …… 

c. 将svn添加为服务

 
  
  1. vi /etc/sysconfig/subversion  
  2. # 文件中为启动要加的选项  
  3. OPTIONS="–listen-host 192.168.1.11 –listen-port 3690 -r /data/subversion -d" 
 
  
  1. vi /etc/rc.d/init.d/svnserve  
  2. #!/bin/bash  
  3. #  
  4. # /etc/rc.d/init.d/subversion  
  5. #  
  6. # Starts the Subversion Daemon  
  7. #  
  8. # chkconfig: 2345 90 10  
  9. # description: Subversion Daemon  
  10.  
  11. # processname: svnserve  
  12.  
  13. source /etc/rc.d/init.d/functions  
  14.  
  15. [ -x /usr/bin/svnserve ] || exit 1  
  16.  
  17. ### Default variables  
  18. SYSCONFIG="/etc/sysconfig/subversion" 
  19.  
  20. ### Read configuration  
  21. [ -r "$SYSCONFIG" ] && source "$SYSCONFIG"  
  22.  
  23. RETVAL=0 
  24. prog="svnserve" 
  25. desc="Subversion Daemon" 
  26.  
  27. start() {  
  28. echo -n $"Starting $desc ($prog): "  
  29. daemon $prog $OPTIONS  
  30. RETVAL=$?  
  31. [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog  
  32. echo  
  33. }  
  34.  
  35. stop() {  
  36. echo -n $"Shutting down $desc ($prog): "  
  37. killproc $prog  
  38. RETVAL=$?  
  39. [ $RETVAL -eq 0 ] && success || failure  
  40. echo  
  41. [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog  
  42. return $RETVAL  
  43. }  
  44.  
  45. case "$1" in  
  46. start)  
  47. start  
  48. ;;  
  49. stop)  
  50. stop  
  51. ;;  
  52. restart)  
  53. stop  
  54. start  
  55. RETVAL=$?  
  56. ;;  
  57. condrestart)  
  58. [ -e /var/lock/subsys/$prog ] && restart  
  59. RETVAL=$?  
  60. ;;  
  61. *)  
  62. echo $"Usage: $0 { start|stop|restart|condrestart }"  
  63. RETVAL=1 
  64. esac  
  65.  
  66. exit $RETVAL 
 
  
  1. chmod 0755 /etc/rc.d/init.d/svnserve  
  2. chkconfig –add svnserve  
  3. service svnserve start 

也可以直接手动启动,例如:svnserve –listen-host 192.168.1.11 –listen-port 3690 -r /data/subversion -d
编辑/etc/rc.d/rc.local文件中加入这个启动命令

5. 使用http协议

a. 配置

 
  
  1. vi /etc/httpd/conf.d/subversion.conf  
  2. # 确认这两行的存在  
  3. LoadModule dav_svn_module modules/mod_dav_svn.so  
  4. LoadModule authz_svn_module modules/mod_authz_svn.so  
  5.  
  6. # 配置svn仓库  
  7. <Location /subversion> 
  8. DAV svn   
  9. SVNParentPath /data/subversion  
  10.  
  11. <LimitExcept GET PROPFIND OPTIONS REPORT> 
  12. AuthzSVNAccessFile /data/subversion/conf/authz  
  13. AuthType Basic  
  14. AuthName "Authorization Realm"  
  15. AuthUserFile /data/subversion/conf/htpasswd.users  
  16. Require valie-user  
  17. </LimitExcept> 
  18. </Location> 

b. 创建认证的文档,相当于使用svn协议时的passwd

 
  
  1. htpasswd -cm /data/subversion/conf/htpasswd.users jcq  
  2. New password:   
  3. Re-type new password: 

开始时你要利用 -cm 这个选项。它会创建文件并用 MD5 将口令加密。如果你需要加用户,请确定你只使用 -m 选项,而不包含初次创建时的 -c。

c. 创建权限文件

 
  
  1. vi /data/subversion/conf/authz  
  2. # 添加组,可以根据项目需要分成管理员组,只读组,也可以按具体的子目录来分组,进行权限控制  
  3. # 组成员用逗号分隔  
  4. [groups]  
  5. admin = jcq   
  6.  
  7. # 我想/data/subversion所有项目的svn库都使用同样的权限,所以使用[/path/to/access]的形式,如果想对具体项目进行权限控制可以使用[项目名:/path/to/access]  
  8. [/]  
  9. @admin = rw 
  10. * = 


我的svn协议和http协议使用相同的权限控制文件

d. 启动apache

 
  
  1. service httpd start