码迷,mamicode.com
首页 > 系统相关 > 详细

linux下svn服务安装(转)

时间:2015-08-14 01:21:05      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

linux下svn服务安装

 

一.环境准备

1.linux版本为centos6.4 X64

2.软件安装

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

3.以下所有操作均在root用户下完成

 

二.SVN服务器配置

1.新建一个目录用于存储SVN所有文件
mkdir /home/svn

 

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


linux下svn服务安装(转)

标签:

原文地址:http://my.oschina.net/u/272337/blog/492102

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!