UML软件工程组织

 

 

Subversion--Apache提供服务
 
2008-10-24 来源:网络
 

在配置SVN时应该注意的问题和操作步骤。在配置SVN服务的过程中,参看了许多网友的资料和文章,这里先对大家表示感谢,希望大家最大限度的做到知识共享,一起进步。

SvnServe提供服务(subVersion自身的一种服务,配置简单)有许多缺点,如只能有一个数据仓库(Repository),不能设置SSL安全等等。也许大家在《Subversion以及TortoiseSVN(svnServe提供的服务)》一文中发现,我们在用SVN进行客户端迁出时,用的是svn://localhost/svnDB01 ,因为不是http协议,所以在穿越防火墙时可能会有限制。如果用Apache提供HTTP服务就没有什么限制了。察看了一些网友的资料,终于把其配置成功了。现把操作步骤写下来,与没有配置过或配置没有成功的朋友借鉴一下。

首先,肯定是配置apache服务了。我的Apache安装版本是apache_2.0.55-win32-x86-no_ssl.msi ,

 

也就是说版本是2.0.55了,据说svn是基于apache2.x写的,所以必须用apaxhe2.x版本,注意一下。

1 把svn解压目录的bin目录下的int13_svn.dll libdb44.dll libeay32.dll ssleay32.dll 4个文件拷贝到Apache安装目录的bin目录下。,如图示:

 

2 把svn解压目录的bin目录下的mod_authz_svn.so mod_dav_svn.so 拷贝到Apache安装目录的modules目录下。

3 这一步是最重要的一步,也就是配置Apache服务。配置如下

- 把
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
前面的#号去除。

- 在“加载模块”下新加2行
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
如图示:

 

在配置文件的最后加如下几行
<Location /mocha>
     DAV svn
     SVNParentPath E:/svnRepository
</Location>
下面对这几行话说明一下。
* <Location /mocha>中的/mocha说明当用svn客户端访问时,访问方式为:http://localhost/mocha/ 好像和IIS中的虚拟目录似的。即Location节点后面的/* 必须和http://主机ip/* 一致。
* DAV svn是不能变的。具体的作用我也不是很清楚。
* SVNParentPath E:/svnRepository说明我在E盘下建立了一个svnRepository目录(这个目录不是创建版本库的目录),这个目录作为父目录,在其下面建立不同的子目录(子目录是创建版本库的目录)。就是说在Apache服务下,可以创建多个版本库。如我在svnRepository目录下建立了2个版本库(当然你可以建多个),具体怎么建立版本库就不做介绍了,可以参考前面的一篇日志。如图:

 

 

这样我们就可以通过http://myhost/mocha/<项目名> 来访问存放于资源库F:/svnRepository中的指定项目。当然有可能你并不希望某个项目提供这样一种访问方式,这时候你可以使用SVNPath为每个项目进行单独的设置,SVNPath的使用方法如下:

     DAV svn
     SVNPath "F:/svnRepository/project1"

同样把这段配置放在httpd.conf最后,重启Apache HTTP服务即可通过http://myhost/mocha/project1 来访问project1项目的资源库。

这样就建成了一个没有任何权限控制,每个用户都能访问的SVN服务。我们打开Apache服务看一下。如图:

 

其中 aa.txt bb.txt是我上传到svn服务上的文件,testFlod是新建的一个目录。
任意建立一个目录,在里面点击右键,选择“SVN检出”,就能从svn服务器上下载下来对应的文件,如图:

 

看,这里已经是http提供的服务了。

------------------------- Apache的权限配置 --------------------------

终于把Apache的权限配置给搞出来了,赶快记下来,以作备忘。
先在E:svnRepository目录(父目录)下建立一个conf目录,专门放权限配置文件用,如图:

 

打开控制台,进入apache的bin目录,执行htpasswd -c E:svnRepositoryconfauth_pw aa 说明:-c表示是新建文件,文件建立于E:/svnRepository/conf/下面,名字为auth_pw ,建立一个名字叫 aa的用户,接下来,系统会让你输入密码。在建立一个名字叫bb的用户,执行命令为:htpasswd -m E:svnRepositoryconfauth_pw bb 说明:-m表示文件已经存在。
系统提示输入密码,这样就建立了2个用户,密码被MD5加密。如图:

 

在conf目录下建立 authz 的文件(权限控制),文件内容如下:
-------------------------
[/]
aa = rw
bb = rw

[rep1:/]
aa = r
bb = rw

[rep1:/testFlod]
aa = rw
bb = r

[rep2:/]
aa = rw
bb = rw
-------------------------
结合我的实际,现在给与说明:
[/]  // aa bb 用户对根目录(E:svnRepository)下所有文件的操作权限
aa = rw  // aa 有读写权限
bb = rw  // bb有读写权限

[rep1:/] //对rep1 数据仓库的控制权限
aa = r  // aa 有读的权限,而没有写的权限
bb = rw

[rep1:/testFlod] //对rep1 数据仓库下 testFlod 文件夹的访问权限  注意如何对数据仓库下某一目录的访问(值得注意的是,这里的目录是通过svn建立的目录,而不是在rep1下面硬性建立的目录,即这个目录是受svn版本控制的)
aa = rw
bb = r

[rep2:/]  // 对rep2 数据仓库的访问权限
aa = rw
bb = rw

当然,apache的 httpd.conf 文件也要改一下,改动如下:
<Location /mocha>
     DAV svn
     SVNParentPath E:/svnRepository
    AuthzSVNAccessFile E:/svnRepository/conf/authz
    AuthType Basic
     AuthName "Subversion projectA"
    AuthUserFile E:/svnRepository/conf/auth_pw
    Require valid-user
</Location>
这样就实现了对用户权限的基本控制。有篇文章(http://www.duduwolf.com/wiki/2006/103.html)讲的方法好像更好,但是我没有试过,只把文字摘录下来,做个记号。

在上一篇文章中,我们已经实现了对SVN和Apache的安装,并将它们集成在一起工作。这一篇则主要介绍如何对SVN For Apache进行一些配置。

在Apache下为SVN建立多个库。上篇中虽然也建立了一个SVN的库在Apache下,但是我们不可能一个SVN服务器上只有一个项目,或者所有项目共用一个SVN库进行开发,在Apache上为SVN建立多个库可以通过建立多个虚拟目录的方式实现。下面我们就来讲讲具体的步骤(注意,此篇中的配置和上篇中的配置方式有很大区别)

到F盘建立我们的SVN代码存放位置目录:SubversionFiles,并在其中建立一个conf目录,将会把对Apache对SVN的配置文件都放在这里

再在F:SubversionFiles下目录Test1和Test2,并将它们变成SVN库(用svnadmin create命令或者用TortoiseSVN来创建都可以)

在httpd.conf的最后添加如下代码

#
# SVN 项目配置文件,格式:Include 配置文件名
#为每个虚拟目录设置一个配置文件,用Include命令加载

#
Include F:/SubversionFiles/conf/*.project

即把F:/SubversionFiles/conf/目录下的所有*.project文件都包到httpd.conf中来

在F:/SubversionFiles/conf/创建Test1.project和Test2.project文件,Test1内容如下,Test2可以做相应的修改

#SVN项目名

      DAV svn

     #SVN项目的路径
      SVNPath F:SubversionFilesTest1

     #SVN项目的路径权限授权文件存放路径
     AuthzSVNAccessFile F:SubversionFilesconfTest1.access

#对于所有用户都需要身份验证
     Satisfy Any
      Require valid-user

#验证方式
    AuthType Basic

     #项目的名称
      AuthName "My Test1"

     #用户信息
      AuthUserFile   F:SubversionFilesconfuser


以上配置含义是在Apache下建立了一个叫作Test1的SVN虚拟目录,指向F:SubversionFilesTest1,授权配置文件是F:SubversionFilesconfTest1.access,用户信息和密码文件是F:SubversionFilesconfuser

通过以上配置,我们就在Apache上建立了Test1和Test2两个虚拟目录,也就是两个独立的SVN库,我们还需要两个文件访问权限配置的.access和包含登录用户的user。 在F:SubversionFilesconf目录中创建用户列表文件user,方法在上篇中已经说过,也就是htpasswd命令,我们需要创建Xrinehart, X-Killer, Guest三个用户。

接下来,我们为Test1库创建它的访问权限文件F:SubversionFilesconfTest1.access。在上篇文章中我们是采用对每个用户分别赋予对应权限的方式,如果用户比较多,管理起来就会比较麻烦,这时我们需要用用户组来对用户进行管理。下面我们就来尝试用用户组配置访问权限。Test1.access文件内容如下:

[groups]
AdminGroup = Xrinehart
GuestGroup = guest

[/]
@AdminGroup = rw
@GuestGroup = r

X-Killer = rw

在上面的配置中,通过[groups]节定义了两个用户组:AdminGroup和GuestGroup,并将Xrinehart用户归入AdminGroup用户组,guest用户归入GuestGroup。再在下面的[/]定义了他们对Test1库的根目录的操作权限:AdminGroup组有读写权限,GuestGroup组只有读权限,X-Killer用户拥有读写权限。这里需要注意的是定义权限的时候,用户组需要在前面加@符号来标示。

为了测试效果,我们可以将Test2.access文件写为:

[groups]
AdminGroup = Xrinehart, X-Killer
GuestGroup = guest

[/]
@AdminGroup = r
@GuestGroup = rw
 

保存好上面的所有配置文件之后,重新启动Apache服务器。此时我们就可以在IE里面通过http://localhost:8080/Test1 和http://localhost:8080/Test2 来访问Test1和Test2库了,你可以测试一下,用户权限是否符合下面这个列表所示?做到这里,SVN在Apache上建立多个库的配置也就算完成了。

                                                  Test1                                             Test2

Xrinehart                                     rw                                                   r
X-Killer                                      rw                                                   r
guest                                           r                                                     rw

--------------------------------------------------
自动备份的批处理文件(bat)
echo off
PAUSE

rem Subversion的安装目录
set SVN_HOME="C:svn-win32-1.4.3bin"

rem svn版本库目录
set SVN_ROOT="E:backupsvnRepositoryxxfb"

rem 备份的目录
set BACKUP_SVN_ROOT=D:svnBak%date:~0,10%

mkdir D:svnBak%date:~0,10%

@echo 正在备份版本库 请稍候......
@%SVN_HOME%svnadmin hotcopy %SVN_ROOT% %BACKUP_SVN_ROOT%
@echo 版本库%SVN_ROOT%成功备份到了%BACKUP_SVN_ROOT%

PAUSE

 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号