linux下svn服務安裝(轉)

linux下svn服務安裝

 

一.環境準備web

1.linux版本爲centos6.4 X64apache

2.軟件安裝centos

yum install subversion httpd mod_dav_svn mod_perl sendmail mailx wget gcc-c++ make unzip perl*bash

3.如下全部操做均在root用戶下完成服務器

 

二.SVN服務器配置tcp

1.新建一個目錄用於存儲SVN全部文件
mkdir /home/svnsvn

 

2.新建一個版本倉庫
svnadmin create /home/svn/project工具

 

3.配置用戶

vi /home/svn/project/conf/passwd

Shell代碼  收藏代碼

  1. [users]  

  2. admin = netqin  #用戶名 = 密碼  

  3. user = 123456  

 

4.配置用戶訪問策略

vi /home/svn/project/conf/authz

Shell代碼  收藏代碼

  1. [groups]  

  2. # harry_and_sally = harry,sally  

  3. # harry_sally_and_joe = harry,sally,&joe  

  4.   

  5. project_a = admin  #組名 = 用戶名,多個用戶使用逗號分隔  

  6. project_u = user  

  7.   

  8.   

  9. [project:/]  

  10. @project_a = rw  #組名 = 讀寫權限r,w,rw;這裏配置admin有根路徑的讀寫權限  

  11. * =              #其它組沒有訪問權限  

  12.   

  13. [project:/server]  

  14. @project_a = rw  

  15. @project_u = rw  

  16. * =  

 

5.用戶和策略配置升效

vi /home/svn/project/conf/svnserve.conf

 

Shell代碼  收藏代碼

  1. [general]  

  2. anon-access = none  

  3. auth-access = write  

  4. password-db = /home/svn/project/conf/passwd  

  5. authz-db = /home/svn/project/conf/authz  

6.啓動服務器

 

svnserve -d -r /home/svn

7.開啓防火牆

vi /etc/sysconfig/iptables

 

Java代碼  收藏代碼

  1. #svnserver  

  2. -A INPUT -p tcp -m state --state NEW -m tcp --dport 3690 -j ACCEPT  

 service iptables restart

 

8.測試服務器

使用svn客戶端工具,或者找一臺安裝了subversion的linux服務器進行測試
svn co svn://192.168.xx.xx/project

 

若是可以正常checkout,則說明svn的配置是正確的。

 

三.配置郵件提醒支持

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

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

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

4,安裝Perl模塊SVN::Notify
wget http://search.cpan.org/CPAN/authors/id/D/DW/DWHEELER/SVN-Notify-2.80.tar.gz
ar xvf SVN-Notify-2.80.tar.gz 
cd SVN-Notify-2.80
perl Build.PL 
./Build 
./Build test
./Build install

5,啓動郵件服務器
service sendmail restart
              
6,配置自動發郵件腳本
cd /home/svn/project/hooks/

mv post-commit.tmpl post-commit
vi post-commit           

Shell代碼  收藏代碼

  1. #!/bin/sh  

  2. REPOS="$1"  

  3. REV="$2"  

  4.   

  5. /usr/local/bin/svnnotify --repos-path "$1" --revision "$2" --to hanqunfeng@nq.com,sunchengqi@nq.com,gaowenming@nq.com --from channelSVN@nq.com --handler "HTML::ColorDiff"  --with-diff --smtp localhost --smtp-user root --smtp-pass password -c "UTF-8" -g zh_CN -o raw --svnlook /usr/bin/svnlook --subject-prefix '[SVN Update]'  

   說明:--to:接收人列表,多個以逗號分隔;--from:發件人,隨便起個名字;--smtp-user root --smtp-pass password  服務器的用戶和密碼;

 

chmod +x post-commit

ok,此時提交svn時就會收到郵件了。

 

四.提交svn時要求填寫註釋

cd /home/svn/project/hooks/

mv pre-commit.tmpl pre-commit

vi pre-commit

 

Shell代碼  收藏代碼

  1. #!/bin/sh  

  2. REPOS="$1"  

  3. TXN="$2"  

  4. SVNLOOK=/usr/bin/svnlook  

  5. LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`  

  6. if [ "$LOGMSG" -lt 5 ];  #要求註釋長度大於5  

  7. then  

  8.         echo -e "\nEmpty log message not allowed. Commit aborted!" 1>&2  

  9.         exit 1  

  10. fi  

chmod +x pre-commit

 

 

mv pre-revprop-change.tmpl pre-revprop-change

vi pre-revprop-change

 

Shell代碼  收藏代碼

  1. REPOS="$1"  

  2. REV="$2"  

  3. USER="$3"  

  4. PROPNAME="$4"  

  5. if ["$PROPNAME" = "svn:log"];then exit 0;fi  

  6. exit 1  

chmod +x pre-revprop-change

 

 

ok,測試提交svn時就會要求輸入註釋了。

 

五.支持http訪問

通過以上配置,svn服務基本上就算配置完成了,不過此時只能經過svn://192.168.xx.xx/project的方式訪問,若是但願經過http的方式訪問,則還需進行以下配置。

上面安裝工具時已經安裝了Apache和Perl。

1,轉換SVN服務器的密碼

因爲SVN服務器的密碼是明文的,HTTP服務器不與支持,因此須要轉換成HTTP支持的格式。能夠寫了一個Perl腳本完成這個工做.

cd /home/svn/project/conf/

vi PtoWP.pl

 

Perl代碼  收藏代碼

  1. use warnings;  

  2. use strict;  

  3.                   

  4. #open the svn passwd file  

  5. open (FILE, "passwd") or die ("Cannot open the passwd file!!!\n");  

  6.         

  7. #clear the apache passwd file  

  8. open (OUT_FILE, ">webpasswd") or die ("Cannot open the webpasswd file!!!\n");  

  9. close (OUT_FILE);  

  10.                   

  11. #begin  

  12. foreach (<FILE>) {  

  13.         if($_ =~ m/^[^#].*=/) {  

  14.                 $_ =~ s/=//;  

  15.                 `htpasswd -b webpasswd $_`; #核心語句就這個,若是之後添加或者修改用戶密碼,可使用 htpasswd -nb username password ,加密後的信息會被顯示在屏幕上,複製內容到webpasswd文件便可。  

  16.         }  

  17. }  

 perl PtoWP.pl #執行腳步後會在當前路徑下生成webpasswd文件,裏面就是已經加過密的密碼信息。

 

 

2,修改httpd.conf,添加關於SVN服務器的內容
編輯/etc/httpd/conf/httpd.conf,在最後添加以下信息:
                <Location /project>
                    DAV svn
                    SVNPath /home/svn/project/
                    AuthType Basic
                    AuthName "svn for project" 
                    AuthUserFile /home/svn/project/conf/webpasswd  #這裏必定要使用webpasswd
                    AuthzSVNAccessFile /home/svn/project/conf/authz
                    Satisfy all
                    Require valid-user
                </Location>

須要加載三個模塊,若是是手工編譯Apache時應該加上--enable-dav

LoadModule dav_module modules/mod_dav.so

LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so


3,啓動HTTPD服務器
service httpd restart

 

4,授予txn-current-lock文件777權限

緣由是svn目錄是使用root用戶建立,而Apache可能不是root用戶啓動的,因此在提交svn時Apache用戶沒有/home/svn/project/db/txn-current-lock文件的訪問權限

chmod 777 /home/svn/project/db/txn-current-lock

5,測試

使用svn客戶端工具,或者找一臺安裝了subversion的linux服務器進行測試
svn co http://192.168.xx.xx/project

 

六.備份svn

寫個腳步,按期備份/home/svn下的內容便可。

舉例:

mkdir -p /opt/project_backup  #備份保存路徑

vi /home/svn/project_backup.sh  #備份腳步

Shell代碼  收藏代碼

  1. #!/bin/bash              

  2. cd /home/svn  

  3. now=`/bin/date +%Y%m%d`  

  4. /bin/tar czvf "project_backup_$now.tar.gz" project/ && rm -rf /opt/project_backup/* && /bin/mv project_backup_*.tar.gz /opt/project_backup/  

  5. if [ $? == 0 ]  

  6. then  

  7.         result="OK!!"  

  8. else  

  9.         result="False!!"  

  10. fi  

  11.                  

  12. #send mail to administrator  

  13. /bin/mail  -s "project_backup_$now" hanqunfeng@nq.com<<MESSAGE  

  14. Result: `/bin/echo $result`  

  15. MESSAGE  

 

chmod +x project_backup.sh

 

將腳步加入定時任務

crontab -e

0 23 * * * /home/svn/project_backup.sh #天天晚上11點備份

 

七.將svn啓動腳步加入service

vi /home/svn/svnserver

Shell代碼  收藏代碼

  1. # vi svnserver  

  2. # chmod +x svnserver  

  3. #!/bin/bash  

  4. case "$1" in  

  5. start)  

  6. svnserve -d -r /home/svn  

  7. svnport=`netstat -natp | grep svnserve | awk -F: '{print $2}' | awk '{print $1}'`  

  8.   

  9.   

  10. if [ -n $svnport ] && [ $svnport -eq 3690 ]; then  

  11.         echo "SVN Server Already Runnning. Port:3690"  

  12. else  

  13.         echo "SVN Server Does Not Start"  

  14. fi  

  15. ;;  

  16. reload)  

  17. svnport=`netstat -natp | grep svnserve | awk -F: '{print $2}' | awk '{print $1}'`  

  18. if [ -n $svnport ] && [ $svnport -eq 3690 ]; then  

  19.         killall svnserve && svnserve -d -r /home/svn  

  20.         echo "Reload OK"  

  21. else  

  22.         echo "SVN Server Is Not Running"  

  23. fi  

  24. ;;  

  25. stop)  

  26. killall svnserve  

  27. echo "SVN Server Has Been Stopped"  

  28. ;;  

  29. status)  

  30. svnport=`netstat -natp | grep svnserve | awk -F: '{print $2}' | awk '{print $1}'`  

  31. pid=`ps aux | grep svnserve | grep -v "grep" | awk '{print $2}'`  

  32. if [ -n $svnport ] && [ $svnport -eq 3690 ]; then  

  33.         echo "SVN Server (pid:$pid) 正在運行..."  

  34. else  

  35.         echo "SVN Server 中止運行..."  

  36. fi  

  37. ;;  

  38. *)  

  39. echo "$0: Usage: $0 {start|status|stop|reload}"  

  40. exit 1  

  41. ;;  

  42. esac  

mv  /home/svn/svnserver /etc/init.d

chmod +x svnserver

 

啓動svn:service svnserver start

關閉svn:service svnserver stop

重啓svn:service svnserver reload

相關文章
相關標籤/搜索