Каждый раз при использовании Freeradius в связке с rpl_perl на своем любимом Debian-чике натыкаюсь на одни и те же грабли. Стоит только включить поддержку перл, как сразу получаем ошибку. Freeradius с поддержкой perl никак не хочет запускаться.

Все пропало! Ничего не работает! Опять! Опять разбираться, гуглить, терять время. А время, как известно — это деньги. Чтож, не буду вдаваться в подробности и рассказывать почему возникает эта ошибка, но расскажу как быстро ее исправить. Метод не единственный, но абсолютно рабочий, и требует минимум временных затрат.

Итак, что мы имеем. Систему linux Debian с установленным Freeradius сервером. Однака поддержка perl не работает, вы выдает следующую ошибку:
radius:/etc/freeradius# /etc/init.d/freeradius start
Starting FreeRADIUS daemon: freeradius Can't load '/usr/lib/perl/5.10/auto/Data/Dumper/Dumper.so' for module Data::Dumper: /usr/lib/perl/5.10/auto/Data/Dumper/Dumper.so: undefined symbol: Perl_sv_cmp at /usr/lib/perl/5.10/XSLoader.pm line 70.
at /usr/lib/perl/5.10/Data/Dumper.pm line 36
Compilation failed in require at /etc/freeradius/example.pl line 30.
BEGIN failed--compilation aborted at /etc/freeradius/example.pl line 30.

Чтож, запустить freeradius достаточно просто. Попробуйте выполнить такой вызов:
LD_PRELOAD=/usr/lib/libperl.so freeradius -X
Если все заработало, то осталось изменить стартовые скрипты, и задача решена.
Если же сервер не запустился, почитайте последние строки вывода, и исправьте ошибки.

Для нормальной загрузки freeradius сервера нам потребуется поправить всего 1 файл:
/etc/init.d/freeradius
откройте его и найдите строки:
case "$1" in
start)
log_daemon_msg "Starting $DESCR" "$PROG"
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $PROGRAM -- $FREERADIUS_OPTIONS || ret=$?
log_end_msg $ret
exit $ret
;;

А теперь замените строку:
start-stop-daemon —start —quiet —pidfile $PIDFILE —exec $PROGRAM — $FREERADIUS_OPTIONS || ret=$?
на
LD_PRELOAD=/usr/lib/libperl.so start-stop-daemon —start —quiet —pidfile $PIDFILE —exec $PROGRAM — $FREERADIUS_OPTIONS || ret=$?

должно получиться следующее:
case "$1" in
start)
log_daemon_msg "Starting $DESCR" "$PROG"
LD_PRELOAD=/usr/lib/libperl.so start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $PROGRAM -- $FREERADIUS_OPTIONS || ret=$?
log_end_msg $ret
exit $ret
;;

Чтож, сохраняем изменения, и радуемся.