Powered by: 守望者MS
文章由原部落格遷移而來,很多顏色注釋轉過來都沒了,想要看的更明白
請訪問:http://www.ncepuideal.com/space/viewspacepost.aspx?postid=69&spaceid=5
一、安裝
第一步,安裝Apache2.2,下載後直接安裝就可以了,沒有什麼難的。
第二步,安裝Subversion1.6.1(目前最新版本),注意下載時,看是否支援Apache2.2;我使用的是svn-win32-1.6.1.zip,解壓之後即可使用。
------------------------------------------------------------------------
二、整合
第一步,開啟Apache安裝目錄下的httpd.conf檔案
------------------------------------------------------------------------
找到下面的語句:
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
將上面語句前面的#去掉
------------------------------------------------------------------------
第二步,在這句後面追加,如下語句:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
將subversion\bin目錄下的mod_dav_svn.so, mod_authz_svn.so 複製到apache 的 modules目錄下;
同時複製libapr-1.dll, libapriconv-1.dll, libaprutil-1.dll, libdb44.dll, libeay32.dll, libsasl.dll, ssleay32.dll 到apache的bin目錄下(覆蓋);
紫色部分中牽涉到的所要複製的檔案因版本而異,以上所列的檔案是參考其他資料的,但是在實際操作過程中發現是不正確的,拷貝過去後發現Apache無法正常啟動,提示“mod_dav_svn.so”註冊不到server中,這裡解決的辦法有兩種,一是選擇講subersion\bin中的所有.dll檔案全部複製過去,然後開啟Apache,再進行刪除.dll檔案,這時如果沒用的.dll檔案apche不會做任何提示就可以刪除!第二種方法是:用depends.exe檔案開啟“mod_dav_svn.so“ 檔案,然後查看這個檔案需要什麼.dll,相應的從subversion\bin目錄中拷貝到apache\bin中覆蓋即可(depends.exe檔案已上傳到附近中)。
------------------------------------------------------------------------
這裡還需注意的是.apache無法啟動的原因,DOS視窗提示一下資訊:
httpd.exe: Could not reliably determine the server's fully qualified domain name
, using 192.168.1.3 for ServerName
這個問題的解決辦法是在httpd.conf文字檔中找到:
#ServerName IP:連接埠
然後把#去掉即可,之後儲存後就能啟動apache.
------------------------------------------------------------------------
第三步,在這個檔案的最後,追加如下語句:
<Location /repository>
DAV svn
SVNParentPath D:/SVN/repository
</Location>
其中/repository是告訴Apache使用這個URI作為SVN的訪問點,可以任選;下面D:/SVN/repository是SVN倉庫的儲存位置,也可以自己任選,但是這個目錄一定要存在。
上面這種是多庫的配置方式,對於單庫,可以把SVNParentPath變成SVNPath。這兩個啥區別?簡單來說,多庫就是下面可以有多個repository,比如可以用http://localhost/repository/repo01,http://localhost/repository/repo02來訪問不同的repository,對應於D:/SVN/repository下面的子目錄repo01,repo02,而單庫只能用http://locahhost/repository/,來訪問唯一的repository。
心急的人現在可能就去訪問這幾個link了,是不是結果讓你失望啊?因為我們還沒有建立repository,當然不能訪問, 建立的方法是用SVN安裝目錄\bin下面的svnadmin.exe,在命令列輸入“svnadmin create D:/SVN/repository/repo01”,就建立了repo01,然後重啟Apache,再訪問http://localhost/repository/repo01,是不是看到了“Revision 0: /”?這說明版本庫已經開始運作了(初始版本0)。
------------------------------------------------------------------------
第四步、基本認證和許可權控制
------------------------------------------------------------------------
SVN repository成功跑起來,你的repository總要搞個使用者名稱密碼?此外 你可能還需要給不同的帳戶或角色在不同的目錄上賦予不同的許可權(唯讀、可寫。
更改第三步中的設定
<Location /repository>
DAV svn
SVNParentPath "D:/SVN/repository"
AuthType Basic
AuthName "your-name's subversion repository"
AuthUserFile "D:/SVN/svn_auth"
Require valid-user
</Location>
紅色這幾行就是我們要的,其中AuthName隨便寫問題不大,那個AuthUserFile也隨便放,裡面存的是使用者名稱和密碼。注意這個檔案是 Apache產生的,可不是你隨便建立個文字檔把使用者名稱密碼寫進去就OK:) 具體是用Apache的htpasswd命令:
htpasswd -c filename username #建立一個password file,並寫入username的資訊,斷行符號後提示你輸入密碼
htpasswd filename username #在當前password file裡面追加一個username的資訊
這一步做好後,重啟Apache,再用瀏覽器訪問你的repository,是不是提示你輸入使用者名稱和密碼了
基本的認證就是這樣,接下來是許可權。還是照例先改httpd.conf:
<Location /repository>
DAV svn
SVNParentPath "D:/SVN"
AuthzSVNAccessFile "D:/SVN/svn_rule"
AuthType Basic
AuthName "your-name's subversion repository"
AuthUserFile "D:/SVN/svn_auth"
Require valid-user
</Location>
這個svn_rule是啥?其實就是個文字檔,這裡沒加副檔名是Unix的風格,這個檔案裡定義了每個帳號或者每個角色可以幹什麼。看幾個例子:
[repo01:/]
user1 = rw
user2 = r
對於多庫,定義其中的一個repo01下的所有目錄,允許user1讀寫,user2隻讀
[repo01:/Project1]
user1 = rw
user2 = r
和上面類似,只不過規定細化到了子目錄:)
[/Project1]
user1 = rw
user2 = r
這個說的是單庫的情況:)
[groups]
admin = user1, user3
readonly = user2, user4
[repo01:/]
@admin = rw
@readonly = r
這個就是設定角色了,和前面的區別主要是有了group,然後group的名字前面有@,為了和使用者名稱區分。
------------------------------------------------------------------------
下面的是我最終測試通過的httpd.conf檔案中最後部分的內容!
------------------------------------------------------------------------
<Location /repository>
DAV svn
SVNParentPath "D:/svn/repository"
AuthzSVNAccessFile "D:/svn/svn_rule"
AuthType Basic
AuthName "Ideal-SVN"
AuthUserFile "D:/svn/svn_auth"
Require valid-user
</Location>
------------------------------------------------------------------------
PS:在配置SVN時會因為版本的問題出現很多錯誤,我參考網上資料的時候大部分文章都是一個模版,並且存在很多問題,以上是我搜集並且修改,親自測試通過的SVN配置方法。
下面還有一個關於配置時容易遇到的apache的問題
------------------------------------------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
可能遇到的問題:
Apache初次安裝好後,可以試著啟動它,用系統托盤裡的Apache Monitor,或者開始菜單裡的捷徑都是ok的。正常啟動後,可以用瀏覽器訪問http://localhost 或者 http://127.0.0.1, 如果看到頁面上的“It works!”,就OK。
如果Apache啟動過程中遇到什麼麻煩,可以去系統的時間日誌裡看看究竟發生了什麼,方法是“我的電腦”上右鍵->管理->事件查看 器,在“應用程式”和“系統”裡都有可能出現,不妨都check一下。
Apache最常遇到的問題有兩種,一個是連接埠被佔用,另一個是設定檔httpd.conf文法出錯。我們一般會採用預設的80連接埠,如果有其他 Process在監聽這個連接埠的話,Apache就無法啟動。這時,要麼選擇給Apache換個連接埠,要麼選擇幹掉佔用連接埠的傢伙。
換連接埠只要在Apache的httpd.conf裡面Listen配一下就行了,這裡不加贅述。主要來說說第二種選擇(這也是我經曆的)。首先要找到是哪個傢伙佔用了80連接埠,頭號嫌疑犯當然是IIS,去管理工具->服務裡看看它有沒有啟動,如果有,幹掉並設定為手動或禁用(前提是你確定不會在這台 機器上使用IIS,如果是公用的server,萬分小心咯。。。);如果不是IIS,其他Application Server也有一些嫌疑,比如Weblogic,Tomcat之流,儘管他們預設連接埠不是80,但不排除哪位在用它同時做HTTP Server,解決方案一樣,只是這種情況下往往就不能輕舉妄動了,因為別人把預設連接埠該成80總是有目的的;如果這兩個都被排除,那就不能在亂猜 測了,要憑證據抓人了:) 這裡我們使用強大的netstat命令,讓罪魁禍首無從藏身。具體的做法是在command line下輸入“netstat -n -ab”,看到了什嗎?是不是list了所有正在使用的連接埠號碼?更重要的是,後面還有對應的PID ,接下來就是從社會安全號碼找人了,在工作管理員裡,進程那個標籤下,找到和PID對應的進程名字(沒有PID那一列?查看->選擇列)。
這裡說說我的情況,我的80連接埠被System佔用,剛開始以為是IIS,後來發現是SQL2008的reporting服務佔用80連接埠,進入SQL的組態管理員把該服務停止後就能正常啟動,一下是出錯是apache的提示資訊:
------------------------------------------------------------------------
(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
Note the errors or messages above, and press the <ESC> key to exit. 26...
------------------------------------------------------------------------