您的位置:首页 > 运维架构 > Linux

Linux环境下SVN的安装与配置

2013-11-22 20:36 603 查看
环境:
操作系统: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工作示意图如下:





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

验证
浏览器访问效果图如下:



五、配置邮件提醒支持

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 = kavin_yang@staff.easou.com
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 = kavin_yang@staff.easou.com
to_addr = yjh625@126.com
reply_to =
generate_diffs = add copy modify
show_nonmatching_paths = yes
[maps]
通过以上的修改,这样svn的通知邮件设置就完成,具体请康如下示例:


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。报错详见如下:




六、安装过程中出现的错误
①、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的安装与配置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息