项目开发平台搭建:svn+trac(FOR LINUX)


一、安装软件
    在linux下常用的安装方式是使用rpm包,我们选用yum(或者apt-get)工具来解决包之间的依赖关系,具体如何用法,这里不再赘述,不懂得问一下Mr. Google或者百度先生吧。如果你觉得自己用tar包,编译安装的方式比较爽,你也可以试一下,不过不推荐哟,别人帮你做好了,干吗还要费那个劲。我这里给出一个自动化的脚本,可能里面某些软件在你机器上的配置找不到,那么需要你到网上查一下,把相应仓库的地址加入到yum的配置文件当中。
#!/bin/bash
# install python
yum -y install python.i386 python-devel.i386 python-lxml.i386 python-sqlite.i386 python-clearsilver.i386 swig.i386 python-setuptools.noarch
# install subversion
yum -y install subversion.i386 subversion-devel.i386

# install clearsilver
yum -y install clearsilver.i386 clearsilver-devel.i386

# install sqlite
yum -y install clearsilver.i386 clearsilver-devel.i386
# install LAMP
yum -y install httpd.i386 mod_auth_mysql.i386 mod_dav_svn.i386 mod_log_sql.i386 mod_authz_ldap.i386 mod_python.i386 mod_ssl.i386
yum -y install MySQL-python.i386 mysql.i386 mysql-devel.i386 mysql-server.i386
yum -y install php-xml.i386 php.i386 mod_suphp.i386 php-devel.i386 php-ldap.i386 p-readline.i386
# install optional
yum -y install enscript.i386
# install trac
yum -y install trac.noarch
# install mantis
yum -y install mantis.noarch
上述软件安装完成之后,默认情况下trac被安装在/usr/share/trac下,其他应该在/bin或者/usr/bin目录下。   
软件安装完成之后,下面就开始我们的平台搭建。我们要建立两个工程projectA和projectB,使用WEB界面进行管理。
二、搭建平台

  • 创建subversion仓库并配置subversion

假定仓库的地址为 /work/repos,我们进行如下的操作:
#svnadmin create --fs-type fsfs /work/repos/projectA
#svnadmin create --fs-type fsfs /work/repos/projectB经过上面两步,我们已经创建了两个仓库,下面是要对它进行一些设定了,主要就是访问权限之类的以及服务运行方式。关于subversion的用法,可以到其站点或者svn中国上找本文档看看。
  • 权限的设置
    主要设置 /work/repos/ProjectA/conf/下面的passwd和authz文件,具体如何设置请查看svn的帮助。
    • 服务运行方式

    subversion有三种运行方式,本地,svnsever,以及同apache整合,我们要使用的是最后一种方式,后面会具体介绍如何配置。

    • 创建trac环境并对其进行配置

    接下来我们要创建trac的环境,假定我们安装到/work/trac-env/目录下,使用如下命令:
    #trac-admin /work/trac-env/projectA initenv
    #trac-admin /work/trac-env/projectB initenv在执行上述命令的时候会问你svn仓库的地址,告诉它在/work/repos/projectA,/work/repos/ProjectB下面就是了,如果你弄错了也没有关系,因为可以手动配置的,而且很简单哪。配置文件放在了conf/trac.ini下,具体配置选项的意义和用法,这里也不讲,参考其主页上的说明。

    • 配置apache

    我们的主要精力放在了如何把subversion以及trac和apache结合起来,提供一个web管理界面上,所以这部分是我们的重头戏。
    如果按照我们上面的脚本的安装方式,在安装完成后,在/etc/httpd/conf.d/目录下面应该有subversion.conf和trac.conf两个文件,我们分别配置他们就行了,二者没有必然的联系。

    • 首先来配置subversion

    主要是配置 /etc/httpd/conf.d/subversion.conf
    LoadModule dav_svn_module     modules/mod_dav_svn.so
    LoadModule authz_svn_module   modules/mod_authz_svn.so
    #上面两行用于家在模块
       DAV svn
    #   SVNPath /work/repos/projectA #如果只显示一个工程,则用这个
       SVNParentPath /work/repos #显示所有工程
    # 下面进行权限配置
    #   # Limit write permission to list of valid users.
       
    #      # Require SSL connection for password protection.
    #      # SSLRequireSSL
    #
          AuthType Basic
          AuthName "subversion repository"
          AuthUserFile /work/repos/.htpasswd  #密码文件必须用htpasswd生成
          AuthzSVNAccessFile /work/repos/.authz #管理组的权限
          Require valid-user
       
    可以使用命令 #htpasswd -cm /work/repos/.htpasswd lirui来为用户lirui添加密码,建立文件/work/repos/.authz,并按照svn的格式要求配置它。
    在配置完成后,重新启动http服务:#apachectl restart
    这时候就可以通过命令:svn co http://your_site_ip/repos/projectA
    把projectA的源码check到本地了(前提是你有相应权限),如果具有写权限,以后可以直接通过svn commit命令提交修改结果。

    • 再来配置trac

    配置/etc/httpd/conf.d/trac.conf,下面是给出的一个蓝本
    #设定目录权限,如果不设置这个,你会得到没有访问权限的错误,很烦人哟
        Order allow,deny
            Allow from all
    #以后你就可以输入 http://your_site/trac来访问,执行的就是这个trac.cgi
    ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
    ### Trac need to know where the database is located
    #       SetEnv TRAC_ENV "/work/trac-env/projectA" #如果只显示一个工程,用这个
          SetEnv TRAC_ENV_PARENT_DIR "/work/trac-env" #显示多个工程

    ### You need this to allow users to authenticate
        AuthType Basic
        AuthName "trac"
        AuthUserFile /work/trac-env/trac.htpasswd #使用htpasswd生成的密码文件
        Require valid-user
    ScriptAlias /trac/projectA /usr/share/trac/cgi-bin/trac.cgi
    ### Trac need to know where the database is located
          SetEnv TRAC_ENV "/work/trac-env/projectA" #如果只显示一个工程,用这个
    #      SetEnv TRAC_ENV_PARENT_DIR "/work/trac-env" #显示多个工程

    ### You need this to allow users to authenticate
        AuthType Basic
        AuthName "trac"
        AuthUserFile /work/trac-env/projectA/trac.htpasswd #使用htpasswd生成的密码文件
        Require valid-user
    ScriptAlias /trac/projectB /usr/share/trac/cgi-bin/trac.cgi
    ### Trac need to know where the database is located
           SetEnv TRAC_ENV "/work/trac-env/projectB" #如果只显示一个工程,用这个
    #      SetEnv TRAC_ENV_PARENT_DIR "/work/trac-env" #显示多个工程

    ### You need this to allow users to authenticate
        AuthType Basic
        AuthName "trac"
        AuthUserFile /work/trac-env/projectB/trac.htpasswd #使用htpasswd生成的密码文件
        Require valid-user
    至此,我们已经配置完了,现在在浏览器输入 http://your_site_ip/trac/projectA 就能看到一个web界面的管理系统了,好好体验一把喽。
    还有一点不是很爽,有时候我们需要只输入IP就能找到我们需要的网页,比如我们输入http://your_site就得到一个页面,而不要http://your_site_ip/trac/projectA才得到。我的做法是建立文件/var/www/html/index.html,并设置其转到对应页。下面是我的一个设置:
      Redirection
      
                    edirecting to trac bug system ...
            哈哈,到这来
    三、使用简介

    • svn 使用简介

    如果你之前使用过cvs,那么你肯定也会用svn,因为它们的命令基本一样,而且常用的也就那么几个“ update, commit, status, log“等,如果没有用过,那么找本svn book来看,或者直接到 http://subverion.trigris.org 上面看它的文档吧

    • trac使用简介

    主要讲述它的导航栏中每个项目的用途

    • 在wiki上发布项目的各种文档,项目信息等;
    • souce一栏可以看到工程的源码,而且可以看到详细的更改信息,语法高亮,版本记录,修改信息等,而且可以以不同颜色区分两个版本的不同,比cvs有更好的界面
    • 使用ticket来汇报bug,可以对bug进行跟踪,可以设置邮件提醒
    • 在roadmap一栏,对工程进度进行跟踪
    • 可以提供Rss支持,订阅RSS,随时跟踪网站的变化

    l
    这里也给出另外一种选择: svn(cvs)〔版本控制〕 + viewVC〔web界面〕 + mantis〔bug追踪〕,如果可能的话,我会给出这种选择的配置情况。这里有一篇讲述如何在windows下安装viewVC的
    http://schnell.blogchina.com/4627119.html
    , 还有竹笋炒肉的mantis学习笔记
    http://hedong.3322.org/archives/000263.html
    四 viewvc 安装手记
    基本步骤如下
    • 下载viewvc-1.0.0.tar.gz和enscript-1.6.4.tar.gz
    • 将二者分解解压缩进行安装
    • 拷贝安装viewvc目录下 bin/cgi/viewvc.cgi 到 /var/www/cgi-bin/viewvc.cgi
    • 配置viewvc,告诉它你的源码仓库所在的位置
    • 如果需要的话,还可以为apache配置scriptAlias
      这里给出一个自动安装的脚本,它自动帮你完成了上面的1,2,3步的工作
      #!/bin/bash
      wget http://viewvc.tigris.org/files/documents/3330/31766/viewvc-1.0.0.tar.gz
      wget http://www.iki.fi/mtr/genscript/enscript-1.6.4.tar.gz
      tar -xf enscript-1.6.4.tar.gz
      cd enscript-1.6.4
      ./configure
      make && make install
      # if success, enscript will install on /usr/local/bin /usr/local/share/enscript
      tar xf viewvc-1.0.0.tar.gz
      cd viewvc-1.0.0
      # just divss  for options
      read pause
      ./viewvc-install
      # just divss  for options
      echo 'install viewvc ok'
      # after that viewvc will be installed in /usr/local/viewvc-1.0.0
      cp /usr/local/viewvc-1.0.0/bin/cgi/viewvc.cgi /var/www/cgi-bin
      echo '++++++++++++++++++++++++++++++++++++++++++++++++++'
      echo '| configure /usr/local/viewvc-1.0.0/viewvc.conf |'
      echo '++++++++++++++++++++++++++++++++++++++++++++++++++'
      这里再给出一个viewvc的配置范例,其中主要设置的地方在 root_parents,default_root 以及有关enscript用于语法高亮的东西
      root_parents = /home/svn-repos: svn,
      /home/cvs-repos: cvs
      default_root = hypersim
      use_rcsparse = 0
      address = Administered by: ASL HyperSim Team lirui
      forbidden =
      kv_files =
      languages = en-us
      [options]
      root_as_url_component = 0
      default_file_view = log
      checkout_magic = 0
      http_expiration_time = 600
      generate_etags = 1
      sort_by = file
      sort_group_dirs = 1
      hide_attic = 1
      log_sort = date
      diff_format = h
      hide_cvsroot = 1
      hr_breakable = 1
      hr_funout = 0
      hr_ignore_white = 1
      hr_ignore_keyword_subst = 1
      hr_intraline = 0
      allow_annotate = 1
      allow_markup = 1
      allow_comdivss = 1
      template_dir = templates
      show_subdir_lastmod = 0
      show_logs = 1
      show_log_in_markup = 1
      cross_copies = 1
      use_localtime = 0
      py2html_path = .
      short_log_len = 80
      #setting for syntax highlightning
      use_enscript = 1
      enscript_path = /usr/loca/bin
      # should we add line numbers?
      highlight_line_numbers = 1
      # convert tabs to ## spaces (use 0 for no conversion)
      highlight_convert_tabs = 4
      use_php = 0
      php_exe_path = php
      allow_tar = 0
      use_cvsgraph = 0
      cvsgraph_path =
      cvsgraph_conf = cvsgraph.conf
      use_re_search = 0
      use_pagesize = 0
      limit_changes = 100
      [cvsdb]
      enabled = 0
      其中这些都在各自的领域做的都很好,如果有一个能够把这些工具集大成者,就很好了,有个scmbug好像在做这方面的努力。