diff options
Diffstat (limited to 'README.solaris')
-rw-r--r-- | README.solaris | 1311 |
1 files changed, 1311 insertions, 0 deletions
diff --git a/README.solaris b/README.solaris new file mode 100644 index 0000000..625aae2 --- /dev/null +++ b/README.solaris @@ -0,0 +1,1311 @@ +README.solaris +$Id$ + +This document describes issues relating to compiling, +installing and using net-snmp on Solaris. + +0. Introduction +1. Things you will need +2. Disabling Sun's SNMP daemons +3. Compiling net-snmp +4. Obtaining and installing binaries +5. Creating snmpd.conf and testing +6. Creating your own binaries +7. Using Sun's SNMP daemon and net-snmp together +8. Monitoring disks, processes and execs (DISMAN-EVENT-MIB) +9. Monitoring CPU temp, fan and power supply sensors (LM-SENSORS-MIB) +10. MIB rewrites for IF-MIB, TCP-MIB and UDP-MIB + +Additional compilation issues: + +11. Files descriptors and fopen +12. Perl +13. sed +14. OpenSSL and crle +15. IPv6 +16. Wish list + +Other issues: + +17. Known Bugs!! +18. Discussion and further information + +------------------------------------------------------------ + +0. Introduction + +This document is a compilation of information relating to +running net-snmp (www.net-snmp.org) on Sun SPARC and Ultra +hardware under the Solaris operating system. + +This can be done either in conjunction with or as a +replacement for Sun's SNMP daemons. + +This is discussed in detail in the sections below. Since +this is the work of several authors, credit is given. +Discussion, however, should take place on the net-snmp-users +or net-snmp-coders mailing lists so everybody can +benefit. See http://sourceforge.net/mail/?group_id=12694 . +Use "net-snmp-users" for general usage questions and "net-snmp-coders" for +discussion of net-snmp source code. + +No warranty is implied by this document. +This document is copyright but usage allowed under the same +licensing as net-snmp in general. See http://www.net-snmp.org/COPYING.txt. + +------------------------------------------------------------ + +1. Things you will need + +A. Root access + +Root access is required to follow pretty much any of +the steps below. At a bare minimum, you will need +to be able to start and stop daemons, which requires root +(at least for the default ports). + +B. Determine existing SNMP functionality + +SNMP uses ports 161 and 162 by default. Only one application +can use them at a time. If there is an existing SNMP +application (eg. Sun's snmpdx daemon) you need to either +turn this off or work around it. You may also have +a previous version of net-snmp, the older ucd-snmp, or +something completely different. The following commands: + + ps -ef | grep snm + ps -ef | grep mibi + +will give you a fairly good idea what is going on. + +If you see something like: + + root 643 1 0 Jan 16 ? 5:49 /usr/local/sbin/snmpd + +that's probably a version of net-snmp. The instructions in various +sections below should give you clues on what to do next. + +If you see something like: + + root 16178 1 0 13:16:04 pts/2 0:00 /usr/lib/snmp/snmpdx -y -c /etc/snmp/conf + +and/or + + root 21371 1 0 Feb 07 ? 0:52 mibiisa -r -p 41178 + +then Sun's SNMP daemons are running. + +If you need this, for example if you use the Solstice Enterprise +Agent, you may wish to run net-snmp as a sub-agent (see section 7). +Otherwise, you will need to disable Sun's daemons (see section 2). + +Regardless you may wish to compile net-snmp from source +and install it (see sections 3, 5 and 6) or install +binaries (see sections 4 and 5). + +If some other SNMP daemon is running, you will need to determine +where it came from and what it's being used for. You get clues by +typing "snmpd -v" or "snmpd --help". In some cases it may be +a subagent or agent from another application, such as ORACLE. If +you disable its agent, you will need to re-create this functionality +under net-snmp (eg. by running it as a sub-agent). ORACLE's SNMP +functionality is turned on by default and may be unnecessary if +you aren't using ORACLE's Enterprise Manager. Refer to ORACLE's +documentation on how to disable it. + + +If you have decided to compile your own net-snmp, you will need ... + +C. A compilation environment + +-a compiler (gcc or Sun's Forte cc) or the gcc libraries + (note, the cc in /usr/ucb is NOT a full-blown compiler) +-OpenSSL (sunfreeware.com or source www.openssl.org) +-zlib (sunfreeware.com or source www.gzip.org/zlib/) +-an SNMP community string ("public" is deprecated) + +If you are installing on a development machine, it may be best +to compile OpenSSL and zlib from source, otherwise +obtain the appropriate zlib for your platform from sunfreeware +and install (it goes to /usr/local automatically). +Obtain the appropriate OpenSSL for your platform from sunfreeware +and install (it goes to /usr/local), you may need the gcc libraries. +These libraries should not need to be installed if you are using +binaries, but your mileage may vary. Note the library problem +with libcrypto noted below (section 14). + +There are two choices for compilers. Sun has a Forte development +suite that includes a standalone C compiler. If you have it, it +is likely installed in /opt/SUNWspro/bin. + +The more common choice is gcc (2.95.3 or better have been tested) +available from sunfreeware.com. If you install gcc, you do not +need the gcc libraries. 3.3.2 or later is recommended. + +Given that net-snmp is developed to work on a wide variety of +platforms, but especially for linux, there's a better chance of +it working using gcc at any given time. We also do regular test +builds with Sun cc, though. + + -- Bruce Shaw <Bruce.Shaw at shaw.ca> + -- Thomas Anders <tanders@users.sourceforge.net> + +------------------------------------------------------------ + +2. Disabling Sun's SNMP daemons + +Note: Sun has started to include net-snmp (version 5.0.9 plus their +patches) with Solaris 10 and later. These instructions are written +with Solaris 9 and previous in mind. + +Out of the box, Sun runs four SNMP daemons: mibiisa, idmispd, +snmpXdmid and snmpdx. + +These must be disabled before running net-snmp unless you are planning +on running them together (see Section 7 below). Here is the procedure: + + cd /etc/rc3.d + ./S76snmpdx stop + ./S77dmi stop + mv S76snmpdx s76snmpdx + mv S77dmi s77dmi + +If you are using Solstice Disksuite, you may also be running +mdlogd. Leave this alone. + +You will need to create a new script to start net-snmp. +See dist/snmpd-init.d and dist/snmptrapd-init.d for templates. + + -- Bruce Shaw <Bruce.Shaw at shaw.ca> + +------------------------------------------------------------ + +3. Compiling net-snmp + +It is strongly recommended that you compile net-snmp from source. +That way you are guaranteed a working version for your specific +configuration of operating system, applications and libraries. + +If, for some reason, you cannot compile on a specific machine, +there are binaries available for download (see section 4). +In addition, you may create your own binaries (see section 6). + +You need to set your $PATH. This is extremely important +because otherwise there may be conflicts between the various +components of the development environment. + +If you are using FORTE: + +PATH=/usr/bin:/usr/sbin:/usr/ccs/bin:/opt/SUNWspro/bin:/usr/local/bin: + +If you are using gcc (installed in /usr/local/bin): + +PATH=/usr/sbin:/usr/local/bin:/usr/ccs/bin:/usr/bin + +Obtain a current version of net-snmp (which, if you're reading this, +presumably you have - don't you love recursion?) www.net-snmp.org/download/ + +Uncompress it and untar it in a working directory eg. /usr/local/src/net-snmp + +In order to save a lot of typing, you should create a "configure" +script eg. bcc.sh in the directory below eg. /usr/local/src. + + ./configure --with-mib-modules="ucd-snmp/lmSensors ucd-snmp/diskio \ + smux mibII/mta_sendmail" --with-cc=gcc + +(note, see the long discussion about Perl below) +(note, substitute "cc" for "gcc" as appropriate) +(note, for LM-SENSORS-MIB support, see discussion below) + +then call this script from the net-snmp directory ie ../bcc.sh + +and answer the appropriate questions (usually with the default). + +When it completes, you should see something like: + +--------------------------------------------------------- + Net-SNMP configuration summary: +--------------------------------------------------------- + + Net-SNMP Version: 5.4 + Building for: solaris2 + Network transport support: Callback Unix TCP UDP + SNMPv3 Security Modules: usm + Agent MIB code: mibII ucd_snmp snmpv3mibs notification target + \agent_mibs agentx agent_mibs utilities host disman/event-mib + \ucd-snmp/diskio smux agentx mibII/mta_sendmail + SNMP Perl modules: disabled + Embedded perl support: disabled + Authentication support: MD5 SHA1 + Encryption support: DES + +Type: + + make + +and watch for compile errors. + +You will receive numerous warnings. This is normal, +a side effect of supporting a variety of development environments. + +Now type: + + make test + +and watch for failures. Also watch for the special tests for Solaris. + +If you are satisfied with the tests, stop any snmpd daemons +that may be running (see section 2) and type: + + make install + +When complete, go on to section 5 below. + + -- Bruce Shaw <Bruce.Shaw at shaw.ca> + +------------------------------------------------------------ + +4. Obtaining and installing binaries + +It is strongly recommended that you compile net-snmp from source. +That way you are guaranteed a working version for your specific +configuration of operating system, applications and libraries. + +Binaries for Solaris may be found in two locations. + +www.sunfreeware.com - this installs as a package. +It does not have Perl support. + +Therefore, I recommend: + + http://net-snmp.sourceforge.net/download/ (you will be redirected) + +This is the official repository for binaries. + +To determine which binary you need, you will need several pieces of +information. + +-operating system version, +-hardware platform +-net-snmp version desired + +The first two may be obtained by typing: + + uname -a + +It will return something like: + +SunOS foo 5.8 Generic_108528-14 sun4u sparc SUNW,Ultra-4 + +5.8 means Solaris 8 +5.7 means Solaris 7 etc. + +"sun4u" is the Ultra hardware platform +"sun4m" is SuperSPARC eg. Sparc 5 or Sparc 10 +"sun4d" is older SPARC boxes. + +You can then decode the binary version by its name eg.: + +net-snmp_5.0.9-SunOS_5.8_sun4u.tar.gz + +means "net-snmp version 5.0.9 for Solaris 8 running on Ultra +hardware". + +Once you have found the appropriate version, download it to a +distribution directory (making one if necessary) eg. /usr/local/dist + +Type the following: (using the sample above) + + cd / + tar -xvf /usr/local/dist/net-snmp-5.0.9-SunOS_5.8_sun4u.tar + +The binaries, libraries, etc. will be installed in /usr/local. + +Remove the tar file to save space. Create an snmpd.conf (see below) +or use an existing one from another machine. +It installs in /usr/local/share/snmp. + +Install a startup script (see section 1). + +For further information, see README.solaris.binaries.x that ships +with the binaries. + +--Bruce Shaw <Bruce.Shaw at shaw.ca> + +------------------------------------------------------------ + +5. Creating snmpd.conf and testing + +When everything is installed, run: + + snmpconf -g basic_setup + +and answer the questions appropriately. If you are using +the defaults, place the resulting snmpd.conf file in: + +/usr/local/share/snmp/snmpd.conf + +A security note - use of the "public" community is deprecated. +This example uses "whatever" as a community. + +When you have the daemon running either with the script above or running: + + /usr/local/sbin/snmpd + +test the daemon's functionality by typing: + + snmpget -v 1 -c whatever localhost sysUpTime.0 + snmpwalk -v 2c -c whatever -m ALL localhost .1.3 | more + +and paging through the results. + +If you have problems, you can examine diagnostic messages +by running: + + /usr/local/sbin/snmpd -f -Le + +or use gdb (available from www.sunsolve.com) as follows: + + cd /usr/local/sbin + gdb snmpd + run -f -Le + +and when it blows up: + + bt + +to get the backtrace. + +You can use: + + run -f -Le -D <modulename> + +to display debug messages. + +To display all debug messages type: + + run -f -Le -D ALL + +but this will be extremely verbose. + + -- Bruce Shaw <Bruce.Shaw at shaw.ca> with suggestions by Thushara Wickram + +------------------------------------------------------------ + +6. Creating your own binaries + +Pick an appropriate name for a tarfile +eg. net-snmp-5.4.custom-SunOS_5.8_sun4u.tar (see above) +(this particular one means "a customized version of +net-snmp 5.4 that works under Solaris 8 running on Ultra hardware") + +Create an empty directory such as /usr/local/dist, then do the following +from the source directory (using the example above): + + make install prefix=/usr/local/dist/usr/local \ + exec_prefix=/usr/local/dist/usr/local + cd /usr/local/dist + tar -cvf net-snmp-5.4.custom-SunOS_5.8_sun4u.tar usr + +Transfer this file to the machine where you want to install from binary. +Place it in a distribution directory eg. /usr/local/dist +Type the following (using the example above): + + cd / + tar -xvf /usr/local/dist/net-snmp-5.4.custom-SunOS_5.8_sun4u.tar + +Remove the tar file to save space. Create an snmpd.conf (see above) +or use an existing one from another machine. If you are using +the defaults, it installs in /usr/local/share/snmp. Install +a startup script (see section 2). + +Note that if you create a binary with Perl support (see below) an +identically configured Perl needs to be installed as well. + + -- Bruce Shaw <Bruce.Shaw at shaw.ca> + +------------------------------------------------------------ + +7. Using Sun's SNMP daemon and net-snmp together + +Net-SNMP may be used as a subagent in conjunction with Sun's snmpdx daemon. + +To do this, you will need to modify several files, +all located in /etc/snmp/conf. + +First, do the following: + + /etc/rc3.d/S76snmpdx stop (assuming you haven't done so already, and...) + /etc/rc3.d/S77dmi stop (...assuming you haven't renamed them) + + cd /etc/snmp/conf + cp snmpd.conf snmpd.conf.orig + cp snmpdx.acl snmpdx.acl.orig + cp snmpdx.reg snmpdx.reg.orig + cp snmpdx.rsrc snmpdx.rsrc.orig + cp mibiisa.reg mibiisa.reg.orig + cp mibiisa.rsrc mibiisa.rsrc.orig + +modify snmpd.conf with the correct: + + sysdescr + syscontact + sysLocation + system-group-read-community + read-community (in my example below I will use community "whatever") + trap + trap-community + managers (leave blank for all) + +modify snmpdx.acl with the correct: + + trap-community + trap-recipients + communities + access + +Make sure that in snmpdx.reg the port is 161. + +You will now need to add two files - net-snmp.reg and net-snmp.rsrc + +In this example, "subtrees" is set for HOST-RESOURCES-MIB, and UCD-SNMP-MIB. +Do not use net-snmp's MIB-2 information as this is already provided by +Sun's mib and may cause a conflict. + +::::: net-snmp.reg :::::: + +# net-snmp.reg +# mib-2 is already provided by the mibiisa process +# that is a default sub agent of snmpdx +# we are specifying only hostmib and ucd +########## +# agents # +########## + +# The following 3 macros are predefined: +# +# mib-2 = 1.3.6.1.2.1 +# enterprise = 1.3.6.1.4.1 +# sun = 1.3.6.1.4.1.42 +# +# You can define your own macros, so that you can +# manipulate strings instead of OIDs in defining the agent. +# See the "agent" section below. + +macros = +{ + host = mib-2.25 + ucd = enterprise.2021 +} + +agents = +{ + { + name = "net-snmp" + subtrees = { host,ucd } + timeout = 2000000 + watch-dog-time = 86400 + } +} + +:::::::::::::::::: + +::::: net-snmp.rsrc :::::: + +# /etc/snmp/conf/net-snmp.rsrc + +resource = +{ + { + registration_file = "/etc/snmp/conf/net-snmp.reg" + policy = "spawn" + type = "legacy" + command = "/usr/local/sbin/snmpd $PORT" + } + +} + +:::::::::::::::::: + +Stop any net-snmp processes that may be running. + +Start Sun's daemons by typing: + + /etc/rc3.d/S76snmpdx start (assuming you haven't renamed it) + /etc/rc3.d/S77dmi start (assuming you haven't renamed it) + +Wait a moment for everything to stabilize, then try these two queries: + + snmpget -v 1 -c whatever localhost sysDescr.0 + snmpget -v 1 -c whatever localhost hrSystemUptime.0 + +You should see something like: + + SNMPv2-MIB::sysDescr.0 = STRING: SunOS foo 5.6 Generic_105181-30 sun4u + +which is Sun's daemon talking, and: + + HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (78540910) 9 days, 2:10:09.10 + +which is net-snmp talking. It is acting as a sub-agent through Sun's daemon. + +If Sun's daemons fail, you will need to shut down the snmpd daemons by typing: + + pkill snmpd + +Then do the following: + + /etc/rc3.d/S76snmpdx stop (assuming you haven't renamed it) + /etc/rc3.d/S77dmi stop (assuming you haven't renamed it) + /etc/rc3.d/S76snmpdx start (assuming you haven't renamed it) + /etc/rc3.d/S77dmi start (assuming you haven't renamed it) + +rather than trying to individually clobber all the various Sun daemons. + +This configuration appears to deal properly with snmpgets +and handle mistakes gracefully. + +Beyond this, your mileage may vary. + +You may wish to modify the subtrees in net-snmp.reg as you find things +that do and don't work. Remember to keep backup copies of working +configurations. + + -- Bruce Shaw <Bruce.Shaw at shaw.ca> from notes by Stefan Radman and C Wells + +------------------------------------------------------------ + +8. Monitoring disks, processes and execs (DISMAN-EVENT-MIB) + +Important note: this section only applies to the old DISMAN-EVENT-MIB +implementation called "disman/event-mib", *not* the current "disman/event" +mib module which is active by default since net-snmp 5.3 and later. + +For a full explanation of using DISMAN-EVENT-MIB, see: + +http://www.net-snmp.org/man/snmpd.conf.html + +To use this component, net-snmp must be compiled with the option.. + +--with-mib-modules="disman/event-mib" + +This discussion concerns the use of DISMAN-EVENT-MIB with Solaris. + +There is a bug preventing the use of some of its functionality. This +discussion will document what is known to work and how to use it. + +The problem revolves around the use of monitors. The... + +defaultMonitors yes + +token will NOT work for reasons discussed below. I suspect that the +notificationEvent tokens will not work for the same reason but this +has not been tested. Your mileage may vary. Same with includeAllDisks. + +The documentation suggests using... + +monitor -o prNames -o prErrMessage "process table" prErrorFlag != 0 + +to monitor all processes. This will fail with ambiguous results. + +To monitor processes, put a separate monitor line for each process. + +For example: +###### +proc smail +proc mdlogd + +monitor -r 30 -i -o prNames.1 -o prErrMessage.1 "Process smail" prErrorFlag.1 !=0 +monitor -r 30 -i -o prNames.2 -o prErrMessage.2 "Process Solstice Disksuite SNMP trap" prErrorFlag.2 !=0 + +To monitor disks, do the same. An example: + +######## +# This example sends a trap if root has less than 10% available and /usr6 less t +han 90% +# +disk / 10% +disk /usr6 90% + +monitor -i -r 30 -o dskPath.1 -o dskErrorMsg.1 "root file system" dskErrorFlag.1 !=0 +monitor -i -r 30 -o dskPath.2 -o dskErrorMsg.2 "ORACLE file system" dskErrorFlag.2 != 0 +######### + +To implement an external program then monitor its results you need to set up your script. + +Here is a sample script. + +#!//usr/bin/ksh +xstatus=0 + +if [ $xstatus -eq 0 ];then +echo success: $0 +else +echo FAILURE: $0 +fi + +exit $xstatus +###end of script tester## + +Place this script in /usr/local/src and make it executable. Make copies called +tester1, tester2 etc. +and make them executable. + +Here is a sample snmpd.conf snippet that makes use of the exec feature: +############## + +exec tester1 /usr/local/src/tester1 +exec tester2 /usr/local/src/tester2 +exec tester3 /usr/local/src/tester3 +exec tester4 /usr/local/src/tester4 +exec tester5 /usr/local/src/tester5 + +monitor -i -r 60 -o extNames.1 -o extOutput.1 "status table 1" extResult.1 != 0 +monitor -i -r 60 -o extNames.2 -o extOutput.2 "status table 2" extResult.2 != 0 +monitor -i -r 60 -o extNames.3 -o extOutput.3 "status table 3" extResult.3 != 0 +monitor -i -r 60 -o extNames.4 -o extOutput.4 "status table 4" extResult.4 != 0 +monitor -i -r 60 -o extNames.5 -o extOutput.5 "status table 5" extResult.5 != 0 +############## + +While snmpd is running, go to /usr/local/src and modify one of the tester programs eg. tester1 + +xstatus=1 + +and save the file. Sometime in the next 60 seconds, a trap will be generated. +Change the value back to 0, then modify another file. + +If you are unsure of the correct row number within a specific table, do an snmpwalk eg. + +snmpwalk -v 2c -c public -m ALL localhost prNames + +The same methodology can presumably be used for fileName and laNames. Your mileage may vary. + + + -- Bruce Shaw <Bruce.Shaw at shaw.ca> with Allan McIntosh and Wes Hardaker + +------------------------------------------------------------ + +9. Monitoring CPU temp, fan and power supply sensors (LM-SENSORS-MIB) + +Note: This module (ucd-snmp/lmSensors) works in "read only" mode to examine +sensors. It cannot change switch or fan settings. + +It has been tested at least on the following platforms: + +Enterprise 450 +V880 +280R + +If you have information about other platforms this is desperately needed. For +example, the only "state" that I'm aware of for an i2c is "OK". The more +information we have, the richer the components. + +Please report any performance statistics, bugs or omissions to the users list. +Please report any code suggestions to the coders list. See links below. + + +This component delivers information that you would normally see by typing: + +/usr/platform/`uname -m`/sbin/prtdiag -v + +At present this is only supported on the Ultra (sun4u) platform. + +To display this information, net-snmp must be compiled with the option: + +--with-mib-modules="ucd-snmp/lmSensors" + +Early Ultra servers such as the Ultra 1 or Ultra 2 did not report +any sensor information at all. Later servers, such as the Enterprise 450 +reported this information using kstat. Sun's latest servers make use +of the picld daemon to control system resources and report fan information. +This module reads in the information from picld. It cannot modify settings. + +You can see this information by typing: + +prtpicl -v | more + +The following is typical output from net-snmp: + +E450# snmpwalk -v 2c -c public -m ALL localhost lmSensors +LM-SENSORS-MIB::lmTempSensorsIndex.1 = INTEGER: 0 +LM-SENSORS-MIB::lmTempSensorsIndex.2 = INTEGER: 1 +LM-SENSORS-MIB::lmTempSensorsIndex.3 = INTEGER: 2 +LM-SENSORS-MIB::lmTempSensorsIndex.4 = INTEGER: 3 +LM-SENSORS-MIB::lmTempSensorsDevice.1 = STRING: Ambient +LM-SENSORS-MIB::lmTempSensorsDevice.2 = STRING: CPU1 +LM-SENSORS-MIB::lmTempSensorsDevice.3 = STRING: CPU2 +LM-SENSORS-MIB::lmTempSensorsDevice.4 = STRING: CPU3 +LM-SENSORS-MIB::lmTempSensorsValue.1 = Gauge32: 22 +LM-SENSORS-MIB::lmTempSensorsValue.2 = Gauge32: 45 +LM-SENSORS-MIB::lmTempSensorsValue.3 = Gauge32: 46 +LM-SENSORS-MIB::lmTempSensorsValue.4 = Gauge32: 49 +LM-SENSORS-MIB::lmFanSensorsIndex.1 = INTEGER: 0 +LM-SENSORS-MIB::lmFanSensorsIndex.2 = INTEGER: 1 +LM-SENSORS-MIB::lmFanSensorsIndex.3 = INTEGER: 2 +LM-SENSORS-MIB::lmFanSensorsDevice.1 = STRING: fan type CPU number 0 +LM-SENSORS-MIB::lmFanSensorsDevice.2 = STRING: fan type PWR number 0 +LM-SENSORS-MIB::lmFanSensorsDevice.3 = STRING: fan type AFB number 0 +LM-SENSORS-MIB::lmFanSensorsValue.1 = Gauge32: 33 +LM-SENSORS-MIB::lmFanSensorsValue.2 = Gauge32: 31 +LM-SENSORS-MIB::lmFanSensorsValue.3 = Gauge32: 63 +LM-SENSORS-MIB::lmVoltSensorsIndex.1 = INTEGER: 0 +LM-SENSORS-MIB::lmVoltSensorsIndex.2 = INTEGER: 1 +LM-SENSORS-MIB::lmVoltSensorsIndex.3 = INTEGER: 2 +LM-SENSORS-MIB::lmVoltSensorsDevice.1 = STRING: power supply 0 +LM-SENSORS-MIB::lmVoltSensorsDevice.2 = STRING: power supply 1 +LM-SENSORS-MIB::lmVoltSensorsDevice.3 = STRING: power supply 2 +LM-SENSORS-MIB::lmVoltSensorsValue.1 = Gauge32: 38 +LM-SENSORS-MIB::lmVoltSensorsValue.2 = Gauge32: 39 +LM-SENSORS-MIB::lmVoltSensorsValue.3 = Gauge32: 39 +LM-SENSORS-MIB::lmMiscSensorsIndex.1 = INTEGER: 0 +LM-SENSORS-MIB::lmMiscSensorsIndex.2 = INTEGER: 1 +LM-SENSORS-MIB::lmMiscSensorsIndex.3 = INTEGER: 2 +LM-SENSORS-MIB::lmMiscSensorsDevice.1 = STRING: FSP +LM-SENSORS-MIB::lmMiscSensorsDevice.2 = STRING: Backplane4 +LM-SENSORS-MIB::lmMiscSensorsDevice.3 = STRING: Backplane8 +LM-SENSORS-MIB::lmMiscSensorsValue.1 = Gauge32: 192 +LM-SENSORS-MIB::lmMiscSensorsValue.2 = Gauge32: 0 +LM-SENSORS-MIB::lmMiscSensorsValue.3 = Gauge32: 0 + +V880# snmpwalk -v 2c -c public -m ALL localhost lmSensors +LM-SENSORS-MIB::lmTempSensorsIndex.1 = INTEGER: 0 +LM-SENSORS-MIB::lmTempSensorsIndex.2 = INTEGER: 1 +LM-SENSORS-MIB::lmTempSensorsIndex.3 = INTEGER: 2 +LM-SENSORS-MIB::lmTempSensorsIndex.4 = INTEGER: 3 +LM-SENSORS-MIB::lmTempSensorsIndex.5 = INTEGER: 4 +LM-SENSORS-MIB::lmTempSensorsIndex.6 = INTEGER: 5 +LM-SENSORS-MIB::lmTempSensorsIndex.7 = INTEGER: 6 +LM-SENSORS-MIB::lmTempSensorsIndex.8 = INTEGER: 7 +LM-SENSORS-MIB::lmTempSensorsIndex.9 = INTEGER: 8 +LM-SENSORS-MIB::lmTempSensorsIndex.10 = INTEGER: 9 +LM-SENSORS-MIB::lmTempSensorsDevice.1 = STRING: CPU0_DIE_TEMPERATURE_SENSOR +LM-SENSORS-MIB::lmTempSensorsDevice.2 = STRING: CPU2_DIE_TEMPERATURE_SENSOR +LM-SENSORS-MIB::lmTempSensorsDevice.3 = STRING: CPU1_DIE_TEMPERATURE_SENSOR +LM-SENSORS-MIB::lmTempSensorsDevice.4 = STRING: CPU3_DIE_TEMPERATURE_SENSOR +LM-SENSORS-MIB::lmTempSensorsDevice.5 = STRING: CPU4_DIE_TEMPERATURE_SENSOR +LM-SENSORS-MIB::lmTempSensorsDevice.6 = STRING: CPU6_DIE_TEMPERATURE_SENSOR +LM-SENSORS-MIB::lmTempSensorsDevice.7 = STRING: MB_AMB_TEMPERATURE_SENSOR +LM-SENSORS-MIB::lmTempSensorsDevice.8 = STRING: IOB_AMB_TEMPERATURE_SENSOR +LM-SENSORS-MIB::lmTempSensorsDevice.9 = STRING: DBP0_AMB_TEMPERATURE_SENSOR +LM-SENSORS-MIB::lmTempSensorsDevice.10 = STRING: DBP1_AMB_TEMPERATURE_SENSOR +LM-SENSORS-MIB::lmTempSensorsValue.1 = Gauge32: 71 +LM-SENSORS-MIB::lmTempSensorsValue.2 = Gauge32: 60 +LM-SENSORS-MIB::lmTempSensorsValue.3 = Gauge32: 66 +LM-SENSORS-MIB::lmTempSensorsValue.4 = Gauge32: 59 +LM-SENSORS-MIB::lmTempSensorsValue.5 = Gauge32: 65 +LM-SENSORS-MIB::lmTempSensorsValue.6 = Gauge32: 69 +LM-SENSORS-MIB::lmTempSensorsValue.7 = Gauge32: 28 +LM-SENSORS-MIB::lmTempSensorsValue.8 = Gauge32: 25 +LM-SENSORS-MIB::lmTempSensorsValue.9 = Gauge32: 25 +LM-SENSORS-MIB::lmTempSensorsValue.10 = Gauge32: 24 +LM-SENSORS-MIB::lmFanSensorsIndex.1 = INTEGER: 0 +LM-SENSORS-MIB::lmFanSensorsIndex.2 = INTEGER: 1 +LM-SENSORS-MIB::lmFanSensorsIndex.3 = INTEGER: 2 +LM-SENSORS-MIB::lmFanSensorsIndex.4 = INTEGER: 3 +LM-SENSORS-MIB::lmFanSensorsIndex.5 = INTEGER: 4 +LM-SENSORS-MIB::lmFanSensorsIndex.6 = INTEGER: 5 +LM-SENSORS-MIB::lmFanSensorsIndex.7 = INTEGER: 6 +LM-SENSORS-MIB::lmFanSensorsIndex.8 = INTEGER: 7 +LM-SENSORS-MIB::lmFanSensorsIndex.9 = INTEGER: 8 +LM-SENSORS-MIB::lmFanSensorsIndex.10 = INTEGER: 9 +LM-SENSORS-MIB::lmFanSensorsDevice.1 = STRING: CPU0_PFAN_TACH +LM-SENSORS-MIB::lmFanSensorsDevice.2 = STRING: CPU1_PFAN_TACH +LM-SENSORS-MIB::lmFanSensorsDevice.3 = STRING: CPU0_SFAN_TACH +LM-SENSORS-MIB::lmFanSensorsDevice.4 = STRING: CPU1_SFAN_TACH +LM-SENSORS-MIB::lmFanSensorsDevice.5 = STRING: IO_BRIDGE_PFAN_TACH +LM-SENSORS-MIB::lmFanSensorsDevice.6 = STRING: IO_BRIDGE_SFAN_TACH +LM-SENSORS-MIB::lmFanSensorsDevice.7 = STRING: IO0_PFAN_TACH +LM-SENSORS-MIB::lmFanSensorsDevice.8 = STRING: IO1_PFAN_TACH +LM-SENSORS-MIB::lmFanSensorsDevice.9 = STRING: IO0_SFAN_TACH +LM-SENSORS-MIB::lmFanSensorsDevice.10 = STRING: IO1_SFAN_TACH +LM-SENSORS-MIB::lmFanSensorsValue.1 = Gauge32: 2439 +LM-SENSORS-MIB::lmFanSensorsValue.2 = Gauge32: 2586 +LM-SENSORS-MIB::lmFanSensorsValue.3 = Gauge32: 2459 +LM-SENSORS-MIB::lmFanSensorsValue.4 = Gauge32: 2564 +LM-SENSORS-MIB::lmFanSensorsValue.5 = Gauge32: 3409 +LM-SENSORS-MIB::lmFanSensorsValue.6 = Gauge32: 0 +LM-SENSORS-MIB::lmFanSensorsValue.7 = Gauge32: 3947 +LM-SENSORS-MIB::lmFanSensorsValue.8 = Gauge32: 3896 +LM-SENSORS-MIB::lmFanSensorsValue.9 = Gauge32: 4000 +LM-SENSORS-MIB::lmFanSensorsValue.10 = Gauge32: 3896 +LM-SENSORS-MIB::lmVoltSensorsIndex.1 = INTEGER: 0 +LM-SENSORS-MIB::lmVoltSensorsIndex.2 = INTEGER: 1 +LM-SENSORS-MIB::lmVoltSensorsIndex.3 = INTEGER: 2 +LM-SENSORS-MIB::lmVoltSensorsIndex.4 = INTEGER: 3 +LM-SENSORS-MIB::lmVoltSensorsIndex.5 = INTEGER: 4 +LM-SENSORS-MIB::lmVoltSensorsIndex.6 = INTEGER: 5 +LM-SENSORS-MIB::lmVoltSensorsIndex.7 = INTEGER: 6 +LM-SENSORS-MIB::lmVoltSensorsIndex.8 = INTEGER: 7 +LM-SENSORS-MIB::lmVoltSensorsIndex.9 = INTEGER: 8 +LM-SENSORS-MIB::lmVoltSensorsIndex.10 = INTEGER: 9 +LM-SENSORS-MIB::lmVoltSensorsIndex.11 = INTEGER: 10 +LM-SENSORS-MIB::lmVoltSensorsIndex.12 = INTEGER: 11 +LM-SENSORS-MIB::lmVoltSensorsDevice.1 = STRING: PS0_3_3V_I_SENSOR +LM-SENSORS-MIB::lmVoltSensorsDevice.2 = STRING: PS0_5V_I_SENSOR +LM-SENSORS-MIB::lmVoltSensorsDevice.3 = STRING: PS0_12V_I_SENSOR +LM-SENSORS-MIB::lmVoltSensorsDevice.4 = STRING: PS0_48V_I_SENSOR +LM-SENSORS-MIB::lmVoltSensorsDevice.5 = STRING: PS1_3_3V_I_SENSOR +LM-SENSORS-MIB::lmVoltSensorsDevice.6 = STRING: PS1_5V_I_SENSOR +LM-SENSORS-MIB::lmVoltSensorsDevice.7 = STRING: PS1_12V_I_SENSOR +LM-SENSORS-MIB::lmVoltSensorsDevice.8 = STRING: PS1_48V_I_SENSOR +LM-SENSORS-MIB::lmVoltSensorsDevice.9 = STRING: PS2_3_3V_I_SENSOR +LM-SENSORS-MIB::lmVoltSensorsDevice.10 = STRING: PS2_5V_I_SENSOR +LM-SENSORS-MIB::lmVoltSensorsDevice.11 = STRING: PS2_12V_I_SENSOR +LM-SENSORS-MIB::lmVoltSensorsDevice.12 = STRING: PS2_48V_I_SENSOR +LM-SENSORS-MIB::lmVoltSensorsValue.1 = Gauge32: 6 +LM-SENSORS-MIB::lmVoltSensorsValue.2 = Gauge32: 4 +LM-SENSORS-MIB::lmVoltSensorsValue.3 = Gauge32: 3 +LM-SENSORS-MIB::lmVoltSensorsValue.4 = Gauge32: 4 +LM-SENSORS-MIB::lmVoltSensorsValue.5 = Gauge32: 6 +LM-SENSORS-MIB::lmVoltSensorsValue.6 = Gauge32: 4 +LM-SENSORS-MIB::lmVoltSensorsValue.7 = Gauge32: 3 +LM-SENSORS-MIB::lmVoltSensorsValue.8 = Gauge32: 4 +LM-SENSORS-MIB::lmVoltSensorsValue.9 = Gauge32: 6 +LM-SENSORS-MIB::lmVoltSensorsValue.10 = Gauge32: 4 +LM-SENSORS-MIB::lmVoltSensorsValue.11 = Gauge32: 3 +LM-SENSORS-MIB::lmVoltSensorsValue.12 = Gauge32: 4 + +This component also reports information for switches, LEDs +and i2c's (devices accessing the i2c bus). +Because the MIB only allows us to display numeric +information a certain amount of translation has been done. + +Switches: + +0 = OFF +1 = ON +2 = NORMAL +3 = LOCKED +4 = UNKNOWN +5 = DIAG +6 = SECURE +99 = other + +LEDs: + +0 = OFF +1 = ON +2 = BLINK (this may not exist) +99 = other + +i2c's: +0 = OK +99 = other + +In order to prevent inordinant consumption of machine resources, +some sensor information is cached. Currently, information +retrieved from picld is cached for six seconds. + + -- Bruce Shaw <Bruce.Shaw at shaw.ca> + +------------------------------------------------------------ + +10. MIB rewrites for IF-MIB, TCP-MIB and UDP-MIB + +net-snmp 5.4 has started to include rewrites for the IF-MIB, TCP-MIB and +UDP-MIB implementations. They need to be explicitely enabled, though: + + ./configure --enable-mfd-rewrites ... + +See the Net-SNMP Wiki (http://www.net-snmp.org/wiki/index.php/IF-MIB_rewrite) +for further details. + +Thanks to Sun for the excellent patches. + + + -- Thomas Anders <tanders@users.sourceforge.net> + +------------------------------------------------------------ + +11. Files descriptors and fopen + +Solaris has a limitation on the number of file descriptors (255) +available in stdio, so that fopen() fails if more than +255 file descriptors (sockets) are open. This prevents mibs from +being loaded after 250 sockets are open, since parse.c uses stdio. + +SEan <burke_sp@pacbell.net> investigated this problem, and had this +report on using the SFIO package to solve this problem. + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +The SFIO package ( http://www.research.att.com/sw/tools/sfio/ ) +is a buffered streams IO package that is much more more sophisticated +than stdio, but it does support stdio API's for backward compatibility, +and that's the aspect that is important here. + +To compile with SFIO, we simply add -I/usr/local/sfio/include to the +$CPPFLAGS before compiling net-snmp. This causes SFIO's stdio.h to +preempt Solaris stdio, mapping calls like fopen() and fprintf() to +the SFIO implementations. This produces a libnetsnmp that does not +have the fopen() limitation. Any application that links to this +libnetsnmp must also be linked to libsfio. + +Here are the two caveats: + +A. libsfio exports the functions 'getc' and 'putc', for reasons that +are not clear. These are the only symbols it exports that conflict +with stdio. While getc and putc are traditionally macros, Solaris +makes them functions in multithreaded code (compiled with -mt, +-pthread, or -D_REENTRANT). If your native stdio code links to the +libsfio versions, a crash will result. + +There are two solutions to this problem. You may remove getc and putc +from libsfio, since SFIO defines getc and putc as macros, by doing: + + ar d libsfio.a getc.o + ar d libsfio.a putc.o + +or link to SFIO's stdio compatibility library, libstdio, ahead of +libsfio. This library wraps all of the native stdio calls with +versions that are safe for native or sfio streams, in case you +need to share streams between SFIO and native stdio codes. + +B. libsfio provides 64-bit offsets in fseek(), ftell(). This is +a good thing, since SFIO is intended to avoid needless limitations, +but it means that SFIO's stdio.h defines off_t to be a 64-bit offset. +Net-SNMP uses readdir(), which returns a struct dirent containing +a 32-bit off_t, so the code compiled for SFIO doesn't access +struct dirent's correctly. + +There are two solutions to this problem, as well. The first is to +include <dirent.h> at the start of SFIO's stdio.h. Since SFIO +defines a macro substitution for off_t, this leaves struct dirent's +definition unchanged. + +An alternative, which I haven't verified, is to define _FILE_OFFSET_BITS +to be 64 when compiling libnetsnmp. According to what I see in Solaris's +/usr/include/sys/feature_tests.h, you can select a 64-bit off_t at +compile time with this setting, which should make readdir()'s off_t +compatible with SFIO's ftell(), fseek(). + [[ We have received reports that this approach does not in fact work +(see Perl discussion below)]] + +Finally, thanks to Phong Vo and AT&T Labs for a fast, robust and +portable package that solves this headache very neatly. + +-SEan <burke_sp@pacbell.net> + +------------------------------------------------------------ + +12. Perl + +Net-SNMP may be compiled with Perl support by configuring like: + + ./configure -enable-embedded-perl ... + +This should only be done if you are sure you really need Perl, +for the following reasons: + +Solaris 8 and later ship with a version of Perl compiled using Sun's cc. + +This causes a problem when attempting to compile net-snmp +with Perl functionality ie.: + + ./configure --with-mib-modules="ucd-snmp/lmSensors ucd-snmp/diskio \ + smux mibII/mta_sendmail" --enable-embedded-perl + +because during the Perl section of the compile, it attempts to do so +using the methodology used to compile the original Perl, not +what you're currently using. This can be discovered by typing: + + perl -V + +and it says (among other things) + + Compiler: + cc='cc' + +and you don't have the full version of Sun's C compiler on your +system, it's going to break. + +In addition if it was compiled with: + + LFS_CFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 + +net-snmp will not compile correctly. + +Given that the Perl provided with Solaris 8 (5.005_03) and Solaris 9 +(5.005_03 and 5.6.1) is somewhat stale, upgrading may be to your advantage. + +Perl did not ship with Solaris before version 8. If you installed a +version from www.sunfreeware.com, it is compiled with some extra flags +that cause the net-snmp compile to break. + +In either case, you will need to compile and install Perl. + +There are, however, some issues. + +A. Some applications (eg. /usr/bin/kstat) require this exact version +of Perl because of libraries. These instructions below install Perl +in /usr/local/bin (and optionally /usr/bin/). The original is left +intact in /usr/perl5/bin/perl where, in fact, the kstat script looks +for it. If you have version specific scripts, you will need to do +the same either by invoking /usr/perl5/bin/perl or putting: + +#!/usr/perl/bin/perl -w + +as the first line of your script and making it executable +(see the /usr/bin/kstat source as an example). + +B. The instructions below disable large file support. + +This means that Perl would be unable to deal +successfully with files larger than 2 Gb. +Again, using /usr/perl5/bin/perl or a version compiled +with this functionality would solve this. + +Hence the ideal solution is a net-snmp specific Perl in its own directory. + +The following instructions will install a working Perl in /usr/local/net-snmp. + +Install gcc version 3.3.2 (or later) from www.sunfreeware.com. + +Download the current stable release of Perl + + http://www.cpan.org/src/stable.tar.gz + +and gunzip and untar. (This document assumes Perl 5.8.3 or later) + +cd to the source directory and type the following: + + sh Configure -Dcc=gcc -Dprefix=/usr/local/net-snmp -Uinstallusrbinperl \ + -Duseshrplib -Dcf_email=your_email@your_domain \ + -Dperladmin=your_email@your_domain -Uuselargefiles -de + +Replace your_email@your_domain by your real email address. If you intend +to compile Net-SNMP with Sun cc later on, replace gcc with cc above. + +When it is finished, do: + + grep cppsymbols config.sh + +and make sure "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" does NOT appear. + +Then do: + + make + make test (optional) + make install + /usr/local/net-snmp/bin/perl -V + +if everything looks all right, compile net-snmp (see above) with the +following differences: + +env PERLPROG=/usr/local/net-snmp/bin/perl ./configure --enable-embedded-perl \ + --with-mib-modules=ucd-snmp/lmSensors,ucd-snmp/diskio,smux,mibII/mta_sendmail \ + --with-cc=gcc && make && make test && make install + +Make sure you specify the correct path to your self-compiled Perl binary +and use the same compiler like the one you used when building Perl above. +Feel free to add other configure options, of course. + +"make test" includes some tests for the Net-SNMP Perl functionalities. + +Once you have compiled and installed net-snmp you can test the Perl +capabilities of the final installation by doing the following: + +Copy the perl_module.pl script found at + +http://www.net-snmp.org/tutorial-5/toolkit/perl/index.html + +to /usr/local/net-snmp + +and modify your /usr/local/share/snmp/snmpd.conf file to contain the entry: + +perl do "/usr/local/net-snmp/perl_module.pl"; + +then do: + +/usr/local/bin/snmpwalk -v 2c -c whatever localhost .1.3.6.1.4.1.8072.999 + +It should return the following: + +NET-SNMP-MIB::netSnmp.999.1.2.1 = STRING: "hello world" + +WARNING!! If you are planning on creating binary versions of net-snmp with +Perl capability, you will also need to ship the Perl which you created in +/usr/local/net-snmp. + + -- Bruce Shaw <Bruce.Shaw at shaw.ca> + -- Thomas Anders <tanders@users.sourceforge.net> + +------------------------------------------------------------ + +13. sed + +Various sed versions in older Solaris releases (Solaris 8 and earlier +at least) have serious limitations that may affect ./configure +when building net-snmp. All these issues *should* have been addressed +in net-snmp 5.4 and later. If you still have problems, please let us know +and consider: + +- installing GNU sed and putting it in front of your PATH +- installing the available Sun patches for the various sed versions + (/usr/bin/sed, /usr/xpg4/bin/sed, /usr/ucb/sed) +- try the suggestions below + +The version of sed in /usr/ucb on Solaris 2.5.1 and 2.6 can't +cope with the size of the substitution strings used in config.status. + +Putting /usr/bin ahead of /usr/ucb in the search path fixes this. + +/usr/xpg4/bin/sed is seen to segfault under Solaris 8 when running configure. +Putting /usr/bin ahead of /usr/xpg4/bin fixes this. + + + -- Thomas Anders <tanders@users.sourceforge.net> + -- zach dot metzinger at microtune dot com + +------------------------------------------------------------ + +14. OpenSSL and crle + +If compiling with OpenSSL (e.g. from sunsolve), it's possible that +the agent won't successfully load the crypto library (typically +in /usr/local/ssl/lib) when it is in use and will return a +cannot find library error message of some sort. + +To rectify this, you will need to use the /usr/bin/crle command, which +did NOT ship with some versions of Solaris, but came as part of later +patches. You should make sure the following patches are up to date: + +107733 (Solaris 2.6) +106950 (Solaris 2.7) +109147 (Solaris 8) +115833 (Trusted Solaris 8) +112693 (Solaris 9) + +Then type the following: + +/usr/bin/crle + +It will return something like: + +Default configuration file (/var/ld/ld.config) not found + Default Library Path (ELF): /usr/lib (system default) + Trusted Directories (ELF): /usr/lib/secure (system default) + +Find the location of the libcrypto libraries by typing: + +find /usr -name "libcrypto*" -print + +which will probably display: + +/usr/local/ssl/lib/libcrypto.a +/usr/local/ssl/lib/libcrypto.so +/usr/local/ssl/lib/libcrypto.so.0 +/usr/local/ssl/lib/libcrypto.so.0.9.7 + +which is the default installation for OpenSSL. + +To include this in the loader search path, type: + +/usr/bin/crle -u -l /usr/local/ssl/lib + +/usr/bin/crle will now display: + +Configuration file [3]: /var/ld/ld.config + Default Library Path (ELF): /usr/lib:/usr/local/ssl/lib + Trusted Directories (ELF): /usr/lib/secure (system default) + +Command line: + crle -c /var/ld/ld.config -l /usr/lib:/usr/local/ssl/lib + +If this fails, usually by displaying: + +crle: /var/ld/ld.config: open failed: No such file or directory + +you will need to create this directory by hand by doing the following: + +mkdir /var/ld +cd /var/ld +ln -s . 32 +mkdir sparcv9 +chgrp bin sparcv9 +ln -s sparcv9 64 +touch ld.config + +then do: + +crle -c /var/ld/ld.config -l /usr/lib:/usr/local/ssl/lib + +Thanks to Dave Shield and Johannes Schmidt-Fischer + + -- Bruce Shaw <Bruce.Shaw at shaw.ca> + +------------------------------------------------------------ + +15. IPv6 + +Starting with net-snmp 5.4 you can enable the UDPIPv6 and TCPIPv6 +transports on Solaris: + + ./configure --enable-ipv6 + +There's no support for the mibII/ipv6 mib module, though. + + + -- Thomas Anders <tanders@users.sourceforge.net> + +------------------------------------------------------------ + +16. Wish list + +A. Code cleanup + +There may be opportunities for shared code between UCD-SNMP +and HOST-RESOURCES-MIB. + +There may be opportunities to optimize caching perhaps +using the new auto-caching code. + +B. LM-SENSORS-MIB + +We need a complete list of sensors from various platforms so +they can be displayed properly. + +C. ORACLE + +How to get ORACLE's SNMP functionality to work as a sub-agent. + +D. Largefile support + +Rework the host mib module to work even if net-snmp is built with +largefile support. This would eliminate the most important problems +with Perl (see section 12). + + -- Bruce Shaw <Bruce.Shaw at shaw.ca> + -- Thomas Anders <tanders@users.sourceforge.net> + +------------------------------------------------------------ + +17. Known Bugs!! + +A. hrDeviceTable (HOST-RESOURCES-MIB) + +This section of code is only aware of disk controllers 0 through 7. +Hence, anything on controller c8 and above will be invisible. + +B. hrPartitionTable (HOST-RESOURCES-MIB) + +At present, hrPartitionSize data only works for regular ufs +partitions eg. /dev/dsk/c0t0d0s0 that are mounted. They +are displayed in partition order rather than the order +they are mounted. Partitions mounted as mirrors, metastate +database replicas, swap or members of a RAID display size 0. + +As a workaround, put entries for disks you are +interested in in snmpd.conf and examine +using UCD-SNMP-MIB. + + + -- Bruce Shaw <Bruce.Shaw at shaw.ca> + +------------------------------------------------------------ + +18. Discussion and further information + +For discussion or further information contact the coders and users +lists at http://sourceforge.net/mail/?group_id=12694 . + |