本文记录的是在ubuntu12.04上使用net-snmp 5.7.2源码包安装snmp的过程,最新的源码包可上net-snmp官方网站下载。

  1. 如果系统自带有低版本的snmp,则可用如下方法卸载:
1
2
cloud@cloud:~$ sudo apt-get purge snmpd snmp
cloud@cloud:~$ sudo apt-get autoremove
  1. 创建snmp目录用于存放下载的snmp源码包:
1
2
3
4
cloud@cloud:~$ pwd
/home/cloud
cloud@cloud:~$ mkdir snmp
cloud@cloud:~$ cd snmp/
  1. 下载snmp源码包:
1
cloud@cloud:~/snmp$ wget http://nchc.dl.sourceforge.net/project/net-snmp/net-snmp/5.7.2/net-snmp-5.7.2.zip
  1. 解压源码包使用zip工具,使用make命令编译源码包,libperl-dev是安装snmp所依赖的包
1
2
cloud@cloud:~/snmp$ sudo apt-get update
cloud@cloud:~/snmp$ sudo apt-get install zip make libperl-dev
  1. 解压、编译、安装snmp:
1
2
3
4
5
6
7
cloud@cloud:~/snmp$ pwd
/home/cloud/snmp
cloud@cloud:~/snmp$ unzip net-snmp-5.7.2.zip
cloud@cloud:~/snmp$ cd net-snmp-5.7.2/
cloud@cloud:~/snmp/net-snmp-5.7.2$ ./configure --with-default-snmp-version="2" --with-sys-contact="@@no.where" --with-sys-location="Unknown" --with-logfile="/var/log/snmpd.log" --with-persistent-directory="/var/net-snmp"
cloud@cloud:~/snmp/net-snmp-5.7.2$ make
cloud@cloud:~/snmp/net-snmp-5.7.2$ sudo make install

configure时,可自定义相应参数,编译成功后,会在最后出现如下所示信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
------------------------------------------------------------
Net-SNMP configuration summary
------------------------------------------------------------
SNMP Versions Supported: 1 2c 3
Building for: linux
Net-SNMP Version: 5.7.2
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: enabled
SNMP Perl modules: building -- embeddable
SNMP Python modules: disabled
Crypto support from: internal
Authentication support: MD5 SHA1
Encryption support: DES AES
Local DNSSEC validation: disabled
------------------------------------------------------------
  1. 对snmpd进行简单配置,这里使用里源码包里的EXAMPLE.conf文件, 将其拷贝到snmp的安装目录,这里是/usr/local/share/snmp/, 并重命名为snmpd.conf:
1
cloud@cloud:~/snmp/net-snmp-5.7.2$ sudo cp EXAMPLE.conf /usr/local/share/snmp/snmpd.conf
  1. 修改snmpd的配置文件:
1
cloud@cloud:~/snmp/net-snmp-5.7.2$ sudo vim /usr/local/share/snmp/snmpd.conf

将其内容替换为如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
###############################################################################
#
# EXAMPLE.conf:
# An example configuration file for configuring the Net-SNMP agent ('snmpd')
# See the 'snmpd.conf(5)' man page for details
#
# Some entries are deliberately commented out, and will need to be explicitly activated
#
###############################################################################
#
# AGENT BEHAVIOUR
#

#begin updated by Carya
# Listen for connections from the local system only
#agentAddress udp:127.0.0.1:161
# Listen for connections on all interfaces (both IPv4 *and* IPv6)
#agentAddress udp:161,udp6:[::1]:161

agentAddress udp:161



###############################################################################
#
# SNMPv3 AUTHENTICATION
#
# Note that these particular settings don't actually belong here.
# They should be copied to the file /var/net-snmp/snmpd.conf
# and the passwords changed, before being uncommented in that file *only*.
# Then restart the agent

# createUser authOnlyUser MD5 "remember to change this password"
# createUser authPrivUser SHA "remember to change this one too" DES
# createUser internalUser MD5 "this is only ever used internally, but still change the password"

# If you also change the usernames (which might be sensible),
# then remember to update the other occurances in this example config file to match.



###############################################################################
#
# ACCESS CONTROL
#

# system + hrSystem groups only
#view systemonly included .1.3.6.1.2.1.1
#view systemonly included .1.3.6.1.2.1.25.1
view all included .1

# Full access from the local host
#rocommunity public localhost
# Default access to basic system info
#rocommunity public default -V systemonly
rocommunity public default -V all

#end updated by Carya


# Full access from an example network
# Adjust this network address to match your local
# settings, change the community string,
# and check the 'agentAddress' setting above
#rocommunity secret 10.0.0.0/16

# Full read-only access for SNMPv3
rouser authOnlyUser
# Full write access for encrypted requests
# Remember to activate the 'createUser' lines above
#rwuser authPrivUser priv

# It's no longer typically necessary to use the full 'com2sec/group/access' configuration
# r[ou]user and r[ow]community, together with suitable views, should cover most requirements



###############################################################################
#
# SYSTEM INFORMATION
#

# Note that setting these values here, results in the corresponding MIB objects being 'read-only'
# See snmpd.conf(5) for more details
sysLocation Sitting on the Dock of the Bay
sysContact Me <me@example.org>
# Application + End-to-End layers
sysServices 72


#
# Process Monitoring
#
# At least one 'mountd' process
proc mountd
# No more than 4 'ntalkd' processes - 0 is OK
proc ntalkd 4
# At least one 'sendmail' process, but no more than 10
proc sendmail 10 1

# Walk the UCD-SNMP-MIB::prTable to see the resulting output
# Note that this table will be empty if there are no "proc" entries in the snmpd.conf file


#
# Disk Monitoring
#
# 10MBs required on root disk, 5% free on /var, 10% free on all other disks
disk / 10000
disk /var 5%
includeAllDisks 10%

# Walk the UCD-SNMP-MIB::dskTable to see the resulting output
# Note that this table will be empty if there are no "disk" entries in the snmpd.conf file


#
# System Load
#
# Unacceptable 1-, 5-, and 15-minute load averages
load 12 10 5

# Walk the UCD-SNMP-MIB::laTable to see the resulting output
# Note that this table *will* be populated, even without a "load" entry in the snmpd.conf file



###############################################################################
#
# ACTIVE MONITORING
#

# send SNMPv1 traps
trapsink localhost public
# send SNMPv2c traps
#trap2sink localhost public
# send SNMPv2c INFORMs
#informsink localhost public

# Note that you typically only want *one* of these three lines
# Uncommenting two (or all three) will result in multiple copies of each notification.


#
# Event MIB - automatically generate alerts
#
# Remember to activate the 'createUser' lines above
iquerySecName internalUser
rouser internalUser
# generate traps on UCD error conditions
defaultMonitors yes
# generate traps on linkUp/Down
linkUpDownNotifications yes



###############################################################################
#
# EXTENDING THE AGENT
#

#
# Arbitrary extension commands
#
extend test1 /bin/echo Hello, world!
extend-sh test2 echo Hello, world! ; echo Hi there ; exit 35
#extend-sh test3 /bin/sh /tmp/shtest

# Note that this last entry requires the script '/tmp/shtest' to be created first,
# containing the same three shell commands, before the line is uncommented

# Walk the NET-SNMP-EXTEND-MIB tables (nsExtendConfigTable, nsExtendOutput1Table
# and nsExtendOutput2Table) to see the resulting output

# Note that the "extend" directive supercedes the previous "exec" and "sh" directives
# However, walking the UCD-SNMP-MIB::extTable should still returns the same output,
# as well as the fuller results in the above tables.


#
# "Pass-through" MIB extension command
#
#pass .1.3.6.1.4.1.8072.2.255 /bin/sh PREFIX/local/passtest
#pass .1.3.6.1.4.1.8072.2.255 /usr/bin/perl PREFIX/local/passtest.pl

# Note that this requires one of the two 'passtest' scripts to be installed first,
# before the appropriate line is uncommented.
# These scripts can be found in the 'local' directory of the source distribution,
# and are not installed automatically.

# Walk the NET-SNMP-PASS-MIB::netSnmpPassExamples subtree to see the resulting output


#
# AgentX Sub-agents
#
# Run as an AgentX master agent
master agentx
# Listen for network connections (from localhost)
# rather than the default named socket /var/agentx/master
#agentXSocket tcp:localhost:705

注意使用begin updated by Caryaend updated by Carya之间的改动内容。

  1. 使用snmpconf命令生成snmp.conf配置文件:
1
cloud@cloud:~/snmp/net-snmp-5.7.2$ snmpconf

其操作过程如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
cloud@cloud:~/snmp/net-snmp-5.7.2$ snmpconf

The following installed configuration files were found:

1: /usr/local/share/snmp/snmpd.conf

Would you like me to read them in? Their content will be merged with the
output files created by this session.

Valid answer examples: "all", "none","3","1,2,5"

Read in which (default = all): none

I can create the following types of configuration files for you.
Select the file type you wish to create:
(you can create more than one as you run this program)

1: snmpd.conf
2: snmptrapd.conf
3: snmp.conf

Other options: quit

Select File: 3

The configuration information which can be put into snmp.conf is divided
into sections. Select a configuration section for snmp.conf
that you wish to create:

1: Debugging output options
2: Output style options
3: Textual mib parsing
4: Default Authentication Options

Other options: finished

Select section: 4

Section: Default Authentication Options
Description:
This section defines the default authentication
information. Setting these up properly in your
~/.snmp/snmp.conf file will greatly reduce the amount of
command line arguments you need to type (especially for snmpv3).

Select from:

1: The default port number to use
2: The default snmp version number to use.
3: The default snmpv1 and snmpv2c community name to use when needed.
4: The default snmpv3 security name to use when using snmpv3
5: The default snmpv3 context name to use
6: The default snmpv3 security level to use
7: The default snmpv3 authentication type name to use
8: The default snmpv3 authentication pass phrase to use
9: The default snmpv3 privacy (encryption) type name to use
10: The default snmpv3 privacy pass phrase to use

Other options: finished, list

Select section: 1

Configuring: defaultport
Description:
The default port number to use
This token specifies the default port number you want packets to
be sent to and received from.
override: with -p on the command line.
arguments: portnum

Enter the default port number to use: 161

Finished Output: defaultport 161

Section: Default Authentication Options
Description:
This section defines the default authentication
information. Setting these up properly in your
~/.snmp/snmp.conf file will greatly reduce the amount of
command line arguments you need to type (especially for snmpv3).

Select from:

1: The default port number to use
2: The default snmp version number to use.
3: The default snmpv1 and snmpv2c community name to use when needed.
4: The default snmpv3 security name to use when using snmpv3
5: The default snmpv3 context name to use
6: The default snmpv3 security level to use
7: The default snmpv3 authentication type name to use
8: The default snmpv3 authentication pass phrase to use
9: The default snmpv3 privacy (encryption) type name to use
10: The default snmpv3 privacy pass phrase to use

Other options: finished, list

Select section: 2

Configuring: defversion
Description:
The default snmp version number to use.
override: with -v on the command line.
arguments: 1|2c|3

Enter the default snmp version number to use (1|2c|3): 2c

Finished Output: defversion 2c

Section: Default Authentication Options
Description:
This section defines the default authentication
information. Setting these up properly in your
~/.snmp/snmp.conf file will greatly reduce the amount of
command line arguments you need to type (especially for snmpv3).

Select from:

1: The default port number to use
2: The default snmp version number to use.
3: The default snmpv1 and snmpv2c community name to use when needed.
4: The default snmpv3 security name to use when using snmpv3
5: The default snmpv3 context name to use
6: The default snmpv3 security level to use
7: The default snmpv3 authentication type name to use
8: The default snmpv3 authentication pass phrase to use
9: The default snmpv3 privacy (encryption) type name to use
10: The default snmpv3 privacy pass phrase to use

Other options: finished, list

Select section: 3

Configuring: defcommunity
Description:
The default snmpv1 and snmpv2c community name to use when needed.
If this is specified, you don't need to include the community
name as an argument to the snmp applications.
override: with -c on the command line.
arguments: communityname

Enter the default community name to use: public

Finished Output: defcommunity public

Section: Default Authentication Options
Description:
This section defines the default authentication
information. Setting these up properly in your
~/.snmp/snmp.conf file will greatly reduce the amount of
command line arguments you need to type (especially for snmpv3).

Select from:

1: The default port number to use
2: The default snmp version number to use.
3: The default snmpv1 and snmpv2c community name to use when needed.
4: The default snmpv3 security name to use when using snmpv3
5: The default snmpv3 context name to use
6: The default snmpv3 security level to use
7: The default snmpv3 authentication type name to use
8: The default snmpv3 authentication pass phrase to use
9: The default snmpv3 privacy (encryption) type name to use
10: The default snmpv3 privacy pass phrase to use

Other options: finished, list

Select section: finished

The configuration information which can be put into snmp.conf is divided
into sections. Select a configuration section for snmp.conf
that you wish to create:

1: Debugging output options
2: Output style options
3: Textual mib parsing
4: Default Authentication Options

Other options: finished

Select section: finished

I can create the following types of configuration files for you.
Select the file type you wish to create:
(you can create more than one as you run this program)

1: snmpd.conf
2: snmptrapd.conf
3: snmp.conf

Other options: quit

Select File: quit


The following files were created:

snmp.conf

These files should be moved to /usr/local/share/snmp if you
want them used by everyone on the system. In the future, if you add
the -i option to the command line I'll copy them there automatically for you.

Or, if you want them for your personal use only, copy them to
/home/cloud/.snmp . In the future, if you add the -p option to the
command line I'll copy them there automatically for you.

cloud@cloud:~/snmp/net-snmp-5.7.2$
  1. 将生成的snmp.conf文件拷贝到snmp的安装目录下:
1
cloud@cloud:~/snmp/net-snmp-5.7.2$ sudo cp snmp.conf /usr/local/share/snmp/
  1. 启动snmp,注意需要使用是root用户:
1
cloud@cloud:~/snmp/net-snmp-5.7.2$ sudo snmpd

可能会出现如下错误,对应的解决方案如下:

1
2
3
4
5
6
7
8
9
10
11
cloud@cloud:~/snmp/net-snmp-5.7.2$ sudo snmpd
snmpd: error while loading shared libraries: libnetsnmpagent.so.30: cannot open shared object file: No such file or directory
cloud@cloud:~/snmp/net-snmp-5.7.2$ sudo cp /usr/local/lib/libnetsnmpagent.so.30 /usr/lib/
cloud@cloud:~/snmp/net-snmp-5.7.2$ sudo snmpd
snmpd: error while loading shared libraries: libnetsnmpmibs.so.30: cannot open shared object file: No such file or directory
cloud@cloud:~/snmp/net-snmp-5.7.2$ sudo cp /usr/local/lib/libnetsnmpmibs.so.30 /usr/lib/
cloud@cloud:~/snmp/net-snmp-5.7.2$ sudo snmpd
snmpd: error while loading shared libraries: libnetsnmp.so.30: cannot open shared object file: No such file or directory
cloud@cloud:~/snmp/net-snmp-5.7.2$ sudo cp /usr/local/lib/libnetsnmp.so.30 /usr/lib/
cloud@cloud:~/snmp/net-snmp-5.7.2$ sudo snmpd
cloud@cloud:~/snmp/net-snmp-5.7.2$
  1. 检测snmpd是否启动成功:
1
2
cloud@cloud:~/snmp/net-snmp-5.7.2$ netstat -an | grep 161
udp 0 0 0.0.0.0:161 0.0.0.0:*
  1. 最终测试snmp:
1
2
3
4
5
6
7
8
cloud@cloud:~/snmp/net-snmp-5.7.2$ snmpwalk -v2c -c public localhost UCD-SNMP-MIB::dskTotal
UCD-SNMP-MIB::dskTotalLow.1 = Gauge32: 14332332
UCD-SNMP-MIB::dskTotalLow.2 = Gauge32: 0
UCD-SNMP-MIB::dskTotalLow.3 = Gauge32: 14332332
UCD-SNMP-MIB::dskTotalLow.4 = Gauge32: 203908
UCD-SNMP-MIB::dskTotalLow.5 = Gauge32: 5120
UCD-SNMP-MIB::dskTotalLow.6 = Gauge32: 509768
UCD-SNMP-MIB::dskTotalLow.7 = Gauge32: 233191