SVN + Trac + Apache 完整安裝攻略

SVN + Trac + Apache 完整安裝攻略,而原本在 SVN 所欠缺的用戶及權限管理介面,也都可以由 Trac 的外掛程式來搞定,可謂兩全其美。

本文章適合熟悉 SVN 但沒用個任何線上專案管理的人做為參考。

請注意,本人使用的 Linux 是 CentOS 4.x,RHEL 4.x 也適用。

1. 伺服器環境及設置

在伺服器上,我的設置如下:

  1. SVN 相關設定檔: /etc/svn/
  2. SVN 檔案庫的根目錄: /var/svn/ (裡面可以存放多個檔案庫)
  3. Trac 專案的根目錄: /var/trac/ (裡面可以存放多個專案)
  4. SVN 用戶的帳號密碼檔: /etc/svn/account
  5. SVN 用戶的權限檔: /etc/svn/authz
  6. 伺服器 IP: 192.168.1.10
  7. SVN 的存取網址: http://192.168.1.10/svn
  8. Trac 的存取網址: http://192.168.1.10/trac

所以要先建立這些目錄及檔案:

mkdir /etc/svn
mkdir /var/svn
mkdir /var/trac
touch /etc/svn/account
touch /etc/svn/authz
chown -R apache /etc/svn

因為「account」及「authz」這兩個檔案都需要由 Trac 來管理,所以都要把擁有者改為 apache (包含 /etc/svn 這個目錄)

2. 增加 yum 的套件伺服器

編輯 /etc/yum.repos.d/CentOS-Base.repo,在檔案最後加入下列的 yum 套件伺服器(來自 dag 及 kbs):

[dag]
name=Dag RPM Repository for RHEL
baseurl=http://repoforge.cu.be/redhat/el$releasever/en/$basearch/dag/
gpgkey=http://repoforge.cu.be/RPM-GPG-KEY.dag.txt
gpgcheck=1
enabled=1
[kbs-CentOS-Misc]
name=CentOS.Karan.Org-EL$releasever - Stable
baseurl=http://centos.karan.org/el$releasever/misc/stable/$basearch/RPMS/
gpgkey=http://centos.karan.org/RPM-GPG-KEY-karan.org.txt
gpgcheck=1
enabled=1

增加了這兩個套件伺服器之後,就可以直接用 yum 安裝 SVN 及 Trac 了。

3. 安裝 SVN 及相關套件

以 yum 輕鬆安裝 SVN 主程式及相關套件:

yum -y install subversion subversion-perl mod_dav_svn apr apr-util

4. 安裝 Trac 及相關套件

以 yum 輕鬆安裝 Trac 主程式及相關套件:

yum -y install trac clearsilver python-clearsilver

5. 修改網頁配置:

編輯 /etc/httpd/conf/httpd.conf,在最後面加上:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
  DAV svn
  SVNParentPath /var/svn
  Satisfy Any
# HTTP 用戶驗證
  AuthType Basic
  AuthName "SVN Repository"
  AuthUserFile /etc/svn/account
  AuthzSVNAccessFile /etc/svn/authz
  Require valid-user
</Location>
<Location /trac>
  SetHandler mod_python
  PythonInterpreter main_interpreter
  PythonHandler trac.web.modpython_frontend
  PythonOption TracEnvParentDir /var/trac
  PythonOption TracUriRoot /trac
# HTTP 用戶驗證
# AuthType Basic
# AuthName "Trac Project"
# AuthUserFile /etc/svn/account
# Require valid-user
</Location>

請注意上面註解(#)的部份,因為要用 Trac 的外掛程式來管理用戶的登入,所以就不需要 HTTP 用戶驗證,如果比較喜歡用 HTTP 驗證就把下面四行的註解拿掉即可,並且下面 trac.ini 的設定也要把「trac.web.auth.LoginModule」啟用。

6. 建立第一個 SVN 的儲存庫

先在 /var/svn 建立一個名稱為「project1」的儲存庫:

svnadmin create /var/svn/project1
chown -R apache /var/svn/project1

7. 新增一個管理者帳號

先在 /etc/svn/account 新增一個名為「admin」的管理者:

htpasswd /etc/svn/account admin

只要建立這一個管理者用戶即可,稍後可以在 Trac 的外掛程式來新增其它用戶及管理其權限。

8. 建立第一個 Trac 的專案

繼續在 /var/trac 建立一個名為「project1」的專案:

trac-admin /var/trac/project1 initenv

執行時會問你一些東西,你需要輸入「Project Name」代表專案名稱,而「Path to repository」必須輸入「/var/svn/project1」,代表 SVN 儲存庫的路徑,其它選項只要按 Enter 使用預設值即可。這裡面的值稍後可以在專案目錄底下的 conf/trac.ini 做修改。

接著仍需將專案的擁有者改為「apache」:

chown -R apache /var/trac/project1

9. 安裝 Trac 的外掛程式

安裝 Trac 的外掛程式前,需安裝 python-setuptools 及建立 Python Egg 的快取目錄:

cd /tmp
wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py
mkdir /var/www/.python-eggs
chown apache /var/www/.python-eggs

以 easy_install 安裝五個實用的 Trac 外掛程式 (安裝 for Trac 0.10 的版本):

easy_install http://svn.edgewall.com/repos/trac/sandbox/webadmin
easy_install http://trac-hacks.org/svn/iniadminplugin/0.10
easy_install http://trac-hacks.org/svn/accountmanagerplugin/0.10
easy_install http://trac-hacks.org/svn/tracwysiwygplugin/0.10
easy_install http://trac-hacks.org/svn/svnauthzadminplugin/0.10

這五個外掛程式分別為:

  1. WebAdmin: Trac 的基本管理模組。
  2. IniAdmin: trac.ini 管理。
  3. Account Manager: Trac 的用戶管理。
  4. TracWiki WYSIWYG Editor: 讓 Wiki 編輯器變成 WYSIWYG 編輯器。
  5. Svnauthz File Administration: SVN 的帳號及存取權限管理。

然後繼續編輯 /var/trac/project1/conf/trac.ini,在最後加上:

[components]
#啟用 WebAdmin 外掛程式
webadmin.* = enabled
#啟用 IniAdmin 外掛程式
iniadmin.iniadmin.iniadminplugin = enabled
#啟用 TracWysiwyg 外掛程式
tracwysiwyg.* = enabled
#啟用 SvnAuthzAdmin 外掛程式
svnauthz.* = enabled
#啟用 AccountManager 外掛程式
acct_mgr.api.accountmanager = enabled
acct_mgr.htfile.HtPasswdStore = enabled
#關閉預設的 Http 登入認證方式,改用 AccountManager 的登入認證
trac.web.auth.LoginModule = disabled
acct_mgr.web_ui.LoginModule = enabled
#啟用帳號管理
acct_mgr.admin.AccountManagerAdminPage = enabled
#允許用戶變更密碼、刪除帳號
acct_mgr.web_ui.AccountModule = enabled
[account-manager]
password_format = htpasswd
password_file = /etc/svn/account
password_store = HtPasswdStore

另外,你還要到 [trac] 區塊找到「authz_file」及「authz_module_name」這兩個參數,分別設為:

authz_file = /etc/svn/authz
authz_module_name = project1

這兩個參數與 SVN 的存取權限有關,「authz_module_name」要設成 SVN 的儲存庫名稱。

最後,你可能還要再修改「default_charset」參數,預設是「iso-8859-15」,請改成與你 Checkin 到 SVN 儲存庫內的檔案相同文字編碼。

10. Trac 的用戶管理

通常我會先指定 Trac 的管理者、移除訪客的權限、增加一個一般用戶群組,指令如下:

trac-admin /var/trac/project1 permission add admin TRAC_ADMIN
trac-admin /var/trac/project1 permission remove anonymous '*'
trac-admin /var/trac/project1 permission add @user LOG_VIEW FILE_VIEW WIKI_VIEW WIKI_CREATE WIKI_MODIFY SEARCH_VIEW REPORT_VIEW REPORT_SQL_VIEW
trac-admin /var/trac/project1 permission add @user TICKET_VIEW TICKET_CREATE TICKET_MODIFY BROWSER_VIEW TIMELINE_VIEW CHANGESET_VIEW ROADMAP_VIEW MILESTONE_VIEW

在 Trac 裡,用戶與群組的命名及管理方式是沒有什麼區別的,用戶也可以是群組,所以,你也可以把第一個用戶指定給第二個用戶,那第一個用戶就會擁有與第二個用戶一樣的權限。在上面的指令,我新增了一個名稱叫「@user」的群組以做為識別,並設定其權限,只要把用戶指定給 @user,就可以使用相同的權限。

11. 設定完成

所有的設定都完成了,請重新啟動 apache:

service httpd restart

現在該裝的都裝好了,Trac 的存取位址為「http://192.168.1.10/trac」,SVN 的存取位址為「http://192.168.1.10/svn/project1」。

用瀏覽器連上 Trac 的存取位址,選擇進入「project1」專案後,會顯示 Forbidden 說你沒有讀取權限,因為我們在上一個步驟已經把訪客所有的權限給移除了,現在你只能在網頁的右上角找到「login」來登入「admin」帳號。

成功登入 admin 之後,你可以從導覽列右邊的 [Admin] 進入管理介面,其中:

    1. General 下的「Permissions」是用來管理 Trac 的使用權限
    2. Account 下的「Users」可以用來管理 Trac 及 SVN 的用戶: /etc/svn/account
    3. Subversion 下的「Subversion Access」才是用來管理 SVN 的路徑存取權限及 SVN 的用戶群組: /etc/svn/authz

現在你要進行的,除了新增用戶(Users)及修改權限(Permissions)之外,你如果點選導覽列上的 [Browse Source] 系統也會跟你說權限不足,同樣的,現在任何人都還不能存取 SVN 的專案(http://192.168.1.10/svn/project1),因為「/etc/svn/authz」這個檔案的內容還是空白的,你必須到 Trac 管理介面的「Subversion Access」去讓你的用戶擁有讀寫「/」這個路徑的權限才行。

稍後等我有空我再來發表 Trac 的詳細使用方式,大家可以先參考下面的網頁連結。

參考網頁

    • Trac初學者
    • 07/21. 2010 10:53上午
    Using Internet Explorer Internet Explorer 7.0 on Windows Windows XP

    您好!我是第一次安裝 trac& svn,我OS使用red hat,
    依照步驟安裝後,用IE 開啟http://myip/trac,卻出現下列錯誤,
    請教是我缺那個步驟嗎?

    Traceback (most recent call last):
    File "/usr/lib/python2.4/site-packages/trac/web/api.py", line 436, in send_error
    data, 'text/html')
    File "/usr/lib/python2.4/site-packages/trac/web/chrome.py", line 809, in render_template
    data = self.populate_data(req, data)
    File "/usr/lib/python2.4/site-packages/trac/web/chrome.py", line 719, in populate_data
    d.update({
    File "/usr/lib/python2.4/site-packages/trac/web/api.py", line 212, in __getattr__
    value = self.callbacks[name](self)
    File "/usr/lib/python2.4/site-packages/trac/web/main.py", line 306, in _get_locale
    available = [locale_id.replace('_', '-') for locale_id in
    File "/usr/lib/python2.4/site-packages/trac/util/translation.py", line 328, in get_available_locales
    return [dirname for dirname
    File "/usr/lib/python2.4/site-packages/setuptools-0.6c11-py2.4.egg/pkg_resources.py", line 899, in resource_listdir
    return get_provider(package_or_requirement).resource_listdir(
    File "/usr/lib/python2.4/site-packages/setuptools-0.6c11-py2.4.egg/pkg_resources.py", line 1191, in resource_listdir
    return self._listdir(self._fn(self.module_path,resource_name))
    File "/usr/lib/python2.4/site-packages/setuptools-0.6c11-py2.4.egg/pkg_resources.py", line 1282, in _listdir
    return os.listdir(path)
    OSError: [Errno 2] No such file or directory: '/usr/lib/python2.4/site-packages/trac/locale'

    • Using Google Chrome Google Chrome 6.0.472.63 on Linux Linux

      我用centos安裝時也會,後來發現把babel移除就不會出錯了。
      主要是安裝trac的沒有附上i18n的語系。最後一行才應該是重點,前面的只是trackback。

    • william
    • 08/17. 2010 4:29下午
    Using Internet Explorer Internet Explorer 8.0 on Windows Windows XP

    我也是...
    好像是trac的帳號密碼路徑錯誤
    ....

    • Hank
    • 09/10. 2010 11:18下午
    Using Google Chrome Google Chrome 6.0.472.55 on Windows Windows XP

    謝謝你的文章~ 寫的很詳細^^

  1. 02/14. 2011
    Trackback from : trac & svn安裝 « justin
  2. 02/27. 2012

return top

%d 位部落客按了讚: