Stefan,

> I'm in the progress of setting up a new Server with amavisd-new and
> spamassassin. I like to run the recent versions of this programms, but
> therefore I need some perl modules from cpan (e.g. IP::Country::Fast),
> because they are not in the repository of my distribution (SLES 11).
> The guy who installed these modules, installed them in /usr/local/perl/
> and they should be available in perl:
> # perl -V
> Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
> (...)
>   %ENV:
>     PERL5LIB="/usr/local/perl/lib:/usr/local/perl/lib/arch"
>   @INC:
>     /usr/local/perl/lib
>     /usr/local/perl/lib/arch
>     /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi
>     /usr/lib/perl5/5.10.0
>     /usr/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi
>     /usr/lib/perl5/site_perl/5.10.0
>     /usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi
>     /usr/lib/perl5/vendor_perl/5.10.0
>     /usr/lib/perl5/vendor_perl
>
> # perl -we 'use IP::Country::Fast; print $IP::Country::Fast::VERSION,"\n"'
> 604.001
>
> But spamassassin (and amavisd) doesn't find the additional modules.
>
> [9427] dbg: metadata: failed to load 'IP::Country::Fast', skipping (Can't
> locate IP/Country/Fast.pm in @INC (@INC contains: lib
> /usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi
> /usr/lib/perl5/vendor_perl/5.10.0
> /usr/lib/perl5/5.10.0/x86_64-linux-thread- multi /usr/lib/perl5/5.10.0
> /usr/lib/perl5/site_perl/5.10.0/x86_64-linux- thread-multi
> /usr/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl) at
> /usr/lib/perl5/vendor_perl/5.10.0/Mail/SpamAssassin/Plugin/RelayCountry.pm
> line 68.

amavisd does not modify @INC nor use the 'use lib' pragma/module.

>   %ENV:
>     PERL5LIB="/usr/local/perl/lib:/usr/local/perl/lib/arch"

Note that amavisd runs in taint mode, so this will be ignored by perl
according to its perlrun documentation:


PERL5LIB

A list of directories in which to look for Perl library files before looking 
in the standard library and the current directory. Any architecture-specific 
directories under the specified locations are automatically included if they 
exist. If PERL5LIB is not defined, PERLLIB is used. Directories are separated 
(like in PATH) by a colon on unixish platforms and by a semicolon on Windows 
(the proper path separator being given by the command perl -V:path_sep). 

When running taint checks (either because the program was running setuid or 
setgid, or the -T switch was used), neither variable is used. The program 
should instead say:
  use lib "/my/directory";


> My question is now: How can I tell spamassassin to use the right (modified)
> @INC array?

It would be simplest to install missing modules in one of the
perl-default directories, such as /usr/lib/perl5/site_perl/5.10.0/ .
Or try adding:  use lib "your-directory"  at the start of file amavisd.

  Mark

Reply via email to