Ubuntu(Mint)下搭建SVN服務器
1.安裝Subversion
1 www.2cto.com
sudo apt-get install subversion
2.創建倉庫
假定我們倉庫的父目錄為/home/svn
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
svn co file://localhost/home/svn/test
輸出:Checked out revision 0
說明安裝成功
如果要通過浏覽器訪問的,則需要與apache配合:
1.安裝apache
如果沒有安裝apache,需要先安裝apache以及libapache2-svn
1
sudo apt-get install apache libapache2-svn
2.整合SVN
修改/etc/apache2/mods-available/dav_svn.conf
<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 參數創建文件會覆蓋原有的信息,但是經過測試,並沒有覆蓋原有的用戶信息,所以,執行
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中有類似
1
xiao:$apr1$wq1l1SCM$lAgKYtQJUzpPZPgvQXTnX1
的片段,xiao是用戶名,後面的是加密後的密碼
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如下:
<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 權限控制的一個示例
[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