svn安裝與基本錯誤

 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-1.4.0.tar.gz
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章