Follow the instructions below to install Bugzilla on Microsoft Windows. Bugzilla is an open-source project management and issue tracking program, commonly called a “bugtracker”.
UPDATE 2016/03/29 – Someone asked a question on Stack Overflow that referenced these instructions, saying that it wasn’t possible to file a bug with an attachment after installation. Evidently this problem was fixed by creating a directory named “tmp” within the xampp directory.
UPDATE 2017/01/27 – I ran the old instructions against a fresh Windows 7 machine, and they no longer worked correctly. Most of these problems seemed to be related to the package management system of the version of Perl bundled with XAMPP. This problem can be worked around by installing a different version of Perl separately. I have amended the steps accordingly.
UPDATE 2018/01/18 – In response to frequent, frequently accurate, and frequently irate complaints that these instructions don’t work, I have run through them again, this time on a Windows 10 machine. Some changes were again necessary, but I was ultimately able to get Bugzilla installed and working. Nothing lasts forever, friends!
1. Download XAMPP. XAMPP is a convenient bundle of software packages (sometimes known as a “solution stack”) that are frequently used to run web applications, including the Apache web server, the MySQL/MariaDB database, and the PHP programming language. As of this writing, the latest version is available for download at the URL “https://www.apachefriends.org/index.html.
2. Install XAMPP. Follow the prompts. When prompted with a list of components to be installed, deactivate the checkbox for Perl to specify that it should not be installed. Otherwise, accept the defaults. During the installation process, take note of the locations to which its various components are installed, as well as any other information specified during the install process, such as database names, users, and passwords.
3. Download Strawberry Perl from “http://strawberryperl.com/” and install it. (Strawberry Perl must be installed separately from XAMPP because the version installed through XAMPP doesn’t seem to be configured quite correctly.)
4. Locate the directory containing the executable program for the Perl (perhaps at “C:\Strawberry\perl\bin\”) and add it to the PATH environment variable.
5. Download MinGW-W64, available as of this writing from “https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/“, and install it. Locate its “bin” directory and add it to the PATH environment variable. Within the “bin” directory, locate the file “mingw32-make.exe”, make a copy of it, and rename that copy to “make.exe”. Just in case, make another copy and name this one “dmake.exe”. (This is necessary because the Perl package installer needs to use the “make” build utility, a staple of the Linux programming environment but a major sticking point for cross-platform compatibility.)
6. Disable any web server programs other than Apache that might already be running. Specifically, you might need to stop the “World Wide Web Publishing Service” (IIS) via the Services control panel (which can be accessed by running “services.msc”).
7. Start the XAMPP Control Panel application. Start the Apache and MySQL applications by clicking the corresponding Start buttons.
8. Verify that Apache is running by opening a web browser and navigating to “http://localhost“. The XAMPP demo page should be displayed.
9. Download Bugzilla. As of this writing, the latest version is available for download as archive files at the URL “https://www.bugzilla.org/download/“. Extract the contents of the archive file to a convenient location. For Windows, it is recommended that Bugzilla be extracted to “C:\bugzilla\”.
10. Navigate to Apache’s “httpd.conf” file (perhaps at “C:\xampp\apache\conf\”), open it in a text editor, locate the element starting with the line “IfModule alias_module” within it, add the following text within that element, and save the changes.
Alias "/bugzilla/" "C:/bugzilla/" ScriptInterpreterSource Registry-Strict Options +ExecCGI +FollowSymLinks DirectoryIndex index.cgi index.html AllowOverride Limit FileInfo Indexes Options Require all granted
11. Locate the three files named “.htaccess” for Bugzilla in its root directory (perhaps “C:\bugzilla”), in the “data” subdirectory of the root directory, and in the “assets” subdirectory of the “data” directory. Open each file in a text editor. Change any lines starting with “Require all denied” to “Deny from All”, and change any lines starting with “Require all granted” to “Allow from all”. Save the changes. (Presumably this nasty hack could be avoided by changing the configuration somehow, but as of this writing I don’t know how.)
12. Still on the XAMPP Control Panel, click the Admin button for MySQL. The PHPMyAdmin page for the database will be loaded in a web browser window.
13. On the PHPMyAdmin page for the MySQL server, click the “User accounts” tab, then click the “Add user account” link. On the “Add user” page, in the “User name” field, enter the value “bugs”, select the value “Local” in the “Host” select box, enter a password in the next two fields, and then activate the “Create database with same name and grant all privileges” checkbox. Click the Go button at the bottom of the page to create the new user and database named “bugs”.
14. Open a command prompt, navigate to the Bugzilla directory (perhaps at “C:\bugzilla\”), and run the command “perl checksetup.pl”. The program will run, and eventually display a list of Perl modules that must be installed. Install the missing modules by entering each of the install commands listed. You should also install the packages “Chart”, “Template-GD”, and “DBD-mysql”. Alternatively, you can run
“perl.exe install-module.pl –all”, but this may take a very long time to complete.
15. Once all the missing Perl modules have been installed, run “checksetup.pl” again. This time, a message will be displayed saying that the file “./localconfig” should be edited. Open the localconfig file in a text editor, locate the line starting with “$db_pass”, substitute the password for the “bugs” user specified in the previous step between the quotes, and save the changes.
16. Run “checksetup.pl” once again. This time, the Bugzilla application and database will be initialized. Enter an email address, name, and password for the administrator user when prompted.
17. Within the Bugzilla directory, open the file “index.cgi” in a text editor and change the first line to reference the path of the actual Perl installation, perhaps “#!/Strawberry/perl/bin/perl.exe -T”.
18. For every other .cgi file in the Bugzilla directory (and perhaps its subdirectories), repeat the previous step to change the path to Perl. For sanity’s sake, it is recommended that an automated tool (for example, Notepad++) be used to do this task.
19. Back on the XAMPP Control Panel, restart Apache by clicking the Stop button, then the Start button.
20. Back at the command prompt, run “perl testserver.pl http://localhost/bugzilla/. Several tests will be run. Verify that they all complete with a “TEST-OK” status.
21. Open a web browser and navigate to “http://localhost/bugzilla/index.cgi“. Verify that the Bugzilla page appears as expected.
22. If desired, log in to Bugzilla as the administrator, submit a test bug report, search for it, and verify that it shows up. It might also be wise to better secure the installed MySQL service at this time, but that is left as an exercise for the reader.
23. (Previous versions of these instructions included the following step. I’m not sure if it’s still necessary, but I’d hate to throw it away in case I need it later.) Open the Windows Registry Editory (perhaps by running “regedit”) and create a new key at “HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command” whose value is the complete path of the Perl executable followed by the “-T” parameter (for example, “C:\Strawberry\perl\bin\perl.exe -T”). (Note that he first three levels of the key will be created with by selecting “Edit – New – Key” from the main menu bar, while the lowest level, “Command”, will instead be created with the “Edit – New – String Value” item.)