發佈日期:
分類:
如何在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
發佈留言