軟件安裝
注:軟件全下載到/opt/soft 目錄下
arp 安裝
# tar zxvf apr-1.4.2.tar.gz
# cd apr-1.4.2
# ./configure
# make
# make install
apr-util 安裝
# tar zxvf apr-util-1.3.9.tar
# cd apr-util-1.3.9
# ./configure --with-apr=/usr/local/apr
# make
# make install
neon-0.29 安裝
# tar zxvf neon-0.29.3.tar.gz
# cd neon-0.29.3
# ./configure
# make
# make install
sqlite-amalgamation 安裝
# tar zxvf sqlite-amalgamation-3.7.2.tar.gz
# cd sqlite-amalgamation-3.7.2
# ./configure
# make
# make install
# tar zxvf httpd-2.2.16.tar.gz
# cd httpd-2.2.16
# ./configure --prefix=/opt/apache \
--enable-dav \
--enable-rewrite \
--enable-so \
--enable-maintainer-mode \
--enable-mods-shared='all' \
--with-apr=/usr/local/apr/bin/apr-1-config \
--with-apr-util=/usr/local/apr/bin/apu-1-config
# make
# make install
subversion 安裝
# tar zxvf subversion-1.6.12.tar.gz
# cd subversion-1.6.12
# mkdir sqlite-amalgamation
# cp /opt/soft/sqlite-amalgamation-3.7.2/sqlite3.c /opt/soft/subversion-1.6.12/sqlite-amalgamation
# ./configure --prefix=/opt/subversion \
--with-apxs=/opt/apache/bin/apxs \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--with-zlib=/usr/include \
--enable-maintainer-mode
# make
# make install
建立svn倉庫
# groupadd svn -g 801
# useradd -u 801 -g svn svnroot
# mkdir /opt/svn
# /opt/subversion/bin/svnadmin create --fs-type fsfs /opt/svn/svndocs
# chown -R svnroot.svn /opt/svn
配置svn與apache接合
# vi /opt/apache/conf/httpd.conf
將配置文件裏的user,group修改成svnroot和svn,以下:
User svnroot
Group svn
找到下面2行
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
在末尾添加如下內容
<Location /svn>
DAV svn
SVNParentPath /opt/svn/
AuthzSVNAccessFile /opt/svn/svndocs/conf/authz
AuthType Basic
AuthName "SVN Server"
AuthUserFile /opt/svn/svn-user
Require valid-user
</Location>
注: SVNPath 爲svn父目錄
AuthzSVNAccessFile 爲用戶權限配置文件
AuthUserFile 爲svn用戶配置文件
建立svn用戶
# /opt/apache/bin/htpasswd -c -m /opt/svn/svn-user user1
注:第一次建立用戶時,要帶參數-c ,之後新增用戶沒必要用-c ,不然將會清除之前用戶
-m 表示以md5碼加密
如新增用戶user2
# /opt/apache/bin/htpasswd -m /opt/svn/svn-user user2
修改user2用戶密碼
# /opt/apache/bin/htpasswd -m /opt/svn/svn-user user1
New password:
Re-type new password:
Adding password for user user1
用戶權限配置php
修改svnserve.conf配置文件html
# vi /opt/svn/svndocs/conf/svnserve.confjava
將# authz-db = authz 前面#號刪除,authz-db = authz 前面不能有空格。linux
將# anon-access = read 修改成anon-access = none 前面不能有空格,禁止匿名用戶訪問文件c++
也可以使用password認證web
將#password-db = passwd前面#號刪除,password-db = passwd 前面不能有空格sql
修改/opt/svn/svndocs/conf/authz配置文件
# vi /opt/svn/svndocs/conf/authz
[groups]
# harry_and_sally = harry,sally
dev = user1,user2
# [/foo/bar]
# harry = rw
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[/]
@dev = rw
[/p_w_picpath]
user1 = r
注: [groups]建立組,格式組名 = 用戶名 [能夠多個用戶,以(,分號)]分隔
[\] 表示根目錄,@dev = rw 表示dev組用戶對根目錄有讀寫權限 (r表示讀,w表示寫)
[/p_w_picpath] user1 =r 表示user1 對p_w_picpath目錄只有讀取權限
測試svn
使用svn協議訪問
要使用svn://url來訪問,先要啓動svnserve服務
# /opt/subversion/bin/svnserve -d -r /opt/svn
注: -r 表示svn父目錄
就可以使用svn://ip/svndocs來訪問svn服務了。
SVN 同步web文件配置
svn庫目錄 /opt/svn/svndocs
web目錄 /opt/web/dev_www
配置post-commit 鉤子觸發後執行的腳本
# vi /opt/svn/svndocs/hooks/post-commit
#!/bin/bash
REPOS="$1"
REV="$2"
/root/sh/dev_svn.sh
post-commit 權限設置
# chmod +x /opt/svn/svndocs/hooks/post-commit
/root/sh/dev_svn.sh腳本內容以下:
#!/bin/sh
export LANG="en_US.UTF-8"
/opt/subversion/bin/svn update /opt/web/dev_www
export LANG="en_US.UTF-8"
chown www:www -R /opt/web/dev_www &
svn備份
天天凌晨0點自動備份svn版本庫.並自動刪除7天前的數據
#!/bin/sh
#svnbak auto at 0:00 daily run......
#svnbak auto deleted 7 days ago
svn=/usr/bin/svnadmin
svndir=/opt/svn
svnlook=/opt/subversion/bin/svnlook
svnbakdir=/opt/svn-bak
date=`date +%Y-%m-%d -d "-1 days"`
olddate=`date +%Y-%m-%d -d "-7 days"`
if [ ! -d $svnbakdir ];then
mkdir -p $svnbakdir
fi
svnlist=`ls -l /opt/svn | grep d | awk '{print $NF}'`
for svnwork in $svnlist
do
mkdir -p $svnbakdir/$date
$svn hotcopy $svndir/$svnwork $svnbakdir/$date/$svnwork-$date --clean-logs
#取到當前svn版本庫的最新版本號,方便增量備份
$svnlook youngest $svndir/$svnwork > $svndir/$svnwork/$svnwork-in.txt
done
if [ -d $svnbakdir/$olddate ];then
rm -rf $svnbakdir/$olddate
fi
svn增量備份
#!/bin/sh
#svn increment bak
#at 0:00 daily run......
svndir=/opt/svn
svninbak=/opt/svninbak
date=`date +%Y-%m-%d -d "-1 days"`
svnadmin=/usr/bin/svnadmin
svnlook=/opt/subversion/bin/svnlook
svnlist=`ls -l /opt/svn | grep d | awk '{print $NF}'`
if [ ! -d $svninbak/$date ];then
mkdir -p $svninbak/$date
fi
for svninc in $svnlist
do
inc=`cat $svndir/$svninc/$svninc-in.txt`
((inc++))
$svnadmin dump -r $inc:head --incremental $svndir/$svninc > $svninbak/$date/$svninc-$date.dump
$svnlook youngest $svndir/$svninc > $svndir/$svninc/$svninc-in.txt
done
svnadmin dump備份
# svnadmin dump /opt/svn/svndocs > /opt/svn-bak/svndocs
svn 恢復
# svnadmin create /opt/svn/svndocs
# svnadmin load /opt/svn/svndocs < /opt/svn-bak/svndocs
一個技巧:
若是你有一個較大的Subsersion版本庫而你又想用最少的空間來將它備份下來,用這個命令(請將/repo替換成你的版本庫路徑)吧:
svnadmin dump –deltas /repo |bzip2 |tee dump.bz2 | md5sum >dump.md5
分步解釋:
最重要的一步是 -deltas,將消耗更多的CPU資源,但擁有更有效的差別存儲辦法。
bzip2壓縮方案比gzip慢,但換來的更好的壓縮率。
更有趣的是,tee方法將壓縮的數據流轉向到文件dump.bz2,同時將其輸出到標準輸出,後者有轉向給了MD5摘要計算工具。要恢復這個版本庫,檢查校驗值(md5sum建立的),建立一個空的版本庫,恢復備份:
md5sum -c dump.md5 <dump.bz2
svnadmin create newrepo
bzcat dump.bz2 | svnadmin load newrepo
請享受壓縮後用MD5校驗的備份吧,最後別忘記將dump.md5和dump.bz2存儲到真正安全的地方!
參考文檔:
http://bbs.linuxtone.org/viewthread.php?tid=6246&highlight=svn
http://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/
http://www.svn8.com/svnpz/20090428/5032.html
svn經常使用命令:
http://bbs.linuxtone.org/thread-1342-1-1.htmlapache