2.2. Win32 (Win98+/NT/2K) Installation

These directions have not been extensively tested. We need testers! Please try these out and post any changes to the newsgroup.

2.2.1. Win32 Installation: Step-by-step

Note: You should be familiar with, and cross-reference, the UNIX README while performing your Win32 installation. Unfortunately, Win32 directions are not yet as detailed as those for UNIX.

The most critical difference for Win32 users is the lack of support for a crypt() function in MySQL for Windows. It does not have it! All ENCRYPT statements must be modified.

  1. Install Apache Web Server for Windows.

    Note: You may also use Internet Information Server or Personal Web Server for this purpose. However, setup is slightly more difficult. If ActivePerl doesn't seem to handle your file associations correctly (for .cgi and .pl files), please consult the FAQ, in the "Win32" section.

    If you are going to use IIS, if on Windows NT you must be updated to at least Service Pack 4.

  2. Install ActivePerl

    Please also check the following links to fully understand the status of ActivePerl on Win32: Perl Porting, and Hixie Click Here

  3. Use ppm from your perl\bin directory to install the following packs: DBI, DBD-Mysql, TimeDate, Chart, Date-Calc, Date-Manip, and GD. You may need to extract them from .zip format using Winzip or other unzip program first. These additional ppm modules can be downloaded from ActiveState.

    The syntax for ppm is: C:> ppm install <module>.ppd

    You can find ActiveState ppm modules at http://www.activestate.com/PPMPackages/5.6plus

  4. Download and install the Windows GNU tools from www.cygwin.com. Make sure the GNU utilities are in your $PATH.

  5. Install MySQL for NT.

    Note: Your configuration file for MySQL must be named C:\MY.CNF.

  6. Setup MySQL

    1. C:> C:\mysql\bin\mysql -u root mysql

    2. mysql> DELETE FROM user WHERE Host='localhost' AND User='';

    3. mysql> UPDATE user SET Password=PASSWORD ('new_password') WHERE user='root';

    4. mysql> GRANT SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER, CREATE, DROP, REFERENCES ON bugs.* to bugs@localhost IDENTIFIED BY 'bugs_password';

    5. mysql> FLUSH PRIVILEGES;

    6. mysql> create database bugs;

    7. mysql> exit

    8. C:> C:\mysql\bin\mysqladmin -u root -p reload

  7. Configure Bugzilla. For Win32, this involves editing "defparams.pl" and "localconfig" to taste. Running "checksetup.pl" should create localconfig for you. Note that getgrnam() doesn't work, and should be deleted. Change this line: "my $webservergid = getgrnam($my_webservergroup); " to "my $webservergid = $my_webservergroup; "

  8. Note: There are several alternatives to Sendmail that will work on Win32. The one mentioned here is a suggestion, not a requirement. Some other mail packages that can work include BLAT, Windmail, Mercury Sendmail, and the CPAN Net::SMTP Perl module (available in .ppm). Every option requires some hacking of the Perl scripts for Bugzilla to make it work. The option here simply requires the least.

    Download NTsendmail, available from www.ntsendmail.com. In order for it to work, you must set up some new environment variables (detailed on the ntsendmail home page). Figuring out where to put those variables is left as an exercise for the reader. You must have a "real" mail server which allows you to relay off it in your $ENV{"NTsendmail"} (which you should probably place in globals.pl)

    Once downloaded and installed, modify all open(SENDMAIL) calls to open "| c:\ntsendmail\ntsendmail -t" instead of "|/usr/lib/sendmail -t".

    Note: We need someone to test this and make sure this works as advertised.

  9. Modify globals.pl and CGI.pl to remove the word "encrypt".

    Note: I'm not sure this is all that is involved to remove crypt. Any NT Bugzilla hackers want to pipe up?

  10. Change all references to "processmail" to "processmail.pl" in all files, and rename "processmail" to "processmail.pl"

    Note: I really think this may be a change we want to make for main-tree Bugzilla. It's painless for the UNIX folks, and will make the Win32 people happier.

  11. Modify the path to perl on the first line (#!) of all files to point to your Perl installation, and add "perl" to the beginning of all Perl system calls that use a perl script as an argument. This may take you a while. There is a "setperl.pl" utility to speed part of this procedure, available in the "Patches and Utilities" section of The Bugzilla Guide.

  12. In processmail.pl, add "binmode(HANDLE)" before all read() calls. This may not be necessary, but in some cases the read() under Win32 doesn't count the EOL's without using a binary read().

2.2.2. Additional Windows Tips

Tip: From Andrew Pearson:

"You can make Bugzilla work with Personal Web Server for Windows 98 and higher, as well as for IIS 4.0. Microsoft has information available at http://support.microsoft.com/support/kb/articles/Q231/9/98.ASP

Basically you need to add two String Keys in the registry at the following location:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ScriptMap

The keys should be called ".pl" and ".cgi", and both should have a value something like: c:/perl/bin/perl.exe "%s" "%s"

The KB article only talks about .pl, but it goes into more detail and provides a perl test script.

Tip: "Brian" had this to add, about upgrading to Bugzilla 2.12 from previous versions:

Hi - I am updating bugzilla to 2.12 so I can tell you what I did (after I deleted the current dir and copied the files in).

In checksetup.pl, I did the following...

  1. my $webservergid = getgrnam($my_webservergroup);
    	      

    to

    my $webservergid = 'Administrators'		
    	      
  2. I then ran checksetup.pl

  3. I removed all the encrypt()

    Example 2-3. Removing encrypt() for Windows NT installations

    Replace this:
    SendSQL("SELECT encrypt(" . SqlQuote($enteredpwd) . ", " .
        SqlQuote(substr($realcryptpwd, 0, 2)) . ")");
    my $enteredcryptpwd = FetchOneColumn();
    		    
    with this:
    my $enteredcryptpwd = $enteredpwd
    		    
    in cgi.pl.

  4. I renamed processmail to processmail.pl

  5. I altered the sendmail statements to windmail:
      
    open SENDMAIL, "|\"C:/General/Web/tools/Windmail 4.0 Beta/windmail\" -t > mail.log";
    		

    The quotes around the dir is for the spaces. mail.log is for the output

Tip: This was some late breaking information from Jan Evert. Sorry for the lack of formatting.

I'm busy installing bugzilla on a WinNT machine and I thought I'd notify you
at this moment of the commments I have to section 2.2.1 of the bugzilla
guide (at http://www.trilobyte.net/barnsons/html/).

Step 1:
I've used apache, installation is really straightforward.
After reading the Unix installation instructions, I found that it is
necessary to add the ExecCGI option to the bugzilla directory. Also the
'AddHandler' line for .cgi is by default commented out.

Step 3: although just a detail, 'ppm install <module%gt;' will also work
(wihtout .ppd). And, it can also download these automatically from
ActiveState.

Step 4: although I have cygwin installed, it seems that it is not necessary.
On my machine cygwin is not in the PATH and everything seems to work as
expected.
However, I've not used everything yet.

Step 6: the 'bugs_password' given in SQL command d needs to be edited into
localconfig later on (Step 7) if the password is not empty. I've also edited
it into globals.pl, but I'm not sure that is needed. In both places, the
variable is named db_pass.

Step 8: all the sendmail replacements mentioned are not as simple as
described there. Since I am not familiar (yet) with perl, I don't have any
mail working yet.

Step 9: in globals.pl the encrypt() call can be replaced by just the
unencrypted password. In CGI.pl, the complete SQL command can be removed.

Step 11: I've only changed the #! lines in *.cgi. I haven't noticed problems
with the system() call yet.
There seem to be only four system() called programs: processmail.pl (handled
by step 10), syncshadowdb (which should probably get the same treatment as
processmail.pl), diff and mysqldump. The last one is only needed with the
shadowdb feature (which I don't use).

There seems to be one step missing: copying the bugzilla files somehwere
that apache can serve them.

Just noticed the updated guide... Brian's comment is new. His first comment
will work, but opens up a huge security hole.