分类: 系统运维
2016-08-10 14:32:31
方案说明:目前svn采用实时同步热备的备份方式,当主库宕机时,可以启用备份库,备份库上只需替换授权文件,开发只需更改checkout的url即可正常使用。
主库:
备份库:
注意事项:因为备份是单向的,当启用备份库时,同步关系被破坏,备份方案需要重新部署。
因为办公网络无法用网络上的yum源,需要制作本地yum源
[root@lvs-test-master yum.repos.d]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
[root@lvs-test-master yum.repos.d]# vi /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Media.repo
#
# This repo can be used with mounted DVD media, verify the mount point for
# CentOS-6. You can use this repo and yum to install items directly off the
# DVD ISO that we release.
#
# To use this repo, put in your DVD and use it with the other repos too:
# yum --enablerepo=c6-media [command]
#
# or for ONLY the media repo, do this:
#
# yum --disablerepo=\* --enablerepo=c6-media [command]
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///data/dsk1/CentOS_6.5_/ ##这是CentOS 6.5 DVD1的rpm包文件位置
file:////data/dsk2 ##这是CentOS 6.5 DVD2的rpm包文件位置
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[root@lvs-test-master yum.repos.d]# yum install subversion httpd php mysql mysql-server mod_dav_svn php-mysql php-pear php-mbstring
注意:因为svnmanager的各种bug,VersionControl 用版本0.5.1比较好点。
[root@lvs-master hooks]# pear install VersionControl_SVN-0.5.1
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
downloading VersionControl_SVN-0.5.1.tgz ...
Starting to download VersionControl_SVN-0.5.1.tgz (31,559 bytes)
.........done: 31,559 bytes
install ok: channel://pear.php.net/VersionControl_SVN-0.5.1
3、1 创建版本库根目录
[root@lvs-master hooks]# mkdir /home/svn/svnReps
[root@lvs-master svn]# touch access passwd
[root@lvs-master conf.d]# vi /etc/httpd/conf.d/subversion.conf
#通过像这样的URL()来访问Subversion版本库
DAV svn #告诉Apache哪个模块负责服务上面的URL-在这里就是Subversion模块
SVNParentPath /home/svn/svnReps #告诉Subversion在目录/data/svn下寻找版本库,这是版本库的父目录
# # Limit write permission to list of valid users.
#
# # Require SSL connection for password protection.
# # SSLRequireSSL #版本库必须通过SSL连接才能访问,URL中必须加入HTTPS
AuthType Basic #启用基本的验证,比如用户名/密码对
AuthName "Authorization Realm"
AuthzSVNAccessFile /home/svn/access #用这个密码文件来验证用户,这个文件由svnmanager来维护,下面讲述如何创建它
AuthUserFile /home/svn/passwd #控制这个用户的访问权限,这个文件由svnmanager来维护
Require valid-user #限定用户只有输入正确的用户名及密码后才能访问这个路径
#
chown -R apache:apache /home/svn/Reps
将svnmanager-1.10.zip 解压到apache 访问目录 /var/www/html/svnmanager
[root@lvs-test-master tmp]# unzip -d /var/www/html/ svnmanager-1.10.zip
修改svnmanager配置文件
mv config.php.linux config.php
修改以下内容:
$svn_repos_loc = "/data/svn";
$svn_passwd_file = "/data/svn/passwd";
$svn_access_file = "/data/svn/access";
$dsn = "mysqli://svnmanager:11111111@localhost/svnmanager";
创建mysql svnmanager库
create database svnmanager;
授权
grant all on svnmanager.* to 'svnmanager'@'localhost' identified by "11111111";
flush privileges;
第一次访问这个url时,会提示你重新加载,重新刷新一下这个url就好了。
刷新后就正常访问了,初始用户和密码都是admin。
略
将pre-revprop-change.tmpl 文件更名为pre-revprop-change,赋执行权限,并修改为以下内容:
#!/bin/bash
exit 0
在备份库上执行
svnsync init 备份库url 主库url
[root@lvs-test-master hooks]# svnsync init /android
输入用户密码验证。
将所有的版本库都同步初始化。
在从库上执行
[root@lvs-test-master hooks]# svnsync sync /android --username=username --password=password
将所有的版本库都同步。
关掉主库selinux
在主库上,修改版本库文件post-commit.linux
将post-commit.linux 更名为post-commit,赋执行权限,并修改为以下内容:
#!/bin/bash
svnsync sync --non-interactive --username=username --password=password
上面的url为备份库的url
将每个版本库的post-commit.linux都做类似修改。
随意在主库中其中一个版本库提交一个文件,检查在备份库是否能update出提交的这个文件,其实看主库的提交会不会报错就可以了。