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 位部落客按了赞: