Ubuntu 建立 net-snmp cross-complier 開發環境

以下文章參考 (net-snmp5.7.3 移植到 arm-linux 平台)https://www.cnblogs.com/quliuliu2013/p/7520241.html ,在跟自己專有的交叉編譯工具相結合。

本篇紀錄編譯配置的部分,如果想要後續開發的像是配置 config 請參考之前的開發&編譯 net-snmp 文章(用 tag 尋找 net-snmp!)。

一、準備

  1. 下載原始碼 http://www.net-snmp.org/download.html
  2. 準備 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 就可以了。

  目錄