Bugzilla Quick Start Guide 
==========================
(or, how to get Bugzilla up and running in 10 steps)
Christian Reis <kiko@async.com.br>

This express installation guide is for "normal" Bugzilla installations,
which means a Linux or Unix system on which Apache, Perl, MySQL and
Sendmail are available. For other configurations, please see Section 4
of the Bugzilla Guide in the docs/ directory. 

1. Decide from which URL and directory under your webserver root you
   will be serving the Bugzilla webpages from.
   
2. Unpack distribution into the chosen directory (there is no copying or
   installation involved). 

3. Run ./checksetup.pl, look for unsolved requirements, install them.
   You can run checksetup as many times as necessary to check if
   everything required is installed.

   This will usually include assorted Perl modules, MySQL and sendmail.

   After a successful dependency check, checksetup should complain that
   localconfig needs to be edited.

4. Edit the localconfig file, in particular the $webservergroup and 
   $db_* variables. In particular, $db_name and $db_user will define
   your database setup in step 5.

   If you want to change platforms, operating systems, severities and
   priorities, this can also be done in localconfig at this time.

   You should also update localconfig.js to reflect these changes. This
   includes setting the URL you chose in step 1 as the 'bugzilla' JS
   variable.

5. Using the name you provided as $db_name above, create a MySQL database
   for Bugzilla. You should also create a user permission for the name
   supplied as $db_user with read/write access to that database.

   If you are not familiar with MySQL permissions, it's a good idea to
   use the mysql_setpermission script that is installed with the MySQL
   distribution, and be sure to read section 4.1.6 in the Bugzilla Guide.

6. Run checksetup.pl once more; if all goes well, it should set up the
   Bugzilla database for you. If not, move back to step 5.

   checksetup.pl should ask you, this time, for the administrator's
   email address and password. These will be used for the initial
   Bugzilla administrator account.

7. Configure Apache (or install and configure, if you don't have it up
   yet) to point to the Bugzilla directory. You should enable and
   activate mod_cgi, and add the configuration entries
    
        Options +ExecCGI
        AllowOverride Limit 
        DirectoryIndex index.cgi
        
   to your Bugzilla <Directory> block. You may also need
   
        AddHandler cgi-script .cgi
        
   if you don't have that in your Apache configuration file yet.

8. Visit the URL you chose for Bugzilla. Your browser should display the
   default Bugzilla home page. You should then log in as the
   administrator by following the "Log in" link and supplying the
   account information you provided in step 6.

9. Scroll to the bottom of the page after logging in, and select
   "parameters". Set up the relevant parameters for your local setup. 

   See section 4.2 of the Bugzilla Guide for a in-depth description of
   some of the configuration parameters available.

10. That's it. If anything unexpected comes up:

    - read the error message carefully,
    - backtrack through the steps above, 
    - check the official installation guide, which is section 4 in the
      Bugzilla Guide, included in the docs/ directory in various
      formats.

Support and installation questions should be directed to the
mozilla-webtools@mozilla.org mailing list -- don't write to the
developer mailing list: your post *will* be ignored if you do.

Further support information is at http://www.bugzilla.org/discussion.html

