[Linux][Subversion]在 CentOS 7 下安裝 Subversion

如何快速的在 CentOS 7 來安裝一套自己獨立的  Subversion 的版本控制軟體

自從使用 VSTS 之後,好一陣子都沒有用到 Subversion 了。最近剛好有朋友要在公司內安裝一套版本控制,原本想說讓他們直接使用 Azure 上面的 Subversion VM ,但因為他們希望完全在地端使用和控管,因此就想辦法幫他們在地端的虛擬環境內安裝一套 Subversion 起來。

 

因為對於 Linux,我也只有半吊子的能力,因此就先選用比較簡單的 CentOS 7 來做安裝,基本上因為要搭配 Sunversion ,因此就直接使用最小化的版本來進行安裝。安裝好作業系統之後,要使用 Subversion,我就直接使用 yum 來做安裝,只要網路和磁碟速度不要太慢,應該很快就可以完成。

yum install httpd subversion mod_dav_svn

 

接下來就是設定的部分了,這個部分我們用前面所搭配的 mod_dav_svn 模組的設定檔案,來針對該設定檔加入我們的 SVN 設定

vi /etc/httpd/conf.modules.d/10-subversion.conf

 

在 10-subversion.conf 這個檔案裏面,原本就已經有指定 Apache 所要加載 svn 模組的設定,我們在這個檔案的後面,加上如下的設定。這個設定主要是指在 Apache 下會有個路徑  svn ,這個是使用 svn 模組來處理,對應到 Linux 下面的 /svn 目錄,也就是後續我們相關的 repository 都會建立在 /svn 的目錄下,而在該目錄下,我們也放置一個 svn-auth 的使用者密碼檔,和一個 authz 的權限對照檔

<Location /svn>
DAV svn
SVNParentPath /svn
AuthName "SVN Repos"
AuthType Basic
AuthUserFile /svn/svn-auth
AuthzSVNAccessFile /svn/authz
Require valid-user
</Location>

 

完成安裝的部分之後,接下來我們要到 Linux 下來建立目錄和設定權限了。這裡我們先在根節點上建立一個 /svn 的目錄,也就是上面設定檔中所指定的目錄,並且在該目錄下,透過 svnadmin 建立一個範例的 SVN 倉庫 repo1 ,也設定 apache 對這個目錄的存取權限。

mkdir /svn
cd /svn
svnadmin create repo1
chown -R apache:apache repo1
chmod -R 775 repo1

 

目錄設定完成之後,就要來建立 SVN 的使用者和權限設定了,這裡主要是透過 htpasswd 建立一個密碼檔案,並且建立一個使用者帳號 ( 因為一開始 svn_auth 的檔案並沒有存在,使用 htpasswd 就可以建立 svn-auth 的密碼檔 ),而在使用 htpasswd 的時候,只有第一次需要多加上 -cm 的參數,後續在增加其他使用者的話,因為第一次已經產生好那個檔案,後續就只要使用 -m 的參數即可。

htpasswd -cm /svn/svn-auth user1
chown root:apache /svn/svn-auth
chmod 640 /svn/svn-auth

 

以及要針對 /svn/authz 這個檔案,來設定使用者在各倉庫下的權限。在這個範例中,我們將剛剛建立的 user1 放到 admin 群組,而在下面設定 admin 這個群組在 /svn 下所有 SVN 的 repository 都有讀寫權限;剛剛建立的 repo1 這個倉庫下,就先還沒有指定其他權限了。當要指派權限的話,那麼群組的名稱前面要加入 @ 的符號,如果沒有加就是視為是使用者。

[groups]
admin=user1

[/]
@admin=rw

[repo1:/]

 

接下來我們要設定 Linux 啟動的時候,會把 Apache 開起來,並且調整預設的防火牆,讓  http 的通訊協定可以使用。

systemctl enable httpd.service
systemctl start  httpd.service
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --reload

基本上在前面的步驟完成後,就可以安裝好一台版本控制的機器了,但當你要真正去連線使用的時候,就會發現無法連接,在 apache 放在 /etc/httpd/logs/error_log 的錯誤紀錄檔中可以看到,apache 對於我們 /svn 下面沒有權限可以使用,因此我們接下來就要來針對 Selinux 來做一些調整,讓版本控制真的可以使用。而這裡會有兩種方式來進行

1. 關閉  SELinux:這個是最簡單的方式,也是最容易的處理方式就是直接關閉 Selinux ,因此我們可以開啟 /etc/selinux/config 這個檔案,在這個檔案中,我們可以看到預設值「SELINUX=enforcing」,因此我們將這個部分做個修改,調整為「SELINUX=disabled」。透過這樣調整之後,因為 SELinux 被關閉了,這個時候只要 /svn 下面相關權限設定正確,就可以正常使用了。

2. 調整目錄權限: 這個是比較好的做法,但設定起來比較麻煩一點,透過下面這兩個指令,設定 SELinux 相關目錄權限,就可以正常去執行了。

chcon -R -t httpd_sys_content_t  /svn
setsebool -P httpd_unified=1