在linux(centos) 安裝 Subversion 自建 SVN Server



Centos 7.2
前置過程需先安裝 httpd ( apache ) server

yum install httpd
systemctl start httpd
 iptables -I INPUT -p tcp --dport 80 -j ACCEPT
chkconfig httpd on

參考
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

在網絡上瀏覽你的機器,http://yourmachine ,看看你能否取得測試頁。做得到嗎?好了,讓我們進到更有趣的事情。

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>

上面的位置是 Apache 在 URL 列上使用的。舉個例說:http://yourmachine/repos 指向你所指定的 SVNPath。上面只是一個範例,因此請按你的喜好放置東西。請確定你在完成編輯後儲存檔案。
然後我們須要建立你在上一部所指定的密碼檔。開始時你要利用 -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 服務






沒有留言:

張貼留言