Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2147760
  • 博文数量: 227
  • 博客积分: 10521
  • 博客等级: 上将
  • 技术积分: 3452
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-20 14:59
个人简介

低调做人,高调做事!

文章分类

全部博文(227)

文章存档

2013年(4)

2012年(8)

2011年(16)

2010年(24)

2009年(92)

2008年(83)

分类: LINUX

2008-03-19 22:47:26

    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 install

vi /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=flash123

aaa = 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 = flash

u_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 15

SVN_HOME=/usr/local/subversion/bin
SVN_OWNER=svn

if [ ! -f "$SVN_HOME/svnserve" ]
then
    echo "svnserver startup: cannot start"
    exit
fi

case "$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"
        ;;
Esac

Chkconfig –-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/svndata

4.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 PATH

LogFile=/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/svnadmin

echo "svn backup start at $(date +"%y-%m-%d %H:%M:%S")" >> $LogFile
echo "------------------------------------------------" >> $LogFile

cd $BakDir
PROJECTLIST=`cat $ProjectLst`

for project in  $PROJECTLIST
do
    projectdata=$SvnDir/$project
    destdir=$BakDir/$project
    dumpfile=$DATE.$project.tgz  

if [ -f $BakDir/$dumpfile ]
then
    echo "backup file have exist!" >>$LogFile
else
$SVNADMIN hotcopy $projectdata $destdir --clean-logs
tar czvf $dumpfile $destdir > /dev/null

rm -fr $project
echo "backup $project done into $dumpfile ">>$LogFile
fi
done
echo "svn backup end at $(date +"%y-%m-%d %H:%M:%S")" >> $LogFile

oldfile="$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 expected

2.anon-access = read,会有报这个错
Error * Authorization failed

3.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

阅读(8390) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~