这几天一直在搭建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,确保访问的权限路径文件夹要有。如我的,看下图:
至此,文件传输已经完成!
但是有的需要用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/
测试结果如下图所示:
注意:这个地方输入账号密码会报错,解决方法我还在寻找找,估计是svn密码在http中不能识别,有高手的可以帮我解决下,谢谢!