PL_sv_undef and PL_stack_max undefined - FreBSD 8.0, Perl 5.8.9 or 5.10, FreeRADIUS 2.1.6

Meyers, Dan d.meyers at lancaster.ac.uk
Mon Nov 30 15:23:47 UTC 2009


We've had a setup for a while where we have a FreeBSD server running
FreeRADIUS 2.1.6 and using the rlm_perl module to examine a database and
do some fairly complex checking of the returned data before deciding
whether to accept or reject the radius request. This works fine on
FreeBSD 7.2 amd64 with Perl 5.8.9 and FreeRADIUS 2.1.6 (all compiled
from source out of the same copy of the ports tree. Perl compiled
without threading support as that causes issues with our database
connections when under high load).

We had need to reinstall one of the servers over the weekend (We went
from i386 to amd64 a while back, and now we're periodically getting
mysql [replicated across multiple servers, but with a ruby on rails app
running on and talking to/updating the mysql master] hanging on what
should be very simple requests and causing our Ruby on Rails apps to
die. We're going back to i386 to see if that resolves the issue, as the
rails code hasn't been changed so it shouldn't be that. As far as we can
tell, it is actually mysql that is hanging, not a lost connection from
rails or similar).

Anyway, as FreeBSD 8.0 is now out we decided to go with that. But now I
can't get radius to start with rlm_perl enabled. Our radius script uses
(among other things) the 'Switch' perl module. On trying to run radius
-X I get the following:

Can't load
'/usr/local/lib/perl5/5.8.9/mach/auto/Filter/Util/Call/Call.so' for
module Filter::Util::Call:
/usr/local/lib/perl5/5.8.9/mach/auto/Filter/Util/Call/Call.so: Undefined
symbol "PL_stack_max" at /usr/local/lib/perl5/5.8.9/mach/DynaLoader.pm
line 226.
 at /usr/local/lib/perl5/5.8.9/Switch.pm line 11

and radius refuses to start.

I've not got the perl Filter module installed, and installing it makes
no difference. But this seems to be a minor symptom of a larger problem
-

The freeradius provided example script doesn't use Switch, but does use
Data:Dumper. When I install a completely different server (a VM) with
FreeBSD 8.0 and run up perl and FreeRADIUS using the example.pl rlm_perl
script, I get much the same error, but for a slightly different
variable:

Can't load '/usr/local/lib/perl5/5.8.9/mach/auto/Data/Dumper/Dumper.so'
for module Data::Dumper:
/usr/local/lib/perl5/5.8.9/mach/auto/Data/Dumper/Dumper.so: Undefined
symbol "PL_sv_undef" at /usr/local/lib/perl5/5.8.9/mach/XSLoader.pm line
70.
 at /usr/local/lib/perl5/5.8.9/mach/Data/Dumper.pm line 36

I've tried commenting and uncommenting various modules in the script I
want to run. Time::HiRes also causes a moan about PL_sv_undef.
File::Basename seems to work OK. What's odd is that if I run up a test
perl script that just does a 'use Switch;' and then has a switch
statement in that prints out some text then it works absolutely fine
from the command line. I have to admit to being a bit out of my depth
here. I'm not sure if the issue is with freeradius/rlm_perl, perl
itself, or what.

As a last ditch test, I tried FreeBSD 7.2 i386 in a VM. I was very
surprised when I got the same error, even though this server that is now
having issues was FreeBSD 7.2 (admittedly on amd64) and having no
problems whatsoever. I am completely stumped. Why are these symbols
undefined, and what do I need to do to get things working?

Thanks in advance. Apologies for the wall of text.

--
Dan Meyers
Network Specialist, Lancaster University
E-Mail: d.meyers at lancaster.ac.uk



More information about the freebsd-questions mailing list