低调做人,高调做事!
分类: 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