| #!/bin/sh |
| # |
| # $Id$ |
| # |
| # this shell script is designed to merely dump the configuration |
| # information about how the net-snmp package was compiled. The |
| # information is particularily useful for applications that need to |
| # link against the net-snmp libraries and hence must know about any |
| # other libraries that must be linked in as well. |
| |
| check_build_dir() |
| { |
| build_dir=$1 |
| |
| if test "x$build_dir" = "x" ; then |
| echo "You must specify a build directory." |
| exit 1 |
| fi |
| # is it the src dir? |
| if test -f $build_dir/net-snmp-config.in ; then |
| return |
| fi |
| # make sure we can find build dir |
| if ! test -d $build_dir/snmplib/.libs ; then |
| echo "$build_dir does not appear to be a build directory." |
| exit 1 |
| fi |
| } |
| |
| prefix=@prefix@ |
| exec_prefix=@exec_prefix@ |
| NSC_LDFLAGS="@LDFLAGS@" |
| NSC_LIBDIR=-L@libdir@ |
| NSC_LIBS="@LIBS@" |
| NSC_AGENTLIBS="@AGENTLIBS@" |
| NSC_PREFIX=@prefix@ |
| NSC_EXEC_PREFIX=@exec_prefix@ |
| NSC_SRCDIR=@srcdir@ |
| NSC_BASE_SUBAGENT_LIBS="-lnetsnmpagent -lnetsnmphelpers -lnetsnmp" |
| NSC_BASE_AGENT_LIBS="-lnetsnmpagent -lnetsnmpmibs -lnetsnmphelpers -lnetsnmp" |
| NSC_SRC_LIBDIRS="agent/.libs snmplib/.libs agent/helpers/.libs" |
| NSC_SRC_LIBDEPS="agent/.libs/libnetsnmpagent.a agent/.libs/libnetsnmpmibs.a snmplib/.libs/libnetsnmp.a agent/helpers/.libs/libnetsnmphelpers.a" |
| |
| if test "x$NSC_SRCDIR" = "x." ; then |
| NSC_SRCDIR="NET-SNMP-SOURCE-DIR" |
| fi |
| |
| if test "x$1" = "x"; then |
| usage="yes" |
| else |
| case $1 in |
| --debug-tokens) |
| echo "find $NSC_SRCDIR -name \"*.c\" -print | xargs grep DEBUGMSGT | grep \\\" | cut -f 2 -d\\\" | sort -u" |
| if test "x$NSC_SRCDIR" != "xNET-SNMP-SOURCE-DIR" ; then |
| /usr/bin/find $NSC_SRCDIR -name "*.c" -print | xargs grep DEBUGMSGT | grep \" | cut -f 2 -d\" | sort -u |
| fi |
| ;; |
| --indent-options) |
| echo "indent -orig -nbc -bap -nut -nfca `(cd NET-SNMP-INCLUDE-DIR; perl -n -e 'print "-T $1 " if (/}\s*(netsnmp_\w+)\s*;/);' */*.h)`" |
| ;; |
| --configure-options) |
| echo @CONFIGURE_OPTIONS@ |
| ;; |
| --snmpd-module-list) |
| echo @MODULE_LIST@ |
| ;; |
| #################################################### compile |
| --base-cflags) |
| echo @CFLAGS@ @CPPFLAGS@ -I@includedir@ |
| ;; |
| --cflags) |
| echo @CFLAGS@ @DEVFLAGS@ @CPPFLAGS@ -I. -I@includedir@ |
| ;; |
| --srcdir) |
| echo $NSC_SRCDIR |
| ;; |
| #################################################### linking |
| --lib-dir) |
| echo $NSC_LIBDIR |
| ;; |
| --ldflags) |
| echo $NSC_LDFLAGS |
| ;; |
| --build-lib-dirs) |
| shift |
| build_dir=$1 |
| check_build_dir $build_dir |
| for dir in $NSC_SRC_LIBDIRS; do |
| result="$result -L$build_dir/$dir" |
| done |
| echo $result |
| ;; |
| --build-lib-deps) |
| shift |
| build_dir=$1 |
| check_build_dir $build_dir |
| for dir in $NSC_SRC_LIBDEPS; do |
| result="$result $build_dir/$dir" |
| done |
| echo $result |
| ;; |
| --build-includes) |
| shift |
| build_dir=$1 |
| check_build_dir $build_dir |
| result="-I$build_dir/include" |
| if test "$build_dir" != "$NSC_SRCDIR" -a "$NSC_SRCDIR" != "NET-SNMP-SOURCE-DIR" |
| then |
| result="$result -I$NSC_SRCDIR/include" |
| fi |
| echo $result |
| ;; |
| #################################################### client lib |
| --libs) |
| # use this one == --netsnmp-libs + --external-libs |
| echo $NSC_LDFLAGS $NSC_LIBDIR -lnetsnmp $NSC_LIBS |
| ;; |
| --netsnmp-libs) |
| echo $NSC_LIBDIR -lnetsnmp |
| ;; |
| --external-libs) |
| echo $NSC_LDFLAGS $NSC_LIBS |
| ;; |
| #################################################### agent lib |
| --base-agent-libs) |
| echo $NSC_BASE_AGENT_LIBS |
| ;; |
| --base-subagent-libs) |
| echo $NSC_BASE_SUBAGENT_LIBS |
| ;; |
| --agent-libs) |
| # use this one == --netsnmp-agent-libs + --external-libs |
| echo $NSC_LDFLAGS $NSC_LIBDIR $NSC_BASE_AGENT_LIBS $NSC_AGENTLIBS |
| ;; |
| --netsnmp-agent-libs) |
| echo $NSC_LIBDIR $NSC_BASE_AGENT_LIBS |
| ;; |
| --external-agent-libs) |
| echo $NSC_LDFLAGS $NSC_AGENTLIBS |
| ;; |
| #################################################### |
| --version) |
| echo @VERSION@ |
| ;; |
| --help) |
| usage="yes" |
| ;; |
| --prefix) |
| echo $NSC_PREFIX |
| ;; |
| --exec-prefix) |
| echo $NSC_EXEC_PREFIX |
| ;; |
| --create-snmpv3-user) |
| if @PSCMD@ | egrep ' snmpd *$' > /dev/null 2>&1 ; then |
| echo "Apparently at least one snmpd demon is already running." |
| echo "You must stop them in order to use this command." |
| exit 1 |
| fi |
| |
| Aalgorithm="MD5" |
| Xalgorithm="DES" |
| token=rwuser |
| shift |
| while test "x$done" = "x" -a "x$1" != "x" ; do |
| case $1 in |
| -A) |
| shift |
| if test "x$1" = "x" ; then |
| echo "You must specify an authentication algorithm" |
| exit 1 |
| fi |
| Aalgorithm=$1 |
| shift |
| ;; |
| -X) |
| shift |
| if test "x$1" = "x" ; then |
| echo "You must specify an encryption algorithm" |
| exit 1 |
| fi |
| Xalgorithm=$1 |
| shift |
| ;; |
| -a) |
| shift |
| if test "x$1" = "x" ; then |
| echo "You must specify an authentication pass phrase" |
| exit 1 |
| fi |
| apassphrase=$1 |
| shift |
| ;; |
| -x) |
| shift |
| if test "x$1" = "x" ; then |
| echo "You must specify an encryption pass phrase" |
| exit 1 |
| fi |
| xpassphrase=$1 |
| shift |
| ;; |
| -ro) |
| token="rouser" |
| shift |
| ;; |
| -*) |
| echo "unknown suboption to --create-snmpv3-user: $1" |
| exit 1 |
| ;; |
| *) |
| done=1 |
| ;; |
| esac |
| done |
| |
| if test "x$1" = "x" ; then |
| prompt=yes |
| echo "Enter a SNMPv3 user name to create: " |
| read user |
| else |
| user=$1 |
| shift |
| fi |
| if test "x$user" = "x" ; then |
| echo "You must specify a user name" |
| exit 1 |
| fi |
| |
| if test "x$apassphrase" = "x" ; then |
| prompt=yes |
| echo "Enter authentication pass-phrase: " |
| read apassphrase |
| fi |
| if test "x$apassphrase" = "x" ; then |
| echo "You must specify an authentication pass-phrase" |
| exit 1 |
| fi |
| |
| if test "x$prompt" = "xyes" -a "x$xpassphrase" = "x" ; then |
| echo "Enter encryption pass-phrase: " |
| echo " [press return to reuse the authentication pass-phrase]" |
| read xpassphrase |
| fi |
| |
| outdir="@PERSISTENT_DIRECTORY@" |
| outfile="$outdir/snmpd.conf" |
| line="createUser $user $Aalgorithm \"$apassphrase\" $Xalgorithm $xpassphrase" |
| echo "adding the following line to $outfile:" |
| echo " " $line |
| # in case it hasn't ever been started yet, start it. |
| if ! test -d $outdir ; then |
| mkdir $outdir |
| fi |
| if ! test -d $outfile ; then |
| touch $outfile |
| fi |
| echo $line >> $outfile |
| |
| outfile="@datadir@/snmp/snmpd.conf" |
| line="$token $user" |
| echo "adding the following line to $outfile:" |
| echo " " $line |
| if ! test -d $outfile ; then |
| touch $outfile |
| fi |
| echo $line >> $outfile |
| ;; |
| |
| --compile-subagent) |
| shift |
| while test "x$done" = "x" -a "x$1" != "x" ; do |
| case $1 in |
| --norm) |
| norm=1 |
| shift |
| ;; |
| --cflags) |
| shift |
| if test "x$1" = "x" ; then |
| echo "You must specify the extra cflags" |
| exit 1 |
| fi |
| cflags=$1 |
| echo "setting extra cflags: $cflags" |
| shift |
| ;; |
| --ldflags) |
| shift |
| if test "x$1" = "x" ; then |
| echo "You must specify the extra ldflags" |
| exit 1 |
| fi |
| ldflags=$1 |
| echo "setting extra ldflags: $ldflags" |
| shift |
| ;; |
| --*) |
| echo "unknown suboption to --compile-subagent: $1" |
| exit 1 |
| ;; |
| *) |
| if test "x$outname" = "x"; then |
| outname=$1 |
| shift |
| else |
| done=1 |
| fi |
| ;; |
| esac |
| done |
| tmpfile=netsnmptmp.$$.c |
| if test -f $tmpfile; then |
| echo "Ack. Can't create $tmpfile: already exists" |
| exit 1 |
| fi |
| echo "generating the tmporary code file: $tmpfile" |
| rm -f $tmpfile |
| cat > $tmpfile <<EOF |
| /* generated from net-snmp-config */ |
| #include <net-snmp/net-snmp-config.h> |
| #ifdef HAVE_SIGNAL_H |
| #include <signal.h> |
| #endif /* HAVE_SIGNAL_H */ |
| #include <net-snmp/net-snmp-includes.h> |
| #include <net-snmp/agent/net-snmp-agent-includes.h> |
| EOF |
| |
| # If we were only given a single filename |
| # (and no explicit output name) |
| # then use that as the base of the output name |
| # |
| # If we weren't even given that, then bomb out |
| if test "x$1" = "x"; then |
| if test "x$outname" = "x"; then |
| echo "No MIB module codefile specified" |
| rm -f $tmpfile |
| exit 1 |
| else |
| cfiles=$outname |
| outname=`basename $cfiles | sed 's/\.[co]$//'` |
| if test -f $outname.h; then |
| if grep "init_$outname" $outname.h; then |
| echo " #include \"$outname.h\"" >> $tmpfile |
| fi |
| fi |
| fi |
| fi |
| |
| # add include files |
| while test "$1" != ""; do |
| cfiles="$cfiles $1" |
| name=`basename $1 | sed 's/\.[co]$//'` |
| if test -f $name.h; then |
| if grep "init_$name" $name.h; then |
| echo " #include \"$name.h\"" >> $tmpfile |
| fi |
| fi |
| shift |
| done |
| |
| cat >> $tmpfile <<EOF |
| static int keep_running; |
| |
| RETSIGTYPE |
| stop_server(int a) { |
| keep_running = 0; |
| } |
| |
| int |
| main (int argc, char **argv) { |
| /* print log errors to stderr */ |
| snmp_enable_stderrlog(); |
| /* we are a subagent */ |
| netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1); |
| |
| /* initialize the agent library */ |
| init_agent("$outname"); |
| |
| /* initialize your mib code here */ |
| EOF |
| |
| # add init routines |
| for i in $cfiles ; do |
| name=`basename $i | sed 's/\.[co]$//'` |
| echo checking for init_$name in $i |
| if grep "init_$name" $i ; then |
| echo " init_${name}();" >> $tmpfile |
| fi |
| shift |
| done |
| |
| # finish file |
| cat >> $tmpfile <<EOF |
| |
| /* ustMain will be used to read ustMain.conf files. */ |
| init_snmp("$outname"); |
| |
| /* In case we recevie a request to stop (kill -TERM or kill -INT) */ |
| keep_running = 1; |
| #ifdef SIGTERM |
| signal(SIGTERM, stop_server); |
| #endif |
| #ifdef SIGINT |
| signal(SIGINT, stop_server); |
| #endif |
| |
| /* main loop here... */ |
| while(keep_running) { |
| agent_check_and_process(1); |
| } |
| |
| /* at shutdown time */ |
| snmp_shutdown("$outname"); |
| exit(0); |
| } |
| |
| EOF |
| if test "$?" != 0 -o ! -f "$tmpfile" ; then |
| echo "Ack. Can't create $tmpfile." |
| exit 1 |
| fi |
| cmd="@CC@ $cflags @CFLAGS@ @DEVFLAGS@ -I. -I@includedir@ -o $outname $tmpfile $cfiles $NSC_LDFLAGS -L$NSC_EXEC_PREFIX/lib -lnetsnmpagent -lnetsnmphelpers -lnetsnmpmibs -lnetsnmp $NSC_AGENTLIBS $ldflags" |
| echo "running: $cmd" |
| `$cmd` |
| if test "x$norm" != "x1" ; then |
| echo "removing the tmporary code file: $tmpfile" |
| rm -f $tmpfile |
| else |
| echo "leaving the tmporary code file: $tmpfile" |
| fi |
| if test -f $outname ; then |
| echo "subagent program $outname created" |
| fi |
| ;; |
| |
| *) |
| echo "unknown option $1" |
| usage="yes" |
| ;; |
| esac |
| fi |
| |
| if test "x$usage" = "xyes"; then |
| echo "" |
| echo "Usage:" |
| echo " net-snmp-config [--cflags] [--agent-libs] [--libs] [--version]" |
| echo " ... [see below for complete flag list]" |
| echo "" |
| echo " --version displays the net-snmp version number" |
| echo " --indent-options displays the indent options from the Coding Style" |
| echo " --debug-tokens displays a example command line to search to source" |
| echo " code for a list of available debug tokens" |
| echo "" |
| echo " SNMP Setup commands:" |
| echo "" |
| echo " --create-snmpv3-user [-ro] [-a authpass] [-x privpass] [-X DES]" |
| echo " [-A MD5|SHA] [username]" |
| echo "" |
| echo " These options produce the various compilation flags needed when" |
| echo " building external SNMP applications:" |
| echo "" |
| echo " --base-cflags lists additional compilation flags needed" |
| echo " --cflags lists additional compilation flags needed" |
| echo " (includes -I. and extra developer warning flags)" |
| echo "" |
| echo " These options produce the various link flags needed when" |
| echo " building external SNMP applications:" |
| echo "" |
| echo " --libs lists libraries needed for building applications" |
| echo " --agent-libs lists libraries needed for building subagents" |
| echo "" |
| echo " These options produce various link flags broken down into parts." |
| echo " (Most of the time the simple options above should be used.)" |
| echo "" |
| echo " --libdir path to netsnmp libraries" |
| echo "" |
| echo " --base-agent-libs netsnmp specific agent libraries" |
| echo "" |
| echo " --netsnmp-libs netsnmp specific libraries (with path)" |
| echo " --netsnmp-agent-libs netsnmp specific agent libraries (with path)" |
| echo "" |
| echo " --ldflags link flags for external libraries" |
| echo " --external-libs external libraries needed by netsnmp libs" |
| echo " --external-agent-libs external libraries needed by netsnmp agent libs" |
| echo "" |
| echo " These options produce various link flags used when linking an" |
| echo " external application against an uninstalled build directory." |
| echo "" |
| echo " --build-includes include path to build/source includes" |
| echo " --build-lib-dirs link path to libraries" |
| echo " --build-lib-deps path to libraries for dependency target" |
| echo "" |
| echo " Automatted subagent building (produces an OUTPUTNAME binary file):" |
| echo " [this feature has not been tested very well yet. use at your risk.]" |
| echo "" |
| echo " --compile-subagent OUTPUTNAME [--norm] [--cflags flags]" |
| echo " [--ldflags flags] mibmodule1.c [...]]" |
| echo "" |
| echo " --norm leave the generated .c file around to read." |
| echo " --cflags flags extra cflags to use (e.g. -I...)." |
| echo " --ldflags flags extra ld flags to use (e.g. -L... -l...)." |
| echo "" |
| echo " Details on how the net-nsmp package was compiled:" |
| echo "" |
| echo " --configure-options Display original configure arguments" |
| echo " --snmpd-module-list Display the modules compiled into the agent" |
| echo " --prefix Display the installation prefix" |
| echo "" |
| exit |
| fi |