开发平台
OS: Win7
IDE: VS2005
所需资源
Subversion-1.4.5-win64.zip( 目前找不到,有需要的找我吧 )
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. 准备工作
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
我的目录组织为:
如果你下载的是 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 即可
对于 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/