Net-Snmp 5.7.2.1 Porting and Testing Commands

由於工作需求...呃應該不用什麼前言了。

本篇主要介紹如何將 net-snmp 5.7.2.1 (LTS) 做完 CROSS-Compile
並 Porting 到 Embedded 平台上。

以下將以 Ti 的 DM368 平台來做示範。



1. Configure It

./configure  \
--host=armv5tl-montavista-linux-gnueabi CC=arm_v5t_le-gcc CXX=arm_v5t_le-g++ CXXCPP="arm_v5t_le-g++ -E" AR=arm_v5t_le-ar \
--with-endianness=little \
--with-install-prefix="`pwd`/net-snmp-install" \
--with-default-snmp-version="3" \
--with-sys-contact="contact@contact" \
--with-sys-location="location" \
--with-logfile="/sysconf/log/snmpd.log" \
--with-persistent-directory="/sysconf/net-snmp" \
--sbindir="/sbin" \
--libdir="/usr/lib" \
--disable-debugging \
--disable-embedded-perl \
--without-perl-modules \
--without-rpm \
--enable-mini-agent \
--enable-static \
--with-mibdirs="/usr/snmpmib" \
--datadir="/sysconf/net-snmp/" \
--sysconfdir="/sysconf/net-snmp/" \
--with-mib-modules="if-mib ip-mib tcp-mib udp-mib agentx";


這邊說明一下:

--host Host 端指定平台,後面接 GCC 的 Toolchain
--with-endianness Build 成 Little-endian
--with-install-prefix 指定 install 路徑,到時候來這邊撈檔案比較快
--with-sys-contact 預先輸入資訊,屆時便可透過自動化 script 來完成
--with-sys-location 同上
--with-logfile Log File 的預設存放位置
--with-persistent-directory net-snmp 動態 config 檔存放目錄
--sbindir sbin 預設目錄
--libdir /lib 預設目錄
--disable-debugging 關閉 Debug
--disable-embedded-perl 關閉 Perl 相關元件
--without-perl-modules 平台不支援 Perl Module
--without-rpm 關閉 RPM
--enable-mini-agent 縮減不必要的 mib module,縮小程式體積
--enable-static 編譯成 Static
--with-mibdirs mib file 預設目錄
--datadir datadir 預設目錄
--sysconfdir net-snmp 動態 config 檔存放目錄
--with-mib-modules 預設要使用的 mib module


接著再執行 make; make install ,即會將相關檔案安裝到預設的 install-prefix 目錄內。

PS. 別忘了最後做一下 strip,讓整體程式能小一點


2. Copy Binaries Only We Need It

Build 好之後,我們只需取出我們所需要的元件即可,像其他的 man 說明文件什麼的我們都不需要。

本篇將以我個人的經驗為主,如需要其他元件請另行增加即可。


到 net-snmp-install/ 目錄內,取出以下檔案,並放在 filesys 內的對應目錄:
snmpd /sbin/snmpd 主程式
mibs/ /usr/snmpmib/ mib files folder
libnetsnmp.so* /usr/lib/libnetsnmp.so* Library
libnetsnmpagent.so* /usr/lib/libnetsnmpagent.so* Library
libnetsnmpmibs.so* /usr/lib/libnetsnmpmibs.so* Library
net-snmp-config /sbin/net-snmp-config 自動化產生 snmpd.conf 的 script
net-snmp-create-v3-user /sbin/net-snmp-create-v3-user 自動化新增 snmp v3 user 的 script
snmpwalk /sbin/snmpwalk 就是 snmpwalk


snmpwalk 是拿來測試用的,另外此次並沒有用到 snmptrap、mib2c 等功能,
因此沒有放進去,有需要請自行增減。


3. 產生 snmpd.conf ,並在開機時啟動 snmpd


預設只需要加入這兩行,即可順利存取 snmp v1 / v2c 的內容了:

rocommunity Public
rwcommunity Private


開機時用以下指令將 snmpd 帶起來:
snmpd -c /sysconf/snmpd.conf



4. SNMP 相關測試 Commands

透過內建的 snmpwalk ,來存取 localhost 的 rocommunity (預設存取名稱為 Public)
snmpwalk -v 2c -c Public localhost


同上,如要存取 IF Table,則這樣輸入:
snmpwalk -v 2c -c Public localhost if


如要單獨讀取 ifName,則可以這樣做
snmpwalk -v 2c -c Public localhost ifName

或是這樣做
snmpwalk -v 1 -c Public localhost .1.3.6.1.2.1.2.2.1.2

所得結果如下,可自行比較一下兩者之間的差異
IF-MIB::ifName.1 = STRING: lo
IF-MIB::ifName.2 = STRING: eth0



5. Create SNMP v3 User

先停止運行中的 snmpd!
killall snmpd


這邊我們採用內建的 Auto-Script 來新增 SNMP v3 User,範例如下
[/root]# net-snmp-config --create-snmpv3-user -ro -a password -A MD5 myname
adding the following line to /sysconf/net-snmp/snmpd.conf:
   createUser myname MD5 "password" DES
adding the following line to /sysconf/snmpd.conf:
   rouser myname


重新啟動 snmpd 之後,便可訪問 SNMP v3 user
snmpwalk -v3 -u myname -l auth -a MD5 -A password 127.0.0.1 if


如要新增帶有 priv 的 SNMP v3 user,則可用
net-snmp-config --create-snmpv3-user -ro -a password -A MD5 -x myprivpass -X DES myname


重新啟動 snmpd 之後,便可訪問 SNMP v3 user
snmpwalk -v3 -u myname -l authPriv -a MD5 -A password -x DES -X myprivpass 127.0.0.1 if


大概就是這樣,如果有相關疑問歡迎提出,或是詢問 Google 大神以得到更多資訊 XD









留言

這個網誌中的熱門文章

How to use ebtables: ebtable 的小筆記

解決 VirtualBox 無法開啟 NS_ERROR_FAILURE (0x80004005)