(Первое сообщение !!!)
Технически вам не нужно инициализировать или экспортировать переменные окружения, если вы правильно настроили net-snmp.
(отмечая, что я включенUbuntu 12.04.1 LTS, так что мне действительно не нужно было компилировать net-snmp
из исходного кода, и даже хотя я рассмотрю все, что я сделал для полноты, это действительно должно применяться, только если вы хотите настроить некоторые MIB длябыть автоматически подхваченным net-snmp
или его привязками Python.)
Сначала я сделал sudo apt-get install libsnmp-base libsnmp-python libsnmp15 snmp
Это установит net-snmp и его библиотеки, а также привязки Python.Он также устанавливает некоторые MIB по умолчанию (только для net-snmp
) в /usr/share/mibs/netsnmp/
.Если вы хотите получить кучу других MIB IETF / IANA, выполните:
sudo apt-get install snmp-mibs-downloader
, которая, как и следовало ожидать, загрузит тонну других стандартных MIB (включая IF-MIB и тому подобное) в /var/lib/mibs/iana
, /var/lib/mibs/ietf
, а также /usr/share/mibs/iana
и /usr/share/mibs/ietf
.Пакет snmp-mibs-downloader
также дает команду /usr/bin/download-mibs
, если вы хотите снова загрузить MIB.
Далее, используйте команду snmpconf
, чтобы настроить среду net-snmp:
$ snmpconf -h
/usr/bin/snmpconf [options] [FILETOCREATE...]
options:
-f overwrite existing files without prompting
-i install created files into /usr/share/snmp.
-p install created files into /home/$USER/.snmp.
-I DIR install created files into DIR.
-a Don't ask any questions, just read in current
current .conf files and comment them
-r all|none Read in all or none of the .conf files found.
-R file,... Read in a particular list of .conf files.
-g GROUP Ask a series of GROUPed questions.
-G List known GROUPs.
-c conf_dir use alternate configuration directory.
-q run more quietly with less advice.
-d turn on debugging output.
-D turn on debugging dumper output.
Я использовал snmpconf -p
и прошелся по пунктам меню.Процесс в основном ищет существующие файлы snmp.conf (/etc/snmp/snmp.conf
по умолчанию) и объединяет их с вновь созданным конфигурационным файлом, который будет помещен в /home/$USER/.snmp/snmp.conf
, указанный параметром -p
.С этого момента вам действительно нужно только указать snmpconf
, где искать MIB, но есть ряд полезных опций, которые предоставляет скрипт для генерации директив конфигурации в snmp.conf
.
Вам следуетпосле работы с snmpconf
у вас будет в основном рабочая среда.Вот как выглядит моя (очень голая) /home/$USER/.snmp/snmp.conf
:
###########################################################################
#
# snmp.conf
#
# - created by the snmpconf configuration program
#
###########################################################################
# SECTION: Textual mib parsing
#
# This section controls the textual mib parser. Textual
# mibs are parsed in order to convert OIDs, enumerated
# lists, and ... to and from textual representations
# and numerical representations.
# mibdirs: Specifies directories to be searched for mibs.
# Adding a '+' sign to the front of the argument appends the new
# directory to the list of directories already being searched.
# arguments: [+]directory[:directory...]
mibdirs : +/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp:/home/$USERNAME/.snmp/mibs/newmibs
# mibs: Specifies a list of mibs to be searched for and loaded.
# Adding a '+' sign to the front of the argument appends the new
# mib name to the list of mibs already being searched for.
# arguments: [+]mibname[:mibname...]
mibs +ALL
Некоторые ошибки:
- Когда
net-snmp
загружает этот файл конфигурации, он не выполняетрекурсивный поиск в каталоге, поэтому вы должны указать абсолютный путь к каталогу, в котором находятся MIB. - Если вы решите указать
net-snmp
, чтобы загрузить все 300+ MIB в эти каталоги, это может замедлить работу вашего SNMPзапросов, и некоторые вещи должны быть сброшены в STDERR
из-за того, что некоторые MIB либо устарели, либо неправильно, либо пытались импортировать определения из MIB, которые не существуют или не были загруженыпакет.Возможны следующие варианты: скажите snmpconf
, как вы хотите, чтобы эти ошибки обрабатывались, или выясните, что отсутствует или устарело, и загрузите MIB самостоятельно.Если вы пойдете за последним, вы можете оказаться в кроличьей норе MIB, так что имейте это в виду.Лично я бы предложил, чтобы вы загрузили их все, а затем работали в обратном направлении, чтобы загружать только те MIB, которые имеют смысл для опроса определенного устройства. - Порядок каталогов, который вы указываете в пути поиска в
snmp.conf
важно, особенно если некоторые MIB ссылаются или зависят от других MIB.Я сделал одну ошибку, которую ушел, просто взяв файл MIB в каталоге iana
и переместив его в каталог ietf
.Я уверен, что есть способ программно выяснить, какие MIB зависят от других, и заставить их счастливо сосуществовать в одном каталоге, но я не хотел тратить кучу времени, пытаясь выяснить это.
Мораль этой истории в том, что если у вас есть надлежащий snmp.conf, вы должны просто сделать это:
$ python
>>> import netsnmp
>>> oid = netsnmp.VarList(netsnmp.Varbind('dot1qTpFdbPort'))
>>> res = netsnmp.snmpwalk(oid, Version=2, DestHost='10.0.0.1', Community='pub')
>>> print res
('2', '1')
>>>
К вашему сведению Я пропустил кучу STDERR
выходных, ноОпять же, вы можете сконфигурировать свою среду для выгрузки STDERR
в лог-файл, если вы хотите через snmp.conf
директивы конфигурации.
Надеюсь, это поможет.