Bugzilla 2.18 Installation @ Akadia

What is Bugzilla

Bugzilla is a bug- or issue-tracking system. Bug-tracking systems allow individual or groups of developers effectively to keep track of outstanding problems with their product. Most commercial defect-tracking software vendors at the time charged enormous licensing fees, and Bugzilla quickly became a favorite of the open-source crowd (with its genesis in the open-source browser project, Mozilla). It is now the de-facto standard defect-tracking system against which all others are measured.

Akadia's Extensions to Bugzilla

Bugzilla allows each user, with an access to the bug tracking system, that she/he can create other accounts. This is not desired, if you open Bugzilla against your customers. It's desired, that the Bugzilla Administrator is the only person, which can create such accounts. We changed the Templates and some CGI Perl scripts, to disallow this functionality. The most restrictive action is to disallow to execute the CGI scripts index.cgi and createaccount.cgi.

cd /usr/local/bugzilla
mv index.cgi index.cgi.OFF
mv createaccount.cgi createaccount.cgi.OFF
chmod 400 index.cgi.OFF
chmod 400 createaccount.cgi.OFF

Required Software

We tested the installation on the following environment:

  • Apache 2.0.54
  • MySQL 4.1.11 (Source Distribution)
  • Bugzilla 2.18

Perl Modules

Install the following Perl Modules from http://search.span.org with

perl Makefile.PL
make test
make install

-rw-r--r--    1 root     root        54413 2004-02-04 11:33 AppConfig-1.56.tar.gz
-rw-r--r--    1 root     root       131942 2004-10-03 11:30 Bit-Vector-6.4.tar.gz
-rw-r--r--    1 root     root      1843040 2005-05-10 10:21 bugzilla-2.18.tar.gz
-rw-r--r--    1 root     root        16789 2004-05-02 09:05 Carp-Clan-5.3.tar.gz
-rw-r--r--    1 root     root       225687 2005-05-05 22:16 CGI.pm-3.09.tar.gz
-rw-r--r--    1 root     root       516041 2004-01-14 16:10 Chart-2.3.tar.gz
-rw-r--r--    1 root     root       144980 2005-01-30 22:47 Compress-Zlib-1.34.tar.gz
-rw-r--r--    1 root     root        31931 2003-08-25 13:49 Data-Dumper-2.121.tar.gz
-rw-r--r--    1 root     root       206622 2004-10-03 11:31 Date-Calc-5.4.tar.gz
-rw-r--r--    1 root     root       116789 2005-04-27 02:14 DBD-mysql-2.9007.tar.gz
-rw-r--r--    1 root     root       378698 2005-03-14 18:03 DBI-1.48.tar.gz
-rw-r--r--    1 root     root        16855 2000-07-01 14:30 File-Spec-0.82.tar.gz
-rw-r--r--    1 root     root        31603 2005-02-22 22:42 File-Temp-0.16.tar.gz
-rw-r--r--    1 root     root       587617 2005-05-09 20:33 gd-2.0.33.tar.gz
-rw-r--r--    1 root     root       252706 2005-03-09 22:04 GD-2.23.tar.gz
-rw-r--r--    1 root     root       130020 2003-07-01 07:14 GDGraph-1.43.tar.gz
-rw-r--r--    1 root     root        97855 2002-12-06 21:23 GD-Graph3d-0.63.tar.gz
-rw-r--r--    1 root     root        64698 2003-06-19 03:10 GDTextUtil-0.86.tar.gz
-rw-r--r--    1 root     root        82304 2005-01-06 10:09 HTML-Parser-3.45.tar.gz
-rw-r--r--    1 root     root         7869 2004-12-30 08:47 HTML-Tagset-3.04.tar.gz
-rw-r--r--    1 root     root       312250 2004-01-07 13:47 Image-Info-1.16.tar.gz
-rw-r--r--    1 root     root       123479 2003-07-21 08:59 Image-Size-2.992.tar.gz
-rw-r--r--    1 root     root       234773 2004-12-11 16:48 libwww-perl-5.803.tar.gz
-rw-r--r--    1 root     root        64335 2004-08-21 04:34 libxml-perl-0.08.tar.gz
-rw-r--r--    1 root     root         2406 1997-02-26 19:21 Math-Trig-0.02.tar.gz
-rw-r--r--    1 root     root       385018 2005-01-20 22:24 MIME-tools-5.417.tar.gz
-rw-r--r--    1 root     root         9037 2004-07-17 20:06 PatchReader-0.9.5.tar.gz
-rw-r--r--    1 root     root       189159 2004-07-22 16:24 patchutils-0.2.30.tar.gz
-rw-r--r--    1 root     root        35023 2003-07-24 17:45 Pod-POM-0.17.tar.gz
-rw-r--r--    1 root     root       843175 2004-10-04 13:48 Template-Toolkit-2.14.tar.gz
-rw-r--r--    1 root     root         5523 2005-03-27 04:58 Test-Manifest-1.14.tar.gz
-rw-r--r--    1 root     root        17431 2005-05-05 00:47 Text-Autoformat-1.13.tar.gz
-rw-r--r--    1 root     root        20902 2003-05-07 11:46 Text-Reform-1.11.tar.gz
-rw-r--r--    1 root     root         7557 2001-09-30 07:17 Text-Tabs+Wrap-2001.0929.tar.gz
-rw-r--r--    1 root     root        23536 2005-03-08 00:53 Tie-DBI-1.01.tar.gz
-rw-r--r--    1 root     root        22366 2003-06-03 11:04 TimeDate-1.16.tar.gz
-rw-r--r--    1 root     root        96050 2004-11-05 15:21 URI-1.35.tar.gz
-rw-r--r--    1 root     root       116710 2003-07-29 00:54 XML-DOM-1.43.tar.gz
-rw-r--r--    1 root     root         3313 2001-06-26 15:34 XML-RegExp-0.03.tar.gz
-rw-r--r--    1 root     root        38586 2004-08-13 06:19 XML-RSS-1.05.tar.gz
-rw-r--r--    1 root     root        39832 2003-01-26 20:38 XML-XPath-1.13.tar.gz

Installation and Configuration

Apache 2.0.54

./configure --prefix=/usr/local/apache \
--enable-mods-shared=most \
--enable-ssl=shared \
--enable-mime-magic \
--enable-cern-meta \
--enable-proxy \
--enable-proxy-connect \
--enable-proxy-ftp \
--enable-proxy-http \
--enable-usertrack \
--enable-unique-id \

make install

cd /usr/local/apache
rm -rf logs
ln -s /var/log/httpd logs
cd /var/log
chown root:apache httpd
chmod 775 httpd

Edit the Configuration File httpd.conf:

You'll want to make sure that your web server will run any file with the .cgi extension as a CGI and not just display it. If you're using Apache that means uncommenting the following line in the httpd.conf file:

AddHandler cgi-script .cgi

With Apache you'll also want to make sure that within the httpd.conf file the line:

Options ExecCGI
AllowOverride Limit

Here is our full httpd.conf file:

ServerRoot "/usr/local/apache"
Listen 80
ExtendedStatus On
User apache
Group apache
ServerAdmin martin.zahn@akadia.com
ServerName venus.hsz.akadia.com
UseCanonicalName On
DocumentRoot "/usr/local/bugzilla"
<Directory />
    Options FollowSymLinks
    Options ExecCGI
    AllowOverride Limit
<Directory "/usr/local/bugzilla">
    Options Indexes FollowSymLinks
    Options ExecCGI
    AllowOverride Limit
    Order allow,deny
    Allow from all
DirectoryIndex index.html
AddHandler cgi-script .cgi


Find the detailed Installation here


You should untar the Bugzilla files into a directory that you're willing to make writable by the default web server user. You may decide to put the files in the main web space for your web server or perhaps in /usr/local/apache with a symbolic link in the web space that points to the Bugzilla directory.

mkdir /usr/local/bugzilla
cd /usr/local/bugzilla
gunzip bugzilla-2.18.tar.gz
tar xvf bugzilla-2.18.tar

Once all the files are in a web accessible directory, make that directory writable by your webserver's user. This is a temporary step until you run the post-install checksetup.pl script, which locks down your installation.

Lastly, you'll need to set up a symbolic link to /usr/bonsaitools/bin/perl for the correct location of your Perl executable (probably /usr/bin/perl). Otherwise you must hack all the .cgi files to change where they look for Perl. This can be done using the following Perl one-liner, but I suggest using the symlink approach to avoid upgrade hassles.

mkdir -p /usr/bonsaitools/bin
cd /usr/bonsaitools/bin
ln -s /usr/bin/perl perl

Setting Up the MySQL Database

After you've gotten all the software installed and working you're ready to start preparing the database for its life as the back end to a high quality bug tracker.

First, you'll want to fix MySQL permissions to allow access from Bugzilla. For the purpose of this Installation section, the Bugzilla username will be "bugs", and will have minimal permissions.

Begin by giving the MySQL root user a password. MySQL passwords are limited to 16 characters.

shell> mysql -u root mysql
mysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password');

shell> mysql --user=root --password='new_password' mysql

mysql> GRANT ALL PRIVILEGES ON *.* TO bugs@localhost

Next, we use an SQL GRANT command to create a "bugs" user, and grant sufficient permissions for checksetup.pl, which we'll use later, to work its magic. This also restricts the "bugs" user to operations within a database called "bugs", and only allows the account to connect from "localhost". Modify it to reflect your setup if you will be connecting from another machine or as a different user.

mysql> GRANT LOCK TABLES ON bugs.* TO bugs@localhost;
mysql> GRANT CREATE TEMPORARY TABLES ON bugs.* TO bugs@localhost;


Next, run the magic checksetup.pl script. This script is designed to make sure your MySQL database and other configuration options are consistent with the Bugzilla CGI files. It will make sure Bugzilla files and directories have reasonable permissions, set up the data directory, and create all the MySQL tables.

cd /usr/local/bugzilla

The first time you run it, it will create a file called localconfig.

This file contains a variety of settings you may need to tweak including how Bugzilla should connect to the MySQL database.

The connection settings include:

  • server's host: just use "localhost" if the MySQL server is local

  • database name: "bugs" if you're following these directions

  • MySQL username: "bugs" if you're following these directions

  • Password for the "bugs" MySQL account; (<bugs_password>) above

Once you are happy with the settings, su to the user your web server runs as, and re-run checksetup.pl.

cd /usr/local/bugzilla

On this second run, it will create the database and an administrator account for which you will be prompted to provide information. The checksetup.pl script is designed so that you can run it at any time without causing harm. You should run it after any upgrade to Bugzilla.

Checking perl modules ...
Checking for       AppConfig (v1.52)   ok: found v1.56
Checking for             CGI (v2.93)   ok: found v3.09
Checking for    Data::Dumper (any)     ok: found v2.121
Checking for    Date::Format (v2.21)   ok: found v2.22
Checking for             DBI (v1.36)   ok: found v1.48
Checking for      DBD::mysql (v2.1010) ok: found v2.9007
Checking for      File::Spec (v0.82)   ok: found v0.82
Checking for      File::Temp (any)     ok: found v0.16
Checking for        Template (v2.08)   ok: found v2.14
Checking for      Text::Wrap (v2001.0131) ok: found v2001.0929

The following Perl modules are optional:
Checking for              GD (v1.20)   ok: found v2.23
Checking for     Chart::Base (v1.0)    ok: found v2.3
Checking for     XML::Parser (any)     ok: found v2.31
Checking for       GD::Graph (any)     ok: found v1.43
Checking for GD::Text::Align (any)     ok: found v1.18
Checking for     PatchReader (v0.9.4)  ok: found v0.9.5

Checking user setup ...

Removing existing compiled templates ...
Precompiling templates ...
Checking for    MySQL Server (v3.23.41) ok: found v4.1.11-log

Populating duplicates table...

Optional Additional Configuration

Bug Graphs / The Whining Cron

As long as you installed the GD and Graph::Base Perl modules you might as well turn on the nifty Bugzilla bug reporting graphs. By now you have a fully functional Bugzilla, but what good are bugs if they're not annoying? To help make those bugs more annoying you can set up Bugzilla's automatic whining system to complain at engineers which leave their bugs in the NEW state without triaging them.

crontab -l
0 0 * * * cd /usr/local/bugzilla; ./collectstats.pl
5 0 * * * cd /usr/local/bugzilla; ./whineatnews.pl

Template Customisation

One of the large changes for 2.16 was the templatisation of the entire user-facing UI, using the Template Toolkit. Administrators can now configure the look and feel of Bugzilla without having to edit Perl files or face the nightmare of massive merge conflicts when they upgrade to a newer version in the future.

Copy all templates from /usr/local/bugzilla/template/en/default to /usr/local/bugzilla/template/en/custom

Templates in this directory structure automatically override any identically-named and identically-located templates in the default directory. The custom directory does not exist at first and must be created if you want to use it.

cd /usr/local/bugzilla/template/en/custom
ls -l

drwxr-x---   14 root     apache       4096 2005-05-10 09:53 ./
drwxr-x---    5 root     apache       4096 2005-05-10 08:53 ../
drwxr-x---    7 root     apache       4096 2005-01-15 21:24 account/
drwxr-x---    7 root     apache       4096 2005-01-15 21:24 admin/
drwxr-x---    3 root     apache       4096 2005-01-15 21:24 attachment/
drwxr-x---    7 root     apache       4096 2005-01-15 21:24 bug/
-rw-r-----    1 root     apache       4240 2003-06-23 20:01 config.js.tmpl
-rw-r-----    1 root     apache       5618 2003-06-23 20:01 config.rdf.tmpl
drwx------    2 root     apache       4096 2005-01-15 21:24 CVS/
-rw-r-----    1 root     apache      10654 2004-09-15 01:30 filterexceptions.pl
drwxr-x---    3 root     apache       4096 2005-01-15 21:24 flag/
drwxr-x---    3 root     apache       4096 2005-05-10 09:31 global/
-rw-r-----    1 root     apache       3392 2005-05-10 09:51 index.html.tmpl
drwxr-x---    3 root     apache       4096 2005-05-10 09:18 list/
drwxr-x---    3 root     apache       4096 2005-01-15 21:24 pages/
drwxr-x---    3 root     apache       4096 2005-05-10 09:41 reports/
drwxr-x---    3 root     apache       4096 2005-01-15 21:24 request/
drwxr-x---    3 root     apache       4096 2005-01-15 21:24 search/
-rw-r-----    1 root     apache       5282 2005-05-10 09:53 sidebar.xul.tmpl

More Information to Templatisation can be found on bugzilla.org: http://www.bugzilla.org/docs/2.18/html/cust-templates.html