SVN有2种安装方式 :Apache 和非 Apache
httpd是web服务器,用来通过web访问subversion
svn:// 需要用svn的方式对用户权限配置
或
http:// 需要用http的方式对用户权限配置,
安装前须知:
1,关于mod_dav_svn模块
由于Subversion需要版本化的控制,因此标准的HTTP协议不能满足需求。要让Apache与Subversion协同工作,就要使用WebDAV(Web-based Distributed Authoring and Versiong)Web分布式创作和版本控制协议。WebDAV是HTTP 1.1的扩展,关于WebDAV的规范和工作原理,可以参考IETF RFC 2518。
mod_dav_svn模块就是作为Subversion与Apache之间的接口,通过它,Apache就可以访问版本库,并且可以让客户端也使用HTTP的扩展协议WebDAV/DeltaV进行访问.
# rpm -qa|grep svn
mod_dav_svn-1.4.2-2.1AX
Mod_dav_svn的版本要和svn版本一致
下载依赖库
如果没有zlib的话,要安装zlib
下载依赖的库(安装之前需要的库),版本一定要对上,要不然编译通不过安装apr依赖库
apr 和 apr-util一般会在httpd的安装包内,subversion安装会使用到apr和par-util,如果当前系统没有,最好安装一下
(Apache Portable Runtime Module)
http://archive.apache.org/dist/apr/apr-1.2.12.tar.gz
http://archive.apache.org/dist/apr/apr-util-1.2.12.tar.gz
http://archive.apache.org/dist/httpd//httpd-2.2.6.tar.gz
./configure --enable-dav --enable-dav-fs
make
make install
检查已安装的 Apache2 是否已经安装了 mod_dav .
如果已经成功安装了Apache,使用 httpd -M 来查看有没有安装 dav_module,如果没有的话 必须附加 ‘–enable-dav’ ‘–enable-dav-fs’ 两个参数重新编译 Apache,否则即使编译通过了svn,apache也会启动不起来.
下载apache
注意:安装附加参数 dav
./configure -prefix=/usr/local/apache2 --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config -enable-modules=so --enable-dav --enable-maintainer-mode --enable-rewrite
安装 Subversion 源码安装
注意:安装附加参数
./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config --with-ssl --with-zlib --enable-maintainer-mode
配置集成在apache配置文件里面
配置 apache 与 Subversion 集成
vi /usr/local/apache/conf/httpd.conf 在末尾添加
<Location /svn>
DAV svn
SVNParentPath /svn/project
AuthType Basic
AuthName "Hello welcome to here"
AuthUserFile /svn/passwd
AuthzSVNAccessFile /svn/auth.conf
Require valid-user
</Location>
说明
<Location /svn>
DAV svn
SVNParentPath /svn/project (此处配置你的版本库根目录)
AuthType Basic (连接类型设置 基本验证)
AuthName "Hello welcome to here" (此处字符串内容修改为提示对话框标题)
AuthUserFile /svn/passwd (访问版本库用户的文件,用apache 的htpasswd命令生成)
AuthzSVNAccessFile /svn/auth.conf (此处修改为访问版本库权限的文件)
Require valid-user ("Require valid-user"告诉apache在authfile中所有的用户都可以访问)
</Location>重启 apache /usr/local/apache2/bin/apachectl –k restart
注意,如果用apache集成的话,这里配置的版本权限文件可以和svn的不是一个,则这个生效,svn的就可以不用配置了,当然配置了也没有用,
配置SVN(所有的配置文件里面的文字都要定行首不留空格!要不然不识别,)
将svn的bin目录加到环境变量中去
[root@BlackGhost /]# PATH=$PATH:/usr/local/svn/bin
[root@BlackGhost /]# export PATH
目录控制文件authz
[root@BlackGhost conf]# vi authz
[groups]
admin= zhangy
[repos:/]
@admin = rw =》看见没,定行首,@前面不能有空格,要不然不识别
* = r
1,新建一个目录用于存储SVN所有文件
# mkdir /home/svn
2,新建一个版本仓库
# svnadmin create /home/svn/project
3,初始化版本仓库中的目录(最好初始化成标准目录即,trunk,branches,tags三个目录)
//当前目录下新建一个临时目录
# [root@gitserver ~]# mkdir project project/trunk project/branches project/tags
//把刚才新建的临时目录import版本库里面
# svn import project/ file:///home/svn/project -m “初始化SVN目录”
// svn import作用: 递归提交一个路径的拷贝到版本库。
//以前临时目录没用了,可以删除了
[root@gitserver ~]# svn import project/ file:///opt/svn/project -m "init the dir"
Adding project/trunk
Adding project/branches
Adding project/tags
# 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
[groups]
project_p = pm
project_s = server1,server2,server3
project_c = client1,client2,client3
project_t = test1,test1,test1
[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 = r
@project_c = r
@project_t = r
* =
说明:以上信息表示,只有project_p用户组有根目录的读写权。r表示对该目录有读权限,w表示对该目录有写权限,rw表示对该目录有读写权限。最后一行的* =表示,除了上面设置了权限的用户组之外,其他任何人都被禁止访问本目录。这个很重要,一定要加上!
6,修改svnserve.conf文件,让用户和策略配置升效.
svnserve.conf内容如下:
注意:subversion读取配置文件svnserve.conf时,无法识别有前置空格的配置文件
[general]
anon-access = none ==》anon前面不要留空格,
auth-access = write
password-db = /home/svn/project/conf/passwd
authz-db = /home/svn/project/conf/authz
7,启动服务器
# svnserve -d -r /home/svn(d 代表隐藏, r 后面接目录)
注意:如果修改了svn配置,需要重启svn服务,步骤如下:
# ps -aux|grep svnserve
# kill -9 ID号
# svnserve -d -r /home/svn
8,测试服务器
# svn co svn://192.168.10.166/project
Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Password for 'root':
Authentication realm: <svn://192.168.60.10:3690> 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: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Password for ‘root’:
Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Username: pm
Password for ‘pm’:
A project/test
A project/server
A project/client
Checked out revision 1. ( 测试提取成功 )
# cd project/server
# vim main.c
# svn add main.c
# svn commit main.c -m “测试一下我的C程序,看什么看,不行啊??”
Adding main.c
Transmitting file data .
Committed revision 2. ( 测试提交成功 )
三,配置SVN服务器的HTTP支持(svn的用户验证就失效了,因为你是通过http访问的,而不是svn协议)
Httpd.conf配置文件由如下代码
<Location /svn>
DAV svn
#SVNListParentPath on
SVNParentPath /opt/svn/repositys
# how to authenticate a user
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /usr/local/svn/apache_authz
Require valid-user
# our access control policy
AuthzSVNAccessFile /usr/local/svn/svn_authz
</Location>
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 (<FILE>) {
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,在最后添加如下信息:
<Location /project>
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
</Location>
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.60.10/project/server/测试
下面建立可访问用户文件
# htpasswd -c /home/svn/authfile 用户名
要增加用户,则使用下面命令
# htpasswd /home/svn/authfile 用户名
补充知识
启动目录决定访问路径
由上面可知道,启动目录为./opt/svn/repositys,那么访问路径就应该是
svn://192.168.10.25/eos4bank,
SVN标准目录结构
trunk是主分支,是日常开发进行的地方,一般包含 :
0-Src 源码
1-DevelopDoc 开发文档
2-ProductDoc 产品文档
3-ThirdPartyTools 第三方工具(插件)
4-Testing 测试
5-DeployDoc 部署文档
ranches是分支。一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中。
又比如为不同用户客制化的版本,也可以放在分支中进行开发。
tags目录一般是只读的,这里存储阶段性的发布版本,只是作为一个里程碑的版本进行存档。