You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@spamassassin.apache.org by Stefan Jakobs <st...@rus.uni-stuttgart.de> on 2009/06/09 18:02:19 UTC

spamassassin doesn't use modified @INC

Hello list,

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.

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

Greetings
Stefan

Re: spamassassin doesn't use modified @INC

Posted by Mark Martinec <Ma...@ijs.si>.
Stefan,

> > 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.
>
> I added
> use lib '/usr/local/perl/lib';
> to /etc/amavisd.conf and it seams to work. Are there any disadvantages in
> placing the use lib pragma there instead of in amavisd?

That would be alright, if it works for you.

The amavisd.conf is loaded slightly later than the first
pass of main initialization, but apparently early enough
for your needs.

  Mark

Re: spamassassin doesn't use modified @INC

Posted by Stefan Jakobs <st...@rus.uni-stuttgart.de>.
Mark Martinec:
> Stefan,
>
<snip>
>
> 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:

<snip>

> 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.

I added
use lib '/usr/local/perl/lib';
to /etc/amavisd.conf and it seams to work. Are there any disadvantages in 
placing the use lib pragma there instead of in amavisd?

>   Mark

Thank you, Mark.
Greetings
Stefan

Re: spamassassin doesn't use modified @INC

Posted by Mark Martinec <Ma...@ijs.si>.
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