net-snmpを適切に構成すれば、技術的には環境変数を初期化またはエクスポートする必要はありません。
(私はUbuntu 12.04.1 LTSを使用しているのでnet-snmp
、ソースからコンパイルする必要はありませんでした。完全を期すために行ったことのすべてをカバーしますが、これは実際には、設定する場合にのみ適用されます。いくつかのMIBをアップしてnet-snmp
、PythonバインディングまたはそのPythonバインディングによって自動的にスラップインされます。)
最初にやったsudo apt-get install libsnmp-base libsnmp-python libsnmp15 snmp
これにより、net-snmpとそのライブラリ、およびPythonバインディングがインストールされます。また、にいくつかのデフォルトMIB(forのみnet-snmp
)をインストールします/usr/share/mibs/netsnmp/
。他のIETF/IANA MIBを多数取得する場合は、次のようにします。
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
パッケージには、MIBを再度ダウンロードする場合のコマンド/usr/bin/download-mibs
も含まれています。
次に、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が存在するディレクトリへの絶対パスを指定する必要があります。
- これらのディレクトリに300以上のMIBをすべてロードするように指示
net-snmp
すると、SNMPクエリの速度が低下する可能性がありSTDERR
、一部のMIBが古くなっている、間違っている、または存在しない、またはパッケージによってダウンロードされなかったMIBから定義をインポートしようとしています。オプションは次のとおりです。snmpconf
これらのエラーをどのように処理するかを指定するか、不足しているものや古くなっているものを見つけて、MIBを自分でダウンロードします。後者を選択すると、MIBのうさぎの穴を掘り下げることに気付くかもしれないので、それを覚えておいてください。個人的には、それらすべてをロードしてから、特定のデバイスのポーリングに意味のある特定のMIBのみをロードするように逆方向に作業することをお勧めします。
snmp.conf
特に一部のMIBが他のMIBを参照または依存している場合は、検索パスで指定するディレクトリの順序が重要です。ディレクトリ内のMIBファイルを取得してiana
ディレクトリに移動するだけで、1つのエラーが発生しましたietf
。どのMIBが他のMIBに依存しているかをプログラムで把握し、それらを1つのディレクトリにうまく共存させる方法があると確信していますが、これを把握するために多くの時間を無駄にしたくありませんでした。
話の教訓は、適切な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
お役に立てれば。