天天看点

搭建win_x64位的SVN服务器

  开发平台

OS:  Win7

IDE:  VS2005

  所需资源

Apache-2.2.14-win64.rar

Subversion-1.4.5-win64.zip( 目前找不到,有需要的找我吧 )

TortoiseSVN-1.6.6 -x64-svn

Mod_auth_sspi-1.0.4 (sourceforge 上只有 x86 的 )

  部署过程

说明:      $Apache_Root = Apache 解压目录

                   $SVN_Root    =SubVersion 解压目录

ü   安装 Apahce

1.          绿色的,直接解压即可

2.          Cmd 下,切换到解压的目录下,执行 /bin/httpd –k install; 会看到注册已经成功消息

3.          开启 Httpd , httpd –k Start

ü   安装 SVN

1.          绿色版的,直接解压即可,例如解压到 d:/subversion 。

2.          添加环境变量 Path 中,解压的目录 /bin (可选项,方便 dos 命令操作)

ü   安装 TortoiseSVN

1.          一路 next 到底就好了。

ü   配置 Apache 使其支持 SVN

1.          将 Subversion-1.4.5-win64 中的 mod_dav_svn.so 和 mod_authz_svn.so 复制到

$Apache_Root/Module 下。

2.          修改 Apahce 下 conf 文件夹下的 http.conf 文件,添加

LoadModule authz_svn_module modules/mod_authz_svn.so

LoadModule sspi_auth_module modules/mod_auth_sspi.so

并将 LoadModule dav_module modules/mod_dav.so

LoadModule dav_fs_module modules/mod_dav_fs.so 前的 # 删去

3.          这是打开 Apache Monitor ,下方会显示 Apache/2.2.14(win64) svn /1.4.5 DAV/2

在 cmd 下,输入 svnadmin create f:/svn/testrepos, 用来创建名称为 testrepos 的 仓库,并在 httpd.conf 中添加

<Location /svn>

         DAV svn

         SVNParentPath f:/svn

       </Location>

      在浏览器中输入 http://localhost/svn/testrepos ,可以看到仓库中的数据。

         注意: 在网上有些说可以使用 TortoiseSVN 右键, create repository here 来创建库,                      不过要注意 TortoiseSVN 的版本号,高版本的有可能不支持低版本的 Apache                             下的 mod_dav_svn 模块。库的文件格式是不一样的。

  添加域验证模块

说明:域验证模块为 mod_auth_sspi.so ,之所以把它单独拿出来,是因为涉及到 x86 到 x64 位移植的问题,及 Apache 编译过程。

ü   编译 Apache ,由 x86 到 x64

1.          准备工作

a)          Perl Interpreter

b)          AWK

c)          Bison

d)          Flex

e)          Sed

f)           cvtdsp.pl (save in httpd src folder)

对于 iii,iv,v 三个均是将 bin 目录下拷贝到本地,然后将 bin 目录添加到环境变量中。

2.          编译 Zlib 和 Openssl

为了编译 Apache 需要编译 zlib 和 Openssl ,并且需要一个 Apache-win32 的源码。

a)          Zlib

b)          Openssl

c)          Apache-2.2.14-win32-src

我的目录组织为:

如果你下载的是 Apache-2.2.x-win32 的话,那么第二个目录 apr-iconv 已 存在。

c:/build/httpd-2.2.x/ httpd-2.2.x.zip Yes
c:/build/httpd-2.2.x/srclib/zlib zlib-1.2.x.tar.gz Yes
c:/build/httpd-2.2.x/srclib/openssl openssl-0.9.xc.tar.gz Yes

对于 tar.gz 压缩的文件加压后,文件格式可能有些会有一些编译器无法识别的符号,应该先使用如下命令将文件转化成 windows 识别的。

将目录 cd 到 c:/build/httpd-2.2.x/ 下: perl srclib/apr/build/lineends.pl

打开你的 Visual Studio 2005 x64 Win64 Command Prompt 并切换到 c:/build/httpd-2.2.x/

Ø   编译 Zlib

cd srclib/zlib

nmake -f win32/Makefile.msc

Ø   编译 OpenSSL

cd ../openssl

perl Configure --openssldir=C:/httpd-2.2_x64/bin VC-WIN64A

ms/do_win64a

nmake -f ms/ntdll.mak

3.          编译 Apache

Ø   编译 Apache   

确保 cvtdsp.pl 已经在 Apache 的目录中

cd ../../

perl cvtdsp.pl -2005

devenv Apache.dsw

此时会提示你是否转化,全部选择是即可。然后在配置管理器中,选择新建,弹出如下窗口,选择 x64 即可

搭建win_x64位的SVN服务器

                            对于 2.2.6 的 Apache 版本全部是 x86 的,对于 2.2.14 的 Apache 版本有些模块                       是已经支持 x64 的了,比如 xml ,不过我们可以先删除 x64 的平台配置,然后

                       再创建,不然无法改变其他 win32 成为 x64 。然后保存。

Ø   编译

虽然 http://www.blackdot.be/?inc=apache/knowledge/tutorials/x64 给出的 makefile.win, 但是并不适合我,我的做法是:

a)          在工程目录下,右键点击,生成解决方案。

b)          总会有错误产生的。(我相信你不会如此的幸运,一次成功的)。

c)          如果你用的是 2.2.14-win32-src 的话,那么请删除 apr_dbd_xxx , apr_dbm_xx 的项目吧,这些是和数据库有关的,除非你安装了 mysql , sqlserver ,或者 oracle ,并且获取了 Apache 编译的所需的数据库的源码,对于这些在 Apache 目录下, readme-win32.txt 中有详细的说明。不多赘述了。

d)          查看错误,一般是出现在 InstallBin 项目,或者 BuildBin 项目,这两个项目都使用了 Makefile.win 脚本,其实这个脚本的错误大多来自于使用了 x64 平台后,导致的目录的变更引起的,我相信仔细阅读下 Makefile.win 的脚本,然后按照你实际的目录地址修改相应的选项,即可了。一半是 apr 开头的几个工程项目的问题。当然这里也是需要删除 apr_dbd_xxx 和 apr_dbm_xxx 的。

e)          这样在生成, That’s it you are all done 。

4.          编译 mod_auth_sspi 模块

Ø   给出个最简单的方法

下载 mod_auth_sspi, 然后在你刚刚编译的 Apache 下,添加该项目,然后更改编译平台为 x64 位,仅生成该项目,即可。很简单吧。当然我的探索过程可不是这么顺利的。

5.          添加 Apache 配置文件,支持域验证。

<location /svn/>

  # how to authenticate a user

  AuthType SSPI

  AuthName "Grandsoft SVN repository"

  SSPIAuth On

  SSPIAuthoritative On

# SSPIDomain s01-grandsoft

  SSPIOmitDomain on

  SSPIUsernameCase lower

#  SSPIPerRequestAuth on

  SSPIOfferBasic On

  require valid-user

</location>

<location /svn/>

  DAV svn

  SVNParentPath "F://SVN//"

  SVNListParentPath on

  # our access control policy

  AuthzSVNAccessFile "F://SVN//authz.conf.txt"

</location>

  参考资料

Apache 编译 :   http:/www.blackdot.be/?inc=apache/knowledge/tutorials/x64

         SSPI 的编译: http://ivascucristian.com/archives/how-do-you-create-an-apache-module/

http://www.nosq.com/blog/2008/06/fixing-mod_auth_sspi-and-ie-losing-post-data/

继续阅读