3.3. GNATS 安装和配置

  1. 下载最新的安装包,确认 GNATS 和 Gnatsweb 版本是否匹配

    下载 GNATS 4 beta2: ftp://ftp.gnu.org/gnu/gnats/gnats-3.999.2.tar.gz

    直接从 CVS 服务器检出 Gnatsweb 4: cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/gnatsweb co gnatsweb

    [注意]

    注意 GNATSWEB 和 GNATS 的版本是否兼容,Gnatsweb 2.9.x 和 GNATS 3.113.1 版本兼容,Gnatsweb 3.99.x 和 GNATS 3.999.x 兼容。

  2. 建立名为 gnats 的账号

    创建 gnats 用户账号,系统维护以 gnats 身份运行,以减少系统安全风险。

    $ useradd gnats
    
  3. 安装 GNATS

    以 root 用户登录,执行下列命令

    $ tar zxvf gnats-3.999.2.tar.gz 1
    $ cd gnats-3.999.2 
    $ configure --prefix=/usr/local/gnats 2
    $ make all info 3
    $ make install install-info 4
    
    1

    下载的 GNATS 4 安装包解包至路径 gnats-3.999.2 下。3.999... = 4 ? 不觉想起来上小学时,问老师 0.999...(无限循环)和 1 谁大的趣事。

    2

    将 GNATS 安装在路径 /usr/local/gnats 下,确省为 /usr/local。

    3

    make all: 编译所有的应用程序;make info:生成帮助信息;

    4

    make install: 安装编译完毕的的应用程序;make install-info:安装帮助信息;

  4. 到底安装了些什么?

    • /usr/local/gnats/bin

      GNATS 工具。应将此路径加入 PATH 环境变量,或者在 /usr/local/bin 中建立符号链接。

    • /usr/local/gnats/libexec/gnats/

      GNATS 维护工具。应将此路径加入 PATH 环境变量,或者在 /usr/local/bin 中建立符号链接。

    • /usr/local/gnats/etc/gnats/

      GNATS 全局配置信息。可以由 databases 文件将一台服务器配置为多个项目提供缺陷追踪服务(database);gnatsd.host_access 用于控制基于主机地址的安全选项。

    • /usr/local/gnats/etc/gnats/defaults/

      GNATS 服务器配置信息模板。每配置一个 GNATS 缺陷追踪服务(database),将该路径下的文件作为模板复制到项目各自独立的配置目录中,如确省的配置目录为 /usr/local/gnats/com/gnatsdb/gnats-adm。其中 gnatsd.user_access 用于配置用户名和口令,dbconfig 数据库配置文件;categories 文件用于设置类别;responsible 设置负责人的邮件地址等。

  5. 配置确省的数据库

    这里说的数据库不是我们经常听到的关系型数据库,而是指 GNATS 为一个项目提供缺陷追踪的一组配置文件和相应数据,GNATS 实际上是以文本文件形式存储的。 在配置文件文件 databases 中,确省设置了一个名为 default 的数据库。

    default:Bug database:/usr/local/gnats/com/gnatsdb
    

    运行 mkdb 维护工具,初始化确省数据库。

    $ mkdb default
    Copying default files from /usr/local/gnats/etc/gnats/defaults
    

    mkdb 简单的将配置文件模板从 /usr/local/gnats/etc/gnats/defaults 目录下拷贝到指定的路径下。

    /usr/local/gnats/com/gnatsdb/gnats-adm 目录存放配置文件,初始来自于配置文件模板的拷贝;

    /usr/local/gnats/com/gnatsdb/pending 目录存放未知分类(Category)的 PR;

    /usr/local/gnats/com/gnatsdb/gnats-queue 目录存放等待处理的 PR;

    其它目录对应于各自的 Category 名称,存储对应 Category 的 PR,由此我们看出 PR 的 Category 命名为上述的三个保留名称。

  6. 设置 crontab

    为避免 DOS 攻击,用户提交的 PR,先进入缓冲队列,待 queue-pr 命令执行时,方进行投递。因此将 queue-pr 加入 crontab,定时执行。

    $ crontab -e
    0,10,20,30,40,50 * * * * exec-prefix/libexec/gnats/queue-pr --run
    
  7. 设置邮件别名

    因为 GNATS 初始设计为使用 Email 即可工作,因此需要设置邮件别名,通过管道,将邮件送交 GNATS 工具处理。将如下内容加入邮件别名文件(/etc/aliases):

    gnats-admin: root
    bugs: "| exec-prefix/libexec/gnats/queue-pr -q"
    query-pr: "| exec-prefix/libexec/gnats/mail-query"
    
    [注意]

    注意:如果 sendmail 设置了 smrsh,需要将 queue-pr 和 mail-query 配置为 sendmail 可以执行的命令。简单的,可能只需要在 /etc/smrsh 目录下建立相应的符号链接。

  8. 运行守护进程

    GNATS 的守护进程是最为重要的一环,它使 GNATS 支持多种 PR 方式。

    确认是否在 /etc/services 中配置了相应的服务,服务名为 support

    support 1529/tcp # GNATS
    

    配置以 inetd 或 xinetd 方式执行 gnatsd (守护进程)。

    对于 inetd,在 /etc/inetd.conf 中加入:

    support stream tcp nowait gnats /usr/local/gnats/libexec/gnats/gnatsd gnatsd
    

    对于 inetd,在 /etc/xinetd.d/ 目录下加入文件 support,内容如下:

    service support
    {
    disable = no
    socket_type = stream
    protocol = tcp
    wait = no
    user = gnats
    server = /usr/local/gnats/libexec/gnats/gnatsd
    }
    

至此,完成了 GNATS 的安装。但是,如果只凭借命令行工具 send-pr,和 Email 来提交和管理 PR,显然太专业而难以推广,不具有竞争力。因此 Gnatsweb 几乎成了唯一选择。下面马上来安装 Gnatsweb。

  1. 注意版本兼容

    Gnatsweb 2.9.x 和 GNATS 3.113.1 版本兼容,Gnatsweb 3.99.x 和 GNATS 3.999.x 兼容。Gnatsweb 3.99.x 在本文撰写之时,只能通过 CVS 检出代码。

    $ cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/gnatsweb login
    $ cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/gnatsweb co gnatsweb
    
  2. GNATS 权限设置

    Gnatsweb 作为 cgi 程序运行在 WEB 服务器上,需要在 GNATS 服务器上配置 WEB服务器的访问权限。

    有两种方法,一种是在全局的 gnatsd.host_access 配置文件中设置 WEB 服务器的 IP 地址具有 edit 权限,如下:

    127.0.0.1:edit:
    

    由于 GNATS 的权限设置的特殊性,权限只能升不能降,因此各自数据库设置的用户权限全部实效,所有用户都至少拥有 edit 权限,即修改 PR 的权限。

    另外,就是在全局的 gnatsd.host_access 配置文件中设置 WEB 服务器的 IP 地址具有比较低的权限:

    127.0.0.1:listdb:
    

    再在各自独立的数据库配置文件中设置用户的权限。

  3. 修改 gnatsweb-site.pl 脚本中的 GNATS 主机名和端口号

    确省的主机名为 localhost,确省端口为 1529。若实际配置有变,灵活修改之。

  4. 确认是否安装了所需的 PERL 包

    $ perl -MCPAN -e 'install CGI'
    $ perl -MCPAN -e 'install MIME::Base64'
    
  5. 测试链接

    $ make test USERNAME=user PASSWORD=password DATABASE=default
    

    错误的输出:

    
    connect...........................................FAIL
    
    Gnatsweb was unable to connect to the GNATS server.
    
    There are several possible reasons for this.  Start off by checking
    that the USERNAME, PASSWORD and DATABASE parameters you supplied are
    valid.  If they are, there may be a problem in the configuration of
    your GNATS server.  Check your GNATS installation, particularly the
    host access files (remember that the web server needs access to the
    GNATS server), then run the tests again.
    
    make: *** [test] Error 9
    
    

    正确的输出:

    
    connect...........................................pass
    query.............................................pass
    fix_email_addrs 1.................................pass
    fix_email_addrs 2.................................pass
    fix_email_addrs 3.................................pass
    fix_email_addrs 4.................................pass
    fix_email_addrs 5.................................pass
    trim_responsible 1................................pass
    trim_responsible 2................................pass
    trim_responsible 3................................pass
    All tests passed.
    
    
  6. 开始安装

    需要指定网站的 cgi-bin 目录。关于 Apache 配置 CGI,请参见相关章节,在此不再赘述。

    $ make install CGI_DIR=/usr/local/apache/cgi-bin
    

    其实,只是将脚本 gnatsweb.pl 和 gnatsweb-site.pl 简单的拷贝到路径 /usr/local/apache/cgi-bin 之下。

  7. 访问 Gnatsweb

    打开浏览器,访问网址:http://localhost/cgi-bin/gnatsweb.pl