以下文章參考 (net-snmp5.7.3 移植到 arm-linux 平台)https://www.cnblogs.com/quliuliu2013/p/7520241.html ,在跟自己專有的交叉編譯工具相結合。
本篇紀錄編譯配置的部分,如果想要後續開發的像是配置 config 請參考之前的開發&編譯 net-snmp 文章(用 tag 尋找 net-snmp!)。
一、準備
- 下載原始碼 http://www.net-snmp.org/download.html
- 準備 Toolchain (廠商提供或是 arm-linux-gnueabi-gcc ,使用命令 sudo apt-get install gcc-arm-linux-gnueabi 安裝即可。
二、編譯配置
解壓 net-snmp 壓縮包,進入原始碼包目錄
使用 ./configure –help ,查看以下配置有哪些。
選項 | 說明 |
---|---|
–host=arm-linux | 運行平台 |
–target=arm-linux | 目標平台 |
–build=i686-linux | 編譯平台 |
–with-cc=arm-linux-gcc | 交叉編譯工具 |
–with-ar=arm-linux-ar | 打包工具 |
–prefix=/usr/local/net-snmp | 安裝目錄 |
–disable-shared | 不編譯共享庫 |
–disable-scripts | 不要安裝 mib2c 等腳本 |
–with-endianness=little | 指定小端模式 |
-enable-mini-agent | 最小化構建 agent |
–disable-deprecated | 不編譯棄用的功能 |
–without-logfile | 指定 snmpd 不輸出日誌文件(可以使用–with-logfile 指定默認日誌文件位置) |
–disable-minimalist | 刪除所有非基本的代碼功能 |
–enable-debugging | 打開調試信息 |
–disable-testing-code | 不使用測試代碼(某些代碼不被使用) |
–with-openssl=/opt/hardhat | openssl 庫路徑(用於支持加密等) |
–disable-ipv6 | 不使用 IPv6 |
–disable-manuals | 不安裝 manpage 說明頁 |
–disable-ucd-snmp-compatibility | 不需要兼容 ucd-snmp |
–disable-snmptrapd-subagent | 不用支持 snmptrapd 的子代理 |
–disable-embedded-perl | 在 SNMP 代理和 snmptrapd 禁用嵌入式 Perl。默認啟用 |
–disable-applications | 是否關閉 snmpget 等功能,根據自己的需要選擇 |
–with-default-snmp-version=”3” | 指定默認協議版本 |
–enable-as-needed | 僅鏈接需要庫,不鏈接不必要的庫(如果只使用其他方法行不通,鏈接 libperl 針對應用而非 Net-SNMP 庫。) |
1. 我使用的配置
$./configure --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf --prefix=/opt/net-snmp-5.7.3-arm CC=arm-linux-gnueabihf-gcc CFLAGS="-I /opt/toolchains/ti335x/cortexa8t2hf-vfp-neon-linux-gnueabi/usr/include/" --disable-embedded-perl --disable-shared --enable-mini-agent
# --disable-scripts 這個經測試後會無法使用subagent的功能,所以筆者在這邊不使用。
(略)...
Default version of SNMP to use (3): (Enter)
(略)...
System Contact Information (@@no.where): XXXXXXXXXXX@gmail.com
(略)...
System Location (Unknown): Taiwan
(略)...
---------------------------------------------------------
Net-SNMP configuration summary:
---------------------------------------------------------
SNMP Versions Supported: 1 2c 3
Building for: linux
Net-SNMP Version: 5.7.3
Network transport support: Callback Unix Alias TCP UDP IPv4Base SocketBase TCPBase UDPIPv4Base UDPBase
SNMPv3 Security Modules: usm
Agent MIB code: default_modules => snmpv3mibs mibII ucd_snmp notification notification-log-mib target agent_mibs agentx disman/event disman/schedule utilities host
MYSQL Trap Logging: unavailable
Embedded Perl support: disabled
SNMP Perl modules: disabled
SNMP Python modules: disabled
Crypto support from: internal
Authentication support: MD5 SHA1
Encryption support: DES AES
Local DNSSEC validation: disabled
---------------------------------------------------------
2. 參考網站的配置
$./configure --host=arm-linux --build=i686-linux --with-cc=arm-linux-gnueabihf-gcc --with-ar=arm-linux-gnueabihf-ar --prefix=/usr/local/net-snmp --disable-shared --with-endianness=little --with-openssl=/usr/local/openssl --with-mib-modules=examples/example
---------------------------------------------------------
Net-SNMP configuration summary:
---------------------------------------------------------
SNMP Versions Supported: 1 2c 3
Building for: linux
Net-SNMP Version: 5.7.3
Network transport support: Callback Unix Alias TCP UDP IPv4Base SocketBase TCPBase UDPIPv4Base UDPBase
SNMPv3 Security Modules: usm
Agent MIB code: default_modules => snmpv3mibs mibII/snmp_mib mibII/system_mib mibII/sysORTable mibII/vacm_vars mibII/vacm_conf
MYSQL Trap Logging: unavailable
Embedded Perl support: disabled
SNMP Perl modules: building -- not embeddable
SNMP Python modules: disabled
Crypto support from: internal
Authentication support: MD5 SHA1
Encryption support: DES AES
Local DNSSEC validation: disabled
---------------------------------------------------------
三、編譯
# make -j (核心數),可以根據你電腦有多少CPU 來加快編譯。
$ make -j 2
(略,如果有遇到別問題請參考前篇文章)...
$ make install
四、疑難排解
1. 沒有 perl 庫的問題
編譯的時候出現找不到 perl 庫的問題,這個問題其實也好解決,編譯一個就是嘛。但是呢,沒有這個必要,麻煩。
/usr/lib/gcc-cross/arm-linux-gnueabi/4.9/../../../../arm-linux-gnueabi/bin/ld: cannot find -lperl
collect2: error: ld returned 1 exit status
Makefile:484: recipe for target 'libnetsnmpagent.la' failed
make[1]: *** [libnetsnmpagent.la] Error 1
make[1]: Leaving directory '/home/o/snmp/net-snmp-5.7.3/agent'
Makefile:656: recipe for target 'subdirs' failed
make: *** [subdirs] Error 1
解決辦法 其實很簡單,將之前 configure 配置的時候加上一個參數--disable-embedded-perl,然後再次 make 就可以了。