结构:
开发人员本地提交——内网SVN server——同步至公网SVN server——更新至各WEB机。
环境:centos5.5 svn+apache
主Svn
|
系统环境
|
所需软件包 均64位
|
Centos5.5/64
|
subversion-1.6.13-0.1.el5.rfx.x86_64.rpm
subversion-devel-1.6.13-0.1.el5.rfx.x86_64.rpm依赖及工具包
mod_dav_svn-1.6.13-0.1.el5.rfx.x86_64.rpm
(apache+subversion所需的加载模块)
httpd-2.2.3-43.el5.centos
apr-1.2.7-11.el5_3.1, apr-util-1.2.7-11.el5编译依赖组件
|
- svnadmin create /data/svnproj/test
- svnadmin create /data/svnproj/testen
- chown –R apache:apache /data/svnproj/test
- chmod –R 755 /data/svnproj/testen
- #svn group list
- [groups]
- tc_nginx_grp = user1
- [/]
- sourcesync = r
- * = r
- [test:/]
- @tc_nginx_grp = rw
- [testen:/]
- user1 = rw
- <Location /svn/>
- DAV svn
- SVNListParentPath on
- SVNParentPath /data/svnproj 库路径/dat/svnproj/...
- AuthType Basic
- AuthName "Authorization Realm"
- AuthUserFile /data/conf.d/svn_user_list 指定用户验证文件
- AuthzSVNAccessFile /data/conf.d/project.access 指定权限验证文件
- Require valid-user
- Location>
二、公网Svn配置(配置步骤大致同主SVN)
1.建SVN库
- svnadmin create /data/svnbak/test 并修改属主apache 755权限
- /data/conf.d/project.access
- [/]
- dessync = rw
- [test:/]
- testupdate = r
- [testen:/]
- testenupdate = r
- <Location /svn/>
- DAV svn
- SVNListParentPath on
- SVNParentPath /data/svnbak 库路径/dat/svnbak/...
- AuthType Basic
- AuthName "Authorization Realm"
- AuthUserFile /data/conf.d/svn_user_list 指定用户验证文件
- AuthzSVNAccessFile /data/conf.d/project.access 指定权限验证文件
- Require valid-user
- Location>
Chkconfig –level 35 httpd on
三、同步配置(主要通过触发SVN钩子脚本同步实现)
1.从SVN服务器
- REPOS="$1"
- REV="$2"
- USER="$3"
- PROPNAME="$4"
- ACTION="$5"
- exit 0
----------------------------------------------------------------------------------------------
SVN问题总结:
- AuthType Basic
- AuthName "By Invitation Only"
- # Optional line:
- AuthBasicProvider file
- file是个指令默认值,也可以将密码存储在数据库中,需要mod_authn_dbm和mod_auth_dbd两个模块,
- AuthBasicProvider dbm 选择dbm/dbd作为存储格式.
- AuthUserFile /usr/local/apache/passwd/passwords
- AuthGroupFile /usr/local/apache/passwd/groups
- Require group GroupName 任何人被列在goupname组,并有一个条目在password文件中.
- 注:Require valid-user限定用户只有输入正确的用户名及密码后才能访问这个路径,好处让多个用户不那么具体,而不是创建一个组文件.
Simply set up authentication normally, using AuthType Digest
and AuthDigestProvider
instead of the normal AuthType Basic
and AuthBasicProvider
. Then add a AuthDigestDomain
directive containing at least the root URI(s) for this protection space.添加一个AuthDigestDomain
指令空间至少包含根的URI(s)为这种保护。
- <Location /private/>
- AuthType Digest
- AuthName "private area"
- AuthDigestDomain /private/ http://mirror.my.dom/private2/
- AuthDigestProvider file
- AuthUserFile /web/auth/.digest_pw
- Require valid-user
- Location>
注:摘要式身份验证需要浏览器上运行的支持(火孤浏览器不支持.)
多库模式问题
每个项目列一库,针对目录再具体细分.认证文件指向同一目录下
使用SVNParentPath的时候,直接访问ParentPath的时候,总是得到以下错误提示:
403 Forbidden
Forbidden
You don't have permission to access /svn/ on this server.
想通过http://ip/svn/ 查看其中的版本库列表,其中修改apache配置文件httpd.conf 中的选项:
- <Location /svn/> 定义的访问服务名svn
- DAV svn
- SVNListParentPath on
- SVNParentPath /opt/svndata
- # Options Indexes MultiViews
- # allow from all
- # AllowOverride None
- AuthType Basic
- AuthName "Subversion Ralm"
- AuthUserFile /opt/svn_user_list
- AuthzSVNAccessFile /opt/project.access
- # Satisfy Any
- Require valid-user
- RedirectMatch ^(/svn)$ $1/ 访问时/ip/svn/ 加/和不加/都可支持
- Location>
同步初始化
1. 从源库上推向目标库,同步的钩子安全,初始化时出现找不到pre-revprop-change钩子。
写入post-commit脚本.
Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端。
否则会出现sudo: sorry, you must have a tty to run sudo
2). 增加行 Defaults visiblepw
否则会出现 sudo: no tty present and no askpass program specified
如,增加行:www ALL=(ALL) NOPASSWD: /data0/shell/svnvp.sh
注:NOPASSWD可以使在命令执行时不需要交互输入www 用户的密码www用户为nginx或apache的运行用户