Исправление Python-прослойки библиотеки Net-SNMP

Заметка, ссылка на которую мне может в дальнейшем понадобиться.

Из всех SNMP-модулей Python для работы с SNMP наименьшей гадостью мне показалась официальная прослойка библиотеки Net-SNMP для Python. Её разработчики не так прониклись Java-подходом, как разработчики библиотеки pysnmp, воспользоваться которой невозможно без написания трёхэтажного кода с использованием всех фабрик классов, прокси-классов и преобразования типов, родных для Python, в классы, используемые библиотекой. Библиотека pysnmp выглядит в Python совершенно чужеродно, потребляет мнго ресурсов и плохо документирована.

Прослойка библиотеки Net-SNMP для Python выглядит очень куцей, однако для моих нужд её оказывалось достаточно, пока я не попробовал с её помощью инициировать резервное копирование коммутатора. Оказалось, что в ней неправильно реализовано преобразование параметров типа IPADDR в запросах SNMP SET. Официальный патч в тот момент я не нашёл и решил попробовать исправить библиотеку самостоятельно, что мне и удалось. Официальный патч можно найти тут: Python bindings: Fix the out-of-bounds write. Я же подготовил свой патч, использование которого будет описано ниже.

Скачиваем патч:

$ wget netsnmp543_python_client.patch

Скачиваем и распаковываем в текущий каталог исходные тексты пакета:

# apt-get source libsnmp-python

Скачиваем и устанавливаем зависимости, необходимые для сборки пакета:

# apt-get build-dep net-snmp

Скачиваем и устанавливаем инструменты для сборки:

# apt-get install dpkg-dev
# apt-get install fakeroot
# apt-get install devscripts

Переходим в каталог с исходными текстами пакета и накладываем патч:

# cd net-snmp-5.4.3~dfsg/
# patch -Np0 --ignore-whitespace < ../netsnmp543_python_client.patch

Добавим наш патч в будущий пакет:

# dpkg-source --commit

Укажем имя патча snmp_set_fixed. В окне редактирования информации о патче введём что-нибудь подобное следующему (вплоть до двух нижних строчек, с которых начинается сам текст патча):

Description: Fixed snmp set operation in python-snmp
Fixed snmp set operation in python-snmp
 .
 net-snmp (5.4.3~dfsg-2.8+deb7u1) stable-proposed-updates; urgency=medium
 .
--- net-snmp-5.4.3~dfsg.orig/python/netsnmp/client_intf.c
+++ net-snmp-5.4.3~dfsg/python/netsnmp/client_intf.c

Теперь отметим изменения, внесённые в пакет:

# dch -i

В окне редактирования введём информацию о нашей версии пакета:

net-snmp (5.4.3~dfsg-2.8+deb7ufanet) UNRELEASED; urgency=low

  * Fixed snmp set in libsnmp-python

 -- Vladimir Stupin <vladimir@stupin.su>  Thu, 21 Jan 2016 16:58:40 +0500

Осталось собрать пакет:

# dpkg-buildpackage -us -uc -rfakeroot

Теперь его можно установить в систему:

# cd ..
# dpkg -i libsnmp-python_5.4.3~dfsg-2.8+deb7u1_amd64.deb

Написать автору