一開始購買 QNAP TS-209 Pro NAS 伺服器時,就打算要安裝 Subversion Server,但是當時受限於以為一定要安裝 Apache Web Server 2.X 以上的版本,而 QNAP 內嵌的 ARM-based Linux 系統,預設是安裝 Apache 1.X。 後來才恍然大悟,並不需要透過 Apache 來做連接傳輸與權限管控,利用 Subversion 預設跑的 svnserver daemon 當然也可以作到,而且使用 svn 的傳輸協定,效能還好上很多呢。
安裝 Subversion Server 有兩大項目,一為先為 QNAP 安裝 iPKG;另一個就是再利用 ipkg 安裝 Subversion Server。 iPKG 是一種輕量 (lightweight)級的套件管理系統,其作用如同 Fedora 的 RPM 或如 Debian 的 APT。而 iPKG 多是應用在容量有限的嵌入式 (Embedded) Linux 系統內。 當然,執行這兩件項目前,要先利用如 PieTTY 登入 QNAP NAS 的 Console 內。
iPKG 的安裝方法直接參照此篇:[Optware/Ipkg]: Install any Linux app on TS-109/209/PRO。
先下載 iPKG 的安裝壓縮檔,儲存該檔案於 /share/Public/ 目錄下,並解壓縮它。 只要依照該安裝步驟,執行自動安裝程序,過程非常順利,沒有任何問題。這裡所提供的壓縮檔是最新版的,一切均會自動執行設定與安裝,包括環境變數等,都不需要再自行新增修改。安裝完畢後,重新開機再利用 PieTTY 登入後即可利用 iPKG 執行安裝 Subversion。
Subversion 的安裝步驟是參考該篇: Subversion Server on QNAP-209 Pro ,不過我有調整了一些步驟,參考如下:
1. 安裝 Subversion binary:
2. 這樣就安裝完畢了,相當簡單! 不過,為了讓 QNAP NAS 重開機後可以自動執行 svnserver,所以需執行下列程序: (請記得要指定 Port,這裡我是採預設的 3690。)
cd /tmp/config
echo “/opt/bin/svnserve -d –listen-port=3690” >> autorun.sh
umount mount /dev/mtdblock5
3. 重開機後登入,執行 svnadmin –version 即可確認安裝是否成功。
4. 再來就是新增 Repository 與存取權限設定等程序。關於內建的權限管控設定,可以參考 subversion 手冊:Built-in authentication and authorization。
5. 指定 Repository 的根目錄所在位置。我是新增了一個目錄 /svn (最好是用 QNAP 的網頁版的檔案管理新增,並指定存取權限),它會位於 /share/svn 目錄下。
6. 創建 Repository。我的策略是採多個 Repository 管理個別的專案,但是只用一組帳戶與存取規則統籌管控。
svnadmin create /share/svn/repos2
7. 上述提過,我只利用一個帳戶密碼檔 (passwd),以及把存取規則是定義在一個獨立的授權 (authorization)檔 (authz)內,這稱之為 Path-Based Authorization。 我是把這兩個檔案集中放在自行定義的 /share/svn/conf 目錄內。 帳號密碼並不需要事先新增在 Linux 系統內,只要定義在 passwd 檔案內即可;不過,有個缺點是密碼是採明碼的設定,似乎無法如同利用 Apache 的權限設定,可以利用工具設定編碼後的密碼? 還有,請注意,在 authz 的 repository 路徑要設為絕對路徑,而不是相當路徑,例如 /share/svn/repos1,為了這個問題,我在權限設定設定這部分了好久才找到這個原因。
————————————-
[users]
admin = adminpassword
christine = christinepassword
funkid = funkidpasswod
————————————-
authz:
————————————-
[groups]
administrators = admin
developers = christine, funkid
[/]
* =
@administrators = rw
[/share/svn/repos1:/]
@developers = rw
[/share/svn/repos2:/]
christine = rw
————————————-
8. 至每一個 repository 的子目錄 /conf (如 /share/svn/repos1),編輯 svnserve.conf 檔案,內容如下:
password-db = /share/svn/conf/passwd
#每一個 repository 的 realm 均指定為一個共同的字串名稱,即代表共用同一個 namespace。
realm = global_repository
# Specific access rules for specific locations
authz-db = /share/svn/conf/authz
大功告成! 在 WindowsXP Client 端利用如 TortoiseSVN 工具,連結測試,並輸入所使用的帳號密碼等,即可知道設定是否正確。 一般若可以連結,但無法存取,問題多半出在授權檔 (authz)的設定上。 另請注意,repository 的路徑為:
svn://your_ip_address_or_domain:3690/share/svn/repos1/
*** 備註 (2008/06/08) ***
我放棄在 SvnServer 使用 “Path-Based Authorization” 的方式了,驗證一直無法通過,找不出設定的問題。 目前採用折衷的作法是將 passwd 檔案統一放置在 /share/svn/conf 目錄下;但是每一個 repository 則個別管理它們自己的授權 authz 檔案。
Hello Crab:
謝謝呢,看來難道是路徑設定的問題囉?
有空來試試,感激!! ^^
Hi Kenming,
最近小弟也在自己的QNAP裝subversion,於是參考到你的文章了(Mobile01上翻到的).
照著您的設定去做,小弟也碰到驗證一直錯誤的問題Orz.
後來發現好像是authz設定方法有些問題,小弟嘗試改了一下關於Repository部份如下,就正常運作了
———————————-
[share/svn/repos2:/] #share前面不要加/
christine = rw
———————————-
Hi Cliff:
不客氣。 🙂
Very detail instruction, Thanks