Ubuntu(Mint)下搭建SVN服務器

1.安裝Subversion

1
sudo apt-get install subversion

2.建立倉庫

假定咱們倉庫的父目錄爲/home/svn apache

1
2
cd /home/svn
sudo svnadmin create /home/svn/test

能夠看到/home/svn目錄下面有一個test文件夾,裏面有conf,db,format,hooks,locks,README.txt幾個文件 瀏覽器

3.啓動svn服務器

1
sudo svnserve -d -r /home/svn

4.測試svn服務器

1
2
輸出:Checked out revision 0

說明安裝成功 服務器

若是要經過瀏覽器訪問的,則須要與apache配合: svn

1.安裝apache

若是沒有安裝apache,須要先安裝apache以及libapache2-svn 測試

1
sudo apt-get install apache libapache2-svn

2.整合SVN

修改/etc/apache2/mods-available/dav_svn.conf ui

1
2
3
4
5
6
7
8
9
<Location /svn>
    DAV svn
    SVNParentPath /home/svn
    AuthType Basic
    AuthName "Subversion Repository"
    AuthUserFile /etc/subversion/dav_svn.passwd
    AuthzSVNAccessFile /etc/subversion/dav_svn.authz
    Require valid-user
</Location>

說明:
1.SVNParentPath表示的全部庫的父級目錄,SVNParentPath與SVNPath只能啓用一個。SVNPath只能建立一個倉庫,SVNParentPath則能夠建立多個,因爲一般不會只有一個倉庫,因此一般都會選擇SVNParentPath
2.AuthUserFile 是svn的用戶配置文件,位置能夠自定義,文件也須要本身建立,不過得保證apache有訪問權限
3.AuthzSVNAccessFile 是svn的權限控制文件,其餘同AuthUserFile 加密

3.添加SVN用戶

1
sudo htpasswd -c /etc/subversion2/dav_svn.passwd username

回車以後須要輸入兩次密碼。
聽說 -c 參數建立文件會覆蓋原有的信息,可是通過測試,並無覆蓋原有的用戶信息,因此,執行 spa

1
2
sudo htpasswd -c /etc/subversion2/dav_svn.passwd user1
sudo htpasswd -c /etc/subversion2/dav_svn.passwd user2

dav_svn.passwd文件中依舊會有user1和user2兩個用戶信息,沒有衝突。
另外,/etc/subversion2/dav_svn.passwd文件須要與第2步中自定義的文件位置一致
完成以後能夠看到dav_svn.passwd中有相似 rest

1
xiao:$apr1$wq1l1SCM$lAgKYtQJUzpPZPgvQXTnX1

的片斷,xiao是用戶名,後面的是加密後的密碼 orm

4.修改SVN訪問權限

編輯 /etc/apache2/dav_svn.authz
若是想開放全部權限,那麼能夠直接

1
2
[/]
* = rw

表示用戶都有讀寫權限

5.重啓apache

1
sudo /etc/init.d/apache2 restart

訪問http://127.0.0.1/svn/test/可查看結果

補充說明:

1.整合SVN出錯

出現錯誤:

1
2
Invalid command 'AuthzSVNAccessFile', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.

緣由:沒有導入auth模塊
解決方法:

1
/etc/apache2/mods-enabled/dav_svn.load

中加入

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

2.訪問倉庫列表

若是但願訪問全部的倉庫列表,能夠修改/etc/apache2/mods-available/dav_svn.conf以下:

1
2
3
4
5
6
7
8
9
10
<Location /svn/>
    DAV svn
    SVNParentPath /home/svn
    SVNListParentPath On
    AuthType Basic
    AuthName "Subversion Repository"
    AuthUserFile /etc/subversion/dav_svn.passwd
    AuthzSVNAccessFile /etc/subversion/dav_svn.authz
    Require valid-user
</Location>

注意上面的變化,%lt;Location /svn/>添加了尾部斜線,SVNListParentPath On是新添加的。
重啓apache後訪問http://127.0.0.1/svn/(結尾有個’/')能夠看到結果

3.權限控制說明

/etc/apache2/dav_svn.authz 權限控制的一個示例

1
2
3
4
5
6
7
8
9
10
11
[groups] #用來分組用戶
group1 = xiao, xe
group2 = user1, user2
 
[test:/] #倉庫名稱,[/]表示全部倉庫
@group1 = rw #表示group1組的用戶(xiao, xe)對test具備讀寫權限
@group2 = r  #表示group2組的用戶(user1, user2)對test只具備讀權限,沒有寫的權限
* = #表示全部用戶都沒有權限,即既不能讀,也不能寫
 
[test2:/]
* = rw #表示全部用戶都具備讀寫權限

4.權限錯誤

出現
Can’t open directory ‘/home/svn’: Permission denied
或者
403 forbidden
錯誤的話,表示apache(一般帳戶是www-data)沒有權限文檔到svn所在目錄的權限,此時須要檢查/home/svn及其子文件夾的權限,好比

1
sudo chown -R www-data /home/svn

而後再訪問http://127.0.0.1/svn/test/查看結果

5.重啓apache的時候若是出現

Permission denied: make_sock: could not bind to address 0.0.0.0:80 等字樣,記得加sudo

相關文章
相關標籤/搜索