README.solaris
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:46k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. README.solaris
  2. $Id: README.solaris,v 1.11 2004/11/06 04:27:01 hardaker Exp $
  3. This document describes issues relating to compiling,
  4. installing and using net-snmp on Solaris.
  5. 0.  Introduction
  6. 1.  Things you will need
  7. 2.  Disabling Sun's SNMP daemons
  8. 3.  Compiling net-snmp
  9. 4.  Obtaining and installing binaries
  10. 5.  Creating snmpd.conf and testing
  11. 6.  Creating your own binaries
  12. 7.  Using Sun's SNMP daemon and net-snmp together
  13. 8.  Monitoring disks, processes and execs (DISMAN-EVENT-MIB)
  14. 9.  Monitoring CPU temp, fan and power supply sensors (LM-SENSORS-MIB)
  15. Additional compilation issues:
  16. 10. Files descriptors and fopen
  17. 11. Perl
  18. 12. sed and $PATH
  19. 13. OpenSSL
  20. 14. Wish list
  21. Other issues:
  22. 15.  Known Bugs!!
  23. 16.  Discussion and further information
  24. ------------------------------------------------------------
  25. 0.  Introducion
  26. This document is a compilation of information relating to
  27. running net-snmp (www.net-snmp.org) on Sun SPARC and ULTRA
  28. hardware under the Solaris operating system.
  29. This can be done either in conjunction with or as a 
  30. replacement for Sun's SNMP daemons.
  31. This is discussed in detail in the sections below.  Since
  32. this is the work of several authors, credit is given.
  33. Discussion, however, should take place on the net-snmp-users
  34. or net-snmp-coders mailing lists so everybody can
  35. benefit.  See http://sourceforge.net/mail/?group_id=12694 .
  36. Use "net-snmp-users" for general usage questions and "net-snmp-coders" for
  37. discussion of net-snmp source code.  
  38. No warranty is implied by this document.
  39. This document is copyright but usage allowed under the same
  40. licensing as net-snmp in general.  See http://www.net-snmp.org/COPYING.txt.
  41. ------------------------------------------------------------
  42. 1.  Things you will need
  43. A.  Root access
  44. Root access is required to follow pretty much any of
  45. the steps below.  At a bare minimum, you will need
  46. to be able to start and stop daemons, which requires root.
  47. B.  Determine existing SNMP functionality
  48. SNMP uses ports 161 and 162 by default.  Only one application
  49. can use them at a time.  If there is an existing SNMP
  50. application (eg. Sun's snmpdx daemon) you need to either
  51. turn this off or work around it.   You may also have
  52. a previous version of net-snmp, the older ucd-snmp, or
  53. something completely different.  The following commands:
  54.    ps -ef | grep snm
  55.    ps -ef | grep mibi
  56. will give you a fairly good idea what is going on.
  57. If you see something like:
  58.   root 643 1 0 Jan 16 ? 5:49 /usr/local/sbin/snmpd
  59. that's probably a version of net-snmp.  The instructions in various
  60. sections below should give you clues on what to do next.
  61. If you see something like:
  62.   root 16178 1 0 13:16:04 pts/2 0:00 /usr/lib/snmp/snmpdx -y -c /etc/snmp/conf
  63. and/or 
  64.   root 21371 1 0 Feb 07 ? 0:52 mibiisa -r -p 41178
  65. then Sun's SNMP daemons are running.  
  66. If you need this, for example if you use the Solstice Enterprise
  67. Agent, you may wish to run net-snmp as a sub-agent (see section 7).
  68. Otherwise, you will need to disable Sun's daemons (see section 2).
  69. Regardless you may wish to compile net-snmp from source
  70. and install it (see sections 3, 5 and 6) or install
  71. binaries (see sections 4 and 5).  
  72. If some other SNMP daemon is running, you will need to determine
  73. where it came from and what it's being used for.  You get clues by
  74. typing "snmpd -v" or "snmpd --help".  In some cases it may be
  75. a subagent or agent from another application, such as ORACLE.  If
  76. you disable its agent, you will need to re-create this functionality
  77. under net-snmp (eg. by running it as a sub-agent).  ORACLE's SNMP
  78. functionality is turned on by default and may be unnecessary if
  79. you aren't using ORACLE's Enterprise Manager.  Refer to ORACLE's
  80. documentation on how to disable it.
  81. C.  gnu tar
  82. At present the application will not untar properly using Sun's tar.
  83. The problem may be related to path length.  A working tar
  84. is available at www.sunfreeware.com.
  85. If you have decided to compile your own net-snmp, you will need ...
  86. D.  A compilation environment
  87. -a compiler (gcc or Sun's Forte cc) or the gcc libraries
  88.    (note, the cc in /usr/ucb is NOT a full-blown compiler)
  89. -OpenSSL (sunfreeware.com or source www.openssl.org)
  90. -zlib (sunfreeware.com or source www.gzip.org/zlib/)
  91. -an SNMP community string ("public" is deprecated)
  92. If you are installing on a development machine, it may be best
  93. to compile openssl and zlib from source, otherwise
  94. obtain the appropriate zlib for your platform from sunfreeware
  95. and install (it goes to /usr/local automatically).
  96. Obtain the appropriate openssl for your platform from sunfreeware
  97. and install (it goes to /usr/local), you may need the gcc libraries.
  98. These libraries should not need to be installed if you are using
  99. binaries, but your mileage may vary.  Note the library problem
  100. with libcrypto noted below (section 11).
  101. There are two choices for compilers.  Sun has a Forte development
  102. suite that includes a standalone C compiler.  If you have it, it
  103. is likely installed in /opt/SUNWspro/bin.  
  104. The more common choice is gcc (currently 2.95.3 or 3.4)
  105. available from sunfreeware.com.  If you install gcc, you do not
  106. need the gcc libraries.  3.3.2 or later is recommended.
  107. Given that net-snmp is developed to work on a wide variety of
  108. platforms, but especially for linux, there's a better chance of
  109. it working using gcc at any given time.  Hence, gcc may
  110. simply be the better choice regardless of whether you have
  111. another compiler.
  112. -- Bruce Shaw <Bruce.Shaw at shaw.ca>
  113. ------------------------------------------------------------
  114. 2.  Disabling Sun's SNMP daemons
  115. Note:  Sun has included net-snmp with Solaris 10.  These
  116. instructions are written with Solaris 8 and previous in mind.
  117. Out of the box, Sun runs four SNMP daemons; mibiisa, idmispd, 
  118. xnmpXdmid and snmpdx. 
  119. These must be disabled before running net-snmp unless you are planning
  120. on running them together (see Section 7 below).  Here is the procedure:
  121.    cd /etc/rc3.d
  122.    ./S76snmpdx stop
  123.    ./S77dmi stop
  124.    mv S76snmpdx s76snmpdx
  125.    mv S77dmi s77dmi
  126. If you are using Solstice Disksuite, you may also be running
  127. mdlogd.  Leave this alone.
  128. You will need to create a new script to start net-snmp.
  129. Here's an example:
  130. ::::: /etc/rc3.d/S78net-snmp ::::::
  131. #!/sbin/sh
  132. #
  133. # /etc/rc3.d/S78net-snmp
  134. #
  135. # pkill has moved over the years so we need to find it
  136. #
  137. X=`which pkill`
  138. case "$1" in
  139. 'start')
  140.         /usr/local/sbin/snmpd 
  141.         ;;
  142. 'stop')
  143.         $X -TERM -x -u 0 snmpd
  144.         ;;
  145. *)
  146.         echo "Usage: $0 { start | stop }"
  147.         exit 1
  148.         ;;
  149. esac
  150. exit 0
  151. ::::::::::::::::::::::::::::::::::::
  152. -- Bruce Shaw <Bruce.Shaw at shaw.ca>
  153. ------------------------------------------------------------
  154. 3.  Compiling net-snmp
  155. It is strongly recommended that you compile net-snmp from source.
  156. That way you are guaranteed a working version for your specific 
  157. configuration of operating system, applications and libraries.
  158. If, for some reason, you cannot compile on a specific machine, 
  159. there are binaries available for download (see section 4).  
  160. In addition, you may create your own binaries (see section 6).
  161. You need to set your $PATH.  This is extremely important
  162. because otherwise there may be conflicts between the various 
  163. components of the development environment.
  164. If you are using FORTE:
  165. PATH=/usr/bin:/usr/sbin:/usr/ccs/bin/:opt/SUNWspro/bin:/usr/local/bin:
  166. If you are using gcc:
  167. PATH=/usr/sbin:/usr/local/bin:/usr/ccs/bin:/usr/bin
  168. Obtain a current version of net-snmp (which, if you're reading this,
  169. presumably you have - don't you love recursion?) www.net-snmp.org/download/
  170. Uncompress it and untar it in a working directory eg. /usr/local/src/net-snmp
  171. Note:  Sun's tar (/usr/bin/tar) may have problem with long directory
  172. paths.  You may need to install gnu tar available from www.sunfreeware.com.
  173. In order to save a lot of typing, you should create a "configure" 
  174. script eg. bcc.sh in the directory below eg. /usr/local/src.
  175.    ./configure --with-mib-modules="host disman/event-mib ucd-snmp/diskio 
  176.       smux agentx mibII/mta_sendmail" --with-cc=gcc
  177. (note, see the long discussion about Perl below)
  178. (note, subtitute "cc" for "gcc" as appropriate)
  179. (note, if you wish to use the new LM-SENSORS-MIB component, see
  180. discussion below)
  181. then call this script from the net-snmp directory ie ../bcc.sh
  182. and answer the appropriate questions (usually with the default).
  183. When it completes, you should see something like:
  184. ---------------------------------------------------------
  185.             Net-SNMP configuration summary:
  186. ---------------------------------------------------------
  187.   Net-SNMP Version:           5.2
  188.   Building for:               solaris2
  189.   Network transport support:  Callback Unix TCP UDP
  190.   SNMPv3 Security Modules:    usm
  191.   Agent MIB code:             mibII ucd_snmp snmpv3mibs notification target 
  192.   agent_mibs agentx agent_mibs utilities host disman/event-mib 
  193.   ucd-snmp/diskio smux agentx mibII/mta_sendmail
  194.   SNMP Perl modules:          disabled
  195.   Embedded perl support:      disabled
  196.   Authentication support:     MD5 SHA1
  197.   Encryption support:         DES
  198. Type:
  199.    make
  200. and watch for compile errors.  
  201. You will receive numerous warnings.  This is normal,
  202. a side effect of supporting a variety of development environments.
  203. Now type:
  204.    make test
  205. and watch for failures.  Also watch for the special tests for Solaris.
  206. If you are satisfied with the tests, stop any snmpd daemons 
  207. that may be running (see section 2) and type:
  208.    make install
  209. When complete, go on to section 5 below.
  210. -- Bruce Shaw <Bruce.Shaw at shaw.ca>
  211. ------------------------------------------------------------
  212. 4.  Obtaining and installing binaries
  213. It is strongly recommended that you compile net-snmp from source.
  214. That way you are guaranteed a working version for your specific
  215. configuration of operating system, applications and libraries.
  216. Binaries for Solaris may be found in two locations.
  217. www.sunfreeware.com - this installs as a package.  
  218. It does not have Perl support.
  219. Therefore, I recommend:
  220.    http://net-snmp.sourceforge.net/download/  (you will be redirected)
  221. This is the official repository for binaries.
  222. To determine which binary you need, you will need several pieces of
  223. information.
  224. -operating system version,
  225. -hardware platform
  226. -net-snmp version desired
  227. The first two may be obtained by typing:
  228.    uname -a
  229. It will return something like:
  230. SunOS foo 5.8 Generic_108528-14 sun4u sparc SUNW,Ultra-4
  231. 5.8 means Solaris 8
  232. 5.7 means Solaris 7  etc.
  233. "sun4u" is the Ultra hardware platform
  234. "sun4m" is SuperSPARC  eg. Sparc 5 or Sparc 10
  235. "sun4d" is older SPARC boxes.  
  236. You can then decode the binary version by its name eg.:
  237. net-snmp_5.0.9-SunOS_5.8_sun4u.tar.gz
  238. means "net-snmp version 5.0.9 for Solaris version 5.8 running on Ultra
  239. hardware".
  240. Once you have found the appropriate version, download it to a
  241. distribution directory (making one if necessary) eg. /usr/local/dist
  242. Type the following: (using the sample above)
  243.    cd /
  244.    tar -xvf /usr/local/dist/net-snmp-5.0.9-SunOS_5.8_sun4u.tar
  245. The binaries, libraries, etc. will be installed in /usr/local.
  246. There may be a problem with Sun's tar.  See discussion above.
  247. Remove the tar file to save space.  Create an snmpd.conf (see below)
  248. or use an existing one from another machine.
  249. It installs in /usr/local/share/snmp.
  250. Install a startup script (see section 1).
  251. For further information, see README.solaris.binaries.x
  252. --Bruce Shaw <Bruce.Shaw at shaw.ca>
  253. ------------------------------------------------------------
  254. 5.  Creating snmpd.conf and testing
  255. When everything is installed, run:
  256.    snmpconf -g basic_setup
  257. and answer the questions appropriately.  If you are using
  258. the defaults, place the resulting snmpd.conf file in:
  259. /usr/local/share/snmp/snmpd.conf
  260. A security note - use of the "public" community is deprecated.
  261. This example uses "whatever" as a community.
  262. When you have the daemon running either with the script above or running:
  263.    /usr/local/sbin/snmpd
  264. test the daemon's functionality by typing:
  265.    snmpget -v 1 -c whatever localhost sysUpTime.0
  266.    snmpwalk -v 2c -c whatever -m ALL localhost .1.3 | more
  267. and paging through the results.  
  268. If you have problems, you can examine diagnostic messages
  269. by running:
  270.    /usr/local/sbin/snmpd -f -L
  271. or use gdb (available from www.sunsolve.com) as follows:
  272.    cd /usr/local/sbin
  273.    gdb snmpd
  274.    run -f -L
  275. and when it blows up:
  276.    bt
  277. to get the backtrace.  
  278. You can use:
  279.    run -f -L -D <modulename>
  280. to display debug messages.
  281. To display all debug messages type:
  282.    run -f -L -D ALL 
  283. but this will be extremely verbose.
  284. -- Bruce Shaw <Bruce.Shaw at shaw.ca> with suggestions by Thushara Wickram
  285. ------------------------------------------------------------
  286. 6.  Creating your own binaries
  287. Pick an appropriate name for a tarfile 
  288. eg. net-snmp-5.2.custom-SunOS_5.8_sun4u.tar (see above)
  289. (this particular one means "a customized version of
  290. net-snmp 5.2 that works under Solaris 8 running on Ultra hardware")
  291. Create an empty directory such as /usr/local/dist, then do the following
  292. from the source directory (using the example above):
  293.    make install prefix=/usr/local/dist/usr/local 
  294.         exec_prefix=/usr/local/dist/usr/local
  295.    cd /usr/local/dist
  296.    tar -cvf net-snmp-5.2.custom-SunOS_5.8_sun4u.tar usr
  297. Transfer this file to the machine where you want to install from binary.
  298. Place it in a distribution directory eg. /usr/local/dist
  299. Type the following (using the example above):
  300.    cd /
  301.    tar -xvf /usr/local/dist/net-snmp-5.1.custom-SunOS_5.8_sun4u.tar
  302. Remove the tar file to save space.  Create an snmpd.conf (see above)
  303. or use an existing one from another machine.  If you are using
  304. the defaults, it installs in /usr/local/share/snmp.  Install
  305. a startup script (see section 2).
  306. Note that if you create a binary with Perl support (see below) an
  307. identically configured Perl needs to be installed as well.
  308. -- Bruce Shaw <Bruce.Shaw at shaw.ca>
  309. ------------------------------------------------------------
  310. 7.  Using Sun's SNMP daemon and net-snmp together
  311. Net-snmp may be used as a sub-agent in conjunction with Sun's snmpdx daemon.
  312. To do this, you will need to modify several files, 
  313. all located in /etc/snmp/conf.
  314. First, do the following:
  315.    /etc/rc3.d/S76snmpdx stop (assuming you haven't done so already, and...)
  316.    /etc/rc3.d/S77dmi stop    (...assuming you haven't renamed them)
  317.    cd /etc/snmp/conf
  318.    cp snmpd.conf snmpd.conf.orig
  319.    cp snmpdx.acl snmpdx.acl.orig
  320.    cp snmpdx.reg snmpdx.reg.orig
  321.    cp snmpdx.rsrc snmpdx.rsrc.orig
  322.    cp mibiisa.reg mibiisa.reg.orig
  323.    cp mibiisa.rsrc mibiisa.rsrc.orig
  324. modify snmpd.conf with the correct:
  325.    sysdescr
  326.    syscontact
  327.    sysLocation
  328.    system-group-read-community
  329.    read-community (in my example below I will use community "whatever")
  330.    trap 
  331.    trap-community
  332.    managers (leave blank for all)
  333. modify snmpd.acl with the correct:
  334.    trap-community
  335.    trap-recipients
  336.    communities
  337.    access
  338. Make sure that in snmpdx.reg the port is 161.
  339. You will now need to add two files - net-snmp.reg and net-snmp.rscs
  340. In this example, "subtrees" is set for HOST-RESOURCES-MIB, and UCD-SNMP-MIB.
  341. Do not use net-snmp's MIB-2 information as this is already provided by 
  342. Sun's mib and may cause a conflict.
  343. ::::: net-snmp.reg ::::::
  344. # net-snmp.reg
  345. # mib-2 is already provided by the mibiisa process
  346. # that is a default sub agent of snmpdx
  347. # we are specifying only hostmib and ucd 
  348. ##########
  349. # agents #
  350. ##########
  351.  
  352. agents =
  353. {
  354.         {
  355.                  name = "net-snmp"
  356.                  subtrees = { 1.3.6.1.2.1.25,1.3.6.1.4.1.2021 } # hostmib, ucd
  357.                  timeout = 2000000
  358.                  watch-dog-time = 86400
  359.         }
  360. }
  361. ::::::::::::::::::
  362. ::::: net-snmp.rscs ::::::
  363. # /etc/snmp/conf/net-snmp.rsrc
  364. resource =
  365. {
  366.         {
  367.    registration_file = "/etc/snmp/conf/net-snmp.reg"
  368.    policy = "spawn"
  369.    type = "legacy"
  370.    command = "/usr/local/sbin/snmpd -p $PORT"  
  371.       }
  372.  
  373. }
  374. ::::::::::::::::::
  375. Stop any net-snmp processes that may be running.  
  376. Start Sun's daemons by typing:
  377.    /etc/rc3.d/S76snmpdx start (assuming you haven't renamed it)
  378.    /etc/rc3.d/S77dmi start    (assuming you haven't renamed it)
  379. Wait a moment for everything to stabilize, then try these two queries:
  380.    snmpget -v 1 -c whatever localhost sysDescr.0
  381.    snmpget -v 1 -c whatever localhost hrSystemUptime.0
  382. You should see something like:
  383.    SNMPv2-MIB::sysDescr.0 = STRING: SunOS foo 5.6 Generic_105181-30 sun4u
  384. which is Sun's daemon talking, and:
  385.    HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (78540910) 9 days, 2:10:09.10
  386. which is net-snmp talking.  It is acting as a sub-agent through Sun's daemon.
  387. If Sun's daemons fail, you will need to shut down the snmpd daemons by typing:
  388.    pkill snmpd
  389. Then do the following:
  390.    /etc/rc3.d/S76snmpdx stop  (assuming you haven't renamed it)
  391.    /etc/rc3.d/S77dmi stop     (assuming you haven't renamed it)
  392.    /etc/rc3.d/S76snmpdx start (assuming you haven't renamed it)
  393.    /etc/rc3.d/S77dmi start    (assuming you haven't renamed it)
  394. rather than trying to individually clobber all the various Sun daemons.
  395. This configuration appears to deal properly with snmpgets 
  396. and handle mistakes gracefully.
  397. Beyond this, your mileage may vary.
  398. You may wish to modify the subtrees in net-snmp.reg as you find things
  399. that do and don't work.  Remember to keep backup copies of working
  400. configurations.
  401. -- Bruce Shaw <Bruce.Shaw at shaw.ca> from notes by Stefan Radman and C Wells
  402. ------------------------------------------------------------
  403. 8.  Monitoring disks, processes and execs (DISMAN-EVENT-MIB)
  404. For a full explanation of using DISMAN-EVENT-MIB, see:
  405. http://www.net-snmp.org/man/snmpd.conf.html
  406. To use this compoenent, net-snmp must be compiled with the option..
  407. --with-mib-modules="disman/event-mib"
  408. This discussion concerns the use of DISMAN-EVENT-MIB with Solaris.
  409. There is a bug preventing the use of some of its functionality.  This
  410. discussion will document what is known to work and how to use it.
  411. The problem revolves around the use of monitors.  The...
  412. defaultMonitors yes
  413. token will NOT work for reasons discussed below.  I suspect that the
  414. notificationEvent tokens will not work for the same reason but this
  415. has not been tested.  Your mileage may vary.  Same with includeAllDisks.
  416. The documentation suggests using...
  417. monitor -o prNames -o prErrMessage "process table" prErrorFlag != 0
  418. to monitor all processes.  This will fail with ambiguous results.
  419. To monitor processes, put a separate monitor line for each process.
  420. For example:
  421. ######
  422. proc smail
  423. proc mdlogd
  424. monitor -r 30 -i -o prNames.1 -o prErrMessage.1 "Process smail" prErrorFlag.1 !=0
  425. monitor -r 30 -i -o prNames.2 -o prErrMessage.2 "Process Solstice Disksuite SNMP trap" prErrorFlag.2 !=0
  426. To monitor disks, do the same.  An example:
  427. ########
  428. # This example sends a trap if root has less than 10% available and /usr6 less t
  429. han 90%
  430. #
  431. disk / 10%
  432. disk /usr6 90%
  433. monitor -i -r 30 -o dskPath.1 -o dskErrorMsg.1 "root file system" dskErrorFlag.1 !=0
  434. monitor -i -r 30 -o dskPath.2 -o dskErrorMsg.2 "ORACLE file system" dskErrorFlag.2 != 0
  435. #########
  436. To implement an external program then monitor its results you need to set up your script.
  437. Here is a sample script.
  438. #!//usr/bin/ksh
  439. xstatus=0
  440. if [ $xstatus -eq 0 ];then
  441. echo success: $0
  442. else
  443. echo FAILURE: $0
  444. fi
  445. exit $xstatus
  446. ###end of script tester##
  447. Place this script in /usr/local/src and make it executable.  Make copies called
  448. tester1, tester2 etc.
  449. and make them executable.
  450. Here is a sample snmpd.conf snippet that makes use of the exec feature:
  451. ##############
  452. exec tester1 /usr/local/src/tester1
  453. exec tester2 /usr/local/src/tester2
  454. exec tester3 /usr/local/src/tester3
  455. exec tester4 /usr/local/src/tester4
  456. exec tester5 /usr/local/src/tester5
  457. monitor -i -r 60 -o extNames.1 -o extOutput.1 "status table 1" extResult.1 != 0
  458. monitor -i -r 60 -o extNames.2 -o extOutput.2 "status table 2" extResult.2 != 0
  459. monitor -i -r 60 -o extNames.3 -o extOutput.3 "status table 3" extResult.3 != 0
  460. monitor -i -r 60 -o extNames.4 -o extOutput.4 "status table 4" extResult.4 != 0
  461. monitor -i -r 60 -o extNames.5 -o extOutput.5 "status table 5" extResult.5 != 0
  462. ##############
  463. While snmpd is running, go to /usr/local/src and modify one of the tester programs eg. tester1
  464. xstatus=1
  465. and save the file.  Sometime in the next 60 seconds, a trap will be generated.
  466. Change the value
  467. back to 0, then modify another file.
  468. If you are unsure of the correct row number within a specific table, do an snmpwalk eg.
  469. snmpwalk -v 2c -c public -m ALL localhost prNames
  470. The same methodology can presumably be used for fileName and laNames.  Your mileage may vary.
  471. -- Bruce Shaw <Bruce.Shaw at shaw.ca>  with Allan McIntosh and Wes Hardaker
  472. ------------------------------------------------------------
  473. 9.  Monitoring CPU temp, fan and power supply sensors (LM-SENSORS-MIB)
  474. *********************************************************************************
  475. NOTE!!  This is a new and experimental module.  It should be considered "alpha"
  476. for this first release.  Use with caution as its impact on machine performance
  477. (ie. CPU usage) has yet to be determined.  The module works in "read only"
  478. mode to examine sensors.  It cannot change switch or fan settings.
  479. It has been tested on the following platforms:
  480. Enterprise 450
  481. V880
  482. 280R
  483. If you have information about other platforms this is desperately needed.  For 
  484. example, the only "state" that I'm aware of for an i2c is "OK".  The more
  485. information we have, the richer the components.
  486. Please report any performance statistics, bugs or omissions to the users list.
  487. Please report any code suggestions to the coders list.  See links below.
  488. **********************************************************************************
  489. This component delivers information that you would normally see by typing:
  490. /usr/platform/`uname -m`/sbin/prtdiag -v
  491. At present this is only supported on the Ultra (sun4u) platform.
  492. To display this information, net-snmp must be compiled with the option:
  493. --with-mib-modules="ucd-snmp/lmSensors"
  494. Early Ultra servers such as the Ultra 1 or Ultra 2 did not report
  495. any sensor information at all.  Later servers, such as the Enterprise 450
  496. reported this information using kstat.  Sun's latest servers make use
  497. of the picld daemon to control system resources and report fan information.  This
  498. module reads in the information from picld.  It cannot modify settings.
  499. You can see this information by typing:
  500. prtpicl -v | more
  501. The following is typical output:
  502. E450# snmpwalk -v 2c -c public -m ALL localhost lmSensors
  503. LM-SENSORS-MIB::lmTempSensorsIndex.1 = INTEGER: 0
  504. LM-SENSORS-MIB::lmTempSensorsIndex.2 = INTEGER: 1
  505. LM-SENSORS-MIB::lmTempSensorsIndex.3 = INTEGER: 2
  506. LM-SENSORS-MIB::lmTempSensorsIndex.4 = INTEGER: 3
  507. LM-SENSORS-MIB::lmTempSensorsDevice.1 = STRING: Ambient
  508. LM-SENSORS-MIB::lmTempSensorsDevice.2 = STRING: CPU1
  509. LM-SENSORS-MIB::lmTempSensorsDevice.3 = STRING: CPU2
  510. LM-SENSORS-MIB::lmTempSensorsDevice.4 = STRING: CPU3
  511. LM-SENSORS-MIB::lmTempSensorsValue.1 = Gauge32: 22
  512. LM-SENSORS-MIB::lmTempSensorsValue.2 = Gauge32: 45
  513. LM-SENSORS-MIB::lmTempSensorsValue.3 = Gauge32: 46
  514. LM-SENSORS-MIB::lmTempSensorsValue.4 = Gauge32: 49
  515. LM-SENSORS-MIB::lmFanSensorsIndex.1 = INTEGER: 0
  516. LM-SENSORS-MIB::lmFanSensorsIndex.2 = INTEGER: 1
  517. LM-SENSORS-MIB::lmFanSensorsIndex.3 = INTEGER: 2
  518. LM-SENSORS-MIB::lmFanSensorsDevice.1 = STRING: fan type CPU number 0
  519. LM-SENSORS-MIB::lmFanSensorsDevice.2 = STRING: fan type PWR number 0
  520. LM-SENSORS-MIB::lmFanSensorsDevice.3 = STRING: fan type AFB number 0
  521. LM-SENSORS-MIB::lmFanSensorsValue.1 = Gauge32: 33
  522. LM-SENSORS-MIB::lmFanSensorsValue.2 = Gauge32: 31
  523. LM-SENSORS-MIB::lmFanSensorsValue.3 = Gauge32: 63
  524. LM-SENSORS-MIB::lmVoltSensorsIndex.1 = INTEGER: 0
  525. LM-SENSORS-MIB::lmVoltSensorsIndex.2 = INTEGER: 1
  526. LM-SENSORS-MIB::lmVoltSensorsIndex.3 = INTEGER: 2
  527. LM-SENSORS-MIB::lmVoltSensorsDevice.1 = STRING: power supply 0
  528. LM-SENSORS-MIB::lmVoltSensorsDevice.2 = STRING: power supply 1
  529. LM-SENSORS-MIB::lmVoltSensorsDevice.3 = STRING: power supply 2
  530. LM-SENSORS-MIB::lmVoltSensorsValue.1 = Gauge32: 38
  531. LM-SENSORS-MIB::lmVoltSensorsValue.2 = Gauge32: 39
  532. LM-SENSORS-MIB::lmVoltSensorsValue.3 = Gauge32: 39
  533. LM-SENSORS-MIB::lmMiscSensorsIndex.1 = INTEGER: 0
  534. LM-SENSORS-MIB::lmMiscSensorsIndex.2 = INTEGER: 1
  535. LM-SENSORS-MIB::lmMiscSensorsIndex.3 = INTEGER: 2
  536. LM-SENSORS-MIB::lmMiscSensorsDevice.1 = STRING: FSP
  537. LM-SENSORS-MIB::lmMiscSensorsDevice.2 = STRING: Backplane4
  538. LM-SENSORS-MIB::lmMiscSensorsDevice.3 = STRING: Backplane8
  539. LM-SENSORS-MIB::lmMiscSensorsValue.1 = Gauge32: 192
  540. LM-SENSORS-MIB::lmMiscSensorsValue.2 = Gauge32: 0
  541. LM-SENSORS-MIB::lmMiscSensorsValue.3 = Gauge32: 0
  542. V880# snmpwalk -v 2c -c public -m ALL localhost lmSensors
  543. LM-SENSORS-MIB::lmTempSensorsIndex.1 = INTEGER: 0
  544. LM-SENSORS-MIB::lmTempSensorsIndex.2 = INTEGER: 1
  545. LM-SENSORS-MIB::lmTempSensorsIndex.3 = INTEGER: 2
  546. LM-SENSORS-MIB::lmTempSensorsIndex.4 = INTEGER: 3
  547. LM-SENSORS-MIB::lmTempSensorsIndex.5 = INTEGER: 4
  548. LM-SENSORS-MIB::lmTempSensorsIndex.6 = INTEGER: 5
  549. LM-SENSORS-MIB::lmTempSensorsIndex.7 = INTEGER: 6
  550. LM-SENSORS-MIB::lmTempSensorsIndex.8 = INTEGER: 7
  551. LM-SENSORS-MIB::lmTempSensorsIndex.9 = INTEGER: 8
  552. LM-SENSORS-MIB::lmTempSensorsIndex.10 = INTEGER: 9
  553. LM-SENSORS-MIB::lmTempSensorsDevice.1 = STRING: CPU0_DIE_TEMPERATURE_SENSOR
  554. LM-SENSORS-MIB::lmTempSensorsDevice.2 = STRING: CPU2_DIE_TEMPERATURE_SENSOR
  555. LM-SENSORS-MIB::lmTempSensorsDevice.3 = STRING: CPU1_DIE_TEMPERATURE_SENSOR
  556. LM-SENSORS-MIB::lmTempSensorsDevice.4 = STRING: CPU3_DIE_TEMPERATURE_SENSOR
  557. LM-SENSORS-MIB::lmTempSensorsDevice.5 = STRING: CPU4_DIE_TEMPERATURE_SENSOR
  558. LM-SENSORS-MIB::lmTempSensorsDevice.6 = STRING: CPU6_DIE_TEMPERATURE_SENSOR
  559. LM-SENSORS-MIB::lmTempSensorsDevice.7 = STRING: MB_AMB_TEMPERATURE_SENSOR
  560. LM-SENSORS-MIB::lmTempSensorsDevice.8 = STRING: IOB_AMB_TEMPERATURE_SENSOR
  561. LM-SENSORS-MIB::lmTempSensorsDevice.9 = STRING: DBP0_AMB_TEMPERATURE_SENSOR
  562. LM-SENSORS-MIB::lmTempSensorsDevice.10 = STRING: DBP1_AMB_TEMPERATURE_SENSOR
  563. LM-SENSORS-MIB::lmTempSensorsValue.1 = Gauge32: 71
  564. LM-SENSORS-MIB::lmTempSensorsValue.2 = Gauge32: 60
  565. LM-SENSORS-MIB::lmTempSensorsValue.3 = Gauge32: 66
  566. LM-SENSORS-MIB::lmTempSensorsValue.4 = Gauge32: 59
  567. LM-SENSORS-MIB::lmTempSensorsValue.5 = Gauge32: 65
  568. LM-SENSORS-MIB::lmTempSensorsValue.6 = Gauge32: 69
  569. LM-SENSORS-MIB::lmTempSensorsValue.7 = Gauge32: 28
  570. LM-SENSORS-MIB::lmTempSensorsValue.8 = Gauge32: 25
  571. LM-SENSORS-MIB::lmTempSensorsValue.9 = Gauge32: 25
  572. LM-SENSORS-MIB::lmTempSensorsValue.10 = Gauge32: 24
  573. LM-SENSORS-MIB::lmFanSensorsIndex.1 = INTEGER: 0
  574. LM-SENSORS-MIB::lmFanSensorsIndex.2 = INTEGER: 1
  575. LM-SENSORS-MIB::lmFanSensorsIndex.3 = INTEGER: 2
  576. LM-SENSORS-MIB::lmFanSensorsIndex.4 = INTEGER: 3
  577. LM-SENSORS-MIB::lmFanSensorsIndex.5 = INTEGER: 4
  578. LM-SENSORS-MIB::lmFanSensorsIndex.6 = INTEGER: 5
  579. LM-SENSORS-MIB::lmFanSensorsIndex.7 = INTEGER: 6
  580. LM-SENSORS-MIB::lmFanSensorsIndex.8 = INTEGER: 7
  581. LM-SENSORS-MIB::lmFanSensorsIndex.9 = INTEGER: 8
  582. LM-SENSORS-MIB::lmFanSensorsIndex.10 = INTEGER: 9
  583. LM-SENSORS-MIB::lmFanSensorsDevice.1 = STRING: CPU0_PFAN_TACH
  584. LM-SENSORS-MIB::lmFanSensorsDevice.2 = STRING: CPU1_PFAN_TACH
  585. LM-SENSORS-MIB::lmFanSensorsDevice.3 = STRING: CPU0_SFAN_TACH
  586. LM-SENSORS-MIB::lmFanSensorsDevice.4 = STRING: CPU1_SFAN_TACH
  587. LM-SENSORS-MIB::lmFanSensorsDevice.5 = STRING: IO_BRIDGE_PFAN_TACH
  588. LM-SENSORS-MIB::lmFanSensorsDevice.6 = STRING: IO_BRIDGE_SFAN_TACH
  589. LM-SENSORS-MIB::lmFanSensorsDevice.7 = STRING: IO0_PFAN_TACH
  590. LM-SENSORS-MIB::lmFanSensorsDevice.8 = STRING: IO1_PFAN_TACH
  591. LM-SENSORS-MIB::lmFanSensorsDevice.9 = STRING: IO0_SFAN_TACH
  592. LM-SENSORS-MIB::lmFanSensorsDevice.10 = STRING: IO1_SFAN_TACH
  593. LM-SENSORS-MIB::lmFanSensorsValue.1 = Gauge32: 2439
  594. LM-SENSORS-MIB::lmFanSensorsValue.2 = Gauge32: 2586
  595. LM-SENSORS-MIB::lmFanSensorsValue.3 = Gauge32: 2459
  596. LM-SENSORS-MIB::lmFanSensorsValue.4 = Gauge32: 2564
  597. LM-SENSORS-MIB::lmFanSensorsValue.5 = Gauge32: 3409
  598. LM-SENSORS-MIB::lmFanSensorsValue.6 = Gauge32: 0
  599. LM-SENSORS-MIB::lmFanSensorsValue.7 = Gauge32: 3947
  600. LM-SENSORS-MIB::lmFanSensorsValue.8 = Gauge32: 3896
  601. LM-SENSORS-MIB::lmFanSensorsValue.9 = Gauge32: 4000
  602. LM-SENSORS-MIB::lmFanSensorsValue.10 = Gauge32: 3896
  603. LM-SENSORS-MIB::lmVoltSensorsIndex.1 = INTEGER: 0
  604. LM-SENSORS-MIB::lmVoltSensorsIndex.2 = INTEGER: 1
  605. LM-SENSORS-MIB::lmVoltSensorsIndex.3 = INTEGER: 2
  606. LM-SENSORS-MIB::lmVoltSensorsIndex.4 = INTEGER: 3
  607. LM-SENSORS-MIB::lmVoltSensorsIndex.5 = INTEGER: 4
  608. LM-SENSORS-MIB::lmVoltSensorsIndex.6 = INTEGER: 5
  609. LM-SENSORS-MIB::lmVoltSensorsIndex.7 = INTEGER: 6
  610. LM-SENSORS-MIB::lmVoltSensorsIndex.8 = INTEGER: 7
  611. LM-SENSORS-MIB::lmVoltSensorsIndex.9 = INTEGER: 8
  612. LM-SENSORS-MIB::lmVoltSensorsIndex.10 = INTEGER: 9
  613. LM-SENSORS-MIB::lmVoltSensorsIndex.11 = INTEGER: 10
  614. LM-SENSORS-MIB::lmVoltSensorsIndex.12 = INTEGER: 11
  615. LM-SENSORS-MIB::lmVoltSensorsDevice.1 = STRING: PS0_3_3V_I_SENSOR
  616. LM-SENSORS-MIB::lmVoltSensorsDevice.2 = STRING: PS0_5V_I_SENSOR
  617. LM-SENSORS-MIB::lmVoltSensorsDevice.3 = STRING: PS0_12V_I_SENSOR
  618. LM-SENSORS-MIB::lmVoltSensorsDevice.4 = STRING: PS0_48V_I_SENSOR
  619. LM-SENSORS-MIB::lmVoltSensorsDevice.5 = STRING: PS1_3_3V_I_SENSOR
  620. LM-SENSORS-MIB::lmVoltSensorsDevice.6 = STRING: PS1_5V_I_SENSOR
  621. LM-SENSORS-MIB::lmVoltSensorsDevice.7 = STRING: PS1_12V_I_SENSOR
  622. LM-SENSORS-MIB::lmVoltSensorsDevice.8 = STRING: PS1_48V_I_SENSOR
  623. LM-SENSORS-MIB::lmVoltSensorsDevice.9 = STRING: PS2_3_3V_I_SENSOR
  624. LM-SENSORS-MIB::lmVoltSensorsDevice.10 = STRING: PS2_5V_I_SENSOR
  625. LM-SENSORS-MIB::lmVoltSensorsDevice.11 = STRING: PS2_12V_I_SENSOR
  626. LM-SENSORS-MIB::lmVoltSensorsDevice.12 = STRING: PS2_48V_I_SENSOR
  627. LM-SENSORS-MIB::lmVoltSensorsValue.1 = Gauge32: 6
  628. LM-SENSORS-MIB::lmVoltSensorsValue.2 = Gauge32: 4
  629. LM-SENSORS-MIB::lmVoltSensorsValue.3 = Gauge32: 3
  630. LM-SENSORS-MIB::lmVoltSensorsValue.4 = Gauge32: 4
  631. LM-SENSORS-MIB::lmVoltSensorsValue.5 = Gauge32: 6
  632. LM-SENSORS-MIB::lmVoltSensorsValue.6 = Gauge32: 4
  633. LM-SENSORS-MIB::lmVoltSensorsValue.7 = Gauge32: 3
  634. LM-SENSORS-MIB::lmVoltSensorsValue.8 = Gauge32: 4
  635. LM-SENSORS-MIB::lmVoltSensorsValue.9 = Gauge32: 6
  636. LM-SENSORS-MIB::lmVoltSensorsValue.10 = Gauge32: 4
  637. LM-SENSORS-MIB::lmVoltSensorsValue.11 = Gauge32: 3
  638. LM-SENSORS-MIB::lmVoltSensorsValue.12 = Gauge32: 4
  639. This component also reports information for switches, LEDs
  640. and i2c's (devices accessing the i2c bus).
  641. Because the MIB only allows us to display numeric
  642. information a certain amount of translation has been done.
  643. Switches:
  644. 0 = OFF
  645. 1 = ON
  646. 2 = NORMAL
  647. 3 = LOCKED
  648. 4 = UNKNOWN
  649. 5 = DIAG
  650. 6 = SECURE
  651. 99 = other
  652. LEDs:
  653. 0 = OFF
  654. 1 = ON
  655. 2 = BLINK (this may not exist)
  656. 99 = other
  657. i2c's:
  658. 0 = OK
  659. 99 = other
  660. In order to prevent inordinant consumption of machine resources,
  661. some sensor information is cached.  Currently, information
  662. retrieved from picld is cached for six seconds.  
  663. -- Bruce Shaw <Bruce.Shaw at shaw.ca>
  664. ------------------------------------------------------------
  665. 10.  Files descriptors and fopen
  666. Solaris has a limitation on the number of file descriptors (255)
  667. available in stdio, so that fopen() fails if more than
  668. 255 file descriptors (sockets) are open. This prevents mibs from 
  669. being loaded after 250 sockets are open, since parse.c uses stdio.
  670. SEan <burke_sp@pacbell.net> investigated this problem, and had this
  671. report on using the SFIO package to solve this problem.
  672.  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  673. The SFIO package ( http://www.research.att.com/sw/tools/sfio/ ) 
  674. is a buffered streams IO package that is much more more sophisticated 
  675. than stdio, but it does support stdio API's for backward compatibility,
  676. and that's the aspect that is important here.
  677. To compile with SFIO, we simply add -I/usr/local/sfio/include to the
  678. $CPPFLAGS before compiling net-snmp. This causes SFIO's stdio.h to
  679. preempt Solaris stdio, mapping calls like fopen() and fprintf() to
  680. the SFIO implementations. This produces a libnetsnmp that does not
  681. have the fopen() limitation. Any application that links to this 
  682. libnetsnmp must also be linked to libsfio. 
  683. Here are the two caveats:
  684. A. libsfio exports the functions 'getc' and 'putc', for reasons that
  685. are not clear. These are the only symbols it exports that conflict
  686. with stdio. While getc and putc are traditionally macros, Solaris
  687. makes them functions in multithreaded code (compiled with -mt,
  688. -pthread, or -D_REENTRANT). If your native stdio code links to the
  689. libsfio versions, a crash will result.
  690. There are two solutions to this problem. You may remove getc and putc 
  691. from libsfio, since SFIO defines getc and putc as macros, by doing:
  692. ar d libsfio.a getc.o
  693. ar d libsfio.a putc.o
  694. or link to SFIO's stdio compatibility library, libstdio, ahead of
  695. libsfio. This library wraps all of the native stdio calls with 
  696. versions that are safe for native or sfio streams, in case you
  697. need to share streams between SFIO and native stdio codes.
  698. B. libsfio provides 64-bit offsets in fseek(), ftell(). This is
  699. a good thing, since SFIO is intened to avoid needless limitations,
  700. but it means that SFIO's stdio.h defines off_t to be a 64-bit offset. 
  701. Net-SNMP uses readdir(), which returns a struct dirent containing 
  702. a 32-bit off_t, so the code compiled for SFIO doesn't access 
  703. struct dirent's correctly.
  704. There are two solutions to this problem, as well. The first is to
  705. include <dirent.h> at the start of SFIO's stdio.h. Since SFIO 
  706. defines a macro substitution for off_t, this leaves struct dirent's 
  707. definition unchanged.
  708. An alternative, which I haven't verified, is to define _FILE_OFFSET_BITS
  709. to be 64 when compiling libnetsnmp. According to what I see in Solaris's 
  710. /usr/include/sys/feature_tests.h, you can select a 64-bit off_t at 
  711. compile time with this setting, which should make readdir()'s off_t 
  712. compatible with SFIO's ftell(), fseek().
  713.  [[ We have received reports that this approach does not in fact work 
  714. (see Perl discussion below)]]
  715. Finally, thanks to Phong Vo and AT&T Labs for a fast, robust and
  716. portable package that solves this headache very neatly.
  717. -SEan <burke_sp@pacbell.net>
  718. ------------------------------------------------------------
  719. 11.  Perl
  720. Net-snmp may be compiled with Perl support by adding the lines:
  721.    --enable-shared --enable-embedded-perl
  722. to your ./configure invocation.
  723. This should only be done if you are sure you really need Perl, 
  724. for the following reasons:
  725. Solaris 8 and 9 ship with a version of Perl compiled using sun's cc. 
  726. This causes a problem when attempting to compile net-snmp 
  727. with Perl functionality ie.:
  728.    ./configure --with-mib-modules="host disman/event-mib ucd-snmp/diskio 
  729.       smux agents mibII/mta_sendmail" --enable-shared --enable-embedded-perl
  730. because during the Perl section of the compile, it attempts to do so 
  731. using the methodology used to compile the original Perl, not
  732. what you're currently using.  This can be discovered by typing:
  733.    perl -V
  734. and it says (among other things)
  735.   Compiler:
  736.     cc='cc'
  737. and you don't have the full version of Sun's C compiler on your 
  738. system, it's going to break.
  739. In addition if it was compiled with:
  740.    LFS_CFLAGS      -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
  741. net-snmp will not compile correctly.
  742. Given that the Perl provided with Solaris 8 (5.005_03)
  743. and Solaris 9 (5.005_03 and 5.6.1) is somewhat stale, 
  744. upgrading may be to your advantage.
  745. Perl did not ship with Solaris before version 8.  If you installed a
  746. version from www.sunfreeware.com, it is compiled with some extra flags
  747. that cause the net-snmp compile to break.  
  748. In either case, you will need to compile and install Perl.
  749. There are, however, some issues.
  750. A.  Some applications (eg. /usr/bin/kstat) require this exact version 
  751. of Perl because of libraries.  These instructions below install Perl
  752. in /usr/local/bin (and optionally /usr/bin/).  The original is left
  753. intact in /usr/perl5/bin/perl where, in fact, the kstat script looks 
  754. for it.  If you have version specific scripts, you will need to do
  755. the same either by invoking /usr/perl5/bin/perl or putting:
  756. #!/usr/perl/bin/perl -w
  757. as the first line of your script and making it executable 
  758. (see the /usr/bin/kstat source as an example).
  759. B.  The instructions below disable large file support.  
  760. This means that Perl would be unable to deal
  761. successfully with files larger than 2 Gb.  
  762. Again, using /usr/perl5/bin/perl or a version compiled
  763. with this functionality would solve this.
  764. Hence the ideal solution is a net-snmp specific Perl in its own directory.
  765. The following instructions will install a working Perl in /usr/local/net-snmp.
  766. Install gcc version 3.3.2 (or later) from www.sunfreeware.com.
  767. Download the current stable release of Perl
  768.    http://www.cpan.org/src/stable.tar.gz 
  769. and gunzip and untar.  (This document assumes Perl 5.8.3)
  770. cd to the source directory and type the following:
  771.    sh Configure -Dcc=gcc
  772. Accept most of the defaults, with some specific changes:
  773. Operating system name? [solaris]
  774. Operating system version? [2.6]   (or 2.7, 2.8, 2.9 ...)
  775. Build Perl for SOCKS? [n] 
  776. Use the PerlIO abstraction layer? [y]
  777. Build a threading Perl? [n] 
  778. Build Perl for multiplicity? [n] 
  779. Use which C compiler? [/usr/local/bin/gcc] 
  780. Directories to use for library searches?
  781. [/usr/local/lib /usr/lib /usr/ccs/lib]
  782. What is the file extension used for shared libraries? [so]
  783. Try to use long doubles if available? [n] 
  784. What libraries to use? [-lsocket -lnsl -ldl -lm -lc]
  785. What optimizer/debugger flag should be used? [-O]
  786. Any additional cc flags? [-fno-strict-aliasing -I/usr/local/include] 
  787. Any additional ld flags (NOT including libraries)? [ -L/usr/local/lib] 
  788. Try to use 64-bit integers, if available? [y]   (unless you're using 32-bit Solaris)
  789. Try to use maximal 64-bit support, if available? [n]
  790. What is your architecture name [sun4-solaris-64int]
  791. Installation prefix to use? (~name ok) [/usr/local/net-snmp] 
  792. What installation prefix should I use for installing files? (~name ok)
  793. [/usr/local/net-snmp] 
  794. Pathname where the private library files will reside? (~name ok)
  795. [/usr/local/net-snmp/lib/perl5/5.8.3] 
  796. Where do you want to put the public architecture-dependent libraries? (~name ok)
  797. [/usr/local/net-snmp/lib/perl5/5.8.3/sun4-solaris-64int] 
  798. Do you wish to attempt to use the malloc that comes with perl5? [n] 
  799. Installation prefix to use for add-on modules and utilities? (~name ok)
  800. [/usr/local/net-snmp]
  801. Pathname for the site-specific library files? (~name ok)
  802. [/usr/local/net-snmp/lib/perl5/site_perl/5.8.3] 
  803. Pathname for the site-specific architecture-dependent library files? (~name ok)
  804. [/usr/local/net-snmp/lib/perl5/site_perl/5.8.3/sun4-solaris-64int] 
  805. Do you want to configure vendor-specific add-on directories? [n] 
  806. Colon-separated list of additional directories for perl to search? [none]
  807. Installation prefix to use for add-on modules and utilities? (~name ok)
  808. [/usr/local/net-snmp] 
  809. Pathname where the public executables will reside? (~name ok)
  810. [/usr/local/net-snmp/bin] 
  811. Install any extra modules (y or n)? [n] 
  812. Directory for the main Perl5 html pages? (~name ok)
  813. [/usr/local/net-snmp/doc/html] 
  814. Directory for the Perl5 module html pages? (~name ok)
  815. [/usr/local/net-snmp/doc/html/modules]
  816. List of earlier versions to include in @INC? [none]
  817. Do you want to install perl as /usr/bin/perl? [n]
  818. Shall I use /usr/local/bin/nm to extract C symbols from the libraries? [n]
  819. Do you wish to use dynamic loading? [y] 
  820. Source file to use for dynamic loading [ext/DynaLoader/dl_dlopen.xs]
  821. Any special flags to pass to /usr/local/bin/gcc -c to compile shared library modules?
  822. [-fPIC] 
  823. What command should be used to create dynamic libraries?
  824. [/usr/local/bin/gcc] 
  825. Any special flags to pass to /usr/local/bin/gcc to create a dynamically loaded library?
  826. [-G -L/usr/local/lib] 
  827. Any special flags to pass to /usr/local/bin/gcc to use dynamic linking?
  828. [none] 
  829. Build a shared libperl.so (y/n) [n]
  830. Where do the main Perl5 manual pages (source) go? (~name ok)
  831. [/usr/local/net-snmp/man/man1] 
  832. What suffix should be used for the main Perl5 man pages? [1]
  833. Where do the perl5 library man pages (source) go? (~name ok)
  834. [/usr/local/net-snmp/man/man3] 
  835. What suffix should be used for the perl5 library man pages? [3]
  836. Your host name appears to be "foo". Right? [y] 
  837. What is your domain name? [.bar.com]
  838. What is your e-mail address? [something.else@foo.bar.com] 
  839. Perl administrator e-mail address [something.else@foo.bar.com] 
  840. Do you want to install only the version-specific parts of perl? [n]
  841. Where do you keep publicly executable scripts? (~name ok)
  842. [/usr/local/net-snmp/bin] 
  843. Pathname where the add-on public executables should be installed? (~name ok)
  844. [/usr/local/net-snmp/bin] 
  845. Pathname where the site-specific html pages should be installed? (~name ok)
  846. [/usr/local/net-snmp/doc/html]
  847. Pathname where the site-specific library html pages should be installed? (~name ok)
  848. [/usr/local/net-snmp/doc/html/modules] 
  849. Pathname where the site-specific manual pages should be installed? (~name ok)
  850. [/usr/local/net-snmp/man/man1]
  851. Pathname where the site-specific library manual pages should be installed? (~name ok)
  852. [/usr/local/net-snmp/man/man3] 
  853. Pathname where add-on public executable scripts should be installed? (~name ok)
  854. [/usr/local/net-snmp/bin] 
  855. Use the "fast stdio" if available? [y]
  856. Try to understand large files, if available? [n]
  857. What is the extension of dynamically loaded modules [so] 
  858. Shall I ignore gethostname() from now on? [n] 
  859. What is the size of a character (in bytes)? [1] 
  860. Do you still want to use vfork()? [n] 
  861. Doubles must be aligned on a how-many-byte boundary? [8]
  862. Use which function to generate random numbers? [drand48]
  863. What type pointer is the second argument to getgroups() and setgroups()?
  864. [gid_t] 
  865. What pager is used on your system? [/usr/bin/more] 
  866. Which compiler compiler (yacc) shall I use? [yacc]
  867. What extensions do you wish to load dynamically?[blah..blah..blah]  (use the default)
  868. What extensions do you wish to load statically? [ ] 
  869. Run make depend now? [y]
  870. When it is finished, do:
  871.    grep cppsymbols config.sh
  872. and make sure "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" does NOT appear.
  873. Then do:
  874.    make
  875.    make test  (ignore errors)
  876.    make install
  877.    /usr/local/net-snmp/bin/perl -V
  878. if everything looks all right, compile net-snmp (see above) but with the following differences:
  879. Set your path to:
  880. PATH=/usr/local/net-snmp/bin:/usr/local/bin:/usr/bin:/usr/sbin:/usr/ccs/bin:
  881. Type:
  882. perl -v
  883. ...and...
  884. which perl
  885. to make sure you get the correct version.
  886. Your configure invocation should be...
  887. ./configure --with-gnu-ld --enable-shared --enable-embedded-perl --disable-developer 
  888. --with-mib-modules="host disman/event-mib ucd-snmp/diskio examples/example smux  
  889. agentx mibII/mta_sendmail" --with-cc=gcc
  890. Once you have compiled and installed net-snmp you should test its Perl 
  891. capabilities by doing the following:
  892. Copy the perl_module.pl script found at 
  893. http://www.net-snmp.org/tutorial-5/toolkit/perl/index.html
  894. to /usr/local/net-snmp
  895. and modify your /usr/local/share/snmp/snmpd.conf file to contain the entry:
  896. perl do "/usr/local/net-snmp/perl_module.pl"
  897. then do:
  898. /usr/local/bin/snmpwalk -v 2c -c whatever localhost .1.3.6.1.4.1.8072.999
  899. It should return the following:
  900. NET-SNMP-MIB::netSnmp.999.1.2.1 = STRING: "hello world"
  901. WARNING!!  If you are planning on created binary versions of net-snmp with Perl capability,
  902. you will also need to ship the Perl which you created in /usr/local/net-snmp.
  903.  -- Bruce Shaw <Bruce.Shaw at shaw.ca>
  904. ------------------------------------------------------------
  905. 12.  sed and $PATH
  906. (note, if you have followed the recommendations for $PATH 
  907. above, this is not an issue -- Bruce Shaw <Bruce.Shaw at shaw.ca>)
  908. The version of sed in /usr/ucb on Solaris 2.5.1 and 2.6 can't
  909. cope with the size of the subsitution strings used in config.status.
  910. Putting /usr/bin ahead of /usr/ucb in the search path fixes this.
  911. /usr/xpg4/bin/sed is seen to segfault under Solaris 8 when running configure.
  912. Putting /usr/bin ahead of /usr/xpg4/bin fixes this.
  913. Thanks to zach dot metzinger at removeme microtune dot com.
  914. ------------------------------------------------------------
  915. 13.  OpenSSL
  916. If compiling with OpenSSL (e.g. from sunsolve), it's possible that
  917. the agent won't successfully load the crypto library (typically
  918. in /usr/local/ssl/lib) when it is in use and will return a
  919. cannot find library error message of some sort.
  920. To rectify this, you will need to use the /usr/bin/crle command, which
  921. did NOT ship with some versions of Solaris, but came as part of later
  922. patches.  You should make sure the following patches are up to date:
  923. 107733 (Solaris 2.6)
  924. 106950 (Solaris 2.7)
  925. 109147 (Solaris 8)
  926. 115833 (Trusted Solaris 8)
  927. 112693 (Solaris 9)
  928. Then type the following:
  929. /usr/bin/crle
  930. It will return something like:
  931. Default configuration file (/var/ld/ld.config) not found
  932.   Default Library Path (ELF):  /usr/lib (system default)
  933.   Trusted Directories (ELF):   /usr/lib/secure (system default)
  934. Find the location of the libcrypto libraries by typing:
  935. find /usr -name "libcrypto*" -print
  936. which will probably display:
  937. /usr/local/ssl/lib/libcrypto.a
  938. /usr/local/ssl/lib/libcrypto.so
  939. /usr/local/ssl/lib/libcrypto.so.0
  940. /usr/local/ssl/lib/libcrypto.so.0.9.7
  941. which is the default installation for OpenSSL.
  942. To include this in the loader search path, type:
  943. /usr/bin/crle -u -l /usr/local/ssl/lib
  944. /usr/bin/crle will now display:
  945. Configuration file [3]: /var/ld/ld.config  
  946.   Default Library Path (ELF):   /usr/lib:/usr/local/ssl/lib
  947.   Trusted Directories (ELF):    /usr/lib/secure  (system default)
  948. Command line:
  949.   crle -c /var/ld/ld.config -l /usr/lib:/usr/local/ssl/lib
  950. If this fails, usually by displaying:
  951. crle: /var/ld/ld.config: open failed: No such file or directory
  952. you will need to create this directory by hand by doing the following:
  953. mkdir /var/ld
  954. cd /var/ld
  955. ln -s . 32
  956. mkdir sparcv9
  957. chgrp bin sparcv9
  958. ln -s sparcv9 64
  959. touch ld.config
  960. then do:
  961. crle -c /var/ld/ld.config -l /usr/lib:/usr/local/ssl/lib
  962. Thanks to Dave Shield and Johannes Schmidt-Fischer
  963. -- Bruce Shaw <Bruce.Shaw at shaw.ca>
  964. ------------------------------------------------------------
  965. 14. Wish list
  966. A.  Code cleanup
  967. There may be opportunities for shared code between UCD-SNMP 
  968. and HOST-RESOURCES-MIB.
  969. There may be opportunities to optimize caching perhaps 
  970. using the new auto-caching code.
  971. B.  LM-SENSORS-MIB
  972. We need a complete list of sensors from various platforms so
  973. they can be displayed properly.
  974. C.  ORACLE
  975. How to get ORACLE's SNMP functionality to work as a sub-agent.
  976. -- Bruce Shaw <Bruce.Shaw at shaw.ca>
  977. ------------------------------------------------------------
  978. 15.  Known Bugs!!
  979. A.  hrDeviceTable (HOST-RESOURCES-MIB)
  980. This section of code is only aware of disk controllers 0 through 7.
  981. Hence, anything on controller c8 and above will be invisible.
  982. B.  hrPartitionTable (HOST-RESOURCES-MIB)
  983. At present, hrPartitionSize data only works for regular ufs
  984. partitions eg. /dev/dsk/c0t0d0s0 that are mounted.  They
  985. are displayed in partition order rather than the order
  986. they are mounted.  Partitions mounted as mirrors, metastate
  987. database replicas, swap or members of a RAID display size 0.
  988. As a workaround, put entries for disks you are
  989. interested in in snmpd.conf and examine
  990. using UCD-SNMP-MIB.
  991. C.  DISMAN-EVENT-MIB
  992. Some of the functionality within DISMAN-EVENT-MIB does not
  993. work as advertised.  See long discussion under section 8 above.
  994. -- Bruce Shaw <Bruce.Shaw at shaw.ca>
  995. ------------------------------------------------------------
  996. 16.  Discussion and further information
  997. For discussion or further information contact the coders and users
  998. lists at http://sourceforge.net/mail/?group_id=12694 .