Linux 下 Bugzilla 的安装及配置

2020-03-16 18:20:56 浏览数 (1)

Bugzilla 是一个基于 Web 的,开源的,用来记录跟踪缺陷数据库的 bug 跟踪软件。它可以管理软件开发中缺陷的提交(new)、修复(resolve)和关闭(close)等整个生命周期,它允许个人和团队有效地记录下他们产品的一些突出问题。

Linux 下 Bugzilla 的安装及配置安装 Perl安装 MySQL 并配置安装 Apache2 并配置下载 Bugzilla 并安装配置搭建在云服务器上使用 Nginx 服务器常见问题及解决方案


在 Linux 下安装 bugzilla 并正常使用,需要依赖以下的软件或模块:Perl、MySQL、Apache2、Bugzilla

下面以 deepin 在系统下的安装来详细讲解安装及配置过程。


安装 Perl

Perl 是一种实用报表提取语言,其前身是 Unix 系统管理的一个工具,后逐渐发展为一种功能强大的程序设计语言,用作 Web 编程、数据库处理、XML 处理以及系统管理。查看系统中是否已安装 Perl:

代码语言:javascript复制
  perl -v

一般情况下 Linux 系统会默认安装 Perl。若未安装,则执行命令下面命令进行安装:

代码语言:javascript复制
  sudo apt install perl*

安装 MySQL 并配置

MySQL 是一个关系型数据库。输入命令进行安装:

代码语言:javascript复制
   sudo apt install mysql-common mysql-client mysql-server

安装完成后默认没有设置密码,可通过以下两种方式设置密码:

  1. 方式一:修改配置文件 编辑 /etc/mysql/debian.cnf 文件 sudo vim /etc/mysql/debian.cnf 找到 “password”这一行,直接在后面添加密码即可 password = Abc123
  2. 方式二:登录后设置密码 无密码登录进入 mysql 命令行 sudo mysql -u root 在 mysql 命令行执行以下命令 # 选用 mysql 数据库进行操作 use mysql; # 更改 root 用户的登录密码 update mysql.user set authentication_string=password('Abc123') where user='root'; # 注意:新版的 MySQL 已经没有 password 字段了,改成了 authentication_string

接着创建 bugzilla 用户和 bugs 数据库,并给 bugzilla 用户分配权限。同样是在 mysql 命令行执行:

代码语言:javascript复制
  # 创建一个名为 bugzilla 的 mysql 用户
  create user 'bugzilla'@'localhost' identified by 'BugsAbc';
  
  # 创建一个名为 bugs 的数据库
  create database bugs;
  
  # 给 bugzilla 用户分配权限,使其可以完全操作 bugs 数据库
  grant all privileges on bugs.* to 'bugzilla'@'localhost' identified by 'BugsAbc';
  
  # 从 MySQL 数据库授权表中重新装载权限
  flush privileges;

然后重启 MySQl 服务:

代码语言:javascript复制
  sudo systemctl restart mysql

安装 Apache2 并配置

在某些 Linux 服务器中,安装 apache 的命令为:

代码语言:javascript复制
  sudo apt install httpd

但是在 deepin 系统中,httpd 集成在了 apache2 中,所以安装命令为:

代码语言:javascript复制
  sudo apt install apache2

安装成功后启动 apache2 服务并设置为开机自启:

代码语言:javascript复制
  apache2 -k start
  sudo update-rc.d apache2 enable

在 deepin 中其配置文件的目录也不是 /etc/httpd/,而是在 /etc/apache2/ 中。接下来配置 apache 解析 bugzilla 的 web 服务。首先创建配置文件:

代码语言:javascript复制
  sudo vim /etc/apache2/sites-available/bugzilla.conf

往文件中写入以下内容:

代码语言:javascript复制
  Listen 8555
  <VirtualHost *:8555>
    ServerAdmin yowfung@outlook.com
    DocumentRoot "/opt/bugzilla5"
    ServerName 192.168.10.192
    ServerAlias 192.168.10.192
    ErrorLog "${APACHE_LOG_DIR}/vhost.bugzilla.error.log"
    CustomLog "${APACHE_LOG_DIR}/vhost.bugzilla.access.log" combined
    
    <Directory /opt/bugzilla5>
      AddHandler cgi-script .cgi .pl
      Options  Indexes  ExecCGI
      DirectoryIndex index.cgi index.html index.html.var
      AllowOverride all
      Require all granted
    </Directory>
  </VirtualHost>

# 其中监听的端口号、邮箱、服务器 IP 地址等根据实际情况填写,网站根目录则指向接下来 bugzilla 要安装到的目录,我这里预计安装到 /opt/bugzilla5 中。

保存配置文件后创建软连接以启用配置:

代码语言:javascript复制
  sudo ln -s /etc/apache2/sites-available/bugzilla.conf /etc/apache2/sites-enabled/

或者使用下面的命令来使配置生效:

代码语言:javascript复制
  sudo a2ensite /etc/apache2/sites/available/bugzilla.conf

然后检查配置文件是否存在语法错误:

代码语言:javascript复制
  apache2ctl configtest

如果最后一行显示 “Syntax OK” 则表示配置文件语法正确。接下来重启 apache:

代码语言:javascript复制
  sudo systemctl restart apache2

创建 apache 用户并加入到当前用户组:

代码语言:javascript复制
  # 创建 apache 用户组
  sudo groupadd apache
  
  # 创建 apache 用户并加入到 yowfung 用户组中,其中 yowfung 为我当前登录用户所在的用户组
  sudo useradd -g yowfung

下载 Bugzilla 并安装配置

选定一个将要安装 bugzilla 的目录,例如 /opt ,然后下载 bugzilla 到本地:

代码语言:javascript复制
  sudo wget https://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-5.0.3.tar.gz -O /opt/bugzilla5.tar.gz

解压缩包:

代码语言:javascript复制
  sudo tar -zxvf /opt/bugzilla.tar.gz

此时可以在 /opt 下看到多出来 bugzilla 文件夹,给该文件夹重新分配用户权限:

代码语言:javascript复制
  sudo chown -R apache:yowfung /opt/bugzilla

进入到 bugzilla 安装目录中:

代码语言:javascript复制
  cd /opt/bugzilla5

查看有哪些 Perl 模块缺失:

代码语言:javascript复制
  ./checksetup.pl

在输出的结果中,红色标记的模块即为缺失的模块,可以使用以下命令来安装这些模块:

代码语言:javascript复制
  perl install-module.pl --all

这个安装过程可能比较耗时,耐心等待即可,如果出现某些包错误可以输入终端上面提示的指令进行手动安装,或者下载对应的 Perl 模块进行安装。安装完成后再次运行 ./checksetup.pl 进行验证,如果所有的 Perl 模块都安装成功的话,会在当前路径下生成一个 localconfig 文件,接下来对这个文件进行配置:

代码语言:javascript复制
  vim ./localconfig
  1. 找到 $index_html = 0 这一行,将 0 改成 1,这样才会生成一个 index.html 文件,这个文件指向 index.cgi 文件,这个 index.cgi 即为 bugzilla 的网站主页脚本。 $index_html = 1
  2. 修改数据库配置,将 $db_driver 的值设为 mysql,将 $db_name 设为上面创建的数据库的名称,将 $db_user$db_pass 设为上面新创建的 MySQL 用户名和密码。 $db_driver = 'mysql'; $db_name = 'bugs'; $db_user = 'bugzilla'; $db_pass = 'BugsAbc';
  3. 修改 Web 服务用户组,如果没有正确设置用户权限,届时网页会出现 403 错误,这里的用户组名称设为你上面创建 apache 用户时实际加入的用户组。 $webservergroup = 'yowfung';

修改完成后,再次运行 ./checksetup.pl 进行验证,如果没问题,则会自动进行 bugzilla 的安装,安装过程中会让你输入一些信息(管理员账号、密码等),安装成功后则会出现以下画面:

此时打开浏览器,在地址栏输入你的 IP 地址和端口号,或者输入 127.0.1.1 和端口号即可访问 bugzilla 网页


搭建在云服务器上

上述过程安装的 Bugzilla,只能在 Linux-Desktop 系统本地上使用,如果想要在 Linux-Server 中运行,或者想要实现远程访问该机器上的 Bugzilla,你需要一个公网 IP 和一个域名(可选),只需修改 /etc/apache2/sites-available/bugzilla.conf 中的 ServerName 这一项,将其改为你的公网 IP 地址或者域名地址(记得在域名管理网站上进行解析)即可。


使用 Nginx 服务器

如果你习惯上使用 Nginx 而不喜欢 Apache,Bugzilla 同样也可以使用 nginx 来搭载,原理与 apache 类似,只需添加一个 nginx 的解析配置文件即可。

首先下载 fastcgi-wrapper.pl 并设置执行权限:

代码语言:javascript复制
  sudo wget -O /usr/local/bin/fastcgi-wrapper http://ftp.quzart.com/notes/bugzilla-nginx-fcgi/fastcgi-wrapper.pl
  sudo chmod 755 /usr/local/bin/fastcgi-wrapper

下载用于启动 fastcgi 的脚本,设置执行权限和开机启动,随后启动该脚本:

代码语言:javascript复制
  sudo wget -O /etc/init.d/fastcgi-wrapper http://ftp.quzart.com/notes/bugzilla-nginx-fcgi/fastcgi-wrapper-initscript
  sudo chmod 755 /etc/init.d/fastcgi-wrapper
  sudo update-rc.d fastcgi-wrapper defaults
  sudo invoke-rc.d fastcgi-wrapper start

在 /etc/nginx/sites-available/ 中添加一个新的配置文件 bugzilla.conf,并写入以下内容:

代码语言:javascript复制
  server {
    listen      8555;
    root        /opt/bugzilla5;
    index       index.cgi index.html;
    server_name localhost;
  
    error_log   /var/log/nginx/error.bugzilla.log;
    access_log  /var/log/nginx/access.bugzilla.log;
  
    location / {
      autoindex off;
    }
  
    location ~ ^.*.cgi$ {
      fastcgi_pass  unix:/var/run/fastcgi-wrapper/fastcgi-wrapper.sock;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include       fastcgi_params;
    }
  }

# 其中网站根目录 root 和域名 server_name 需要根据实际情况填写。

然后记得修改 bugzilla 安装目录的用户和用户组权限,因为 Nginx 使用的用户和用户组均为 www-data:

代码语言:javascript复制
  sudo chown -R www-data:www-data /opt/bugzilla5

重启 Nginx 即可在浏览器上访问 Bugzilla 页面:

代码语言:javascript复制
  sudo nginx -s reload

常见问题及解决方案

问题1:无法打开 Bugzilla 网页

  1. 首先确认 Bugzilla 是否正确安装。
  2. 其次确认 apache2 和 mysql 是否正确启动。
  3. 然后检查 apache2 的网页解析文件是否正确配置。
  4. 检查 bugzilla 安装目录下的 localconfig 文件是否正确配置。

问题1:打开网页出现 403 错误

出现这种情况一般有以下几种原因:

  1. bugzilla 安装目录下的 localconfig 文件中,$webservergroup 这一项没有正确配置,将其设置为 apache 用户所在用户组即可。
  2. bugzilla 目录没有访问权限,使用 chown 命令将其目录权限设置为 apache 用户及其所在用户组即可。
  3. apache 的网页解析配置文件没有正确配置,检查一遍 /etc/apache2/sites-available/bugzilla.conf 文件有没配置错误的,尤其注意 Require all granted 这一项。
  4. 如果问题还是没有解决,可查看 apache2 的错误日志来排查问题,日志文件在 /var/log/apache2 目录中。

问题2:打开网页后显示的是代码文本而不是网页内容

出现这种情况一般有以下几种原因:

  1. 在 apache 网页解析文件中没有正确配置 cgi 文件解析,尤其注意 AddHandler cgi-script .cgi .plOptions Indexes ExecCGI 这两项。 <Directory /opt/bugzilla5> AddHandler cgi-script .cgi .pl Options Indexes ExecCGI DirectoryIndex index.cgi index.html index.html.var AllowOverride all Require all granted </Directory>
  2. 没有安装 mod_cgi.c 和 mod_cgid.c 模块 # 下载 apache 源码安装包 sudo wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.41.tar.bz2 -O /usr/local/httpd.tar.bz2 # 解压缩并删除压缩包文件 sudo tar -jxvf /usr/local/httpd.tar.bz2 -C /usr/local/httpd sudo rm /usr/local/httpd.tar.bz2 # 进入到 apache 源文件包中 cd /usr/local/httpd/modules/generators # 使用 apxs 对模块进行编译 sudo apxs -i -a -c mod_cgi.c sudo apxs -i -a -c mod_cgid.c # 修改输出文件的执行权限 sudo chmod 755 /usr/lib/apache2/modeles/mod_cgi.so sudo chmod 755 /usr/lib/apache2/modules/mod_cgid.so # 重启 apache2 sudo systemctl restart apache2

问题3:无法启动 apache2 排查方法

  1. 首先执行 apache2ctl configtest 查看配置文件是否存在语法问题。
  2. 如果配置文件没有语法文件并且问题还存在,则执行 apache2 -k start 查看输出信息,根据输出信息来排查解决。
  3. 还可以执行 systemctl status apache2 来查看错误信息从而定位问题。

问题4:apache2.conf: DefaultRuntimeDir must be a valid directory...

出现这种情况可能是因为没有导入 apache2 的环境变量,可通过以下命令导入环境变量:

代码语言:javascript复制
  source /etc/apache2/envvars

问题5:apache2: Could not reliably determine the server's fully qualified domain name...

这个问题不大,主要是因为在 apache2 配置文件中没有设置 ServerName。如果强迫症看不顺眼的话,可以进入到 apache2 安装目录,编辑 apache2.conf

代码语言:javascript复制
  sudo vim /etc/apache2/apache2.conf

在最后一行添加一项 ServerName 即可

代码语言:javascript复制
  ServerName localhost:80

问题6:could not bind to address [::]:80

出现这个问题说明你的 80 端口被占用了,可以有以下几种办法解决:

  1. 如果你的 apache 暂时没有使用到 80 端口的话,就将 /etc/apache2/sites-enabled 目录下的 000-default.conf 文件删了,然后再重启 apache2 即可 sudo rm /etc/apache2/sites-enabled/000-default.conf apache2ctl -k start
  2. 如果你系统中同时安装了 Nginx,并且 Nginx 暂不使用的话,只需将 Nginx 进程杀死即可: # 查看 nginx 进程 ps -ef | grep nginx # 杀死所有的 nginx 进程 sudo kill -9 <PID>
  3. 如果还有其他进程占用了 80 端口,可通过 netstat 命令查看并杀死相应的进程 PID: # 查看占用 80 端口的进程 netstat -tulnp | grep ":80" # 杀死该进程 sudo kill -9 <PID>

0 人点赞