这几天一直在搭建svn,网上搜索了很多资料,没有一个是完整的,于是我就自己整理了一份安装手册,记录下来,第一是给自己做一个笔记,第二是给大家一个参考。

下面是简单的目录说明:

subversion目录说明:
*dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据
*db目录:就是所有版本控制的数据存放文件
*hooks目录:放置hook脚本文件的目录
*locks目录:用来放置subversion见艰苦锁定数据的目录,用来追踪存取文件库的客户端
*format文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号
*conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)


系统环境
CentOS 6.5 桌面安装形式,(关闭iptables和selinux) 

一,安装必须的软件包.
yum install subversion mysql-server httpd mod_dav_svn mod_perl sendmail wget gcc-c++ make unzip perl* ntsysv vim-enhanced

说明:
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

admin = 123456

huangyunping = 123456

hekaining = 123456

shunfeng = 123456

zhushengnan = 123456

gaozhe = 123456

luwenjun = 123456

fangwei = 123456

yefuhua = 123456

wangwei = 123456

chenwei = 123456

解释:上面是创建用户账户,不管上面的账号是哪个组,只要有登陆就必须在这个地方建好,分组是在
authz文件下控制。上文的admin账号,我是建一个最高权限的账号。姓名 = 密码


5,修改用户访问策略
/home/svn/project/conf/authz记录用户的访问策略,这个地方我纠结了几天,因为访问目录不同,但是你想通之后也就明白了。里面有很多#注释掉的费代码,都可以不看的,我这里直接贴有用的脚本。以下是参考:

[aliases]

# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

#组的访问权限

[groups]

project_admin = admin,wangwei

project_ui = huangyunping

project_app = hekaining

project_web = shunfeng,zhushengnan

project_jg = liuyuntao

project_yj = gaozhe,luwenjun

project_test = fangwei,yefuhua

project_products =chenwei


#各组的访问路径

[project:/]

@project_admin = rw

* =


[project:/ui]

@project_ui = rw

@project_admin = rw

* =


[project:/app]

@project_app = rw

@project_admin = rw

* =


[project:/web]

@project_web = rw

@project_admin = rw

* =


[project:/jiagou]

@project_jg = rw

@project_admin = rw

* =


[project:/yingjian]

@project_yj = rw

@project_admin = rw

* =


[project:/test]

@project_test = rw

@project_admin = rw

* =


[project:/products]

@project_products = rw

@project_admin = rw

* =


说明:

新建组名=组员,就是passwd里面新建的账号,上下有两部分,上部分是分组,下部分是设置组的访问路径。

[项目名,/限制该组访问的文件夹]

rw是读写权限,r是只读权限,每个组的最后一行的* =表示,除了上面设置了权限的用户组之外,其他任何人都被禁止访问本目录。这个很重要,一定要加上!


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
注意:如果修改了svn配置,需要重启svn服务,步骤如下:

# ps -aux|grep svnserve
# kill -9 ID号
# svnserve -d -r /home/svn

(前几天遇到这个的一个错误,我新建两个项目,启动的时候是启动到下面一个项目路径,造成上一级项目的路径账号下的人员登录不上,最后原因是启动的目录一定要是上级目录,就是svn目录,svn下面的项目目录如果单独启动的话就会出问题,如果是两个以上的情况下。)

8,测试服务器

用svn客户端可以尝试测试,访问目录是:svn://192.168.8.18/project  账号可以用上面的admin 123456,确保访问的权限路径文件夹要有。如我的,看下图:


linux centos6.5下安装svn方法_第1张图片


至此,文件传输已经完成!

但是有的需要用http访问,可以继续这样操作

三,配置SVN服务器的HTTP支持


1,转换SVN服务器的密码
由于SVN服务器的密码是明文的,HTTP服务器不与支持,所以需要转换成HTTP支持的格式。我写了一个Perl脚本完成这个工作.
脚本内容如下:
# cd /home/svn/project/conf/
# vim 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 $_`;
}
}



# chmod +x PtoWP.pl
# ./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,修改svn目录的属主为apache帐号:chown -R apache.apache /home/svn/project/
(注意:原文少了这一步,会出权限问题。)
4,重启Web服务器:
# /etc/init.d/httpd restart
Stopping httpd: [FAILED]
Starting httpd: [ OK ]


5,用浏览器访问http://192.168.8.18/project/
测试结果如下图所示:

linux centos6.5下安装svn方法_第2张图片

注意:这个地方输入账号密码会报错,解决方法我还在寻找找,估计是svn密码在http中不能识别,有高手的可以帮我解决下,谢谢!