2012年7月5日 星期四

Setup Subversion Server configure on CentOS







設定 Subversion Server

因為這裡是以 Apache 的模組型式在執行,
所以其設定檔為
/etc/httpd/conf.d/subversion.conf


































設定檔前兩行便是告訴 Apache 要載入兩個模組:
dav_svn_module     -     subversion 模組本身
authz_svn_module - subversion 認証模組


譬如說,我們規劃以後所有不同的 repository 都要放在 /var/www/svn 下,以不同的資料夾名稱存放,那我們可以這樣做:











cd /var/www/svn
切換到 /var/www/svn 資料夾下,

svnadmin create stuff
建立一個名為 stuff 的 repository,

chown -R apache.apache stuff
更改 stuff 資料夾及其內所有檔案資料夾的 owner 及 group 為 apache,

所以便可以在 /var/www/svn/ 內看到一個名為 stuff 的 repository(資料夾)
再來,要讓使用者能夠從網頁上看到剛才做的 stuff,
在 /etc/httpd/conf.d/subversion.conf 內加入如下設定:




<Location  /repos>   location 標籤開頭
這行告訴 Apache 有一個網頁資料夾 repos,在網頁根目錄下。

DAV  svn
其實 svn(subversion) 必須依附在 DAV(mod_dav) 模組下,說是模組的模組,或模組的外掛都可以,這行參數便是告訴 Apache 這裡要用 dav 模組 svn 協議。
就是用 DAV 分享檔案,用 svn 控管。

SVNParentPath /var/www/svn
設定 SNV 的父目錄是在 /var/www/svn


設到這裡,我們便可以從瀏覽器中看到 stuff 這個 repository 了。
在瀏覽器的網址列中輸入 http://your_server_ip/repos/stuff 可看到如下畫面:



























看到這畫面,表示已設定好可以使用了。




它沒有使用者認證,所有人都可以使用它,如果要控管使用者只能讀取,有權限的使用者才能上傳,可從 Apache 下手設定。
再回頭看看 /etc/httpd/conf.d/subversion.conf 設定檔,這次我們在 Location 標籤中間加上一些參數:



























有沒有發現,這些參數其實在設定檔內原本就有範例了,它們被 LimitExcept 標籤包起來,其中

<LimitExcept  GET  PROPFIND  OPTIONS  PREPORT>
LimitExcept 是 Apache 用的管制標籤,管制 http 協定的 get, propfind, options, report 要求類別以外的類別。

AuthType  Basic
認證類型    基本型

AuthName  "Authorization Realm"
給它個名字,它會出現在使用者登入時的提示視窗。

AuthUserFile  /path/to/passwdfile
認證使用者的密碼檔。

Require valid-user
要求必須是有效用戶。


執行 service  httpd  restart  以重新啟動 Apache,然後輸入下列指令來新增使用者:
htpasswd  -cm  /etc/httpd/svn_user_passwd  william
htpasswd 是 Apache 的使用者認證檔指令,第一次新增檔案要給參數  -c ,參數 m 是要它支援 md5 的編碼方式,後面接檔案要放的位置及檔名,這裡必須要跟剛才的 /etc/httpd/conf.d/subversion.conf 設定檔一樣才可以,最後是使用者名稱。它會要求輸入兩次密碼,如下圖:





若要再增加一位使用者 may 的話,請輸入下列指令新增:
htpasswd  -m  /etc/httpd/svn_user_passwd  may
這裡的參數就不須要加 -c 了,因為檔案已存在。

/etc/httpd/svn_user_passwd 的檔案內容如下圖所示:













好了,設到這裡,我們建了一個名稱為 stuff 的 repository,大家都可以看得到內容,但只有使用者 william 及 may 可以更新它。








如果說,我們的 repository 只讓有權限的人看,其他任何人完全不能看到呢?
這時我們只要改 /etc/httpd/conf.d/subversion.conf 檔案內容,把<LimitExcept>標籤用 # 字號標註起來即可,如下圖:


















把 LimitExcept 標籤用 # 字號擋住讓它變成說明行以後,重新啟動 Apache,就變成只有認證通過的使用者才能多看到及使用 repository。








如果有多個 repository 要如何設定?

只要在 /var/www/svn 內,再建立即可,指令如下:
cd  /var/www/svn
svnadmin  create  abc
chown  -R  apache.apache  abc












如果另有一個 repository 要放另一個路徑下,另外管理,要如何設定?

在規劃好的路徑下新增 repository,譬如 /home/william/svn,指令如下:
cd  /home/william/svn
svnadmin  create  doc
chown  -R  apache.apache  abc

另外在 /etc/httpd/conf.d/subversion.conf 檔內也要加入如下設定:


























上面圖片中分成兩段,上半部是先前的範例設定,下半部反白的部份就是為了目前的範例而增加的。
幾乎與上半部一模模一樣樣,只有兩個地方稍有不同,其中:

<Location  /doc>
這行告訴 Apache 有一個網頁資料夾 doc,在網頁根目錄下。

SVNPath  /home/william/svn/doc
要注意的是,這個 SVNPath 與 SVNParentPath 是不同的用法,

SVNPath 是指定 repository 的位置,像本例在 /home/william/svn/ 下建了一個 repository,名稱是 doc,所以 SVNPath 後面要跟著 /home/william/svn/doc。

SVNParentPath 是指定 repository 的父目錄位置,如先前範例,在 /var/www/svn 下面建立了 stuff 及 abc 兩個 repository,所以 SVNParentPath 後面要跟著 /var/www/svn。

最後重新啟動 Apache 即可,指令如下:
service  httpd  restart








如果有多位使用者,但大家的權限不同,要如何設定?

/etc/httpd/conf.d/subversion.conf 的一開始就先載入了兩個模組,這裡就是會用到其中一個模組:mod_authz_svn.so
有了這個模組,我們就可以放一個設定檔,專門來設定使用者進入 repository 時,分別是什麼權限。

首先在 /etc/httpd/conf.d/subversion.conf 內加入一行如下:


















反白那行便是這次加進去的。

AuthzSVNAccessFile  /etc/httpd/svn_authz
這個參數便是告訴 Apache 有一個使用者權限控制檔,檔名可自取。

檔案內容範例如下:






















[group]                         設定使用者群組。
admin  =  william           admin 這個群組的組員是 william。
manager  =  may           manager 這個群組的組員有 may。
rd  =  user1,user2         rd 這個群組的組員有 user1 及 user2。

[/]                                 設定 repository 的根目錄的權限。
@admin  =  rw              admin 這個群組的權限是可讀(r)可寫(w)。
*  =                               其餘所有人都沒有權限。

[stuff:/]                          設定 stuff 這個 repository 的權限。
@admin  =  rw               admin 這個群組的權限是可讀(r)可寫(w)。
@manager  =  rw           manager 這個群組的權限是可讀(r)可寫(w)。
@rd  =  r                        rd 這個群組的權限是只能讀(r)不能寫入。
*  =                                其他所有人都沒有權限。

[abc:/]                             設定 abc 這個 repository 的權限。
@admin  =  rw    admin 這個群組的權限是可讀(r)可寫(w)。
@rd  =  rw                      rd 這個群組的權限是可讀(r)可寫(w)。
*  =  r                             其他所有人都是只有讀(r)的權限。

[doc:/]                             設定 doc 這個 repository 的權限。
@admin  =  rw                admin 這個群組的權限是可讀(r)可寫(w)。
*  =  r                              其他所有人都只能讀(r)。

[william_repos:/]            設定 william_repos 這個 repository 的權限。
william  =  rw                  william 這個使用者的權限是可讀(r)可寫(w)。
*  =                                 其他人完全沒有權限。




以上便是 Subversion Server 的大致設定。



相關網站,文件:

http://www.iq180.com.tw/2012/06/version-control-with-subversion-1411m.html



http://subversion.apache.org/






http://zh.wikipedia.org/wiki/Subversion


















沒有留言: