Ubuntu 下 Subversion 服務器的安裝配置

本文涉及的範圍

要經過 HTTP 協議訪問 Subversion 文件倉庫,須要安裝並配置好 Web 服務器。Apache2 被證明能夠很好的與 Subversion 一塊兒工做。關於 Apache2 的安裝超出了本文的範圍(假設已經安裝好Apache2) ,儘管如此,本文仍是會涉及如何配置 Apache2 使用 Subversion。 相似的,要經過 HTTPS 協議訪問 Subversion 文件倉庫,您須要在您的 Apache2 中安裝並配置好數字證書,這也不在本文的討論範圍之中。web


安裝 Subversion

幸運的,Subversion 已經包含在 main 倉庫中。因此,要安裝 Subversion,您只須要簡單的運行:apache

$ sudo apt-get install subversion
$ sudo apt-get install libapache2-svn

服務器配置

經過上面的命令已經安裝了所需的軟件包。接下來將闡述如何建立 Subversion 倉庫以及如何設置項目的訪問權限。服務器

建立 Subversion 倉庫(Respository)

許多位置均可以放置 Subversion 倉庫,其中兩個最經常使用的是:/usr/local/svn 以及 /home/svn。咱們選擇把 Subversion 倉庫放在 /home/svn/repos,而且假設咱們須要創建兩個倉庫 project1 和 project2。網絡

一般的狀況下,首先建立一個名爲 「Subversion」 的用戶組,該組是 Subversion 倉庫所在的目錄的擁有者。ssh

使用以下命令增長組,而且把用戶加到組裏:svn

$ sudo addgroup subversion
$ sudo usermod -G subversion -a www-data

www-data 是專門爲 web server 運行而建立的用戶,系統中已經預先建立好了。ui

查看上面兩個命令的執行結果:加密

$ cat /etc/group | grep subversion
subversion:x:1001:www-data

執行以下命令建立倉庫目錄:版本控制

$ sudo mkdir -p /home/svn/repos/project1
$ sudo mkdir -p /home/svn/repos/project2

下面命令用於建立 Subversion 倉庫:rest

$ sudo svnadmin create /home/svn/repos/project1
$ sudo svnadmin create /home/svn/repos/project2

設置倉庫的用戶和組:

$ sudo chown -R www-data:subversion /home/svn/repos/project1
$ sudo chown -R www-data:subversion /home/svn/repos/project2

訪問方式

Subversion 倉庫能夠經過多種不一樣的方式進行訪問——經過本地硬盤,或者經過各類網絡協議。不管如何,文件倉庫的位置老是使用 URL 來表示。

下面是幾種不一樣的 URL 模式及其對應的訪問方法:

  • file:/// —— 直接訪問本地硬盤上文件倉庫
  • http:// —— 經過 WebDAV 協議訪問支持 Subversion 的 Apache2 Web 服務器
  • https:// —— 相似 http://,支持 SSL 加密
  • svn:// —— 經過自帶協議訪問 svnserve 服務器
  • svn+ssh:// —— 相似 svn://,支持經過 SSH 通道

經過 WebDAV 協議訪問(http://)

WebDAV (Web-based Distributed Authoring and Versioning) 一種基於 HTTP 1.1協議的通訊協議.它擴展了HTTP 1.1,在GET、POST、HEAD等幾個HTTP標準方法之外添加了一些新的方法,使應用程序可直接對Web Server直接讀寫,並支持寫文件鎖定(Locking)及解鎖(Unlock),還能夠支持文件的版本控制。

Apache mod_dav_svn 配置

要經過 WebDAV 協議訪問 SVN 文件倉庫,首先必須配置 Apache 2 Web 服務器。加入下面的代碼片斷到 /etc/apache2/mods-available/dav_svn.conf 文件中:

<Location /svn>
    DAV svn
    # Alternatively, use SVNParentPath if you have multiple repositories 
    # under a single directory
    SVNParentPath /home/svn/repos
    AuthType Basic
    AuthName "Subversion repository"

    # 指定基本用戶驗證的密碼文件路徑
    AuthUserFile /etc/subversion/dav_svn.passwd

    # 指定文件倉庫訪問的受權配置文件路徑
    <IfModule mod_authz_svn.c>
        AuthzSVNAccessFile /etc/subversion/dav_svn.authz
    </IfModule>

    #<LimitExcept GET PROPFIND OPTIONS REPORT>
        Require valid-user
    #</LimitExcept>
 </Location>

重啓 Apache2 Web 服務器

$ sudo service apache2 restart
密碼文件 dav_svn.passwd 的建立
$ sudo htpasswd -c /etc/subversion/dav_svn.passwd user_name

它會提示你輸入密碼,當您輸入了密碼,該用戶就創建了。「-c」 選項表示建立新的 /etc/subversion/dav_svn.passwd 文件,因此 user_name 所指的用戶將是文件中惟一的用戶。若是要添加其餘用戶,則去掉「-c」選項便可:

$ sudo htpasswd /etc/subversion/dav_svn.passwd other_user_name
受權配置文件dav_svn.authz

首先須要加載mod_authz_svn.so 在目錄 /etc/apache2/mods-enabled 下建立軟連接到 ../mods-available/authz_svn.load

$ cd /etc/apache2/mods-enabled
$ sudo ln -s ../mods-available/authz_svn.load

../mods-available/authz_svn.load文件的內容爲:

LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so

這裏我指定了三個組: design 組 和 test 組,design 組讀寫權限,test組只有讀的權限。另外,設置一個管理員帳號 admin,管理員對全部項目有讀寫權限。

受權文件 /etc/subversion/dav_svn.authz 的內容以下:

[groups]
design=user1,user2,user3
test=user4,user5

[project1:/]
admin=rw
@design=rw
@test=r

[project2:/]
admin=rw
@design=rw
@tester=r

若是在Check in的時候遇到以下錯誤:

Can’t open ‘/home/svn/myproject/db/txn-current-lock’: Permission denied

這是由於文件所屬的用戶和組不對形成的問題,能夠從新對整個項目目錄設置用戶和組:

$ sudo chown -R www-data:subversion /home/svn/repos/project1

若是你不想將項目目錄的擁有者設置成 www-data 的話,好比你可能想設置爲 root:

$ sudo chown -R root:subversion /home/svn/repos/project1

必須將 root 加入 subversion 組:

$ sudo usermod -G subversion -a root

還要設置組的屬性:

$ sudo chmod -R g+rws /home/svn/repos/project1

而後查看 txn-current-lock 文件的權限和用戶以及組信息,應該相似於:

$ ls -l /home/svn/myproject/db/txn-current-lock
-rw-rwSr-- 1 root subversion  0  2009-06-18  15:33  txn-current-lock

至此,Subversion 服務器的配置已經完成了,藉助 SVN 客戶端軟件就能夠經過 http:// 的方式訪問到上面配置的兩個文件倉庫了。

相關文章
相關標籤/搜索