基于 Debian 的 Subversion+Trac
 
2008-11-21 来源:linuxlife.cn
 

之前都是用 bugzilla 来做 bug管理.现在准备换到 Trac 上.Trac 拥有强大的 bug 管理功能,并集成 wiki  和 Subversion.还有一点,据说 Facebook 也是在用 Trac 来做bug管理 ^0^.

Bug 管理

在Trac中,项目中出现的问题称为ticket。像bug、功能改进、 TODO等都可以写成一个ticket。

1.)可设置ticket的优先级别。

2.)可以设置ticket的里程碑,表明这个ticket应在何时完成,并能够通过条形图方式显示里程碑的完成度。

3.)可以自定义条件生成bug报告,并可以通过SQL语句自定义报告的格式。

Subversion 集成

通过Subversion集成,开发者可在Trac中以Web方式浏览代码库中各个版本的代码和代码的修改历史,并可方便地比较各个版本间的差别。

Wiki

支持常用的Wiki语法。同时增加了许多bug管理的专用标记,可以方便地创建到ticket、代码行甚至修改历史的链接。

Trac使用Python写成,后台使用SQLite或PostgreSQL数据库,因此构筑一个完整的Trac系统需要安装以下软件:

Apache

Python

Subversion

PostgreSQL(可选)

Debian 下的安装很方便,我的系统是 Debian eth4

aptitude install trac apache2 subversion python swig
aptitude install mod_python python-clearsilver  libapache2-svn

这样一个基本的环境就安装好了,你也可以用源码包来安装,你必须满足以下条件:

Python, version >= 2.3.
ClearSilver, version >= 0.9.3
For SQLite
  • SQLite, version 2.8.x or 3.x (preferred)
  • PySQLite, version 1.x (for SQLite 2.x) or version 2.x (for SQLite 3.x). For details see PySqlite
For PostgreSQL

For MySQL

    Warning: MySQL support is currently experimental. That means it works for some people, but has not been tested extensively yet.

  • Note: MySQL support requires Trac version 0.10 or later.

    Subversion, version >= 1.0. (either 1.2.3 or >= 1.3.1 recommended)

    Web Server

—————————————————————–

接下来就是配置了.

1,配置svn

首先创建一用户对svn权限的管理,这里我们就用 linuxlife

#groupadd linuxlife
#useradd svn -g linuxlife -s /usr/sbin/nologin
#passwd linuxlife

然后创建 svn 仓库,默认为 fsfs 文件格式

# mkdir -p /home/linuxlife/svn/
#svnadmin create /home/linuxlife/svn/my_project
chown -R linuxlife:linuxlife /home/linuxlife/svn
chmod -R g+w /home/linuxlife/svn/my_project
chmod g+s home/linuxlife/svn/my_project/db

配置 apache,apache如何配可根据系统的整理规划,只需copy添加代码就可

# vi /etc/apache2/sites-available/default

添加以下部分

### svn settings
#
<Location /svn>
    DAV svn
    SVNListParentPath on
    SVNParentPath /home/linuxlife/svn
    AuthType Basic
    AuthName "Subversion Repository"
    AuthUserFile /etc/svntrac.htpasswd
    <LimitExcept GET PROPFIND OPTIONS REPORT>
        Require valid-user
    </LimitExcept>
</Location>
SVNListParentPath on       —-允许在网页上显示svn父目录list
SVNParentPath /home/svn    —-/home/svn是我这边的SVN的父目录
AuthType Basic                               —-连接类型设置
加了LimitExcept这样匿名用户可以浏览,check out代码,但是不能commit, 认证用户有commit权限
如果有多个仓库,可以用 svnparenpath ,如果就一个用 svnpath 即可.
# htpasswd -c /etc/svntrac.htpasswd

添加认证

接下来就是需要修改 apache 的 User 和 Group 了,在 debian 中

# vi /etc/apache2/apache2.conf

User linuxlife

Group linuxlife

改成这样既可

# apache2 -k restart

重启 apache 后,打开浏览器访问 http://localhost/svn 即可访问svn.

现在开始导入代码或者你需要版本控制的文件.

# mkdir /tmp/svn
# cd /tmp/svn
# mkdir {trunk,tags,branches}
svn import -m "linuxlife's project" [path] http://svn_server_address/svn/my_project

[path] 是导入的路径,不写就是当前路径
path目录下,需要建立三个目录: trunk, tags, branches (类似CVS)这不是必须的,但是这对今后的项目管理很有好处
把最初的代码放在trunk目录下!

import之后用command “svn co http://svn_server_address/svn/my_project”就该可以check out刚才import的代码了
应该说svn和apache就处理好了!接下来就是安装配置Trac….

2.配置 trac

使用 trac-admin 命令可以初始化一个trac项目,一个 trac 项目对应一个 SVN  repository,这是应用中应该注意的.

# mkdir /home/linuxlife/trac
#trac-admin /home/linuxlife/trac/my_project initenv

然后按提示输入,记得注意是 仓库类型选 svn,仓库路径按照本例就是 /home/linuxlife/svn/my_project

trac 有2中方式提供web服务,一种是 trac 自带的 httpd 服务,一种是集成到 apache 里面,如果要用自带的 httpd ,只需这样

tracd --port 8000 /home/linuxlife/trac/my_project

这种方式很简单,但 trac 本身就不建议这样启动.我们要做的,是集成到 apache 里面去.

首先确定你的 apche 配置 cgi-bin 的路径.我的 配置例子是把这个目录正道 /var/www/cgi-bin/ 这里面去了.

所以需要 copy 两个文件到这个目录下.

# cp /usr/share/trac/cgi-bin/trac.* /var/www/cgi-bin/

接着修改 apache 配置

# vi /etc/apache2/sites-available/default

添加以下内容

Alias /trac/chrome/common "/usr/share/trac/htdocs"
<Directory "/usr/share/trac/htdocs">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

ScriptAlias /trac /var/www/cgi-bin/trac.cgi
<Location "/trac">
    SetEnv TRAC_ENV_PARENT_DIR "/home/linuxlife/trac"
</Location>

<Location "/trac/*/login">
    AuthType Basic
    AuthName "Trac Login"
    AuthUserFile /etc/svntrac.htpasswd
    Require valid-user
</Location>

密码文件 svntrac.htpasswd 我们和 svn 共享,这样就只需要管理一套密码了.
保存,退出,重启 apache.再访问
http://localhost/trac
看看是不是可以得到trac的默认首页,然后点击 “browse source”, 你应该可以看到 svn 仓库里的资源.

管理Trac访问许可

Trac的许可权限管理简单而有效,它可通过 trac-admin 命令来管理.用 trac-admin 可管理用户的许可权限,但用户的管理是通过 Apache 的 htpasswd 命令设置的,根据上面的 Apache CGI 配置,用户名和密码是存放在 /etc/svntrac.htpasswd 文件中.下面这个命令可用来列出当前有效的许可权限和已设置的许可权限.

# trac-admin /home/linuxlife/trac/svn_trac_daily permission list

User           Action
——————————
anonymous      BROWSER_VIEW
anonymous      CHANGESET_VIEW
anonymous      FILE_VIEW
anonymous      LOG_VIEW
anonymous      MILESTONE_VIEW
anonymous      REPORT_SQL_VIEW
anonymous      REPORT_VIEW
anonymous      ROADMAP_VIEW
anonymous      SEARCH_VIEW
anonymous      TICKET_VIEW
anonymous      TIMELINE_VIEW
anonymous      WIKI_VIEW
authenticated  TICKET_CREATE
authenticated  TICKET_MODIFY
authenticated  WIKI_CREATE
authenticated  WIKI_MODIFY

上面列出的内容是还没进行许可权限设置时的情况,Available actions段的内容就是有效许可权限的列表,每个权限的解析可查询TracGuide中的TracPermission节的内容。其中 TRAC_ADMIN许可相当于Linux中的root用户,拥有最高的权限。如果我们要把TRAC_ADMIN许可授予 linuxlife 用户,则可这样设置:

# trac-admin /home/trac/my_project permission add linuxlife TRAC_ADMIN

WIKI_ADMIN是WIKI系统的管理员,具有WIKI_CREATE,WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW权限。也就是WIKI页面的创建、删除、修改和查看四种权限,授予方式同上。
删除用户的许可可用remove关健字,如:

# trac-admin /home/linuxlife/trac/my_project permission remove linuxlife TRAC_ADMIN

在Trac的权限管理中可以设置组以简化权限配置,下例将设置一个admin组,具有TRAC_ADMIN许可权限,把jims和ringkee两个用户加入到该组中,使他们也具有TRAC_ADMIN许可权限:

# trac-admin /home/linuxlife/trac/my_project permission add admin TRAC_ADMIN
# trac-admin /home/linuxlife/trac/my_project permission add jason admin
# trac-admin /home/linuxlife/trac/my_project permission add jims admin

在Trac的用户中,有两个默认的用户,一个是anonymous,表示匿名用户;一个是authenticated,表示所有已通过验证的用户。我们可以把许可权赋予这两个用户,从而简化我们的许可权限配置。

备份和恢复Trac

Trac系统的备份和恢复也可使用trac-admin工具来完成,还可支持热备份。备份命令如下:

# trac-admin /home/linuxlife/trac/my_project hotcopy ~/backup

执行该命令时,Trac会自动锁住SQLite数据库,并把/home/trac/my_project目录拷贝到~/backup目录。恢复备份也很简单,只需停止Trac进程,如Apache服务器或tracd服务器。接着把~/backup整个目录恢复回/data/trac目录就可以了。
到此trac也配完了。


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织