yum实现subversion+apache

http://lxycneo.blog.51cto.com/2534579/676628/

http://www.linuxidc.com/Linux/2011-06/37279p2.htm

http://www.cnblogs.com/fyfblog/archive/2011/06/12/2097138.html


安装软件
# yum install httpd mod_dav_svn subversion mod_ssl
   查看是否安装成功
  #svn --version 如果出现版本号如
则说明svn安装成功
 查看httpd配置文件/etc/httpd/conf/httpd.conf
如果找到
这说明apache模块安装正确

这样安装好后,是安装到/etc/httpd目录的
可通过 service httpd start/restart/stop   service svnserve start/restart/stop 来启动apache和svn服务

1.创建版本库
    # mkdir -pv /svn   --创建主目录(创建一个目录,用来存放svn的版本库。里边可以存放多个版本库,但是一般情况只需要一个版本库就够了,然后可以在这个版本库中使用客户端(或svn命令)创建多个目录存放不同的项目资料)
    # svnadmin create /svn/reproot  --创建版本库(仓库),一般创建一个,可以创建多个(创建多个需要在apache配置文件中配置支持多版本库)
  2.更改权限
    # chmod -R 700 /svn  --修改库的其他人无权限
    # chown -R apache:apache /svn   --修改库的所属
注意这里两步也很重要,我没有设置chown -R apache:apache /svn,客户端访问时就一直是提示输入用户名密码(即用户名密码错误);最后我也没有执行chown -R apache:apache /svn,而是直接设置/svn文件夹的权限为777 chmod -R 777 /svn  这样可以用户名密码可以通过了,但是客户端在版本库中建立文件夹时报没有权限操作版本库中的db目录,所以还要设置版本库目录的权限 chmod -R 777 /svn/reproot 这样可以进行操作了。但是这样所有用户都可以操作svn/reproot目录了,不安全,还是设置权限为700,然后执行chown -R apache:apache /svn这样让Apache有权限访问svn目录就行了。另外linux上的SElinux安全策略也会导致客户端访问时一直提示输入用户名密码,需要设置chcon -R -h -t httpd_sys_content_t /svn。

3.更改apache配置
    #vim /etc/httpd/conf/httpd.conf 
   在末尾加入以下内容
   
  1. 单个版本库:   
  2. <Location /svn>   #svn在访问的时候用到,http://ip/svn   
  3. DAV svn           #不用修改     
  4. SVNPath /svn/reproot   #资料库的绝对地址(即单个版本库的仓库地址)
  5. AuthType Basic                            
  6. AuthName "Subversion repository"             
  7. AuthUserFile /svn/passwd  #账号文件 (用户名密码) 
  8. AuthzSVNAccessFile /svn/auth.conf  #权限文件
  9. Require valid-user   
  10. </Location>   
  11. 多个版本库:   
  12. <Location /svn>   
  13. DAV svn   
  14. SVNListParentPath on               #这个是多版本特有的(可省略,默认应该是打开的)
  15. SVNParentPath /svn         #多版本库时的共同目录,与单版本的不同(必须是所有版本库的跟目录)
  16. AuthType Basic   
  17. AuthName " Subversion repository "  
  18. AuthUserFile /svn/passwd
  19. AuthzSVNAccessFile /svn/auth.conf   
  20. Require valid-user   
  21. </Location> 

示例:
多版本库:
<Location />
DAV svn
SVNListParentPath on
SVNParentPath /home/svn
AuthType Basic
AuthName "Hello Subversion"
AuthUserFile /home/svn/passwd
AuthzSVNAccessFile /home/svn/auth.conf
Require valid-user
</Location>

单版本库:
<Location /svn>
DAV svn
SVNPath /home/svn/svn
AuthType Basic
AuthName "svn"
AuthUserFile /home/svn/passwd
AuthzSVNAccessFile /home/svn/auth.conf
Require valid-user
</Location>

要注意这里SVNParentPath或者SVNPath的配置,配置错误会引起没有权限访问http:ip/svn的错误或者Could not open the requested SVN filesystem错误
该错误也可能是没有执行 chown -R apache:apache /svn 引起的。(注意:修改了版本库目录中的内容,需要执行chown -R apache:apache /svn命令,否则可能引起这个错误)。

其中的/svn/auth.conf是手动创建的,安装svn权限配置规则配置里边内容即可。/svn/passwd是第一次创建用户时使用-c参数创建的。
另外,客户端访问svn服务时,如果httpd.conf中配置的单版本库,那么可以直接通过http://ip/svn访问到该版本库根目录,因为SVNPath已经指定到对应的根目录地址,所以直接访问http://ip/svn会访问到该版本库。如果配置的是多版本库,那么访问时需要指定版本库名称http://ip/svn/reproot这样会访问到reproot版本库根目录。
另网上有说法,多个版本库时需要配置每个版本库指向对应密码、权限文件:http://future.blog.51cto.com/26959/95178/
我的虽然配置了支持多版本库,但实际只有一个版本库,没有配置版本库中的密码、权限文件指向也没有问题。

配置可以允许客户端修改密码:http://blog.csdn.net/han_dongwei/article/details/8270198  http://blog.sina.com.cn/s/blog_75d5a3690100v8uf.html
允许客户端修改密码,是在apache服务器上部署了一个cgi页面,该页面可进行修改密码操作。ChangePasswd.cgi为修改密码用的cgi页面,ChangePasswd.ini为
支持ChangePasswd.cgi的配置(如配置密码最小长度值等)。另外,这两个文件需要放置在apache的cgi-bin目录下。.111上的cgi-bin目录在/var/www/目录下,该目录
下的html可以存放一下.html页面共apache访问。在/var/log/httpd中存放着apache的错误日志,如果客户端访问修改密码的ChangePasswd.cgi出错,可查看相应错误日志文件找原因。
111上修改密码地址:http://192.168.1.111:8080/cgi-bin/ChangePasswd.cgi




备份:

svn备份可以直接拷贝整个存放svn版本库的目录,如这里的/home/svn;然后恢复的时候,可以直接将该目录内容复制到搭好了svn环境的机器上,并配置apache关联的svn版本库目录指向该目录地址即可。

双机热备:

1. 在从机上yum安装Apache subversion环境;
2. 在从机上创建svn版本库测试Apache svn环境(可省略,如果确定能够配置正确);
—— 需保证svn可以访问,不论是svn://协议还是http://协议,能访问就行。
但是既然要与Apache关联,那这里最好搭好http://环境,因为后边设置主从机关联的时候需要相互访问。
(如果这里使用svn://做主从机关联,那么之后配置为http://,不知道会不会需要重新设置主从关联)
svn的用户密码和权限文件可以直接从主机服务器上拷贝到相应目录下,如这里将10.82.12.169下/home/svn目录下的 passwd和auth.conf 两个文件拷贝到10.82.12.223 /home/svn下(第5步操作)
3. 在从机上删掉第2步的测试版本库,新建跟主机上需要双击热备的svn版本库相同名称的版本库(注意设置版本库目录的权限(参照1、2步));
4. 在从机上执行:
cd /home/svn/svn/hooks
        cp  pre-revprop-change.tmpl  pre-revprop-change
        vi pre-revprop-change
        把 pre-revprop-change最后一行改成  exit 0,然后 chmod 755 pre-revprop-change
5. 把主机上的/home/svn/svn/conf目录打个包,发到从机的同样路径,解压覆盖;
(这一步实际上应该是想将用户、权限拷贝到从机上, 但是我们svn环境的用户、权限文件不在版本库中,而在版本库根目录所在的父目录中,
所以这里不用拷贝版本库中conf下的内容,直接拷贝自己存放用户、权限的文件即可。以后可在主机上设置定时任务每天定时将用户、权限文件拷贝到从机上)
6. 在从机上执行:
        svnsync init file:///home/svn/svn svn://主机ip/版本库根目录 
(svn://10.82.12.169/svn),这里如果主机已经配置了与Apache关联,那么这里应该是http://10.82.12.169/svn,这里需要输入主机svn的用户名密码,
所以最好将主机整个用户权限环境配置好后再搭建从机;中途会问你主机的root密码及svn的用户名 密码,填入即可。然后显示: 
        Copied properties for revision 0.(复制版本 0 的属性。)
7. 初始化完成后,执行:
        svnsync sync file:///home/svn/svn    进行同步,这里也会输入主机的系统root用户密码和主机svn的用户名密码,输入成功后则开始从主机复制svn内容到从机svn对应版本库中,
如果主机svn版本库中内容较多,需要等待较多时间。
8. 为了能够在主机更新时,从机自动同步,需要在主机做些操作:
        在主机/home/svn/svn/hooks/下建立/修改post-commit脚本(cp post-commit.tmpl post-commit,并注意赋权限,可重新执行chown -R apache:apache /home/svn),在其中增加一行,内容如下:
        svnsync sync  --non-interactive svn://desIP/taobaotop  --username name --password pwd 如:
svnsync sync --non-interactive http://10.82.12.223/svn --username Alan --password Alan
9. 如果有多个版本库需要双机热备,对于其他版本库按照以上第3-8步设置即可。

注:
1. 主机IP 10.82.12.169,从机 10.82.12.223
2. 以上目录,/home/svn目录是用于存放svn所有版本库的目录,它下边可以创建多个svn版本库(如这里它下边的svn),/home/svn/svn这里svn就是svn的一个版本库,它表示svn版本库根目录
3. 在主机设置了自动同步到从机的设置后,如果从机崩了,主机提交时最后会提示错误,可以恢复从机环境,然后不用刻意重新同步从机崩溃时主机的提交内容,当主机下一次提交成功后,会自动将之前的内容同步到从机





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值