воскресенье, 26 июля 2020 г.

Отключение сообщений об ошибках на стандартный ввод-вывод в net-snmp

Есть у меня один скрипт на Python, использующий привязки к библиотеке Net-SNMP. Скрипт отмечает результаты своей работы в базе данных и выводит сообщения об ошибках только при каких-то совсем уж неожиданных ошибках, например, при отсутствии связи с этой базой данных. Если же скрипт отработал шататно, он не должен выводить никаких сообщений. Поскольку сркипт регулярно запускался через планировщик задач cron, то при ошибках весь вывод скрипта отправлялся мне по почте. В общем, всё как обычно.

Раньше скрипт выполнял запросы только по протоколам SNMP первой и второй версии. Когда же в сети появились устройства, доступные только по протоколу SNMP третьей версии, скрипт начал выводить ошибки такого вида:
Authentication failed for backup
backup - это имя пользователя SNMPv3, под которым не удавалось выполнить SNMP-запросы.

Поскольку скрипт анализирует результаты запросов SNMP, то эти диагностические сообщение лишь засоряют вывод скрипта. Как оказалось, эти сообщения выводит сама библиотека Net-SNMP и я не нашёл никаких способов для того, чтобы их отключить, например, через конфигурацию /etc/snmp/snmp.conf. Чтобы отключить эти сообщения, потребуется поправить исходный текст библиотеки. Скачаем и распакуем пакет с исходными текстами net-snmp:
$ apt-get source net-snmp
Наши правки к исходному коду оформим в виде заплатки при помощи инструмента quilt, подробнее о котором я писал в заметке Использование quilt для подготовки заплат. Создадим новую заплатку:
$ quilt new removed-redundant-log-message
Добавим в будущую заплатку файл:
$ quilt add snmplib/snmpusm.c
Открываем файл snmplib/snmpusm.c в текстовом редакторе, находим и удаляем две строчки с вызовом функции snmp_log:
            snmp_log(LOG_WARNING, "Authentication failed for %s\n",
                                user->name);
В этом же файле при подобных ошибках функции snmp_log не вызываются и это единственный вызов snmp_log в этом файле. Скорее всего этот вызов функции был оставлен по ошибке, а не удалён вместе с другими подобными вызовами.

Чтобы изменения в файле snmplib/snmpusm.c попали в заплатку, обновляем заплатку:
$ quilt refresh
Можно прокомментировать сделанные в пакете изменения и изменить версию пакета:
$ dch -i
В запустившемся редакторе описываем последние изменения:
net-snmp (5.7.3+dfsg-5-stupin1) UNRELEASED; urgency=medium

  * Fixed SNMPv3 time widnow logic to work with D-Link switches
  * Removed redundant log message "Authentication failed from"

 -- Vladimir Stupin <vladimir@stupin.su>  Fri, 15 May 2020 16:01:26 +0500
Теперь можно пересобрать deb-пакеты, выполнив команду:
$ debuild -us -uc
В вышестоящем каталоге появятся готовые deb-пакеты, которые можно установить в систему командой dpkg -i или поместить в репозиторий пакетов при помощи aptly. Почитать об использовании aptly можно в другой моей заметке Создание своего репозитория Debian при помощи aptly.

После установки исправлений надоедливые сообщения об ошибках пропали.

Комментариев нет: