IT Knowledge Base

~ Without sacrifice, there can be no victory ~

發佈日期:

分類:

,

如何在Ubuntu Desktop (9.10, 10.04)下‧安裝Subversion(svn)服務‧並同時設立以LDAP作登入受權

01. 打開終端機,安裝apache、subversion及其相關資料庫。

sudo apt-get install subversion
sudo apt-get install apache2 libapache2-svn

02. 新增svn最上層資料夾,您可根據自己需要,設定不同資料夾名稱及位置。

sudo mkdir /data/svn

03. 執行svnadmin命令,新增一svn資料夾。其中projectname為新項目名稱。

sudo svnadmin create /data/svn/projectname

04. 您可用svn co命令,檢查是否已成功建立svn項目。

sudo svn co file:///data/svn/projectname

05. 設置svn資料夾的用戶、群組及權限。其中www-data為apache預設用戶及群組名稱。

sudo chmod 777 /data/svn
sudo chown -R www-data:www-data /data/svn/projectname
sudo chmod -R 777 /data/svn/projectname

06. 將您現時使用中的用戶名稱及www-data用戶,加到www-data群組內。

Add www-data and your account into the group of www-data;
sudo usermod -G www-data www-data
sudo usermod -G www-data username

07. 在/etc/apache2/mods-available/dav_svn.conf檔案中,加入以下內容。其中SVNParentPath為svn內最上層資料夾位置;AuthLDAPBindDN為LDAP的管理員名稱及域名;AuthLDAPBindPassword為LDAP內管理員密碼;AuthLDAPURL為LDAP的IP位置及PORT位置,因LDAP服務與svn同安裝於一伺服器上,固使用localhost名稱;AuthzSVNAccessFile為儲存svn每一個資料夾的使用者權限檔案。

sudo gedit /etc/apache2/mods-available/dav_svn.conf
<Location /svn/>
DAV svn
SVNParentPath /data/svn/
SVNListParentPath On
AuthType Basic
AuthName "SVN LDAP"
AuthBasicProvider ldap
AuthLDAPBindDN "cn=admin,dc=example,dc=com"
AuthLDAPBindPassword "password"
AuthzLDAPAuthoritative Off
AuthLDAPURL "ldap://localhost:389/ou=user,dc=example,dc=com?uid?sub?(objectClass=*)"
AuthzSVNAccessFile /data/svn/svn_permission.conf
require valid-user
</Location>

08. 建立使用者權限檔案。以下為參考例子,root為最高權限,可瀏覽及更改svn內的任何檔案,而user1及user2均可瀏覽projectname資料夾內的檔案,但只有user2能更改及增加內容。

sudo gedit /data/svn/svn_permission.conf
[/]
root = rw

[projectname:/]
user1 = r
user2 = rw

09. 啟用LDAP服務。

sudo a2enmod authnz_ldap

10. 重新啟用apache服務。

sudo /etc/init.d/apache2 restart

11. 使用已在LDAP建立的用戶名稱及密碼,用以下網址便可進入svn版面。請留意,您必需同時擁有/data/svn/svn_permission.conf檔案內的設定權限,才可瀏覽及更改svn內的內容。

http://localhost/svn/projectname

12. 或許,您會想到,每人更新svn內容時,須同時加上備註,以便日後可容易跟進修改的內容。那您可使用每個svn資料夾內的hooks/pre-commit檔案,如以下例子,為指定每次修改,須在備註欄加入字串,才可成功更新(commit)。

sudo gedit /data/svn/projectname/hooks/pre-commit
#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
SVNOK=1
$SVNLOOK log -t "$TXN" "$REPOS" | \\
grep "[a-zA-Z0-9]" > /dev/null || SVNOK=0
if [ $SVNOK != 1 ];
then
echo "You must enter the comment for your commit." 1>&2
exit 1
fi
exit 0

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *