ubuntu14.04上Trac配置记录

系统环境:ubuntu14.04 (并假设Apache2服务可以正常运行)

1. 安装软件:

sudo aptitude install trac python-mysqldb

2. 创建数据库
Trac可支持的数据库有:sqlite, postgresql及mysql等。默认的是sqlite,但这里选用的是mysql。

$ mysql -uroot -p
  Enter password: ******
  mysql> CREATE DATABASE $myproject DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
  mysql> show databases;
  mysql> exit 

说明:Trac可以管理很多个项目,所以每个项目都需要创建自己的数据库。

 3. 创建Trac环境的根目录

sudo mkdir /var/www/trac 

因为Trac是需要与Apache2服务绑定的,所以一般放到/var/www下,当然了用户也可根据喜好随意设置位置。

4. 创建Trac项目

cd /var/www/trac
sudo mkdir test
sudo trac-admin test initenv
  >>projectname: test
  >>conn database: mysql://root:******@localhost/test

说明:数据库名称,项目名称最好都保持一致,免得容易混淆。这里的“Test” 即前面的 $myproject。

 然后更改权限:

sudo chown -R www-data:www-data trac
sudo chmod -R g+rsw trac

5. 绑定Apache2服务

编辑配置文件:/etc/apache2/apache2.conf,在文件最后添加如下内容:

<Location "/trac">
    SetHandler mod_python
    PythonInterpreter main_interpreter
    PythonHandler trac.web.modpython_frontend
    PythonOption TracEnvParentDir /var/www/trac
    PythonOption TracUriRoot /trac
    AuthType Basic
    AuthName "Trac"
    AuthUserFile /etc/apache2/.svn_and_trac.htpasswd
    Require valid-user
</Location>

认证方式为“Basic”,密码文件位置/etc/apache2/.svn_and_trac.htpasswd

上面配置也可以写成:

<Location "/trac">
    SetHandler mod_python
    PythonInterpreter main_interpreter
    PythonHandler trac.web.modpython_frontend
    PythonOption TracEnvParentDir /var/www/trac
    PythonOption TracUriRoot /trac
</Location>
<LocationMatch "/trac/[^/]+/login">
    AuthType Basic
    AuthName "Trac"
    AuthUserFile /etc/apache2/.svn_and_trac.htpasswd
    Require valid-user
</LocationMatch>

跟上面的区别是,第一种配置为强制登录认证,不允许匿名访问;第二种则不强制。

确认以下模块(都在/etc/apache2/mods-enabled目录下)都已经启动起来,可通过以下命令确认:

sudo a2enmod env
sudo a2enmod auth_basic
sudo a2enmod python

6. 创建密码文件

Apache2认证的方式按照级别递增的顺序可分为:Basic, Digest, SSL; 前两种是通过http方式访问的,SSL是通过https,配置稍复杂。

这里使用的Basic认证:

$ htpasswd -c /etc/apache2/.svn_and_trac.htpasswd $username

参数“-c”表示第一次创建密码文件。如果后续需要追加用户,就不可使用参数“-c”了。如果将命令htpasswd替换成命令htdigest,则创建就是Digest认证文件了。

补充说明一下下面的几个命令:
  * a2dismod        ------> disable一个Apache2模块,即从mods-enabled/目录中删除该模块的链接
  * a2dissite        ------> disable一个Apache2配置,即从sites-enabled/目录中删除该配置的链接
  * a2enmod        ------> enable一个Apache2模块,即在mods-enabled/目录中创建一个到mods-available/的模块的链接
  * a2ensite        ------> enable一个Apache2配置,即在sites-enabled/目录中创建一个到sites-available/的配置的链接
说明:在/etc/apache2的配置文件目录下一般有如下目录:
  * mods-available/    ------> 所有已安装的Apache2模块
  * mods-enabled/    ------> 已经被开启正被使用的Apache2模块,都是链接到mods-available/的链接文件
  * sites-available/    ------> 所有可支持的Apache2启动配置文件
  * sites-enabled/    ------> 默认被使用的Apache2启动配置文件,都是链接到sites-available/的链接文件

7. 更改Trac环境的logo
编辑文件trac/$myproject/conf/trac.ini,相应部分更改如下:

[header_logo]
alt = (logo of ucrobotics)
height = -1
link = http://www.ucrobotics.com
src = /themes/garamond/img/header-icon.gif
width = -1

8. 添加管理权限

sudo trac-admin /var/www/trac/test permission add $username TRAC_ADMIN 

对于具有管理权限的用户,在通过浏览器访问Trac环境的时候,其导航栏的最右边会有一个“Admin”的链接,进入之后可以对其它用户的权限进行配置。
一般来说,具有管理权限的用户可以通过Web界面进行管理操作了,但若是需要通过命令行进行操作,可参考:wiki:TracAdmin

9. 重启Apache2服务测试

sudo /etc/init.d/apache2 restart 

测试地址:http://localhost/trac

附录一:配置Trac有两种方式:做为CGI(CGI、WSGI、FCGI)以及使用mod-python。

上面展示的是mod-python方式,如果是CGI,可通过如下命令生成CGI文件(供参考):

sudo trac-admin /var/www/trac/test deploy /tmp/deploy
sudo mv /tmp/deploy/cgi-bin /var/www
sudo mv /tmp/deploy/htdocs /var/www/htdocs.trac.bak (暂时没用到这个目录) 

注意:这里将生成的CGI文件直接拷贝到/var/www下了,这样一来,以后再创建其它新的Trac环境就不需要再生成新的CGI文件了。
给这些新生成的文件一起赋予权限:

sudo chown -R www-data:www-data trac cgi-bin htdocs.trac.bak
sudo chmod -R g+rsw trac cgi-bin htdocs.trac.bak 

附录二:运行过程中遇到的错误解决

错误内容如下:

ERR1: AttributeError: NullTranslationsBabel instance has no attribute 'isactive' 
ERR2: AttributeError: 'NullTranslations' object has no attribute 'add'

解决方法是修改文件:/usr/share/pyshared/trac/util/translation.py,修改log如下:

$ diff -Nur translation.py.orig translation.py 
--- translation.py.orig    2014-07-14 13:09:16.130643165 +0800
+++ translation.py    2014-07-14 13:26:42.038584449 +0800
@@ -146,7 +146,8 @@
                 self._activate_failed = True
                 return
             t = Translations.load(locale_dir, locale or 'en_US')
-            if not t or t.__class__ is NullTranslations:
+            #if not t or t.__class__ is NullTranslations:
+            if not isinstance(t, Translations):
                 t = self._null_translations
             else:
                 t.add(Translations.load(locale_dir, locale or 'en_US',
@@ -175,14 +176,20 @@
 
         @property
         def isactive(self):
-            if self._current.args is not None:
-                get_locale, env_path = self._current.args
-                self._current.args = None
-                self.activate(get_locale(), env_path)
-            # FIXME: The following always returns True: either a translation is
-            # active, or activation has failed.
-            return self._current.translations is not None 
-                   or self._activate_failed
+            try: 
+                if self._current.args is not None: 
+                    get_locale, env_path = self._current.args 
+                    self._current.args = None 
+                    self.activate(get_locale(), env_path) 
+                # FIXME: The following always returns True: either a translation is 
+                # active, or activation has failed. 
+                return self._current.translations is not None 
+                       or self._activate_failed 
+            except AttributeError, e: 
+                import sys 
+                exc_info = sys.exc_info() 
+                raise Exception, unicode(e), exc_info[2] 
+
 
         # Delegated methods

参考:http://webplay.pro/linux/ubuntu/install-trac-1-1-2-dev-on-ubuntu-12-04.html

原文地址:https://www.cnblogs.com/wzc0066/p/3842613.html