Trac 超苦之更新與安裝 (0.12, Centos)

此篇文章最近更新時間為2011-04-11 03:02:24 目前共有3篇留言

關於作者 - JosephJ

任職於 Faria。喜好戶外運動、2008 年 5 月完成「跑步環島」。對於新技術跟程式碼有著強烈的偏執狂。

前言

Trac 是公司內用了一年多的專案管理系統,不過社群活躍度似乎一直在走下坡。
感覺 Redmin 更為強大,也能夠解決我們在 Trac 的許多問題(權限控管、多個專案)、
換系統是遲早的事情。但上禮拜花了不少時間將 Trac 升級,還是應該要記錄一下 :p

為什麼要升級 ?

先前 Trac 的版本是 0.11.x、Python 的版本則是 2.43、作業系統為 CentOS。
會想要升級的理由就是想把 GitPlugin 給裝起來、讓我們可以:
1. 用 Web 介面瀏覽程式碼
2. Git Commit 時自動更新到相關的 Ticket 上
所以目標會有下列的更新: Trac 0.11.x -> 0.12.2Python 2.4.3 -> 2.6GitPlugin for Trac 0.12
此外由於 Trac 0.12.2 不再支援 Apach 的 mod_python,我們也只好更換使用 FastCGI 來執行 python。

一、安裝 Python 2.6

CentOS 上的 Python 版本是 2.4.3,查了一些文件是說系統的 Python 不應該移除或變動
不然很可能會影響到一些既有程式的穩定性,所以應該是另外安裝 Python 2.6

$ yum install python26

未來執行 python 都一律用 python26,不然就會用 2.4.3 的舊版本去編譯喔。

二、更新 setuptool 與 easy_install

Trac 官網有提到 setuptool 跟 easy_install 都得重新安裝,setuptool 如下:

$ yum install setuptool

easy_install 的部份、得先下載 ez_setup.py 這個 script、接著就用上面的 python26 來安裝 easy_install。

$ wget "http://peak.telecommunity.com/dist/ez_setup.py"
$ python26 setup ez_setup.py

執行完畢後,就會產生 easy_install-2.6 這個可執行檔。
未來你也必須以 easy_install-2.6 取代 easy_install,才會將檔案安裝到正確的 /usr/lib/python2.6/site-packages/ 目錄下。

三、安裝 Trac

不要使用 yum 來安裝 Trac,因為它仍然會利用系統預設的 2.4.3 來安裝,這不是我們要的!
這裡我們要使用剛安裝好的 easy_install-2.6 來安裝:

$ easy_install-2.6 Babel==0.9.5 # 多國語系
$ easy_install-2.6 Trac

接著之後就可以看到 /usr/lib/python2.6/site-packages 下產生了一個 Trac-0.12.2-py2.6.egg,
代表我們成功裝了一個以 Python 2.6 執行的 Trac 0.12.2。來試著跑起來看看:

$ mkdir -p /var/www/trac/test
$ trac-admin /var/www/trac/test initenv

按照預設值一直按下去,會看到以下的成功訊息:

Project environment for 'My Project' created.

You may now configure the environment by editing the file:

  /var/www/trac/test/conf/trac.ini

If you'd like to take this new project environment for a test drive,
try running the Trac standalone web server `tracd`:

  tracd --port 8000 /var/www/trac/test

Then point your browser to http://localhost:8000/test.
There you can also browse the documentation for your installed
version of Trac, including information on further setup (such as
deploying Trac to a real web server).

The latest documentation can also always be found on the project
website:

  http://trac.edgewall.org/

Congratulations!

照上面所述,將 Web Server 跑起來試試看:

$ tracd --port 8000 /var/www/trac/test

就可以在 Browser 上觀看剛安裝好的 Trac:http://<你的 IP Address>:8000

四、安裝 GitPlugin

Trac 一直沒預設支援最熱門的 Git、連多重 Repository 也很慢才推出,
得透過額外的步驟才能安裝,版本沒滿足幾乎裝不起來。或許是走下坡的主因之一。
現在已經將 Trac、Python 環境安裝到最新的版本,才能裝起來都沒問題:

$ easy_install-2.6 http://github.com/hvr/trac-git-plugin/tarball/master

去改一下 trac.ini 的設定:

$ vim /var/www/trac/test/conf/trac.ini
===
[components]
tracext.git.* = enabled
[repositories]
project1.dir = /var/cache/git/repositories/project1.git
project1.description = Project On.
project1.type = git
project1.url = http://www.project1.com
project2.dir = /var/cache/git/repositories/project2.git
project2.description = Project Two
project2.type = git
project2.url = http://www.project2.com

此時,http://[你的 IP Address]:8000/browser 應該就可以看到你的 Repository 了 :D

五、FastCGI 的安裝

因為我們是用 Apache,幾種解決方案看起來是 FastCGI 最合適,先把所需要的 Dependencies 裝起來吧:

$ yum install libtool httpd-devel apr-devel

接著下載 mod_fastcgi (下載頁):

$ cd /opt
$ wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
$ cd mod_fastcgi-2.4.6/
$ cp Makefile.AP2 Makefile
$ make top_dir=/usr/lib64/httpd # 如果你是 32 bit 的電腦,則使用 /usr/lib/httpd
$ make install top_dir=/usr/lib64/httpd # 如果你是 32 bit 的電腦,則使用 /usr/lib/httpd

接著的步驟有一點 Tricky,我們要讓 Trac 產生 *.fcgi 的檔案,請用以下的方式產生:

$ mkdir -p /var/www/html/trac
$ trac-admin /var/www/html/trac initenv
$ trac-admin /var/www/html/trac/ deploy /tmp/trac
$ mv /tmp/trac/*  /var/www/html/trac/.

然後再進去稍微修改一下產生出來的 *.fcgi 檔:

$ vim /var/www/html/trac/cgi-bin/trac.fcgi

在 import os 下面加上這一行,目的是讓我們可以有多個 Projects 放在這一層目錄下:

os.environ['TRAC_ENV_PARENT_DIR'] = "/var/www/trac/"

別忘了設定一下相關權限,要讓 apache 可以讀取這些目錄啊~

$ chown apache:apache /var/www/trac -R
$ chmod 755 /var/www/trac -R
$ chown apache:apache /var/www/html -R
$ chmod 755 /var/www/html -R
$ chown +x /var/www/html/trac/cgi-bin/trac.fcgi

六、Apache 的設定檔

最後就是讓 Trac 透過 mod_fastcgi 在 Apache 上跑起來囉!

$ vim /etc/httpd/conf.d/trac.conf
===
[IfModule mod_fastcgi.c]
    FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/var/www/trac/
[/IfModule]
LoadModule fastcgi_module modules/mod_fastcgi.so
[VirtualHost *]
    ServerName <你的 Host 名稱>
    DocumentRoot "/var/www/html/"
    ErrorLog /var/log/httpd/trac-error.log
    CustomLog /var/log/httpd/trac-access.log combined
    ScriptAlias / /var/www/html/trac/cgi-bin/trac.fcgi/
    [Location "/"]
        AuthType Basic
        AuthName "Trac"
        AuthUserFile /etc/httpd/dav_git.passwd
        Require valid-user
    [/Location]
    [Directory "/"]
        Options Indexes FollowSymLinks
    [/Directory]
[/VirtualHost]

升級 Trac

  1. 討人厭的 *.egg:

    以上是純安裝的部份,對我來說真的痛苦的現在才開始,因為我們在先前的 Trac 安裝了大約 15 個以上的 Plugins,可是都是用 Python 2.4.3 安裝的,現在必須一個個手動 easy_install-2.6 <位置> 來安裝,非常的手工業... 花了我一個早上 Q.Q

  2. 升級 Trac Environment:

    Plugins 手工業安裝完畢之後,我們在 /var/www/trac 下有 5 個現存的 Trac Project,也必須一個個升級:

    $ trac-admin /var/www/trac/projectN upgrade 
    $ trac-admin /var/www/trac/projectN upgrade wiki
    

終於大功告成,真是太辛苦了 orz...

結語

GitPlugin 雖然是順利可以用了,Timeline 也變得很精采,不過過程實在是太辛苦了。
而且還有一個衍生的問題就是提供的 post-receive hook 目前還沒辦法使用
因為 Trac 不認得數字以外的版號,必須等他們改掉一個 Bug 後才能 Work
因此 「Git Commit 時自動更新到相關的 Ticket 上」 短期內沒辦法做到
真是有夠殘念的啊... 真的是時候換到 Redmine 了...

唯一值得慶幸的部份就是搞懂 python 與 easy_install 的版本問題,以後升級一定會以 python26 與 easy_install-2.6 來執行。



Comments

  1. Gary 2014-05-16 00:03:08
    請問一下"yum install setuptool"這行需在ROOT身分下執行嗎?
    我是用Ubuntu的terminal!
    謝謝!
  2. jiing 2011-12-27 15:49:19
    有什麼好用的trac plugin可以推薦的嗎?
  3. xing 2011-05-07 17:10:13
    Sir:

    In my company we have applied 'Redmin' as the ePM solution for more than one year,
    and it works well.
    Now we are using GIT to replace SVN as the version-control solution.
    I think such a combination is quite fitting in use ^^
暱稱: 必填。
Email: 非必填。若填寫為不公開欄位,僅供站長參考聯繫。
內容: 必填。限 255 個字元以內。
驗證碼:
送出

Facebook Comment