Ошибка mrtg при обработке perl скрипта
После полного обновления двух FreeBSD серверов в этот понедельник, стали сыпаться ошибки mrtg при обработке perl скриптов. Конфигурация серверов такова: 1-й сервер: FreeBSD 7.2-RELEASE со встроенным демоном SNMP – bsnmpd, mrtg-2.16.4, perl-5.8.9 2-й сервер: FreeBSD 8.0-RELEASE со встроенным демоном SNMP – bsnmpd, mrtg-2.16.4, perl-5.10.1 |
Сетевую статистику я собираю с помощью mrtg, запуском через cron:
*/5 * * * * /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg --logging /var/log/mrtg/mrtg.log
Так вот, каждые пять минут ко мне на почту стали приходить ошибки вида:
От 1-го сервера:
Subroutine SNMPv1_Session::AF_INET6 redefined at /usr/local/lib/perl5/5.8.9/Exporter.pm line 67. at /usr/local/lib/perl5/site_perl/5.8.9/SNMP_Session.pm line 604
От 2-го сервера:
Constant subroutine SNMP_Session::AF_INET6 redefined at /usr/local/lib/perl5/5.10.1/Exporter.pm line 67. at /usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm line 149 Prototype mismatch: sub SNMP_Session::AF_INET6 () vs none at /usr/local/lib/perl5/5.10.1/Exporter.pm line 67. at /usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm line 149 Constant subroutine SNMP_Session::PF_INET6 redefined at /usr/local/lib/perl5/5.10.1/Exporter.pm line 67. at /usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm line 149 Prototype mismatch: sub SNMP_Session::PF_INET6 () vs none at /usr/local/lib/perl5/5.10.1/Exporter.pm line 67. at /usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm line 149 Constant subroutine SNMPv1_Session::AF_INET6 redefined at /usr/local/lib/perl5/5.10.1/Exporter.pm line 67. at /usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm line 604 Prototype mismatch: sub SNMPv1_Session::AF_INET6 () vs none at /usr/local/lib/perl5/5.10.1/Exporter.pm line 67. at /usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm line 604 Constant subroutine SNMPv1_Session::PF_INET6 redefined at /usr/local/lib/perl5/5.10.1/Exporter.pm line 67. at /usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm line 604 Prototype mismatch: sub SNMPv1_Session::PF_INET6 () vs none at /usr/local/lib/perl5/5.10.1/Exporter.pm line 67. at /usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm line 604
Порыскав в интернете, еле-еле отыскал решение. Оно сводится к правке файла SNMP_Session.pm, расположенного по пути в зависимости от того, какая версия perl у вас установлена. В моих случаях этот файл расположен:
1-й сервер:
/usr/local/lib/perl5/site_perl/5.8.9/SNMP_Session.pm
2-й сервер:
/usr/local/lib/perl5/site_perl/5.10.1/SNMP_Session.pm
Вот куски кода, которые необходимо исправить. -
– удалить из кода, +
– записать вместо удаленного в код файла SNMP_Session.pm:
... BEGIN { if (eval {local $SIG{__DIE__};require Socket6;} && eval {local $SIG{__DIE__};require IO::Socket::INET6; IO::Socket::INET6->VERSION("1.26");}) { - import Socket6; + Socket6->import(qw(pack_sockaddr_in6 inet_pton getaddrinfo)); $ipv6_addr_len = length(pack_sockaddr_in6(161, inet_pton(AF_INET6(), "::1"))); $SNMP_Session::ipv6available = 1; } ... BEGIN { if($SNMP_Session::ipv6available) { import IO::Socket::INET6; - import Socket6; + Socket6->import(qw(pack_sockaddr_in6 inet_pton getaddrinfo)); } } ...
После этих изменений ошибки пропали.
Изначально, решение мной было найдено вот тут.
С Новым Годом! Сегодня вышел на работу, а MRTG не отрисовал графики за новогодние дни…. Перед этим Убунту обновилась с 11.10 до 12.04 Ошибка вылезла подобная. Мне тока пришлось в строке:
Socket6->import(qw(pack_sockaddr_in6 inet_pton getaddrinfo));
добавить pack_sockaddr_in6 и заработало!!
Р.А.М., спасибо за поздравления и за то, что поделились опытом! :)