SpamAssassin Upgrade Notes for Custom Installs AUTHOR: Kevin A. McGrail / kmcgrail@pccc.com As noted before, we rely heavily on a small subset of programs to work for our servers. This includes Apache, Perl, SpamAsasssin, and a few other items. Because of this, we are simply too paranoid to run with any sort of "out of the box" solution. This is the notes on how we upgraded from SA 3.1.X to 3.2.5 #GET ALL THE FILES mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Mail-SpamAssassin-3.2.5.tar.bz2 wget http://www.peregrinehw.com/downloads/SpamAssassin/Getopt-Long-2.34.tar.gz wget http://www.peregrinehw.com/downloads/SpamAssassin/Crypt-OpenSSL-Random-0.04.tar.gz wget http://www.peregrinehw.com/downloads/SpamAssassin/Crypt-OpenSSL-RSA-0.25.tar.gz wget http://www.peregrinehw.com/downloads/SpamAssassin/Storable-2.15.tar.gz wget http://www.peregrinehw.com/downloads/SpamAssassin/Crypt-OpenSSL-Bignum-0.04.tar.gz wget http://www.peregrinehw.com/downloads/SpamAssassin/Digest-SHA-5.45.tar.gz wget http://www.peregrinehw.com/downloads/SpamAssassin/Mail-DKIM-0.37.tar.gz # First, installed latest Razor Client v2.84 (and without requiring the taint patch) # Install Razor Agents v2.84 # http://razor.sourceforge.net/ perl -e 'if (require Razor2::Client::Version) { print "Razor Version is: $Razor2::Client::Version::VERSION\n"; exit 0;} else {exit 1;}' || echo 'Razor Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/razor-agents-2.84.tar.bz2 cd /usr/src tar jxvf /tmp/20070905SPAM/razor-agents-2.84.tar.bz2 cd razor-agents-2.84 perl Makefile.PL make test && make install #Create a Razor Client Identity #NOTE: Sometimes it puts these in /usr/local/ but I haven't figured out why... #SU TO YOUR USER TO CREATE A DEFAULT CONFIG FILE su -l -s /bin/bash spamd /usr/bin/razor-admin -create # -or- for MIMEDefang su -l -s /bin/bash defang /usr/bin/razor-admin -create #REGISTER AS A REPORTER WITH RANDOM USERNAME AND PASSWORD ASSIGNED /usr/bin/razor-admin -register #... Repeat register until successful # Install HTML-Tagset v3.03 perl -e 'if (require HTML::Tagset) { print "HTML Tagset Version is: $HTML::Tagset::VERSION\n"; exit 0;} else {exit 1;}' || echo 'HTML Tagset Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/apache/current/HTML-Tagset-3.03.tar.gz cd /usr/src tar zxvf /tmp/20070905SPAM/HTML-Tagset-3.03.tar.gz cd HTML-Tagset-3.03/ perl Makefile.PL make test && make install # Second, upgraded HTML Parser # HOMEPAGE: http://search.cpan.org/author/GAAS/ # # Install HTML-Parser v3.56 perl -e 'if (require HTML::Parser) { print "HTML Parser Version is: $HTML::Parser::VERSION\n"; exit 0;} else {exit 1;}' || echo 'HTML Parser Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/apache/current/HTML-Parser-3.56.tar.gz cd /usr/src tar zxvf /tmp/20070905SPAM/HTML-Parser-3.56.tar.gz cd HTML-Parser-3.56/ perl Makefile.PL # *INTERACTIVE for Perl 5.7 and greater* make test && make install # Third, Mail::SPF::Query is now legacy. Replaced with Mail::SPF. # Install Module::Build required by Mail::SPF. # # Install Module::Build v0.2808 # http://search.cpan.org/~kwilliams/Module-Build-0.2808/lib/Module/Build.pm # Having issues getting this to build? See Below *** perl -e 'if (require Module::Build) { print "Module Build Version is: $Module::Build::VERSION\n"; exit 0;} else {exit 1;}' || echo 'Module Build Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Module-Build-0.2808.tar.gz cd /usr/src tar zxvf /tmp/20070905SPAM/Module-Build-0.2808.tar.gz cd Module-Build-0.2808 perl Build.PL ./Build ./Build test ./Build install # Install version required by Mail::SPF prereqs perl -e 'if (require version) { print "version Version is: $version::VERSION\n"; exit 0;} else {exit 1;}' || echo 'version Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/version-0.7702.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/version-0.7702.tar.gz cd version-0.7702 perl Build.PL ./Build ./Build test ./Build install # Installed Net::IP (Required for latest Net::DNS) # http://search.cpan.org/~manu/Net-IP-1.25/ mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Net-IP-1.25.tar.gz cd /usr/src tar zxvf /tmp/20070905SPAM/Net-IP-1.25.tar.gz cd Net-IP-1.25 perl Makefile.PL make make test && make install # Install Digest HMAC v1.01 mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Digest-HMAC-1.01.tar.gz cd /usr/src tar zxvf /tmp/20070905SPAM/Digest-HMAC-1.01.tar.gz cd Digest-HMAC-1.01 perl Makefile.PL make make test make install # Upgraded to newest, non-developer release of Net::DNS # http://www.net-dns.org/ # # NOTE: I love this program and I don't envy all the small nuances they have to deal with to make a new version! mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Net-DNS-0.65.tar.gz cd /usr/src tar zxvf /tmp/20070905SPAM/Net-DNS-0.65.tar.gz cd Net-DNS-0.65 perl Makefile.PL --online-tests make # NOTE ABOUT MAKE TEST - the 01-resolver-file test requires file ownership. I added a chown line for this reason. chown root.root -R t/ make test && make install # Install Net-DNS-Resolver-Programmable required by Mail::SPF perl -e 'if (require Net::DNS::Resolver::Programmable) { print "Net DNS Resolver Programmable Version is: $Net::DNS::Resolver::Programmable::VERSION\n"; exit 0;} else {exit 1;}' || echo 'Net DNS Resolver Programmable Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Net-DNS-Resolver-Programmable-v0.003.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/Net-DNS-Resolver-Programmable-v0.003.tar.gz cd Net-DNS-Resolver-Programmable-v0.003 perl Build.PL ./Build ./Build test ./Build install # Install NetAddr-IP required by Mail::SPF perl -e 'if (require NetAddr::IP) { print "NetAddr IP Version is: $NetAddr::IP::VERSION\n"; exit 0;} else {exit 1;}' || echo 'NetAddr::IP Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/NetAddr-IP-4.044.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/NetAddr-IP-4.044.tar.gz cd NetAddr-IP-4.044/ perl Makefile.PL make test && make install # Install Scalar::Util required by Error perl -e 'if (require Scalar::Util) { print "Scalar::Util Version is: $Scalar::Util::VERSION\n"; exit 0;} else {exit 1;}' || echo 'Scalar::Util Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Scalar-List-Utils-1.19.tar.gz cd /usr/src tar zxvf /tmp/20070905SPAM/Scalar-List-Utils-1.19.tar.gz cd Scalar-List-Utils-1.19 perl Makefile.PL make test && make install # Install Error required by Mail::SPF # Currently, this is throwing an error for me when trying to compile it as of 9-5-2007. Backtracking to 0.15 works :-( perl -e 'if (require Error) { print "Error Version is: $Error::VERSION\n"; exit 0;} else {exit 1;}' || echo 'Error Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Error-0.17009.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/Error-0.17009.tar.gz cd Error-0.17009/ perl Build.PL ./Build ./Build test ./Build install # Install URI v1.35 mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/URI-1.35.tar.gz cd /usr/src tar zxvf /tmp/20070905SPAM/URI-1.35.tar.gz cd URI-1.35/ perl Makefile.PL make make test && make install # Install Mail::SPF # http://search.cpan.org/~jmehnle/Mail-SPF-v2.006/ perl -e 'if (require Mail::SPF) { print "Mail::SPF Version is: $Mail::SPF::VERSION\n"; exit 0;} else {exit 1;}' || echo 'Mail::SPF Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Mail-SPF-v2.006.tar.gz cd /usr/src tar zxvf /tmp/20070905SPAM/Mail-SPF-v2.006.tar.gz cd Mail-SPF-v2.006 perl Build.PL ./Build ./Build test ./Build install #Not Running Perl 5.8? Run perl -V to check. Maybe you need Storable?: #http://search.cpan.org/~ams/Storable-2.15/ perl -e 'if (require Storable) { print "Storable Version is: $Storable::VERSION\n"; exit 0;} else {exit 1;}' || echo 'Storable Not Present!' cd /usr/src tar zxvf /tmp/20070905SPAM/Storable-2.15.tar.gz cd Storable-2.15 perl Makefile.PL make test && make install # Updated to latest Getopt::Long # http://search.cpan.org/~jv/Getopt-Long-2.34/ cd /usr/src tar zxvf /tmp/20070905SPAM/Getopt-Long-2.34.tar.gz cd Getopt-Long-2.34/ perl Makefile.PL make test && make install # Install Crypt Random # # I use my own installation of OpenSSL so I needed to edit the Makefile.PL to get this to work. # I added -L/usr/local/ssl/lib/ to the LIBS and -I/usr/local/ssl/include to the INC #TEST IF PRESENT AND WHAT VERSION perl -e 'if (require Crypt::OpenSSL::Random) { print $Crypt::OpenSSL::Random::VERSION; exit 0;} else {exit 1;}' || echo 'Not Present!' cd /usr/src tar zxvf /tmp/20070905SPAM/Crypt-OpenSSL-Random-0.04.tar.gz cd Crypt-OpenSSL-Random-0.04 perl Makefile.PL make test && make install # Install Crypt RSA # # I use my own installation of OpenSSL so I needed to edit the Makefile.PL to get this to work. # I added -L/usr/local/ssl/lib/ to the LIBS and -I/usr/local/ssl/include to the INC cd /usr/src tar zxvf /tmp/20070905SPAM/Crypt-OpenSSL-RSA-0.25.tar.gz cd Crypt-OpenSSL-RSA-0.25 perl Makefile.PL make test && make install # Install Bignum # # I use my own installation of OpenSSL so I needed to edit the Makefile.PL to get this to work. # I added -L/usr/local/ssl/lib/ to the LIBS and -I/usr/local/ssl/include to the INC cd /usr/src tar zxvf /tmp/20070905SPAM/Crypt-OpenSSL-Bignum-0.04.tar.gz cd Crypt-OpenSSL-Bignum-0.04 perl Makefile.PL make test && make install # Install Digest SHA cd /usr/src tar zxvf /tmp/20070905SPAM/Digest-SHA-5.45.tar.gz cd Digest-SHA-5.45 perl Makefile.PL make test && make install # Install Digest SHA1 v2.01 mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Digest-SHA1-2.01.tar.gz cd /usr/src tar zxvf /tmp/20070905SPAM/Digest-SHA1-2.01.tar.gz cd Digest-SHA1-2.01 perl Makefile.PL make make test && make install # Install libwww-perl v5.69 mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/libwww-perl-5.69.tar.gz cd /usr/src tar zxvf /tmp/20070905SPAM/libwww-perl-5.69.tar.gz cd libwww-perl-5.69/ perl Makefile.PL -n make make test && make install # Install TimeDate *PREREQ FOR MAILTOOLS* # http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/TimeDate-1.19.tar.gz #NOTE TIMEDATE DOESN'T CURRENTLY INCLUDE A VALID VERSION perl -e 'if (require Date::Format) { print "TimeDate Version is: $Date::Format::VERSION\n"; exit 0;} else {exit 1;}' || echo 'TimeDate Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/TimeDate-1.19.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/TimeDate-1.19.tar.gz cd TimeDate-1.19/ perl Makefile.PL make test && make install # Install Test-Simple *PREREQ FOR TEST-POD* # http://search.cpan.org/CPAN/authors/id/M/MS/MSCHWERN/Test-Simple-0.94.tar.gz perl -e 'if (require Test::Simple) { print "Test::Simple Version is: $Test::Simple::VERSION\n"; exit 0;} else {exit 1;}' || echo 'Test-Simple Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Test-Simple-0.94.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/Test-Simple-0.94.tar.gz cd Test-Simple-0.94/ perl Makefile.PL make test && make install # Install Pod-Escapes *PREREQ FOR POD-SIMPLE* # http://search.cpan.org/CPAN/authors/id/S/SB/SBURKE/Pod-Escapes-1.04.tar.gz perl -e 'if (require Pod::Escapes) { print "Pod::Escapes Version is: $Pod::Escapes::VERSION\n"; exit 0;} else {exit 1;}' || echo 'Pod-Escapes Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Pod-Escapes-1.04.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/Pod-Escapes-1.04.tar.gz cd Pod-Escapes-1.04/ perl Makefile.PL make test && make install # Install Pod-Simple *PREREQ FOR TEST-POD* # http://search.cpan.org/CPAN/authors/id/A/AR/ARANDAL/Pod-Simple-3.08.tar.gz perl -e 'if (require Pod::Simple) { print "Pod::Simple Version is: $Pod::Simple::VERSION\n"; exit 0;} else {exit 1;}' || echo 'Pod-Simple Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Pod-Simple-3.08.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/Pod-Simple-3.08.tar.gz cd Pod-Simple-3.08/ perl Makefile.PL make test && make install # Install Test-Pod *PREREQ FOR MAILTOOLS* # http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/Test-Pod-1.40.tar.gz perl -e 'if (require Test::Pod) { print "Test::Pod Version is: $Test::Pod::VERSION\n"; exit 0;} else {exit 1;}' || echo 'Test-Pod Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Test-Pod-1.40.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/Test-Pod-1.40.tar.gz cd Test-Pod-1.40/ perl Makefile.PL make test && make install # Install MailTools *PREREQ FOR MAIL::DKIM* # http://search.cpan.org/CPAN/authors/id/M/MA/MARKOV/MailTools-2.04.tar.gz perl -e 'if (require Mail::Util) { print "MailTools Version is: $Mail::Util::VERSION\n"; exit 0;} else {exit 1;}' || echo 'MailTools Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/MailTools-2.04.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/MailTools-2.04.tar.gz cd MailTools-2.04/ perl Makefile.PL make test && make install # Install Mail::DKIM perl -e 'if (require Mail::DKIM) { print "Mail::DKIM Version is: $Mail::DKIM::VERSION\n"; exit 0;} else {exit 1;}' || echo 'Mail::DKIM Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Mail-DKIM-0.39.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/Mail-DKIM-0.39.tar.gz cd Mail-DKIM-0.39 perl Makefile.PL make test && make install # Install IO::Zlib perl -e 'if (require IO::Zlib) { print "IO::Zlib Version is: $IO::Zlib\n"; exit 0;} else {exit 1;}' || echo 'IO::Zlib Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/IO-Zlib-1.04.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/IO-Zlib-1.04.tar.gz cd IO-Zlib-1.04/ perl Makefile.PL make test && make install # Install IO::String perl -e 'if (require IO::String) { print "IO::String Version is: $IO::String\n"; exit 0;} else {exit 1;}' || echo 'IO::String Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/IO-String-1.08.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/IO-String-1.08.tar.gz cd IO-String-1.08/ perl Makefile.PL make test && make install # Install Archive::Tar perl -e 'if (require Archive::Tar) { print "Archive::Tar Version is: $Archive::Tar\n"; exit 0;} else {exit 1;}' || echo 'Archive::Tar Not Present!' mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/Archive-Tar-1.36.tar.gz cd /usr/src/ tar zxvf /tmp/20070905SPAM/Archive-Tar-1.36.tar.gz cd Archive-Tar-1.36/ perl Makefile.PL make test && make install #Install GeoIP/Geo::IP mkdir /tmp/20070905SPAM cd /tmp/20070905SPAM/ wget http://www.peregrinehw.com/downloads/SpamAssassin/GeoIP-1.4.8.tar.gz wget http://www.peregrinehw.com/downloads/SpamAssassin/Geo-IP-1.40.tar.gz cd /usr/src tar zxvf /tmp/20070905SPAM/GeoIP-1.4.8.tar.gz cd GeoIP-1.4.8 ./configure make make install mkdir /usr/local/share/GeoIP cd /usr/local/share/GeoIP wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz gunzip GeoIP.dat.gz gunzip GeoLiteCity.dat.gz cd /usr/src tar zxvf /tmp/20070905SPAM/Geo-IP-1.40.tar.gz cd Geo-IP-1.40 perl Makefile make test && make install #Install SpamAssassin 3.2.X cd /usr/src tar jxvf /tmp/20070905SPAM/Mail-SpamAssassin-3.2.5.tar.bz2 cd Mail-SpamAssassin-3.2.5/ perl Makefile.PL #*INTERACTIVE* Note: I usually say yes, run the tests # #NOTES ON DEPENDENCIES: # Mail::SPF::Query is replaced by Mail::SPF - Ignore # Mail::DomainKeys is replaced by Mail::DKIM - Ignore make #NOTE: BEFORE running the tests, you should cd t and copy config.dist to config and edit the options to your tastes. # You might need to enter some user information for databases and I typically configure run_net_tests=y at a minimum make test #NOTE: You may need to run the make test more than once as some of the tests, like Razor, seem to fail the first # time they are run. make install # # At this point, you have finished installing the programs and you are ready to start dealing with the configuration changes. The configuration changes can be a bit daunting but in this case I will be documenting a real-world machine running perl 5.6.1, Mail::SpamAssassin 3.0.4 & MIMEDefang 2.39. We are running SpamD/SpamC because MIMEDefang is not performing our SpamAssassin tests. I'll try and document the problems and solutions needed for this configuration to help others. Step 1 will be to upgrade to a more recent MIMEDefang because v2.63 of MIMEDefang was released with several tweaks for newer versions of SpamAssassin. We cover MIMEDefang at http://www.pccc.com/downloads/MIMEDefang/. Step 2 was to move all the old rules out of /etc/mail/spamassassin and make sure I was running all good rules for my current version. There is no magic to this step and it is quite difficult. If you would like a list of rules I am running on a specific version, I will do my best to respond to requests for this information via email. I also use ImageInfo, PDFInfo, TextCat, DomainKeys, & SPF. After I got all my rules and plugins working, I ran spamassassin -d --lint just to make sure everything was ok! Step 3 was to convert Bayes, SQL and AWL to SQL instead of DB Files. I have found that using SQL is more effective than using DB Files for data. To use a database for SpamAssassin, create a database called spamassassin and configure SpamAssassin to use it /usr/local/mysql/bin/mysqladmin -p create spamassassin mysql -p GRANT ALL PRIVILEGES ON spamassassin.* TO spamassassin identified by ''; quit #ran make test, got lots of errors. Figured it doesn't make the tables automatically # #Fixed by adding the tables. Used the default tables that SpamAssassin includes SQL format information to create: mysql -p spamassassin < /usr/src/Mail-SpamAssassin-3.2.5/sql/bayes_mysql.sql mysql -p spamassassin < /usr/src/Mail-SpamAssassin-3.2.5/sql/awl_mysql.sql mysql -p spamassassin < /usr/src/Mail-SpamAssassin-3.2.5/sql/userpref_mysql.sql #For MIMEDefang, I've edited the /etc/mail/sa-mimedefang.cf (and deleted other local.cf and sa-mimedefang.cf in /etc/mail/spamassassin). I then modified my mimedefang filter minorly: use Mail::SpamAssassin::SQLBasedAddrList; my $awl = Mail::SpamAssassin::SQLBasedAddrList->new(); #This allowed me to use the AWL via mysql. I know DB, etc. might be faster but I like mysql's stability and ability to run #without negatively impacting server performance unexpectedly. Seems to be working fine so far! #NOTE for those using SPAMD/SPAMC & Procmail: I use SPAMDOPTIONS="-d -m2 -q -x -u spamd --round-robin" The round-robin was needed because the new childing spawning was causing issues. This option enabled the old spawning method and I have not revisited if it is fixed. *** Had a lot of problems getting Module::Build to install on RH7.3 Problem 1: Weird version string issues... Checking whether your kit is complete... Looks good Checking prerequisites... Version string '1.14 ' contains invalid data; ignoring: ' ' at (eval 2) line 233, line 3. Version string '1.28 ' contains invalid data; ignoring: ' ' at (eval 2) line 233, line 5. Version string '1.28 ' contains invalid data; ignoring: ' ' at (eval 2) line 233, line 5. * Optional prerequisite ExtUtils::CBuilder is not installed * Optional prerequisite Module::Signature is not installed * Optional prerequisite ExtUtils::ParseXS is not installed * Optional prerequisite Pod::Readme is not installed * Optional prerequisite Archive::Tar is not installed * Optional prerequisite version is not installedChecking whether your kit is complete... Looks good Solution: Upgrading to ExtUtils-MakeMaker-6.30 from ExtUtils-MakeMaker-6.05 fixed the version issues above. Problem 2: Continual test problems with t/help, t/mbyaml & t/tilde. Solution: Upgrading to Test-Harness-2.64 from the default with Perl 5.6.1 fixed this. *** Also had a lot of issues with IO-Zlib Problem 3: Continual test problems with t/uncomp1 in IO-Zlib Solution: Reverted to version 1.04. Still not fixed as of version 1.09! Might be a bug in Compress-Zlib. UPDATE: 2009-05-21 - Investigating the Compress-Zlib issue, I still find that using IO-Compress-2.019, Compress-Raw-Bzip2-2.019 & Compress-Raw-Zlib-2.019 does not allow make test with v1.09 to work.