移植NET-SNMP(ARM 9)总结

移植NET-SNMP(ARM 9)总结

Living with you!
欢迎转载
http://blog.csdn.net/livingpark
Living Park 

终于搞定了net-snmp的移植。

其间参考了不少网上的资料。

现在总结一下,期望对后来者有些许帮助-----足矣。

移植NET-SNMP总结

1. 移植所使用的环境

OS:fedora 9(kernel-release:2.6.25-14.fc9.i686)

Arm-linux-gcc:v3.2

Net-snmp:v5.4.2

Target CPU:arm 9

以上各软件可到相关网站下载,OS和arm-linux-gcc自行安装,此处不做叙述。

2. 交叉编译net-snmp

确保arm-linux-gcc安装成功并已设置好环境变量。

将net-snmp解压到工程目录下,进入net-snmp源码目录下(此处是net-snmp-5.4.2,以下使用该目录代表源码目录),配置编译选项:

CC=arm-linux-gcc ./configure --build=i386-linux --host=arm-linux --enable-mini-agent --disable-ipv6 --with-endianness=little --disable-manuals --disable-ucd-snmp-compatibility --enable-as-needed --disable-embedded-perl --without-perl-modules --disable-snmptrapd-subagent --disable-applications --disable-scripts

各配置选项含义可以使用./configure –help来查看,可以添加自己需要的选项或者去掉不需要的选项。

配置完成后进行编译:make LDFLAGS=”-static”

然后是使用make install进行安装

编译得到的snmpd比较大,需要进行strip处理,使用arm-linux-strip snmpd处理后得到需要的snmpd文件。

3. 配置snmpd.conf文件

       使用net-snmp-5.4.2/EXAMPLE.conf ,并拷贝到默认配置文件目录下,

cp EXAMPLE.conf /usr/local/share/snmp/snmpd.conf

修改community设置(设置后可以使用v1v2c,v3配置在后面有)

#       sec.name  source          community

com2sec local     localhost       public

com2sec mynetwork 10.10.200.0/24  public #我的网段在200

将组设置改为可读写如:group MyRWGroup v2c  mynetwork (原配置为:group MyROGroup v2c mynetwork),方便测试使用。

4. 移植到目标开发板

       将snmpd和snmpd.conf文件移到windows下(此处使用的是windows XP, 传输使用ftp,软件使用ServerUAdmin, ServerU的下载安装和使用自行查找,当然也可以使用其它方式传出文件完成此步骤)。

       启动目标板(确保目标板可用,已经移植有bootloader和Linux系统)。Windows和目标板之间的传输通过串口进行(然见依然使用ServerU,通过ftp命令实现,确保目标板移植有ftp服务,ftp命令使用自行查找),此处确保串口通讯正常,并进入目标系统。

       将snmpd文件放到目标板/usr/sbin目录下(需要更改访问权限,否则过会不能启动),将snmpd.conf文件放在/usr/local/share/snmp/(不存在的目录自己创建)

     现在可以启动snmpd了:snmpd –f –Le –d.

     若启动正常则此步骤完成

5. 简单测试

     确保目标板上snmpd正常启动,另一台管理机器装有linux或者windows(确保其中正确安装了net-snmp),并且和目标板网络连接正确,通讯畅通(管理机ip设置要和snmpd.conf中设置对应)(当然此步可以通过其它方法完成,如使用图形界面的软件)

     在管理端使用命令:snmpget –v 2c –c public 10.10.200.101 sysContact.0(注意.0),(此处使用目标板ip10.10.200.101),如果前面操作正确,则此处可以得到正确输出。

     接下来使用snmpset –v 2c –c public 10.10.200.101 sysContact.0 s “[email protected]”,一般会出现notWriteable的提示,无法设置值。出现这种情况时的解决方案: 注释或者删除 snmpd.conf(这里指管理端)中syscontact Me 一行,其它如sysLocation等相似。

如果要使用snmpv2c为默认版本,可以在snmp.conf(注意没有’d’)文件中添加defversion 2c一行,snmp.conf文件所在目录和snmpd.conf相同。添加完成后可以使用命令snmpget –c public 10.10.200.101 sysContact.0,不用写版本号了,snmpset用法相似。

6. 自定义mib(包括trap)测试

     此处仅需测试移植成功,使用mibnet-snmp的一个例子,具体是net-snmp.5.4.2/mibs/NET-SNMP-EXAMPLES-MIB.txt。相关的C文件在net-snmp.5.4.2/agent/mibgroup/examples/目录下。

     当已经写好或者拥有一个mib文件时,可以通过mib2c来生成相应的C文件模板,在此基础上面添加需要的功能。首先要确保mib2c可用,使用man mib2c可以查看到它的用法。使用前需要将mib文件放在usr/local/share/snmp/mibs/目录下面,并将该mib添加到环境变量MIBS中如:export MIBS=”+NET-SNMP-EXSMPLES-MIB”,这里的NET-SNMP-EXSMPLES-MIBmib的定义而不是mib文件的文件名,如果不确定,可以打开mib文件,一般第一行可以看到定义如:NET-SNMP-EXAMPLES-MIB DEFINITIONS ::= BEGIN其中NET-SNMP-EXAMPLES-MIB为定义的mib名,一般和mib文件名相同。

     接下来就可以使用mib2c工具生成C文件了,仅以简单的方式为例,mib2c的其它用法见man mib2c或者其它相关网站。具体如:mib2c netSnmpExampleScalars,这里的netSnmpExampleScalarsmib文件中定义的一个对象,具体要生成那个对象的C文件可在mib文件中查找OBJECT IDENTIFIER的定义,接下来会出现两个选项:

1)    ucd-snmp style code   2)Net-Snmp style code

可按照自己的需要选择,选择1)则直接生成代码,选择2)会出现三个选项,前两项其实就是mib2c.scalar.confmib2c.int_watch.conf,选择1)2)(此处可选择1)后会生成代码(默认命名是上面mib2c的参数)

     接下来要将mib编译到Agent(snmpd)(一般自定义mib生成C文件放在net-snmp.5.4.2/agent/mibgroup/目录下),下面使用example中的netSnmpExampleScalar,具体文件在net-snmp.5.4.2/agent/mibgroup/examples/下的scalar_int.hscalar_int.c

     接下来进行编译,在./configure最后面添加--with-mib-modules=”scarlar_int”,如果有多个对象则在引号中添加,用空格间隔。配置完成后,编译、安装、移植等和前面234的过程相似,完成后启动snmpd。管理端使用snmpget –c public 10.10.200.101 netSnmpExampleScalar.0获取该节点值,设置snmpset用法相似。

     测试trap使用net-snmp.5.4.2/agent/mibgroup/examples/下的notification,用法和简单mib相似,./configure modules改为notification或者添加notification进去,重新编译、移植(注意需要修改配置文件snmpd,在文件后面添加trap2sink 10.10.200.202 public一行,指明能够接收该agent发出trap的管理端ip),该mib功能实现为每30秒发送一次trap,管理端使用snmptrapd接收,启动可以使用:

     snmptrapd –f –Lo –d

如果一切运行正常,snmptrapd能够接收到相应信息。

7. 使用snmpv3

以上定义访问组和ip段,适合snmpv1v2使用,如前面使用snmpget或者snmpset中的-c public指明了这一点,而v3中使用用户名和密码来访问,使配置更灵活,访问也更安全。

使用net-snmp-config --create-snmpv3-user命令创建一个v3的用户。首先:Enter a SNMPv3 user name to create:

如输入 Living

接下来Enter authentication pass-phrase:

     如输入 whoareyou    //(注意长度应该>=8)

接下来Enter encryption pass-phrase:

     可以输入加密密码,此处直接回车使用和上面相同输入即whoareyou

这时在/usr/local/share/snmp/snmpd.conf文件后面添加了rwuser Living一行,成功添加用户(snmpd.conf应重新放到目标板上并重启snmpd)。

     此时使用snmpget -v 3 -l authPriv -u Living -A "whoareyou" -X "whoareyou"  10.10.200.101 sysUpTime.0
测试可成功获取值,注意这里没有使用-c public 的community而是使用用户名密码进行访问。
    接下来使用snmpget -v 3 -l authNoPriv -u Living -A "whoareyou"  10.10.200.101 sysUpTime.0
命令也没有问题(注意之间的区别)。
    最后使用snmpget -v 3 -l noAuthNoPriv -u Living 10.10.200.101 sysUpTime.0命令会出现authorizationError,
拒绝访问该对象,解决方法是给予权限,在snmpd.conf中rwuser Living后面添加noauth(注意Living和noauth
之间有空格)后重启snmpd,重新使用该命令正确获取值。
     以上只是对net-snmp的简单编译和使用,更多功能和操作方法请参考网站:www.net-snmp.org或者net-snmp
源码。

你可能感兴趣的:(snmp)