★几个关键的事项★
<Location /svn-2>
DAV svn
SVNListParentPath on
# 对于多仓库,需要配置SVNParentPath
SVNParentPath /home/cqgk/svnRepos
AuthType Basic
AuthName "Hello, Subversion repos"
# 控制哪些用户可以访问svn,跟前面配置的路径一致
AuthzSVNAccessFile /etc/httpd/conf.d/svn-policy-file
# 授权用户的认证信息在哪里,跟前面配置的密码信息一致
AuthUserFile /etc/httpd/conf.d/svn-auth-conf
Require valid-user
</Location>

  • 系统篇

  • 1.安装CentOS7 7.4.1708_x86_64,下载地址:

    CentOS7 7.4.1708_64 DVD 版本

  • 2.下载最新的UltraISO软件,用它制作一个CentOS7的启动U盘,操作很简单:

  • 3.在电脑上把U盘的卷标修改为:CENTOS7,后面需要用到这个名字

  • 4.电脑插入制作好的U盘,进入BISO设置从这个U盘启动,进入CentOS的启动菜单界面

  • 5.通过上下箭头选择第一个菜单项:Install CentOS 7,然后按TAB按键,底下会出现一行英文,大体意思是说要安装的源路径,可以看到有LABLE=CentOS 7…X86…64… 一长串的内容

  • 6.进入安装界面,第一步就是选择语言,选择我天朝的语言;下一步,时区选择上海时区;软件选择GNOME图形桌面(否则进入的是命令行操作界面,我是还没到那个层次,搞不定),GNOME附加项的内容根据需要勾选.

  • 7.安装位置

  • 8.进入安装界面,还有两个黄色的感叹号选项需要配置:设置root密码、创建cqgk用户及密码

  • 配置篇

    • 安装httpd
    • 卸载CentOS7 默认安装的svn 1.7版本

    输入以下内容并且保存:

    • 安装svn最新的1.10版本

    如果提示错误:软件包:subversion-1.10.0-1.x86_64 (WandiscoSVN) 需要:libserf-1.so.0()(64bit) ,则先安装:

    然后重新输入命令安装svn:

    装完后,输入 svn --version,会显示当前安装的版本信息

    • cd到cqgk的主目录:/home/cqgk,创建SVN目录:mkdir svnRespo,然后进入svnRespo批量创建svn库目录:

    然后逐个初始化svn库:

    • 进入到/home/cqgk/svnRepo 目录,批量删除各个子库下面的conf目录里面的授权、密码文件(用不到,后面会统一指向外层的文件,方便控制,否则对于多仓库的管理非常麻烦)
    • 逐个进入到子仓库的conf目录,修改svnserve.conf文件中仓库的授权、账号文件路径:
    • 切换到root用户,创建前面这一步指定的授权控制以及密码验证文件

    然后保存

    按i进入编辑模式,把以下内容粘贴进去:

    然后按Esc退出编辑模式保存,shift+:进入命令行模式,输入wq,回车,保存成功。

    • 因为整个仓库的最顶级目录所属用户组是cqgk,而apache用户默认不是属于cqgk组,需要添加到这个组:
    • 为前面授权群组中的两个用户:cqgk、xiaochuanyi创建用于http访问svn的密码:

    输入两次一样的密码,即可为用户配置用于鉴权svn访问权限时用的密码了

    • 为httpd配置通过http方式访问svn的信息:

    在文件的最后,插入以下内容:

    # 以下两行是http方式通过apache访问svn的通讯必须的库
    LoadModule dav_svn_module /usr/lib64/httpd/modules/mod_dav_svn.so
    LoadModule authz_svn_module /usr/lib64/httpd/modules/mod_authz_svn.so # 以下内容是配置http://ip地址/路径 方式访问的属性:
<Location /svn>
DAV svn
SVNListParentPath on # 对于多仓库,需要配置SVNParentPath
SVNParentPath /home/cqgk/svnRespo/
AuthType Basic
AuthName "Hello, Subversion repos" # 控制哪些用户可以访问svn,跟前面配置的路径一致
AuthzSVNAccessFile /etc/httpd/conf.d/svn-policy-file # 授权用户的认证信息在哪里,跟前面配置的密码信息一致
AuthUserFile /etc/httpd/conf.d/svn-auth-conf Require valid-user
</Location>
    # 以上配置,访问时的url为:http://ip地址/svn/仓库1
    • mod_dav_svn是apache服务器访问svn的一个模块,通过yum安装:
    [root@localhost svnRespo]# yum install mod_dav_svn

    安装成功后,会有mod_dav_svn.so和mod_authz_svn.so两个文件。

    [root@localhost svnRespo]# find / -name mod_dav_svn.so

    会出现:/usr/lib64/httpd/modules/mod_dav_svn.so

    [root@localhost svnRespo]# find / -name mod_authz_svn.so

    会出现:/usr/lib64/httpd/modules/mod_authz_svn.so

    • 启动svn服务:
    • 启动httpd服务,以便通过http方式访问svn库:

    关于httpd服务的命令:

    # 启动、终止、重启
    systemctl start httpd.service #启动
    systemctl stop httpd.service #停止
    systemctl restart httpd.service #重启 # 设置开机启动/关闭
    systemctl enable httpd.service #开机启动
    systemctl disable httpd.service #开机不启动 # 检查httpd状态
    systemctl status httpd.service
    • 此时通过http://当前服务器ip/svn 如果无法访问刚才建立的SVN 仓库,或者返回403错误,可能是防火墙问题,需要增加防火墙规则:
    [root@localhost svnRespo]# firewall-cmd --permanent --add-service=http
    [root@localhost svnRespo]# firewall-cmd --permanent --add-service=https
    [root@localhost svnRespo]# firewall-cmd --reload
    • 进入到各个子仓库目录的hooks钩子目录,复制一个钩子pre-revprop-change文件,然后进入编辑,里面所有内容去掉,只保留exit 0 这一句:
    [cqgk@localhost hooks]$ cp pre-revprop-change.tmpl pre-revprop-change

    然后初始化仓库:

    [cqgk@localhost hooks]$ svnsync init file:///home/cqgk/svnRespo/cqgk.commons https://192.168.1.251/svn/cqgk.commons  --username xiaochuanyi --password xiaochuanyi521*

    正常会出现:复制版本0 的属性

    注意:上面的用户名跟密码,在源服务器(Win7系统)跟当前CentOS7 服务器中需要完全一致,也就是两个SVN库中都有这个用户,且密码都是一样的

    最后,同步仓库内容:

    [cqgk@localhost hooks]$ svnsync sync file:///home/cqgk/svnRespo/cqgk.commons https://192.168.1.251/svn/cqgk.commons  --username xiaochuanyi --password xiaochuanyi521*

    正常会出现以下内容:

    已提交版本 14。
    复制版本 14 的属性。
    已提交版本 15。
    复制版本 15 的属性。
    已提交版本 16。
    复制版本 16 的属性。
    已提交版本 17。
    传输文件数据.........
    • 此时通过http://ip地址/svn 来访问svn,还是不行,提示:Can’t open directory’/home/cqgk/svnRepos’: Permissiondenied ,原来是还忘修改http.conf里面的几个地方,哈哈:

    找到以下两行:

    User apache

    Group apache

    最后让apache用户对”/home/cqgk/svnRepos″目录拥有写权限。

☆实现客户端提交代码后,从Win7源服务器自动同步到CentOS7备份服务器☆

  • 首先,需要在SPC里面执行一下同步的命令,让SPC的SVN应用能获得自动执行所需的权限 :

      C:\Users\Administrator>svnsync sync  http://192.168.1.253/svn-2/service.goods --sync-username 用户名 --sync-password  密码 --config-dir E:\svnsynccertauth

    然后会提示询问你是否保存 https证书信息

    ®eject, accept (t)emporarily or accept §ermanently?

    选择p。然后输入当前主机登录所需的账号、密码

    Error validating server certificate for 'https://192.168.1.251:443':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
- The certificate hostname does not match.
Certificate information:
- Hostname: PC201411132127
- Valid: from Apr 13 02:56:53 2015 GMT until Apr 10 02:56:53 2025 GMT
- Issuer:
- Fingerprint: F6:76:A2:CA:A5:AF:EC:30:47:4B:36:8E:DB:6A:F6:23:3D:81:FF:AC
(R)eject, accept (t)emporarily or accept (p)ermanently? p
Authentication realm: <https://192.168.1.251:443> VisualSVN Server
Password for 'Administrator': 输入你登录当前win7系统用户的密码
Authentication realm: <https://192.168.1.251:443> VisualSVN Server
Username: 访问当前SVN服务器的用户名
Password for 'xiaochuanyi': 访问当前SVN服务器用户的密码
  • 然后,在VisualSVN Server的应用程序上,在所需要同步的仓库目录右键选择属性,点击hooks钩子页签,双击Commit 下面的Post-commit hook ,输入以下同步的命令:
  • ☆注意以上命令中最后的https证书存储目录–config-dir E:\svnsynccertauth要跟前面输入用户名密码前的那个命令里面的目录一致。

然后,当这个仓库有代码提交后,就会自动同步到192.168.1.253的备份SVN服务中了。

☆搞不懂的疑问?☆

  • 疑问 在http.conf里面配置的ip访问时的根目录名如果为svn,其它都配置好之后,访问时,只能进入所有子仓库的共同父级目录,比如本文中的 /home/cqgk/svnRepos,会列出此目录中的各个子仓库,但是点击以后进入,就会提示Could not find the requested SVN filesystem

    然后通过http://192.168.1.253/svn-2/的地址访问,会列出所有子仓库列表,点击某个子仓库也能正常访问了…

04-25 00:18