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的安装与配置。


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