linux下搭建SVN服务器完全手册
很详细,很好,很强大,好喜欢,绝对不是我原创,转载自:https://www.wendangku.net/doc/613693849.html,/u3/94705/showart_2260521.html
系统环境
RHEL5.4最小化安装(关iptables,关selinux)+ssh+yum
一,安装必须的软件包.
yum install subversion(SVN服务器)
mysql-server(用于codestriker)
httpd mod_dav_svn mod_perl(用于支持WEB方式管理SVN服务器)
sendmail(用于配置用户提交代码后发邮件提醒)
wget gcc-c++make unzip perl*(必备软件包)
ntsysv vim-enhanced(可选)
二,基本的SVN服务器配置
1,新建一个目录用于存储SVN所有文件
#mkdir/home/svn
2,新建一个版本仓库
#svnadmin create/home/svn/project
3,初始化版本仓库中的目录
#mkdir project project/server project/client project/test(建立临时目录)
#svn import project/file:///home/svn/project-m"初始化SVN目录"
#rm-rf project(删除临时建立的目录)
4,添加用户
要添加SVN用户非常简单,只需在/home/svn/project/conf/passwd文件添加一个形如“username=password"的条目就可以了.为了测试,我添加了如下内容: [users]
#harry=harryssecret
#sally=sallyssecret
pm=pm_pw
server_group=server_pw
client_group=client_pw
test_group=test_pw
5,修改用户访问策略
/home/svn/project/conf/authz记录用户的访问策略,以下是参考:
[groups]
project_p=pm
project_s=server_group
project_c=client_group
project_t=test_group
[project:/]
@project_p=rw
*=
[project:/server]
@project_p=rw
@project_s=rw
*=
[project:/client]
@project_p=rw
@project_c=rw
*=
[project:/doc]
@project_p=rw
@project_s=rw
@project_c=rw
@project_t=rw
*=
以上信息表示,只有pm有根目录的读写权,server_group能访问server目录,client_group能访问client目录,所有人都可以访问doc目录.
6,修改svnserve.conf文件,让用户和策略配置升效.
svnserve.conf内容如下:
[general]
anon-access=none
auth-access=write
password-db=/home/svn/project/conf/passwd
authz-db=/home/svn/project/conf/authz
7,启动服务器
#svnserve-d-r/home/svn
8,测试服务器
#svn co svn://192.168.60.10/project
Authentication realm:
Password for'root':
Authentication realm:
92731041-2dae-4c23-97fd-9e1ed7f0d18d
Username:server_group
Password for'server_group':
svn:Authorization failed(server_group没用根目录的访问权)
#svn co svn://192.168.60.10/project
Authentication realm:
Password for'root':
Authentication realm:
Username:pm
Password for'pm':
A project/test
A project/server
A project/client
Checked out revision1.(测试提取成功)
#cd project/server
#vim main.c
#svn add main.c
#svn commit main.c-m"测试一下我的C程序,看什么看,不行啊??"
Adding main.c
Transmitting file data.
Committed revision2.(测试提交成功)
三,配置SVN服务器的HTTP支持
1,转换SVN服务器的密码
由于SVN服务器的密码是明文的,HTTP服务器不与支持,所以需要转换成HTTP 支持的格式。我写了一个Perl脚本完成这个工作.
脚本内容如下:
#cd/home/svn/project/conf/
#cat PtoWP.pl
#!/usr/bin/perl
#write by huabo,2009-11-20
use warnings;
use strict;
#open the svn passwd file
open(FILE,"passwd")or die("Cannot open the passwd file!!!\n");
#clear the apache passwd file
open(OUT_FILE,">webpasswd")or die("Cannot open the webpasswd file!!!\n");
close(OUT_FILE);
#begin
foreach(
if($_=~m/^[^#].*=/){
$_=~s/=//;
`htpasswd-b webpasswd$_`;
}
}
#./PtoWP.pl(先给该脚本加可执行权限,然后执行以转换密码)
Adding password for user pm
Adding password for user server_group
Adding password for user client_group
Adding password for user test_group
现在目录下会多一个webpasswd文件。
2,修改httpd.conf,添加关于SVN服务器的内容
编辑/etc/httpd/conf/httpd.conf,在最后添加如下信息:
DAV svn
SVNPath/home/svn/project/
AuthType Basic
AuthName"svn for project"
AuthUserFile/home/svn/project/conf/webpasswd
AuthzSVNAccessFile/home/svn/project/conf/authz
Satisfy all
Require valid-user
3,启动HTTPD服务器
#service httpd restart
Stopping httpd:[FAILED] Starting httpd:[OK]
4,用浏览器访问http://192.168.60.10/project/server/测试
测试结果如下图所示:
(测试成功)
四,配置邮件提醒支持
1,安装Perl模块Module::Build
#wget https://www.wendangku.net/doc/613693849.html,/CPAN/authors/id/D/DA/DAGOLDEN/Module-Build-0.36_11.ta r.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 https://www.wendangku.net/doc/613693849.html,/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 https://www.wendangku.net/doc/613693849.html,/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 https://www.wendangku.net/doc/613693849.html,/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,启动邮件服务器
#service sendmail restart
Shutting down sendmail:[FAILED] Starting sendmail:[OK] Starting sm-client:[OK]
6,配置自动发邮件脚本
修改post-commit脚本,以支持邮件通知功能.
#cd/home/svn/project/hooks/
#vim post-commit
内容如下:
#!/bin/sh
REPOS="$1"
REV="$2"
/usr/bin/svnnotify--repos-path"$1"--revision"$2"--to caodaijun@https://www.wendangku.net/doc/613693849.html,--from caodaijun@https://www.wendangku.net/doc/613693849.html,--handler"HTML::ColorDiff"--with-diff--smtp localhost --smtp-user root--smtp-pass5201314318-c"UTF-8"-g zh_CN-o raw--svnlook /usr/bin/svnlook--subject-prefix'[SVN Update]'
(to参数代表接收邮件的地址,可以有多个,当你有多个老大的时候,这就很重要了,:)。from参数是虚拟的,代表你的发送地址,一般情况下,这个参数不重要,但如果接收者的邮件服务器有反垃圾邮件的功能,需要判定源地址的话,这个参数是否合法就显得很重要了)
再给该脚本添加可执行权限
#chmod+x post-commit
7,再次提交时,就会给指定邮件地址发信了。
如下图所示:
五,其它常用配置
1,强制写log脚本
配置pre-commit文件,要求用户每次更新文件都必须写log.
#cd/home/svn/project/hooks/
#vim pre-commit
文件内容如下:
#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
LOGMSG=`$SVNLOOK log-t"$TXN""$REPOS"|grep"[a-zA-Z0-9]"|wc-c`
if["$LOGMSG"-lt5(要求的log长度,依实际需要修改)];
then
echo-e"\nEmpty log message not https://www.wendangku.net/doc/613693849.html,mit aborted!"1>&2
exit1
fi
配置完成后,给本件加上可执行权限。再提交代码时,就必须按要求写注释了,:)
2,可修改log脚本
配置pre-revprop-change文件,此文件在show log中修改log时会运行,得到修改的权限,否则会报错:D AV request failed;it's possible that the repository's pre-revprop-change hook either failed or is non-existent.At least one property change failed;repository is unchanged
#cd/home/svn/project/hooks/
#vim pre-revprop-change
文件内容如下:
REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
if["$PROPNAME"="svn:log"];then exit0;fi
exit1
配置完后加可执行权限升效。
六,备份管理
svn服务器的定期备份是很重要的,最简单的方式是定时备份仓库目录。
1,新建备份目录
#mkdir/opt/project_backup
2,编写备份脚本
#cd/home/svn/
#vim project_backup.sh
内容如下:
#!/bin/bash
#write by huabo,2009-11-20
cd/home/svn
now=`/bin/date+%Y%m%d`
/bin/tar czvf"project_backup_$now.tar.gz"project/&&rm-rf/opt/project_backup/* &&/bin/mv project_backup_*.tar.gz/opt/project_backup/
if[$?==0]
then
result="OK!!"
else
result="False!!"
fi
#send mail to administrator
/bin/mail caodaijun@https://www.wendangku.net/doc/613693849.html,-s"project_backup_$now"< Result:`/bin/echo$result` MESSAGE 给该脚本添加可执行权限。 3,设定每天定时执行该脚本. #crontab-e 输入如下内容: 023***/home/svn/project_backup.sh 表示每天晚上23点运行此脚本。 经过以上三步操作,就可以自动备份SVN资料了,且不论备份是否成功,都会给用户发送邮件信息。 七,用svnstat分析SVN数据. 1,安装JAVA svnstat是JA VA应用程序,需要先安装JA VA环境。 下载jre,URL:https://www.wendangku.net/doc/613693849.html,/webapps/download/AutoDL?BundleId=39484安装: #chmod+x jre-6u20-linux-i586-rpm.bin #./jre-6u20-linux-i586-rpm.bin 2,下载svnstat #wget https://www.wendangku.net/doc/613693849.html,/project/svnstat/svnstat/Release-1.0/SvnStat-1.0.zip?u se_mirror=jaist #unzip SvnStat-1.0.zip 3,更新代码 #pwd /root #svn co svn://192.168.60.10/project A project/test A project/server A project/server/main.c A project/client Checked out revision5. 4,生成svnstat数据 #svn log project-v--xml--non-interactive>project.log #cd SvnStat-1.0 #java-classpath SvnStat-all.jar de.agentlab.svnstat.SvnStat-jar SvnStat-all.jar-r /root/project.log-d/var/www/html/ 5,用浏览器登录即可看到许多统计出来的图表。大致如下图所示: 八,用statsvn分析SVN数据 1,下载statsvn #wget https://www.wendangku.net/doc/613693849.html,/project/statsvn/statsvn/0.7.0/statsvn-0.7.0.zip?use_mi rror=jaist #unzip statsvn-0.7.0.zip #cd statsvn-0.7.0 2,生成statsvn数据 #mkdir/var/www/html/statsvn #java-jar statsvn.jar-verbose-output-dir/var/www/html/statsvn//root/project.log /root/project 3,用浏览器测测试效果如下图: 九,配置codestriker. 1.安装codestriker依赖的perl包. #perl-MCPAN-e'install"Template"' 2.下载codestriker #wget https://www.wendangku.net/doc/613693849.html,/project/codestriker/codestriker/1.9.10/codestriker-1.9. 10.tar.gz?use_mirror=jaist&ts=1279246587 #mkdir/var/www/codestriker #cd/var/www/codestriker #tar xvf/path/codestriker-1.9.10.tar.gz #chown-R apache.apache codestriker-1.9.10 3.配置数据库 #service mysqld restart #mysql-uroot mysql 执行: CREATE DATABASE codestrikerdb CHARACTER SET utf8; GRANT SELECT,INSERT,UPDATE,DELETE,INDEX,ALTER,CREATE,DROP,REFERENCE S ON codestrikerdb.*TO codestriker@localhost IDENTIFIED BY'cspasswd'; FLUSH PRIVILEGES; quit 4.配置codestriker #cd codestriker-1.9.10/ #vim codestriker.conf 注意以下几点(详细可查看codestriker的安装文档) a.数据库的用户名密码要配对 b.svn的数据仓库要配对,我的如下: @valid_repositories= ( 'svn:file:///home/svn/project', ) 5.执行codestriker的安装脚本 #cd bin/ #./install.pl 6.配置http支持 #vim/etc/httpd/conf/httpd.conf 在最后面加上如下内容: Alias/codestriker//var/www/codestriker/codestriker-1.9.10/cgi-bin/ Alias/codestrikerhtml//var/www/codestriker/codestriker-1.9.10/html/ SetHandler perl-script PerlHandler ModPerl::Registry Options+ExecCGI AllowOverride None Allow from all 7.重启HTTP服务器 #service httpd restart 8.在浏览器中输入http://192.168.60.10/codestriker/codestriker.pl即可访问,如下图: 十,总结 总结个CC。