Debian下Subversion WebDAV 模式后的版本库动态备份设置
 

2009-03-27 来源:网络

 

Subversion的WebDAV 模式就是Subversion和Apache2集成后的运行模式,Debian下这一模式的实现可以参考
http://www.subversion.org.cn/svnbook/1.2/index.html 或者http://man.chinaunix.net/linux/debian/debian_learning/ch09s14.html
只需注意这两个文档的最后添加用户的地方都存在一点小问题,添加第二个用户的时候不需要有参数-c了,而且在Debian环境下,其实没有htpasswd2而只有htpasswd这个命令。

我们假定Subversion的WebDAV 在Debian下已经配置成功,访问地址是http://hostname/svn,Subversion实际库采用FSFS数据存储结构,放置在/var/svnlib下。

我们要动态备份/var/svnlib到/back/svnlib_bak,/back是不同于/var的独立磁盘分区,这样才有更高的安全度。

在Debian下有subversion的备份工具,安装subversion时是不自动安装的,需要单独安装,安装命令

#apt-get update
#apt-get install subversion-tools

这样在系统中就有了svn-fast-backup,svn-backup-dumps ,svn-hot-backup 等命令,放置在/usr/bin下面了。

我们的动态备份就是在每次提交后自动的进行增量备份,这样可以保障在/var/svnlib出故障后,可以迅速的通过拷贝/back/svnlib_bak下的数据重建版本库,甚至可以直接在apache下通过设置让/back/svnlib_bak作为临时版本库。

我们将涉及subversion的钩子脚本功能(相关内容参考http://www.subversion.org.cn/svnbook/1.2/svn.reposadmin.create.html#svn.reposadmin.create.hooks)
按要求在/var/svnlib/hooks/下创建了post-commit文件,其内容如下:

#!/bin/sh
# 增量备份本版本库到指定目录,在目标目录保存本版本库的最新16个备份
# (svn-fast-backup -k 16)中的-k 16来实现,你可以设置你需要的数量
# 需要系统安装subversion-tools工具包,将使用其中的svn-fast-backup
# 工具。
# 编写: xdsnet
# 日期:2007.09.14
# 本文件应该有运行权限
# 定义备份源和目标,需要保证文件权限,如果是通过http的WebDav访问,
# 权限为www-data
FORBACK=$1 #备份版本库路径
BACKBASE='/back/svnlib_bak/'
BACKEND='_bak'
TOBACK=${BACKBASE}`basename ${FORBACK}`${BACKEND} #备份位置
if [ -d ${TOBACK} ];then
   /usr/bin/svn-fast-backup -k 16 -q ${FORBACK} ${TOBACK}
else
   mkdir -p ${TOBACK}&&/usr/bin/svn-fast-backup -k 16 -q ${FORBACK} ${TOBACK}
   # 目录不存在则创建目录成功后备份
fi

修改这个文件的所有者为www-data,并添加运行权限

#chown www-data.www-data /var/svnlib/hooks/post-commit
#chmod +x /var/svnlib/hooks/post-commit

保证/back目录www-data是可写的或者预先建立BACKBASE='/back/svnlib_bak并使之允许www-data是可写的。

这样所有的配置就完成了,在下次有版本提交的时候,程序会自动的在/back/svnlib_bak下建立一个名为
“svnlib-版本号”的目录,该目录是最新的/var/svnlib的一个快照。而且在/back/svnlib_bak下最多有16个(这是程序脚本中定义的,你可以设置)诸如“svnlib-版本号”的目录,它们是版本号最高的16个。

-------------------------------------------

可能有人要问为什么这叫动态备份,如果版本库很大是不是很浪费空间?

其实不用怕,因为svn-fast-backup会自动搜索备份目标下的相同文件,它们其实只保存了一份,其它都是对应的相当于硬链接的文件,不额外增加太多磁盘空间占用,这样实际上每个版本备份仅仅是增加了必须的,因版本改变产生的变化(包括文件的,也包括操作的历史记录等)。

参考:

http://www.subversion.org.cn/svnbook/1.2/index.html

http://www.debsir.org/main/?q=node/58

http://man.chinaunix.net/linux/debian/debian_learning/ch09s14.html


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织