問題是subversion官方網(wǎng)站上下載到的一個(gè)基于Apache 2.2.X的2進(jìn)制包(svn-win32-1.4.4.zip), 在配合apache官方網(wǎng)站下載的2.2.4版本上出錯(cuò), 加載ldap模塊后訪問版本庫(kù)的時(shí)候會(huì)發(fā)生runtime error.嘗試了幾種組合后,找到能夠正確編譯安裝subversion1.4.4+apache 2.2.4并使之支持ldap 和SSL的方法.
1.下載apache 2.2.4的source code.(httpd-2.2.4-win32-src.zip)
2.下載apache 2.2.4的windows安裝包.(with ssl或者no ssl的都可以).如果下載到with ssl的安裝包, 是可以直接使用的,就是說,不用再自己編譯apache了. 不過,其實(shí)后面編譯subversion的時(shí)候,還是會(huì)編譯apapche, 只是編以后的apapche用不著copy到安裝目錄去替換安裝的文件.
3.下載 subversion1.4.4的windows 安裝包(svn-1.4.4-setup.exe)
4.下載 subversion1.4.4的source code(subversion-1.4.4.zip).
5.編譯環(huán)境需要VC6.0以及安裝windows 2003 SDK.否則就沒有的windows下ldap的SDK.
6,編譯過程可以參考subversion source code 目錄下的install文件.按照文件一步一步做就可以了.里面說得很清楚, 我這里再說就是廢話了.
7,編譯好以后, 先安裝前面下載的apache 和 subversion的安裝包,安裝過程在另一篇文章中已經(jīng)有說明.安裝完以后先不要去配置httpd.conf
8,編譯好subversion以后, 找出同安裝目錄中bin目錄 (如:c:\subversion\bin)下同名的文件覆蓋到bin目錄下.有一些apr的dll文件名字可能略有差異, 后面會(huì)多出一個(gè)-1(如, libapr.dll, 可能對(duì)應(yīng)的是libapr-1.dll), 也別忘了要覆蓋兩個(gè)so文件.
9,這個(gè)時(shí)候就可以先設(shè)定不帶ldap的版本庫(kù)訪問, 如果能夠正常工作, 那么系統(tǒng)就算成功了.
10,設(shè)置ldap.
設(shè)置ldap的時(shí)候, 最好能先用一些ldap查看工具瀏覽一下你的windows domain ,以確定baseDN等等這些基本信息.一個(gè)比較好的工具就是LDAPbrowser.用它可以瀏覽Domain里面的LDAP對(duì)象.
11 httpd.conf的設(shè)置
LoadModule ssl_module modules/mod_ssl.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule dav_svn_module "C:/Subversion/bin/mod_dav_svn.so"
LoadModule authz_svn_module "C:/Subversion/bin/mod_authz_svn.so"
…………
Include C:/Apache/Apache22/conf/extra/httpd-ssl.conf
…………
LDAPSharedCacheSize 200000
LDAPCacheEntries 1024
LDAPCacheTTL 600
LDAPOpCacheEntries 1024
LDAPOpCacheTTL 600
<Location /repos>
DAV svn
SVNParentPath c:/repos
AuthBasicProvider ldap file
AuthType Basic
AuthzLDAPAuthoritative off
AuthName "Subversion repository"
AuthLDAPURL "ldap://yourIP:389/dc=nnn,dc=com?sAMAccountName?sub?(objectClass=*)" NONE
AuthLDAPBindDN "someone@nnn.com"
AuthLDAPBindPassword 111111
AuthUserFile c:/repos/passwordfile
AuthzSVNAccessFile c:/repos/authz
# Satisfy Any
Require valid-user
SSLRequireSSL
</Location>
下面逐個(gè)說明內(nèi)容
11.1
LoadModule ssl_module modules/mod_ssl.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule dav_svn_module "C:/Subversion/bin/mod_dav_svn.so"
LoadModule authz_svn_module "C:/Subversion/bin/mod_authz_svn.so"
加載模塊, mod_ssl當(dāng)然是用來支持https通信方式的. Mod_ldap以及mod_authnz_ldap是用來提供LDAP認(rèn)證必須的模塊.
最后兩個(gè)模塊是Subversion的模塊.
11.2
Include C:/Apache/Apache22/conf/extra/httpd-ssl.conf
在httpd.conf里面找到這一行把前面的”#”注釋號(hào)取消,后面會(huì)講httpd-ssl.conf的配置.
11.3
LDAPSharedCacheSize 200000
LDAPCacheEntries 1024
LDAPCacheTTL 600
LDAPOpCacheEntries 1024
LDAPOpCacheTTL 600
這些設(shè)置來源于apache的文檔,照抄的
11.4
<Location /repos>
DAV svn
SVNParentPath c:/repos #版本庫(kù)所在位置
AuthBasicProvider ldap file #支持ldap和密碼文件混合認(rèn)證,支持密碼文件的目的是可以建立非ldap, 僅訪問版本庫(kù)的賬號(hào)
AuthType Basic
AuthzLDAPAuthoritative off #在ldap找不到賬號(hào)的情況下可以使用其它的認(rèn)證方式(如,密碼文件)
AuthName "Subversion repository"
AuthLDAPURL "ldap://yourIP:389/dc=nnn,dc=com?sAMAccountName?sub?(objectClass=*)" NONE #這是你的ldap的設(shè)置,使用windows ad作為ldap庫(kù), yourIP是DC的地址
AuthLDAPBindDN "someone@nnn.com" #有讀權(quán)限的AD內(nèi)用戶賬號(hào)
AuthLDAPBindPassword 111111 #該賬號(hào)的密碼
AuthUserFile c:/repos/passwordfile #密碼文件
AuthzSVNAccessFile c:/repos/authz SVN的權(quán)限控制文件.
# Satisfy Any
Require valid-user
SSLRequireSSL
</Location>
12 httpd-SSL.conf
Httpd 2.2.X以后的conf文件是模塊化的,很多東西提取出來了,根據(jù)前面這句 Include C:/Apache/Apache22/conf/extra/httpd-ssl.conf ,我們需要編輯相應(yīng)的文件主要編輯2個(gè)地方
一個(gè)是 SSLCertificateFile 標(biāo)記, 后面跟SERVER.crt的路徑,另一個(gè)是 SSLCertificateKeyFile 標(biāo)記, 后面跟 server.key 的路徑.
設(shè)置好以上數(shù)據(jù), 可以重新啟動(dòng)httpd了.
13.
c:/repos/authz 文件內(nèi)的賬號(hào)名字要和 sAMAccountName 名字相同。
TODO:想辦法使SVN的權(quán)限多樣化,不再是只有rw.


