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