Linux環境下SVN的安裝與配置

環境:

操作系統:CentOS 6.2 64bit

SVN版本:Version 1.6.11

Apache版本:Apache/2.2.15  


一、SVN簡介
    SubVersion(SVN)是近幾年崛起的版本管理軟件,是CVS的接班人,目前絕大多數開源軟件都使用SVN來進行版本管理。SVN支持Linux和Windows,但是較多安裝在Linux上。

    SVN服務器有兩種運行方式:獨立服務器(svn://)、藉助於Apache(http://)

    SVN的基本工作原理:在一臺服務器上簡歷一個源代碼庫,庫裏開源存放許多不同項目的源程序,由源代碼管理員統一管理。每個用戶在使用源代碼之前,首先要把源代碼下載到本地,然後開發人員直接在本地修改,之後提交到SVN服務器。

版本控制解決了:

  • 代碼管理混亂

  • 解決代碼衝突困難

  • 在代碼整合期間引發bug

  • 無法對代碼的擁有者進行權限控

  • 項目不同版本發佈困難

    SVN工作示意圖如下:

150102417.png


SVN版本庫目錄說明:

  • dav目錄:提供apache與mod_dav_svn使用的目錄,讓他們存儲內部數據

  • db目錄:所有版本控制的數據存放文件

  • hooks目錄:放置hook腳本文件的目錄

  • locks目錄:來放置subversion鎖定數據的目錄,用來追蹤存取文件庫的客戶端

  • format文件:一個文本文件,裏面只放了一個整數。表示當前文件庫配置的版本號

  • conf目錄: 這個倉庫的配置文件(倉庫的用戶訪問賬號、權限等)

二、SVN安裝

這裏爲了方便就直接使用yum安裝SVN等相關軟件了

# yum -y install subversion mysql-server httpd mod_dav_svn mod_perl sendmail wget gcc-c++ make unzip perl*
  • subversion:SVN服務器安裝軟件

  • Mysql-Server:用戶codestrike軟件(code review軟件)

  • httpd、mod_dav_svn、mod_perl:用戶web方式管理SVN

  • SendMail:發送郵件

  • 其他:都是一些必備的軟件包

三、SVN的基本配置

  • 新建svn版本庫

    # mkdir -p /svn/mp3
    # svnadmin create /svn/mp3

    注意:svn版本庫可以創建多個

  • 初始化版本庫的目錄

    # mkdir -p test
    # touch test/kavin.txt  test/kavin1.txt test/kavin12.txt
    # svn import test file:///svn/mp3app -m "初始化目錄"
  • SVN權限設置

    因爲這裏SVN後期需要和Apache結合,這裏就不在權限設置了,不過還是需要下文件的相關設置,權限設置主要是在版本庫目錄下conf目錄下的問題,每個文件的作用如下:

    passwd:添加刪除svn的用戶及密碼

    authz:設置每個用戶的目錄權限

    svnserve.conf:設置密碼文件及認證文件文件的路徑,也就是上面的兩個文件

  • svn的啓動與關閉

    啓動:svnserve -d -r /svn

    關閉: kill -9 [pid]

  • svn測試

    # svn co svn://192.168.8.137/mp3
    A    mp3/kavin.txt
    A    mp3/kavin1.txt
    A    mp3/kavin12.txt

    如上svn checkout成功,因爲這裏是沒有設置用戶權限的,所有直接顯示。如果有設置權限的話,需要輸入賬號密碼的。

四、配置SVN的Http支持

  • 修改httpd.conf

    在/etc/httpd/conf/httpd.conf文件最後添加如下內容:

    # vim httpd.conf
    ···
    <Location /svn>
    DAV svn
    #SVNPath /svn/
    SVNListParentPath on
    SVNParentPath /svn
    AuthType Basic
    AuthName "Subversion Auth"
    AuthUserFile /svn/passwd
    AuthzSVNAccessFile /svn/authz
    Satisfy all
    Require valid-user
    </Location>
  • Apache啓動與關閉

    啓動之前記得將svn版本庫的用戶權限都改成apache,因爲apache都是以這個賬號來運行的。

    # chown -R apache:apache /svn    #設置權限
    # /etc/init.d/httpd start    #啓動
    # /etc/init.d/httpd stop     #關閉
  • 創建用戶

    #  htpasswd /svn/passwd kavin

    修改版本庫訪問權限,如下:

    # egrep -v "^#|^$" authz
    [aliases]
    [groups]
    admin = kavin
    [/]
    @admin = rw
    [mp3:/]
    @admin = rw
  • 驗證

    瀏覽器訪問效果圖如下:

    170008397.jpg

五、配置郵件提醒支持

1、安裝Perl模塊Module::Build

# wget http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/Module-Build-0.36_11.tar.gz
# tar xvf Module-Build-0.36_11.tar.gz
# cd Module-Build-0.36_11
# perl Build.PL
# ./Build
# ./Build test
# ./Build install
# cd ..

2、安裝Perl模塊Authen::SASL

# wget http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Authen-SASL-2.15.tar.gz
# tar xvf Authen-SASL-2.15.tar.gz
# cd Authen-SASL-2.15
# perl Makefile.PL
# make test
# make install
# cd ..

3、安裝Perl模塊Net::SMTP_auth

# wget http://search.cpan.org/CPAN/authors/id/A/AP/APLEINER/Net-SMTP_auth-0.08.tar.gz
# tar xvf Net-SMTP_auth-0.08.tar.gz
# cd Net-SMTP_auth-0.08
# perl Makefile.PL
# make test
# make install
# cd ..

4、安裝Perl模塊SVN::Notify

# wget http://search.cpan.org/CPAN/authors/id/D/DW/DWHEELER/SVN-Notify-2.80.tar.gz
# tar xvf SVN-Notify-2.80.tar.gz
# cd SVN-Notify-2.80
# perl Build.PL
# ./Build
# ./Build test
# ./Build install
# cd ..

5、修改post-commit腳本:commit提交動作之後觸發的腳本

安裝完以上基本模塊之後,我們可與知道在SVN的每個版本庫的hooks都存在一些腳本模塊,如下:

# ll -h /svn/mp3/hooks/
total 112K
-rw-r--r--. 1 apache apache 2.0K Nov 22 14:46 post-commit.tmpl
-rw-r--r--. 1 apache apache 1.6K Nov 22 14:46 post-lock.tmpl
-rw-r--r--. 1 apache apache 2.3K Nov 22 14:46 post-revprop-change.tmpl
-rw-r--r--. 1 apache apache 1.6K Nov 22 14:46 post-unlock.tmpl
-rw-r--r--. 1 apache apache 3.4K Nov 22 14:46 pre-commit.tmpl
-rw-r--r--. 1 apache apache 2.4K Nov 22 14:46 pre-lock.tmpl
-rw-r--r--. 1 apache apache 2.8K Nov 22 14:46 pre-revprop-change.tmpl
-rw-r--r--. 1 apache apache 2.1K Nov 22 14:46 pre-unlock.tmpl
-rw-r--r--. 1 apache apache 2.8K Nov 22 14:46 start-commit.tmpl

以上是不能夠直接使用的,需要對這些腳本模塊進行一些修改,我們這次需要對post-commit進行一定修改,使其能夠在commit成功之後發送通知郵件:

# cd /svn/mp3/hooks
# cp -p post-commit.tmpl post-commit
# chmod +x post-commit
# cp -p /usr/share/doc/subversion-1.6.11/tools/hook-scripts/mailer/mailer.py .
# cp -p /usr/share/doc/subversion-1.6.11/tools/hook-scripts/mailer/mailer.conf.example mailer.conf

以上將發送通知郵件必須的一些文件給copy過來了,最後剩下的就是修改post-commit、mailer.conf兩個文件了,修改之後的內容如下:

# cat  post-commit
#!/bin/sh
REPOS="$1"
REV="$2"
#mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
/svn/mp3/hooks/mailer.py commit "$REPOS" "$REV" /svn/mp3/hooks/mailer.conf
# egrep -v "^#|^$"  mailer.conf
[general]
smtp_hostname = staff.easou.com
smtp_username = [email protected]
smtp_password = yjh1987625
[defaults]
diff = /usr/bin/diff -u -L %(label_from)s -L %(label_to)s %(from)s %(to)s
commit_subject_prefix = [SVN Commit]
propchange_subject_prefix = [SVN PropChange]
lock_subject_prefix = [SVN Lock]
unlock_subject_prefix = [SVN  Unlock]
from_addr = [email protected]
to_addr = [email protected]
reply_to =
generate_diffs = add copy modify
show_nonmatching_paths = yes
[maps]

通過以上的修改,這樣svn的通知郵件設置就完成,具體請康如下示例:

201947740.jpg

6、修改pre-commit腳本:commit提交動作之前觸發的腳本

本次修改這次腳本是重要判斷是否輸入日誌信息,並且判斷是否輸入足夠的字數,具體詳見腳本

# cd /svn/mp3/hooks
# cp -p post-commit.tmpl pre-commit
# chmod +x pre-commit
# cat pre-commit
# /bin/bash
REPOS="$1"
TXN="$2"
# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
if [ "$LOGMSG" -lt 3 ];
then
    echo "Log message can't be empty! you must input more than 3 chars as comment!." 1>&2
    exit 1
fi

以上腳本爲當日志信息少於3個字符時,將報錯並禁止commit。報錯詳見如下:

202601151.jpg


六、安裝過程中出現的錯誤

①、svnserve  -d -r /svn/啓動svn服務器過程中出現svnserve.conf:12: Option expected報錯信息

解決方案:出現這個問題是由於Subversion讀取配置svnserve.conf無法識別前面有空格的配置項,去除空格即可

②、配置好svn+http之後,賬號和密碼一致正常,但是一直無法登陸。error.log出現reason: verification of user id 'kavin' not configured的錯誤信息

解決方案:這個是由於系統SeLinux還處於開啓中,關閉SeLinux即可。通過setenforce 0關閉,或者修改/etc/selinux/config文件,將SELINUX=disabled,然後重啓系統。

③、Could not open the requested SVN filesystem  [500, #2]

解決方案:在多SVN版本庫環境下,httpd.conf配置需要添加SVNListParentPath on  、SVNParentPath /svn兩個設置項。


以上就是SVN的安裝與配置。


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