基于APACHE 的SVN服务器端安装与配置说明

来源:互联网 发布:php 发送一条udp消息 编辑:程序博客网 时间:2024/04/30 02:55
 
基于APACHE 的SVN服务器端安装与配置说明
1.转到http://httpd.apache.org/download.cgi下载apache_2.0.53-win32-x86-no_ssl.msi或更高版本;
注意:apache_2.2.4-win32-x86-no_ssl.msi这个版本里没有”apache.exe”这个执行程序。所以安装了apache_2.0.55-win32-x86-no_ssl.msi这个版本。
2.转到http://subversion.tigris.org 下载svn-1.1.3-setup.exe
我安装的是这个版本:svn-1.4.0-setup.exe
3.转到
http://tortoisesvn.tigris.org/下载TortoiseSVN-1.1.3-UNICODE_svn-1.1.3.msi
客户端使用的是:tortoisesvn-1.3.2.5840-svn-1.3.0.msi
二 安装
1.先安装Apache,如果你的IIS已经占用80端口,则在安装的时间请使用8080口,不过这个版本好像是自动选择,为安全起见,还是自己手动选择一下,避免冲突。如果选择8080端口,安装完后请打开
http://127.0.0.1:8080如果安装成功的话,您将看到欢迎页;如果选择80端口,用http://127.0.0.1地址,可以验证是否成功。

2.接着安装svn-1.4.0-setup.exe,这个版本可以选择是否要在apache的模块中自动配置,请选择自动配置
自动配置说明:自动配置会把“mod_dav_svn.so 、mod_authz_svn.so”按照SVN自己的路径自动加载到httpd.conf文件当中。mod_dav.so、 mod_dav_fs.so有可能没有加载成功(没去掉注释号“#”),所以需要确认“mod_dav.so、 mod_dav_fs.so、mod_dav_svn.so、 mod_authz_svn.so”是否加载成功。
手动配置说明: 
 1) 把 <Subversion_root>/httpd/目录下的 mod_dav_svn.so 和 mod_authz_svn.so Copy到 <Apache_root>/modules/ 目录下。
 2) 把 <Subversion_root>/bin/ 目录下的 libdb42.dll、libeay32.dll、以及 ssleay32.dll Copy到 <Apache_root> 底下的 bin 或 modules文件夹。
 3)接着用记事本打开Apache HTTP Server 的 httpd.conf(在 <Apache_root>/conf/ 目录下),找到 LoadModule 指令,先找到以下兩行:
  #LoadModule dav_module modules/mod_dav.so
  #LoadModule dav_fs_module modules/mod_dav_fs.so
4)把前面的 '#' 字元刪除,然后把下面几行文字加到这群 LoadModule 指令的后面:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
3. 重新启动 Apache HTTP Server。
 注意:按理说,在配置apache的时候,如果80已经被IIS占了,我们选定8080口,但是这样反而不行,怎么办? 没关系按apache选80口,它会自动避开的80而选择8080的,这点很奇怪。

4.
设置subversion的仓库路径
Ø 设置URL路径 SVNPath
其语法是:
   <Location /svn/repos_name>
    DAV svn
    SVNPath /absolute/path/to/repository
</Location>
其中 "/svn/repos_name" 就是客户端存取特定档案库的 URI(Uniform Resource Indentifier),SVNPath 后面指定的路径则是档案库的绝对路径,假设我们的档案库实际存放的路径是 d:/svn/MyProject,并且希望客户端使用 "
http://myserver/svn/myprj" 的 URL 来存取档案库,那么要加入 httpd.conf 的内容就是:
<Location /svn/myprj>
    DAV svn
    SVNPath d:/svn/MyProject
</Location>
注意 Location 标签后面的 /svn/myprj 的第一个斜线不可少!

Ø 现在要设定 URL 路径与档案库实体路径的对应关系。
对应的方式有两种,分别是与 设置仓库物理路径 SVNParentPath。
如果你的档案库都集中放在某个目录之下,例如:d:/svn,那你就可以使用 SVNParentPath 的方式指定档案库的根路径,例如:
<Location /svn>
    DAV svn
    SVNParentPath d:/svn
</Location>
这表示可以让任何人都可以透过
http://myserver/svn/<档案库名称> 的方式,存取位于 d:/svn 这个目录以下的所有档案库。也就是说,这个设定动作只需要一次,如果使用 SVNPath,你必须为各个档案库分别指定对应的路径。
以上两种设定方式都可以,方便起见,这里我用 SVNParentPath 来统一指定所有档案库的父层 URL 路径。
将 <Location> 的设定加到 Apache HTTP Server 的 httpd.conf 檔尾就行了。
接着便可以开始建立档案库。

三 建立档案库
假设我们要把所有的档案库都放在 d:/svn 目录下,现在要建立一个测试用的档案库,名称叫做 在 repository,指令为:
md d:/svn
svnadmin create e:/svn/testrepo
命令执行完后,检查看看 d:/svn/repository 目录底下产生了哪些目录和档案。
这时候你已经建立了一个档案库,你可以先在本机用浏览器测试一下,网址输入
http://localhost:8080/svn/testrepo/或http://localhost/svn/testrepo/看看能不能看到档案库的内容.


四 存入仓库
我们先测试一下这仓库是否成功,先建立以下目录结构
c:
cd temp
md ProjectA
md ProjectA/trunk
md ProjectA/branches
md ProjectA/tags
svn import .
http://localhost/svn/repository -m "Initial repository layout"

提示
本文在执行 svn 命令时,都是使用 http 协议的方式,这样我们可以确知 Subversion 与 Apache HTTP Server 的设定无误,其它人就可以透过 Internet 存取档案库。当然你也可以用其它的协议,例如:
file:///,如果使用 file 协议,最后一行指令就变成:
svn import .
file:///d:/svn/repository -m "Initial repository layout"

五 项目的目录结构
这里补充说明一下 ProjectA 的目录结构。在 ProjectA 项目的根目录下建立的 trunk、branches、和 tags 这三个目录是有特别意义的,它们的作用分别是:
trunk 目录用来存份目前项目正在进行开发的程序档案和文件(又称为主线,即 mainline);
branches 用来存放主线的各个仍在发展中的分支;
tags 则用来存放已经不再变动的分支,也就是其中的档案不会再修改了。
这是 Subverion 官方手册建议的目录结构安排方式,你可以自己决定要不要用这种配置方式,详细说明请参考官方手册的第五章,子标题为 "Choosing a Repository Layout"。
补充
Subversion具有两种服务模式,一个是作为Apache的模块,另一个是自定义协议的Subserve服务。
作为Apache的模块,客户端可以通过WebDAV/DeltaV协议访问Repository,而使用Subserve则使用
Subversion的自定义协议。
下表是两种服务模式的比较:
功能 Apache + mod_dav_sub Svnserve
验证方式 基于HTTPS的X.509、LDAP、NTLM或其他Apache支持的验证 CRAM-MD5或者SSH
用户帐户管理 私有的用户文件 私有的用户文件或已有的系统帐户
授权管理 blanket read/write access或单一目录的访问控制 blanket read/write access
加密 可选的SSL 可选的SSH隧道
交互性 可通过支持WebDAV的客户端访问 无交互性
Web访问 有限的内置支持,或通过第三方的工具,例如ViewCVS 通过第三方的支持,如ViewCVS
速度 稍慢 稍快
初始安装 稍复杂 相当简单

六 使用 Windows 网域账户验证
照着前面的步骤做,你会发现存取档案库时都不用输入账号密码,这是因为我们之前的设定没有启用身分验证的功能。但是我们通常不希望所有人都能任意存取你的档案库,免得重要资产外泄,或者数据被破坏,因此了解如何加入身分验证也是必要的。
Serversion 提供了多种验证使用者身份的方式,这里只介绍 Windows 身分验证的方式,这种方式很适合用在开发团队成员都在局域网络内的情况。请依下列步骤进行:
取得 SSPI 模块,下载网址为
http://tortoisesvn.tigris.org/mod_auth_sspi.zip
把 zip 里面的 mod_auth_sspi.so 解压缩到 <Apache_root>/modules 目录下。
把下面这行加入到 Apache 的 httpd.conf 里面:
LoadModule sspi_auth_module modules/mod_auth_sspi.so
注意上面加入的这行一定要放在下面这行的前面:
LoadModule auth_module modules/mod_auth.so
修改 httpd.conf 的 <Location> 设定如下:
<Location /svn>
    DAV svn
    SVNParentPath e:/svn
    AuthType SSPI
    AuthName "Subversion 档案库"
    Require valid-user
  
SSPIAuth On
    SSPIAuthoritative On
    SSPIDomain <domaincontroller>
    SSPIOfferBasic On
</Location>
其中 <domaincontroller> 就是你的 Windows 域控制器的计算机名称(例如:WIN2KDC),注意两边的括号 <> 不用保留。如果你的环境没有域控制器,就维持原来的 <domaincontroller> 就行了。在我的环境下,我发现即使有域控制器,但是这里不去设定它,还是能够正常的验证使用者身分。
 
重新启动 Apache。
七 SSPI身份验证

此处也可以用mysql,passwd文件,LDAP,文件方式等其他任何Apache支持的验证方式。
在Httpd.conf文件添加:
#SSPI authentication
<Location /repository>
              DAV svn
              SVNParentPath d:/repository
              AuthzSVNAccessFile e:/repository/accessfile               
              Require valid-user
              AuthType SSPI
           AuthName "Subversion repositories"
                     # SSPI settings
               SSPIAuth On
               SSPIAuthoritative On
               # point to domaincontroller
               SSPIDomain domain.com.cn
              SSPIOfferBasic On
</Location>
控制文件AuthzSVNAccessFile要作相应的修改:
[test:/]
domain/user1 = r
domain/administrator = r
[test:/1]
domain/user1 = rw
[test:/2]
domain/user1 =
domain/administrator = rw
在tortoiseSVN使用时,会提示认证,填写用户名和密码即可。

如果要按照Group的方式来控制权限,可同时建立一个groups文件,内容如下:
   #格式:GroupName: username1 username2
    svngroup: user1 user2
过程记录
1.Syntax error on line 961 of E:/Apache Group/Apache2/conf/httpd.conf:
DAV not allowed here
在这两行首尾添加上
<Location /svn>
DAV svn
svnpath e:/svnrepro
</Location>
2.Syntax error on line 969 of E:/Apache Group/Apache2/conf/httpd.conf:
Invalid command 'SSPIAuth', perhaps mis-spelled or defined by a module not inclu
ded in the server configuration
没有在“LoadModule auth_module modules/mod_auth.so”的前面添加“LoadModule sspi_auth_module
modules/mod_auth_sspi.so”导致的。
3.(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 : make_sock: c
ould not bind to address 0.0.0.0:80 no listening sockets available, shutting down
Unable to open logs
“LoadModule dav_fs_module modules/mod_dav_fs.so”前面的注释号“#”没有删除掉所致。
4。http://localhost/svn/testrepo/
Forbidden
You don't have permission to access /svn/testrepo/ on this server.
Apache/2.0.55 (Win32) DAV/2 SVN/1.4.0 mod_fastcgi/2.4.2 mod_auth_sspi/1.0.3 Server at localhost Port 80
5.当访问http://cmtest1/svn/testrepo/时,总是出现
403 Forbidden
Forbidden
You don't have permission to access /svn/ on this server.
错误 日志时出现这样的提示:
[Mon Sep 10 16:02:38 2007] [error] [client 192.168.13.11] Failed to load the AuthzSVNAccessFile: The character 'g' in rule 'admin' is not allowed in authz rules
[Mon Sep 10 16:02:38 2007] [error] [client 192.168.13.11] Access denied: 'powercn//cmtest1' GET svn:/testrepo
把把ADMIN=POWERCN/***,改成ADMIN=***就能访问这个“版本库”了。但奇怪的是,当第六个问题解决后,再把AuthzSVNAccessFile所指示的文件里的ADMIN=***改回成ADMIN=POWERCN/***,也是对的。如下:
================================
[groups]
admin=administrator,powercn/cmtest1,powercn/lvbiying,powercn/ccadmin2
[/]
*=r
@admin=rw
[testrepo:/]
* =rw
@admin=rw
=========================================
6.使用SVNParentPath的时候,直接访问ParentPath的时候,总是得到以下错误提示:
403 Forbidden
Forbidden
You don't have permission to access /svn/ on this server.
下面的办法可以搞定它:
一、首先,Subversion1.3及以后版本支持SVNListParentPath ON,之前的版本只能使用PHP自己做。
二、Location 设置中最后要加上/,应该是<Location /svn/>而不是<Location /svn>否则可能不能访问。
三、通过“http://localhost/svn/” 来访问仓库列表,如果想让“http://localhost/svn”也起作用的话,需要在</Location>的后面增加重定向的设置:RedirectMatch ^(/svn)$ $1/ ,当然也可以采用RewriteEngine之类的办法。(我没有加这个重定向也能用这两个URL来访问。)
# svn configration
<Location /svn/>
#创建SVN父目录
DAV svn
SVNParentPath e:/svn
SVNListParentPath on
#SVNPath e:/svn/testrepo
#使用 Windows 网域账户验证
                 AuthType           SSPI
                 AuthName                  "Subversion库用户验证"
                 #利用SSPI进行身份认证
                 AuthzSVNAccessFile e:/svn/accessfile.ini
                 Require              valid-user
                 SSPIAuth            On
                 SSPIAuthoritative     On
                 SSPIDomain                powercn.com
                 SSPIOfferBasic                    On
</Location>
RedirectMatch ^(/svn)$ $1/

解决apache安装后服务里没有apache2这个服务的问题
D:/Apache Group/Apache2/bin>apache.exe -k install -n apache2
Syntax error on line 198 of D:/Apache Group/Apache2/conf/httpd.conf:
ServerAdmin takes one argument, The email address of the server administrator
//然后在 httpd.conf里吧198行的 serveradmin 添加后拿下
D:/Apache Group/Apache2/bin>apache.exe -k install -n apache2

Subversion配置安装教程(一)

引言:一直以来我都认为,MS应该从开源项目中汲取有益的东西,开源项目也要向MS学习,而不是象网上每次提到.Net和Java就要打嘴仗一样,有些文人相轻的意思。^……^我从工作以来很有幸的能够参与多个Java和.Net项目开发,时常在这两种技术之间比较思考,现在有机会和大家分享,说的不对的地方,请大家多多指教。首先我准备谈谈SCM,个人认为在现在的大型软件开发中,团队合作是项目成功最重要的因素之一,尤其是使用.Net和Java这些强大的面向对象的语言开发程序,必然会多次分层,基于组件的共享等等,所以SCM就更重要了。MS的VSS我想大家应该都用过,也知道VSS的优劣,我就不多说了。(风传VSS不是MS自己开发的,记得有次我去过真正开发VSS的公司的网站,现在地址也忘记了。并且MS内部也不会使用VSS作为自己的SCM工具,呵呵,不知道是不是真的?)在以后的系列文章里,我会讲解Subversion,CVS这些主流的开源项目SCM工具,并且会延伸到CI(Continues Integration,即继续集成)和BugTrace领域,毕竟只有版本控制系统对于一个大型软件的开发是远远不够的。在这个旅程中,我还会带大家领略一下python(我的最爱。。。呵呵,不想试试吗?非常强大!)的旖旎风光,而且这一系列文章也会收录在我准备撰写的《Using Open Source Software to Implement Your .Net Applications》(中英双语版,呵呵。。。考察一下自己的英语)。首先来介绍一下Subversion,以下引自赛迪网-开放系统世界,作者:顾宏军
    长久以来,在开源世界中,CVS(Concurrent Versions System)一直都是版本控制的首选。但是现在用户有了另一个选择,就是Subversion。Subversion是下一代版本控制系统,能替代CVS,项目主页是http://subversion.tigris.org。
    Subversion是一个自由、开放源码的版本控制系统。它是一个通用系统,可用来管理任何类型的文件, 其中包括程序源码。
    它的初始目标很明确,实现绝大部分CVS的已有功能;充分考虑现有的CVS用户,在使用方式上模仿CVS,同时开发了一系列工具,使得基于CVS的项目能够顺利迁移到Subversion上。和CVS相比,它有很多优点,例如目录版本控制、不可分割的提交、一致的数据处理方式和更有效率的分支与标记等。。。


如果你使用过CVS就能体会到上文所说的Subversion好处了,比如目录版本控制,目录的改名等。对于Subversion的原子提交,我想多说几句,大家可以想象,我们一般做一个修改,可能需要改动多个文件,尤其现在大家多对分层已经趋之若鹜了,除非你还在用着哪种什么东西都写在一起的语言。(比如PB?呵呵,感觉好像是这样的东西。我现在正在作一个遗留系统的迁移到.Net上的工作,这个系统就是用类似PB的一种脚本语言Panther,ui,逻辑和数据访问全在一个文件里面,我在代码里面还看到了80年代的注释。呵呵,很强吧?我们公司几个程序员可能是中国为数不多的懂panther语言的人了。扯远了。。。)如果你的一次提交过程中,由于网路原因或者机器的硬件原因或者根本是你自己落下了一些文件没提交,在逻辑意义上这次提交是不完整的,Subversion的原子提交能很好的解决这个问题,个人认为这也是对于CVS最大的改进了。怎么样,是不是有些想数据库的事务的概念呢?动心了吧?ok,废话少说,let's go!(Follow me! Fire in the hole!^……^)

Subversion有两种运行方式,一种是基于Apache Http Server,另外一种是Subversion Standalone Server。下面我讲解的是基于Apache Http Server的Subversion,这样做几个好处:A.能使用WebDAV协议。B.能使用浏览器作为客户端工具浏览源码仓库。C.可以很容易的支持到SSPI(Windows域认证)和LDAP(AD?),这些都是Apache本身就支持的。D.能得到比较完善的Apache安全认证系统,比如SSL加密连接。
在正式安装配置Subversion之前我们先来作点准备工作,由于我们以后会经常在命令行下执行命令,每次打开一个新的命令行窗口默认的当前目录都是C:/Documents and Settings/$UserName,这样在执行命令之前都要切换目录,很麻烦,所以我们先来解决这个问题。在“开始”-“运行”中输入“regedit”,打开注册表。找到/HKEY_CLASSES_ROOT/Folder/shell,如果没有shell,可以在Folder下新建一个名为shell的键,在shell下新建一个名为“命令行(Command Windows)”的键,在这个键之下再建一个新的名为“Command”的键,设置默认值为“cmd /K cd /d %L”。

完成后的效果如下:

这样当我们选中一个目录,在右键上下文菜单里面就多了一个“命令行(Command Windows)”的选项,单击这个选项就可以打开一个命令行窗口并且快速切换到当前选中的目录。说些题外话,很多人提到MS就义愤填膺,可是有多少人真正掌握MS的技术呢?比如这个小小的CMD命令,建议大家在命令行窗口中输入“cmd /?”,相信收获不少。前段时间在看候捷先生的《Word的排版艺术》,china-pub上很多留的书评都是不屑一顾,我不知道这些人是不是真的能把WinWord作为自己的“写作平台”?以前我都是用DockBook作为写作的工具,现在才知道Word可以这样用,MS也不是一无是处呀。。。
注意:如果你使用WinXP作为Subversion服务器,请打上SP1补丁,否则会导致错误的网络数据传输使Subversion的数据库不能正常使用。(我自己的Notebook是WinXP SP2,工作良好,至于Win2K没有测试,我想应该不会有什么问题吧?)
安装Subversion:
1.到www.apache.org上下载apache http server,注意要下载2.0.X以上的版,否则不能和当前最新的Subversion工作。
2.到http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91上下载Subversion当前1.1.3版本的二进制安装文件,一般tigris.org并不提供二进制包,这些二进制包是有一些志愿者维护的,所以可能不是当前最新的版本。如果你想尝鲜使用Subversion的最新版,请下载源码自己编译。
3.安装apache http server
4.安装Subversion
5.检查$/apache group/apache2/modules下是不是已经有了mod_dav_svn.so和mod_authz_svn.so
6.检查$/apache group/apache2/modules下是不是已经有了libdb42.dll,如图:

7.搜索$/apache group/apache2/conf/httpd.conf配置文件中的#LoadModule dav_fs_module modules/mod_dav_fs.so,把前面的注释#去掉;并检查LoadModule配置节的末尾是不是有了LoadModule dav_svn_module modules/mod_dav_svn.so和LoadModule authz_svn_module modules/mod_authz_svn.so,如图:

注意,请先安装Apache,然后再安装Subversion,这样上述5,6,7步骤都可以免了,在安装Subversion过程中它会自动拷贝相应文件到相应目录中,并且修改http.conf文件,然后重新启动apache服务使修改生效。但是我发现现在这个版本的Subversion安装文件可能有个bug,apache的http.conf的配置文件中#LoadModule dav_fs_module modules/mod_dav_fs.so注释没有去掉,所以大家还是小心检查一下。如果你是先安装的Subversion,然后再安装的Apache的,那么上述的步骤一个也不能漏,都需要自己手动完成。
配置Subversion:
1.在硬盘上建立源码库的根目录,例如E:/SVN
2.在E:/SVN之下建立一个新的目录,例如TestRepository作为我们的测试源码库
3.建立Subversion数据库,当前版本Subversion支持两种格式数据库,一种是FSFS,另外一种是BDB( Berkeley Database)。在命令行下输入svnadmin create --fs-type bdb TestRepository建立BDB格式的数据库(确保当前目录已经切换到E:/SVN/),在命令行下输入svnadmin create --fs-type fsfs TestRepository建立FSFS格式的数据库(确保当前目录已经切换到E:/SVN/)。建好数据库以后,到E:/SVN/TestRepository下看看是不是多了很多目录和文件,可以研究一下这些文件,对理解Subversion有帮助,但是不要试图直接修改这些文件!如图:

如果大家经常关注开源技术,就知道BDB是一个轻量级的关系数据库,可以作为一个轻巧的内置数据库,在很多开源项目下有很多应用,比如CVSTrac。FSFS格式主要的特点是可以支持Subversion的数据库和Subversion服务器可以在不同的物理机器上,可以通过网络共享(不知道是否支持NFS?),能很好的工作在MS Win98上,并且速度更快,但是由于FSFS是一种新的格式,稳定性可能没有BDB好。推荐大家使用BDB,毕竟BDB有很多年开发历史,比较稳定,而且我觉得把Subversion的DB和服务器分开放置好像没有什么必要吧?(谁能告诉我这样做的好处?),大家也不会拿一台Win98作server吧?^……^。不要试图在BDB的格式的数据库上使用网络共享,也不要使用网络磁盘映射,否则会导致无法预料的错误。
4.打开$/apache group/apache2/conf/httpd.conf配置文件,在文件的末尾加入以下语句,
<Location /svn>
DAV svn
SVNParentPath e:/SVN
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile passwd
#AuthzSVNAccessFile svnaccessfile
Require valid-user
</Location>
这里建立了一个虚拟目录http://yourServer/svn/,所有的Subversion源码仓库都在这个虚拟目录中,并且使用“passwd”文件中username/password(用户名/密码)列表访问http://yourServer/svn/。关于Subversion的安全配置是一个比较重要的部分,我会留到下次配置SSL加密连接再讲。
5.在命令行下切换到$/apache group/apache2,执行bin/htpasswd -c passwd <username>,这里<username>是你想要加入的用户名,比如doudou。执行这个命令成功以后就会在bin目录下建立一个passwd文件,之后如果再加入新的用户和更改已有用户的密码,执行bin/htpasswd passwd <username>即可。如图:

注意一定要在$/apache group/apache2下执行,这样生成的passwd文件$/apache group/apache2根目录下,而不是在bin目录下,apache默认是在$/apache group/apache2根目录下寻找passwd文件,如果你在bin目录下执行了这个命令请把生成的passwd文件剪切到$/apache group/apache2根目录下。这一点也可以从Apache的log日志中看得出来,如图:

6.重启Apache服务
7.在浏览器地址栏中输入 http://YourServer/svn/TestRepository,输入用户名密码,ok。Subversion现在已经可以正常工作了。
如图:

 

原创粉丝点击