原文:
subversion(以下简称svn)是近年来崛起的版本管理工具,是cvs的接班人,svn服务器有2种运行方式:独立服务器和借助apache,这里我们采用独立服务器运行方式。svn存储版本数据也有2种方式:BDB和FSFS。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点,这里我们也采用FSFS方式来存储数据。
1.svn服务器安装
操作系统: Redhat Linux AS4.4
安装包获取: http: //subversion.tigris.org/downloads/subversion-deps-1.4.0.tar.gz。编译:
以root用户登录 将subversion-1.4.0.tar.gz和subversion-deps-1.4.0.tar.gz传到服务器。tar -xfvz subversion-1.4.0.tar.gz
tar -xfvz subversion-deps-1.4.0.tar.gz cd subversion-1.4.0 ./configure --prefix=/usr/local/subversion --without-berkeley-db(注:以svnserve方式运行,不加apache编译参数。以fsfs格式存储版本库,不编译berkeley-db)
make make installvi /etc/profile,在/etc/profile最后加入:
PATH=$PATH: /usr/local/subversion/bin export PATH测试:
svnserve –version如果显示如下,安装成功:
svnserve, version 1.4.0 (r21228)2.svn配置
建立版本库目录,
mkdir -p /opt/svndata/sina建立版本库:
svnadmin create /opt/svndata/sina修改版本库配置文件:
vi /opt/svndata/sina/conf/svnserve.conf内容修改为:
[general]anon-access = none
auth-access = write password-db = /opt/svn/conf/pwd.conf authz-db = /opt/svn/conf/authz.conf realm = sina配置允许访问的用户:
vi /opt/svn/conf/pwd.conf内容修改为:
[users]
admin = svn_admin
php=php123 flash=flash123aaa = 123
bbb = 456其中,[users]是必须的,下面是列出要访问svn的用户,每个用户一行。Admin是SVN系统管理员,php和flash是组管理员,aaa是php组的成员,bbb是flash组的成
员。
配置用户访问权限:
vi /opt/svn/conf/authz.conf内容修改为:
[groups]
g_admin = admin
g_php = php g_flash = flashu_web = aaa
u_flash = bbb[/]
@g_admin = rw * = r[sina:/source/php]
@g_admin = rw @g_php = rw aaa = r * =[sina:/source/flash]
@g_admin = rw @g_flash = rw bbb = r * =注意:
* 权限配置文件中出现的用户名必须已在用户配置文件中定义。 * 对权限配置文件的修改立即生效,不必重启svn。 详细权限参照authz.conf。3.启动svn
建立启动svn的用户:
useradd svn passwd svn 根据提示为用户svn设置密码允许用户svn访问版本库:
chown –R svn:svn /opt/svndata chown –R svn:svn /opt/data由于SVN没有提供直接启动该服务的脚本,所以我们自己写个shell脚本来实现:
more /etc/init.d/svn
#!/bin/bash
# description: Svnserve auto start-stop script. # chkconfig: - 85 15SVN_HOME=/usr/local/subversion/bin
SVN_OWNER=svnif [ ! -f "$SVN_HOME/svnserve" ]
then echo "svnserver startup: cannot start" exit ficase "$1" in
'start') su - $SVN_OWNER -c "$SVN_HOME/svnserve -d -r /opt/svndata" ;; 'stop') su - $SVN_OWNER -c "killall svnserve" ;; 'restart') su - $SVN_OWNER -c "killall svnserve" su - $SVN_OWNER -c "$SVN_HOME/svnserve -d -r /opt/svndata" ;; EsacChkconfig –-add svn
Chkconfig –level 3 svn on Service svn start|stop|restart检查服务是否启动:
ps –ef|grep svnserve 如果显示如下,即为启动成功: root 3484 1 0 Dec17 ? 00:00:00 /usr/local/subverion/bin/svnserve -d -r /opt/svndata4.svn备份
由于svn提供了自己的命令用于svn数据的备份,这样就方便很多。
#!/bin/bash
# Program: # This program is subversion data backup script # History: # 2007/11/20 chentao 1.1 #---------------------------------------------------------------PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATHLogFile=/var/backup/svnbak.log
DATE=`date +%Y%m%d` BakDir=/var/backup ProjectLst=/opt/svn/conf/project.lst SvnDir=/opt/svndata SVNADMIN=/usr/local/subversion/bin/svnadminecho "svn backup start at $(date +"%y-%m-%d %H:%M:%S")" >> $LogFile
echo "------------------------------------------------" >> $LogFilecd $BakDir
PROJECTLIST=`cat $ProjectLst`for project in $PROJECTLIST
do projectdata=$SvnDir/$project destdir=$BakDir/$project dumpfile=$DATE.$project.tgzif [ -f $BakDir/$dumpfile ]
then echo "backup file have exist!" >>$LogFile else $SVNADMIN hotcopy $projectdata $destdir --clean-logs tar czvf $dumpfile $destdir > /dev/nullrm -fr $project
echo "backup $project done into $dumpfile ">>$LogFile fi done echo "svn backup end at $(date +"%y-%m-%d %H:%M:%S")" >> $LogFileoldfile="$BakDir/"$(date +%Y%m%d --date='2 days ago').$project.tgz
if [ -f $oldfile ] then rm -f $oldfile >> $LogFile 2>&1 echo "[$oldfile],Delete Old File Success!" >> $LogFile else echo "[$oldfile],No Old Backup File!" >> $LogFile fi注:
1.配置项前面不能有空格,否则会这种报错 Error * /opt/svndata/test/conf/svnserve.conf:12: Option expected2.anon-access = read,会有报这个错
Error * Authorization failed3.password-db,authz-db使用的文件可以加上路径,这样多个版本库可以共用一个认证库
4.权限配置文件中出现的用户名必须已在用户配置文件中定义。
5.对权限配置文件的修改立即生效,不必重启svn。
6.权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限
7.编译时候如果报错: checking APR version... 0.9.4 wanted regexes are 0\.9\.[7-9] 0\.9\.1[0-9] 1\. configure: error: invalid apr version found 提示api的版本不够,是因为它使用了系统自带的apr版本,所以我们修改编译参数,指定apr版本,可以通过安装apr包,或者通过安装新版本的apache(2.2.6),因为新版本的apache里面带的有apr