Apache + SVN 环境搭建及svnsync 主备详解

注:本文非原创,只是在原做者基础之上略有改进与添加内容,请支持原做者,谢谢python

(因为部署过于繁琐,其中遇到了不少未知报错,故整理收集)linux

原做者博客:http://51power.blog.51cto.com/3549599/1663904 sql


SVN简介apache

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上不少版本控制服务已从CVS迁移到Subversionvim


演示环境浏览器

1.Centos6.5 x64
bash

2.关闭iptables、selinux
服务器

#  /etc/init.d/iptables stop    //关闭防火墙
#  chkconfig iptables off    //设置开机不启动
#  vim /etc/selinux/config    //关闭selinux
#  SELINUX=enforcing改成SELINUX=disabled

3.建立管理用户app

# groupadd svn
# mkdir /app
# useradd -d /data/svn -g svn svn
# echo "svn" | passwd --stdin svn


软件版本ide

apr-1.5.1.tar.gz

apr-util-1.5.3.tar.gz

httpd-2.2.27.tar.gz

sqlite-amalgamation-3.6.17.tar.gz

sqlite-amalgamation-3071501.zip

subversion-1.8.10.tar.gz

点击下载以上全部包


SVN搭建

1.安装Apache

# tar zxf httpd-2.2.27.tar.gz
# cd httpd-2.2.27
# ./configure --prefix=/usr/local/svn/apache --enable-dav --enable-so --enable-modules=most
# make && make install

2.安装apr

# tar zxf apr-1.5.1.tar.gz
# cd apr-1.5.1
# ./buildconf   #验证系统是否已经安装python、autoconf、libtool,若是没有安装,使用yum或rpm方式安装相应包便可。

wKioL1ZFRlKQtJf6AAAV_Bg5RFs411.png

# ./configure --prefix=/usr/local/svn/apr
# make && make install

3.安装apr-util

# tar zxf apr-util-1.5.3.tar.gz
# cd apr-util-1.5.3
# ./configure --prefix=/usr/local/svn/apr-util --with-apr=/usr/local/svn/apr
# make && make install

4.安装sqlite 

注:因为正常安装sqlite后,在配置svn时会报错

configure时遇到错误:
get the sqlite 3.7.15.1amalgamation from:
http://www.sqlite.org/sqlite-amalgamation-3071501.zip
unpack the archive usingunzip and rename the resulting
directory to:
/app/soft/subversion-1.8.10/sqlite-amalgamation
configure: error:Subversion requires SQLite

解决依赖关系办法

# tar zxf sqlite-amalgamation-3.6.17.tar.gz
# unzip sqlite-amalgamation-3071501.zip   
# cp sqlite-amalgamation-3071501/* sqlite-3.6.17
# cd sqlite-3.6.17/
# ./configure --prefix=/usr/local/svn/sqlite
# make && make install

5.安装svn

注意:在安装svn前提醒各位一句,若是要作svn主备同步的话,请提早安装serf,缘由:若是不安装用svnsync 作同步的时候会报一下错误

svnsync E170000 unrecognized url scheme for http 


因此,1.8版本以前的须要加neon,1.8版本以后弃用neon而改使用serf;

点击下载serf

能×××的也能够直接wget下载

# yum -y install expat-devel
# wget http://serf.googlecode.com/files/serf-1.2.1.tar.bz2 
# tar xjf serf-1.2.1.tar.bz2
# cd serf-1.2.1./configure --prefix=/usr/local/svn/serf --with-apr=/usr/local/svn/apache --with-apr-util=/usr/local/svn/apache
make && make install


# tar zxf subversion-1.8.10.tar.gz
# cd subversion-1.8.10
# ./configure --prefix=/usr/local/svn/subversion --with-apxs=/usr/local/svn/apache/bin/apxs --with-apr=/usr/local/svn/apr/bin/apr-1-config --with-apr-util=/usr/local/svn/apr-util/bin/apu-1-config --with-sqlite=/usr/local/svn/sqlite/ --with-serf=/usr/local/svn/serf --with-openssl --with-zlib--enable-maintainer-mod
# make && make install

使用SVN

1.建立svn仓库

/usr/local/svn/subversion/bin/svnadmin create /data/svn/yunwei/public

2.建立权限配置文件

vim /data/svn/authz.conf
[/]
* = r

[public:/]
ssc4469 = rw

3.建立用户认证账号,密码文件

# /usr/local/svn/apache/bin/htpasswd -c /data/svn/authzfile ssc4469

4.加载模块

svn安装完成后,会在/app/sinova/svn/libexec目录下产生mod_authz_svn.so和mod_dav_svn.so这两个模块,将这两个模块文件拷到apache模块目录下。

# cp /usr/local/svn/subversion/* /usr/local/svn/apache/modules/

5.设置apache配置文件

# vim /usr/local/svn/apache/conf/httpd.conf文件,修改以下内容:
 User sinova     //修改  
 Group sinova    //修改
 ServerName www.example.com:80    //去掉本行前面的注释
# LoadModule foo_module modules/mod_foo.so //此行后添加如下两行
LoadModule dav_svn_module     modules/mod_dav_svn.so   //添加
LoadModule authz_svn_module   modules/mod_authz_svn.so  //添加

6.在httpd.conf文件最后添加以下内容

<Location /haha>
 DAV svn
 SVNParentPath "/data/svn/"
 AuthzSVNAccessFile "/data/svn/authz.conf"
 AuthType Basic
 AuthName "Subversion.zoneyump"
 AuthUserFile "/data/svn/authzfile"
 Require valid-user
</location>

7.启动apache

# /usr/local/svn/apache/bin/apachectl start

###############################################################

使用client测试是否正常(我这里就不测试了,本身在浏览器中数据地址测试吧)

我这里的测试地址是:http://192.168.154.230/yunwei/public,根据建立的结果自行测试吧~!

注意:若是上传文件测试,提交完成后出现如下错误:

svn: Can’t open file ‘/home/svn/db/txn-current-lock’: Permission denied

出现这种问题的缘由在于搭建SVN服务器,包括建立Repository目录/data/svn目录下的一切子目录和文件都是在root用户下进行的,因此在root用户下检出、提交都没有问题。可在Windows PC上从客户端访问就有问题了,由于是只有拥有管理器权限的人才能对Repository目录进行彻底控制,而在Windows从客户端访问的话,由于是Users用户组的,对Repository没有修改权限,因此不能提交。
        解决办法:在服务器上把Users对Repository的彻底控制权限加上就能够了,执行以下命令对/app/svnroot/ltzb目录下的全部文件和子目录添加Users的读写权限
chmod -R o+rw /data/svn/yunwei/public
如今能够正常地从Windows客户端下面进行检出和提交了。

##################################################


svnsync 同步配置

实验环境:

A:192.168.154.230 //我刚才搭建好的SVN服务器

B:192.168.154.233

项目需求,生产环境要求svn服务器实现热备机制,因而就想到了svn自带的svnsync机制,操做流程以下:

1.进入备份服务器(192.168.154.230)版本库 /data/svn/yunwei/public/ 下的hooks 目录

# cd /data/svn/yunwei/public/

2.复制目录内的文件pre-revprop-change

# cp pre-revprop-change.tmpl pre-revprop-change

3.修改pre-revprop-change权限,更改成755

# chmod 755 pre-revprop-change

4.修改pre-revprop-change内容

echo “Changing revision properties other than svn:log is prohibited” >&2
exit 0(1修改成0)说明以下:
原脚本的意思是若是修改的是svn:log属性,将容许修改,返回0;不然,不容许,返回1
咱们要将它改成容许修改全部的属性,在脚本中直接返回0

5.在备机上执行初始化同步操做

# /usr/local/svn/subversion/bin/svnsync init file:///data/svn/yunwei/public/ http://192.168.154.233/yunwei/public --username new_user --password new_passwd

//注意以上 --username   --password 使用的是 源SVN账号密码

//输入完以上命令后,会弹出属否保存密钥的信息,选择"yes"

6.执行同步

# /usr/local/svn/subversion/bin/svnsync sync file:///data/svn/yunwei/public/

//注意:同步时间根据你的源库大小所决定,我这里同步了点测试数据使用大概15分钟的样子

备机同步结果

wKiom1ZIdIShkQFeAAA8nqemB44199.png


PS:定时同步脚本

maillist="76109360@qq.com"
url="/usr/local/svn/subversion/bin/svnsync sync file:///data/svn"
list=( "/yunwei/public/" )
check(){
  if [ `rpm -qa|grep -q mailx;echo $?` -ne 0 ];
  then
      yum -y install mailx
  fi

  if [ `rpm -qa|grep -q postfix;echo $?` -ne 0 ];
  then
      yum -y install postfix
  fi
  for ((i=0;i<${#list[@]};i++))
  do
      if [ `${url}${list[$i]}>/dev/null;echo $?` -eq 0 ];then
        echo "${list[$i]} backup is ok"
      else
        echo "${list[$i]} backup error"|mail -s " ${list[$i]} backup error" -r svn@root.cn ${maillist}
      fi
done
}
check
相关文章
相关标签/搜索