红联Linux门户
Linux帮助

ubuntu14.04上Trac配置记录

发布时间:2016-07-18 09:51:12来源:linux网站作者:wzc0066
系统环境: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   130643165 +0800
+++ translation.py    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://www.linuxdiyf.com/linux/22475.html