Centos 7.2
前置過程需先安裝 httpd ( apache ) server
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
參考
https://wiki.centos.org/zh-tw/HowTos/Subversion
安裝
[root@lucifer ~]# yum install mod_dav_svn subversion
4.1. Apache
在你進一步學習之先,你需要確定 Apache 已經被設置好。我假設你在做一個全新的安裝,因此如果你的 Apache 已經在運作中……請小心你所做的改動。我亦會解釋如何設置基本的密碼保護。然而,假若你想容許任何人存取版本庫,你可輕易地省略這部份。
你首先要做的事情就是開啟
/etc/httpd/conf/httpd.conf,而且最低限度更改
ServerName 這個指引。如果你需要協助或擁有更複雜的設定,請參詳 Apache 的文件。
[root@lucifer ~] vim /etc/httpd/conf/httpd.conf —— 作所需修改並存檔
[root@lucifer ~] service httpd start
[root@lucifer ~] chkconfig httpd on
4.2. Subversion 給 Apache 的設定
下一步就是在 Apache 內設置某些設定,好讓 Subversion 與 Apache 能夠融洽相處。現在讓我們看看 Subversion 為你安裝的範例設定檔。
[root@lucifer ~] cd /etc/httpd/conf.d/
[root@lucifer ~] vim subversion.conf
# 有需要的話,請確定你移除這兩行的註釋
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
# 加入下列內容來支援基本驗證,並將 Apache 指向實際放置版本庫的地方。
<Location /repos>
DAV svn
SVNPath /var/www/svn/repos
AuthType Basic
AuthName "Subversion repos"
AuthUserFile /etc/svn-auth-conf
Require valid-user
</Location>
然後我們須要建立你在上一部所指定的密碼檔。開始時你要利用 -cm 這個選項。它會建立檔案並用 MD5 將密碼加密。如果你需要加用戶,請確定你只使用 -m 選項,而不包含初次建立時的 -c。
[root@lucifer ~] htpasswd -cm /etc/svn-auth-conf yourusername
New password:
Re-type new password:
Adding password for user yourusername
[root@lucifer ~] htpasswd -m /etc/svn-auth-conf anotherusername
New password:
Re-type new password:
Adding password for user anotherusername
4.3. 設定你的版本庫
你接著要做的事情就是建立你用來提交及取出檔案的版本庫。利用 svn 所包含的工具,這是很容易的。
[root@lucifer ~] cd /var/www/ —— 或者你在上面所指定的路徑
[root@lucifer ~] mkdir svn
[root@lucifer ~] cd svn
[root@lucifer ~] svnadmin create repos
[root@lucifer ~] chown -R apache.apache repos
[root@lucifer ~] service httpd restart
現在去測試你能否透過網頁瀏覽器存取你的版本庫:
http://yourmahcine/repos 。你應該取得一個對話方塊詢問用戶名稱及密碼。若然是這樣,請輸入你的憑證,然後你應該看見一版
Revision 0:/ 的頁面。這樣的話,版本庫的設定便大工告成了。如果你須要多個版本庫,請參考上面連結內的文檔。這裡只示範如何設置一個版本庫及開始應用它。話說回來,讓我們就這樣做。
6. 存取控制清單
一般來說,你不會想將所有版本庫的存取權給予所有用戶。你可以利用 ACL 來限制每位用戶存取版本庫的權限。ACL 可以透過 AuthzSVNAccessFile 這個檔案選項來啟用,它以一個檔名作為參數。例如:
AuthzSVNAccessFile /etc/svn-acl-conf
你可以在相關的 Location 部份加入它:
<Location /repos>
DAV svn
SVNPath /var/www/svn/repos
AuthzSVNAccessFile /etc/svn-acl-conf
AuthType Basic
AuthName "Subversion repos"
AuthUserFile /etc/svn-auth-conf
Require valid-user
</Location>
注意是 使用 SVNPath 非 SVNParentPath
然後你可以建立 /etc/svn-acl-config。這個檔案內藏有這個格式的分段:
[版本庫名稱:版本庫路徑]
用戶 = 存取權
當中存取權可以是 r(唯讀)、rw(讀寫)、或空白(禁止存取)。預設的 ACL 是禁止用戶存取版本載。假設你有一個名叫 framework 的版本庫,而你想給 john 唯讀的權限,及 joe 讀寫的權限。你可以加入下面這個分段:
[framework:/]
john = r
joe = rw
你亦可以在名叫 groups 的分段內建立群組,然後在存取控制清單內將 @ 符號放在群組前面。例如:
[groups]
staff = joe, george
[framework:/]
john = r
@staff = rw
如果你想令所有用戶能閱讀每個版本庫,你可以為每個版本庫的根目錄加入以下一個分段:
[/]
* = r
如果想設定 誰才可以存取某些資料夾
subversion restrict user access folders
cd /etc/httpd/conf.d/
vim subversion.conf
多加入
AuthzSVNAccessFile /etc/svn-acl-conf
在 etc 下新增一檔案 叫 svn-acl-conf
svn-acl-conf 內容設定如下
[repos:/]
john = rw
(表示john 擁有整個資料夾瀏覽及編輯權限 )
[repos:/f1/f2]
Mary = r
( 表示 Mary 只允許瀏覽 /f2 下資料夾內容 )
小心資料夾名稱後不要加到斜線了 例如 : f1/f2/
最後
設定SELinux
vi /etc/selinux/config
由原本 #SELINUX=enforcing 改為 SELINUX=disabled
記得重開機喔 !!
否則 commit 時 會一直出現 could not begin a transaction
注意 當你遇到 systemctl restart svnserve 無法啟動時
它告訴你
Root path '/var/svn' does not exist or is not a directory
vi /etc/sysconfig/svnserve //修改路逕
# OPTIONS is used to pass command-line arguments to svnserve.
#
# Specify the repository location in -r parameter:
OPTIONS="-r /var/www/svn/repos"
重新做一次 開啟 svn 服務
netstat -nltp //查詢目前服務的阜號 例如 : 8891
kill 8891 //砍掉目前服務的 port
svnserve -d -r /var/www/svn/repos //重新繫結 svn 目錄
systemctl restart httpd //重啟 http 服務