Dec 24, 2006
simrouting snmp
/usr/local/etc/snmp/snmp.conf に
mibdirs /usr/local/share/snmp/mibs/ mibs OSPFV3-MIB:OSPF-MIB
うーん. snmp のバージョン問題ではまる.
./configure --enable-snmp --with-netsnmp=/usr/local/net-snmp-5.3.1
などとした場合に,
LDFLAGS="-Wl,--rpath -Wl,${link_dir}/lib -L${link_dir}/lib"
するようにして,
config.status: s,@LDFLAGS@,|#_!!_#| -Wl\,--rpath -Wl\,-L/usr/local/net-snmp-5.3.1/lib/lib -L-L/usr/local/net-snmp-5.3.1/lib/lib -Wl\,--rpath -Wl\,/usr/local/lib/graphviz -L/usr/local/lib/graphviz ,g
などとなるようにしたが,
% ldd ./simrouting : libsnmp.so.5 => /usr/lib/libsnmp.so.5 (0x0098c000) :
のまま.
% ldconfig -p | grep '[^_]snmp.so' libsnmp.so.5 (libc6) => /usr/lib/libsnmp.so.5 libsnmp.so (libc6) => /usr/lib/libsnmp.so libnetsnmp.so.10 (libc6) => /usr/local/net-snmp-5.3.1/lib/libnetsnmp.so.10 libnetsnmp.so.10 (libc6) => /usr/local/lib/libnetsnmp.so.10 libnetsnmp.so.10 (libc6) => /usr/local/net-snmp-5.3.0.1/lib/libnetsnmp.so.10 libnetsnmp.so.5 (libc6) => /usr/local/lib/libnetsnmp.so.5 libnetsnmp.so.5 (libc6) => /usr/lib/libnetsnmp.so.5 libnetsnmp.so (libc6) => /usr/local/net-snmp-5.3.1/lib/libnetsnmp.so libnetsnmp.so (libc6) => /usr/local/lib/libnetsnmp.so libnetsnmp.so (libc6) => /usr/local/net-snmp-5.3.0.1/lib/libnetsnmp.so libnetsnmp.so (libc6) => /usr/lib/libnetsnmp.so
net-snmp-5.3.1 のライブラリより /usr/lib/libsnmp.so が先に来ているのが 問題なのかな?
/etc/ld.so.conf: include ld.so.conf.d/*.conf
ld.so.conf の中身は上記のようで順番とか指定していないみたいだし, ダイナミックリンクの順番ってどうなってるんだっけ... /usr/lib/libsnmp.so(symlink)を消して,/usr/local/net-snmp-5.3.1/lib/libnetsnmp.so に張りなおし(強引)して simrouting をコンパイルすると, ldd では /usr/local/lib/libnetsnmp.so.5 を見るようになった. netsnmp か snmp かにはこだわらず,しかしライブラリのメジャー番号 5 には こだわっているような変化・・・ autoconf の書き方とかもちょっと間違っているかな?
/usr/lib/libsnmp.so の symlink を元に戻して ldd しても /usr/local/lib/libnetsnmp.so.5 のまま, あれ,コンパイルしても /usr/lib/libsnmp.so には戻らなく鳴っちゃった. ld.so.conf のキャッシュが動的に更新されて戻らなくなった,とかかな・・・ よくわかんないや...
netsnmp-5.3.1 を --blockquotefix=/usr で入れてみる(負け負け・・・) それでコンパイルしなおす(make clean & make)と,
/usr/lib/gcc/i386-redhat-linux/4.0.2/../../../libnetsnmp.so: undefined reference to `EVP_DigestInit'
などでリンクエラー../configure --enable-snmp でコンパイルしなおして ldd で見ると,/usr/lib/libsnmp.so.5 を見てる(今入れた libnetsnmp.so.10 ではなく...).
問題を整理すると,二つ.1) 自分の思ったとおりの snmp library とリンクできない. 2) アプリが単に MIB module を解決できない(エラーは以下).
Cannot find module (OSPF-MIB): At line 1 in (none) OSPF-MIB::ospfLsdbAdvertisement.0.0.0.0.routerLink: Unknown Object Identifier cannot parse oid OSPF-MIB::ospfLsdbAdvertisement.0.0.0.0.routerLink OSPF-MIB::ospfLsdbAdvertisement.0.0.0.0.networkLink: Unknown Object Identifier cannot parse oid OSPF-MIB::ospfLsdbAdvertisement.0.0.0.0.networkLink
この際,2 の問題が解決できればどうでもいいやということで, ライブラリで呼ばれた関数が環境変数 MIBS, MIBDIRS は読んでくれるだろう と予測し,以下を設定して実行したら,成功した... (/usr/share/snmp/mibs 以下に OSPF-MIB.txt 置けばよかっただけか・・・. しかし snmp の難しさには閉口する...)
setenv MIBS SNMPv2-TC:SNMPv2-MIB:IF-MIB:IP-MIB:TCP-MIB:UDP-MIB:SNMP-VACM-MIB:OSPF-MIB setenv MIBDIRS /usr/local/share/snmp/mibs
writeback message: Ready to post a comment.