svn安装之http访问方式

一、SVN安装与apache配置

   创建以下脚本svn_http_install.sh,用来安装svn以及httpd配置

##!/bin/bash

#安装svn以及依赖包

yum -y install apr apr-util sqlite neon subversion

#创建http支持svn配置文件

cat > /root/svn_http.conf <

DAV svn

SVNListParentPath On

SVNParentPath /var/svn/repos

AuthType Basic

AuthName "Subversion Repository"

AuthUserFile /var/svn/user

AuthzSVNAccessFile /var/svn/acl

Require valid-user

Eof

#将http支持svn配置文件写入到httpd的配置文件中

cat /root/svn_http.conf >> /etc/httpd/conf.d/subversion.conf 

#创建文件控制

cat > /var/svn/acl << Eof

[groups]

admin = admin

[/]

* = 

Eof

touch /var/svn/user 

touch /var/svn/log 

echo "这个脚本默认创建svn管理员组,管理员用户:admin = admin"


二、svn库创建

  创建以下脚本svn_create.sh,用来创建svn库

首先将附件中的两个文件复制到/var/svn/路径下

#!/bin/bash

#定义库名称

echo "Enter the repo: "

read repo

real_path="file:///var/svn/repos/${repo}"

echo "Repo path: ${real_path}"

echo "Proceed (y/n)"

read proceed

#创建svn库

svnadmin create /var/svn/repos/${repo}


if [ ${proceed} = n ] || [ ${proceed} = Y ]

        then

        echo "Terminating ..."

        exit 0

elif [ ${proceed} = y ] || [ ${proceed} = Y ]

        then

        echo "Initializing basic repository structure"

        svn mkdir ${real_path}/{trunk,tags,branches} -m -F

#将附件中的两个文件复制到/var/svn/路径下,这两个文件用来定义svn策略,我修改这两个文件在svn提交的时候必须要有备注,而且备注信息必须要大于5个字符

        cp /var/svn/pre-* "/var/svn/repos/${repo}/hooks/"

        echo "Finished."

else

        echo "Unknown Input. Terminating..."

        exit 0

fi


chown apache:apache /var/svn/repos/${repo} -R


三、创建svn用户

   以下命令用来创建svn用户

# htpasswd -mdps /var/svn/user 用户名

New password:

Re-type new password:


#创建好svn库跟svn用户之后,手动重启一下httpd服务

然后就可以在浏览器(或者svn客户端)输入http://ip/repos/库名称

svn安装(http访问)、备份、增量备份、恢复_第1张图片




四、svn备份

   创建一个脚本用来实现svn库备份

##!/bin/bash

echo "此脚本是svn库数据的备份,不是增量备份"

date=`date +%Y%m%d`

mkdir -p /home/backup/svn/$date/{dump,repos,tar,newfile,revision}

echo "你是想备份整个库请输入(1),备份指定库请输入(0)"

read y

#通过一个if语句来判断是全部备份库,还是备份指定库

if [ $y -eq 1 ];then

#备份整个库,将所有的库文件信息保存到相应位置

    ls /var/svn/repos/ > /home/backup/svn/$date/repos/$date.repos  

fi

if [ $y -eq 0 ];then

echo "请输入svn需要备份的库的大体名称:"

echo "比如:输入tms,表示备份tms*开头的svn库"

read backup

#备份自己所需的库

ls /var/svn/repos/ | grep $backup > /home/backup/svn/$date/repos/$date.repos

fi

#通过一个for循环语句来备份所需库

for i in `cat /home/backup/svn/$date/repos/$date.repos`

do

mkdir -p /home/backup/svn/$date/dump/$i

#备份svn库,并保存到相应位置

svnadmin dump /var/svn/repos/$i > /home/backup/svn/$date/dump/$i/$i.dump

echo "$i dump finish!"

svnlook  youngest /var/svn/repos/$i

#创建svn最新版本信息文件

svnlook  youngest /var/svn/repos/$i > /home/backup/svn/$date/revision/$i.repos

done

#找出刚才备份的dump文件信息,保存到一个新文件

find /home/backup/svn/$date/dump/ -type f -ctime -1 > /home/backup/svn/$date/newfile/$date.newfile

#压缩dum文件为.tar.gz文件,通过dump的信息文件

tar -czvpf  /home/backup/svn/$date/$date.tar.gz  -T /home/backup/svn/$date/newfile/$date.newfile > /home/backup/svn/$date/tar/$date.newfile

#删除dump文件,通过上一步操作已经将dump文件压缩成一个压缩包了,所以可以删除dump文件了

rm -rf /home/backup/svn/$date/{dump,tar}

mkdir -p /home/backup/svn/$date-add-backup/revison

cp /home/backup/svn/$date/revision/* /home/backup/svn/$date-add-backup/revison


五、增量备份

  创建一个脚本用来实现增量备份svn_add_backup.sh,首先要有第四步操作

##!/bin/bash

date=`date +%Y%m%d`

echo "之前备份的版本信息文件路径文件夹(*-add-backup)"

read addback

mkdir -p /home/backup/svn/$date-add-backup/{dump,repos,revision}

echo "增量备份整个库请输入(1),增量备份指定库请输入(0)"

read y

echo "请输入以前的版本信息文件路径"

echo "比如/home/backup/svn/20151021,那么你就输入20151021"

read time

#用来判断是否全增量备份还是部分增量备份

if [ $y -eq 1 ];then

    ls /var/svn/repos/ > /home/backup/svn/$date-add-backup/repos/$date.repos  

fi

if [ $y -eq 0 ];then

echo "请输入svn需要备份的库的大体名称:"

echo "比如:输入tms,表示备份tms*开头的svn库"

read backup

ls /var/svn/repos/ | grep $backup > /home/backup/svn/$date-add-backup/repos/$date.repos

fi

for i in `cat /home/backup/svn/$date-add-backup/repos/$date.repos`

do

#定义一个变量old,之前全备份时留下的库版本信息

old=`cat /home/backup/svn/$addback/revision/$i.repos`

#定义一个新变量new,用来留下当前最新版本信息

new=`svnlook  youngest /var/svn/repos/$i`

#通过一个if语句来判断库版本是否改变,有改变才执行一下语句,即是old < new

if [ "$old" -lt "$new" ];then

mkdir -p /home/backup/svn/$date-add-backup/dump/$i

svnlook  youngest /var/svn/repos/$i > /home/backup/svn/$date-add-backup/revision/$i.repos

#备份old版本到new版本

svnadmin dump /var/svn/repos/$i --revision $old:$new --incremental > /home/backup/svn/$date-add-backup/dump/$i/$i.dump

echo "$i add_backup finish!"

fi

done


六、svn恢复

  创建一个脚本用来实现svn库的恢复,前提是要先把dump文件复制到/home/backup/svn/dump/${repos}/${repos}.dump位置

##!/bin/bash

echo "请输入svn还原的库名称(先把原来的库文件删掉):"

read repos

rm -rf /var/svn/repos/${repos}

svnadmin create /var/svn/repos/${repos}

cp /var/svn/pre-* "/var/svn/repos/${repos}/hooks/"

chown apache:apache /var/svn/repos/* -R

svnadmin load /var/svn/repos/${repos} < /home/backup/svn/dump/${repos}/${repos}.dump