Sunday, December 21, 2008

Create SVN repository with SSL

軟體工程中關於程式碼的部份,最重要的可能就是版本控管。版本控管做的好,若程式上有任何問題,隨時可以把舊的拿出來對照與修正,而不用擔心被覆蓋掉的危險。在整合上也比較容易針對版本做不同的控制,以符合 delivery 時的期望。

版本控制的軟體有很多,目前較流行的是 Subversion (如 Apache 用的),但上星期看了一篇文章, Linux 教父 Linus Torvalds 偏好用 git,這個改天再研究介紹 ,這次僅介紹 Subversion 的安裝、權限控制與 Apache HTTP Server (SSL) 的整合。

環境上為了與自己的機器隔離,用的是 VMware Server 上裝的模擬機 Ubuntu 8.10,機器名稱為 svn.xxxx.com
關於 Apache HTTP Server (SSL) 的安裝,請先參考

Load balance and clustering with Apache HTTP Server 2.2.x and Tomcat 6.0.x

中的 1, 2 節,因為是安裝 Linux 版的 Apache HTTP Server ,這邊只有簡單介紹 apache2 的安裝方式

1. 安裝 Apache HTTP Server 與 Subversion
$ sudo apt-get install apache2 subversion libapache2-svn

這時會安裝 Apache2 2.2.9 與 subversion 1.5.1 版 (寫此文章的版本)
libapache2-svn 是給 svn 用的 apache plugin ,需另外裝

2. 建立 Subversion 的 repositoy
這部份算是簡單的,只要幾行指令就可以完成

$ sudo mkdir /var/svn
$ cd /var/svn
$ sudo svnadmin create repos
$ cd repos
$ sudo chmod -R 777 *

若權限沒設定為 777 ,真正使用時會有權限上的 error.


3. 設定 /repos 的 URL 給 svn 用
$ cd /etc/apache2/mods-enabled
$ sudo ln -s ../mods-available/dav.load dav.load

編輯 /etc/apache2/sites-available/default-ssl
將 SVN 的 location 加入如下

DAV svn SVNPath /var/svn/repos AuthType Basic AuthName "Subversion repository"
AuthUserFile /var/svn/svn-auth-file

Require valid-user
AuthzSVNAccessFile /var/svn/authz

若要與 AD 認證,可以將
AuthUserFile
改為
AuthLDAPEnabled on
AuthLDAPBindDN "CN=xxx,OU=xxx,OU=xxx,OU=xxx,OU=xxx,DC=xxx,DC=com" AuthLDAPBindPassword xxx
AuthLDAPURL "ldap://xxx:389/OU=xxx,OU=xxx,DC=xxx,DC=com?sAMAccountName?sub?(objectClass=*)"
AuthLDAPAuthoritative on


記得 ldap 的 module 要 enable.


4. 設定 SVN 的權限
$ sudo htpasswd -cm /var/svn/svn-auth-file doug

利用編輯 htpasswd 建立認證的檔案並建立 doug 帳號

$ sudo pico /var/svn/authz
然後將以下內容加入
[/]
* = rw

此段表示所以認證過的人都可以 讀、寫 SVN。若要針對單獨目錄作控管,可以加入如下內容
[calc:/branches/calc/bug-142]
harry = rw
sally = r
表示 /branches/calc/bug-142 的目錄 harry 可以讀寫,但 sally 只能讀


5. 重新啟動 Apache HTTP Server
$ sudo /etc/init.d/apache2 restart

這時候便可以透過 https://svn.xxx.com/repos 使用 subversion 了
以下是使用 TortoiseSVN 的畫面

0 comments: