nsb-functions
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:12k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #!/bin/bash
  2. #----------------------------------------------------------------------
  3. # $Id: nsb-functions,v 1.45.2.2 2005/11/12 14:43:58 tanders Exp $
  4. # Author: Robert Story <rstory@freesnmp.com>
  5. #----------------------------------------------------------------------
  6. #
  7. # source user config
  8. if [ -f $HOME/.snmp/nsb-rc ]; then
  9.    source $HOME/.snmp/nsb-rc
  10. fi
  11. #----------------------------------------------------------------------
  12. #
  13. nsb-sysname()
  14. {
  15.    echo `uname -mrs | tr ' /' '__'`
  16. }
  17. #----------------------------------------------------------------------
  18. #
  19. # Utility vars
  20. #
  21. NSB_VERSION=${NSB_VERSION:=""}
  22. NSB_BUILD_DIR=${NSB_BUILD_DIR:=""}
  23. NSB_BUILD_SUFFIX=${NSB_BUILD_SUFFIX:=""}
  24. NSB_SRC_DIR=${NSB_SRC_DIR:=""}
  25. NSB_INSTALL_DIR=${NSB_INSTALL_DIR:=""}
  26. NSB_PLATFORM=${NSB_PLATFORM:=`nsb-sysname`}
  27. # sun doesn't support hostname -s
  28. NSB_HOST=${NSB_HOST:=`hostname | cut -f1 -d.`}
  29. NSB_QUIET=${NSB_QUIET:=0}
  30. NSB_PROMPT=${NSB_PROMPT:=0}
  31. NSB_CLEAN=${NSB_CLEAN:=1}
  32. NSB_CONFIG_ALL=${NSB_CONFIG_ALL:=0}
  33. NSB_SKIP_CONFIG=${NSB_SKIP_CONFIG:=0}
  34. NSB_SKIP_BUILD=${NSB_SKIP_BUILD:=0}
  35. NSB_SKIP_TEST=${NSB_SKIP_TEST:=0}
  36. NSB_SKIP_INSTALL=${NSB_SKIP_INSTALL:=0}
  37. NSB_ERR_CTX_LINES=${NSB_ERR_CTX_LINES:=25}
  38. NSB_DIST_TRANSPORTS="UDP TCP Unix Callback"
  39. NSB_EXTRA_TRANSPORTS=""
  40. NSB_DIST_MODULES=${NSB_DIST_MODULES:="host disman/event-mib smux"}
  41. NSB_EXTRA_MODULES=${NSB_EXTRA_MODULES:="examples examples/example smux Rmon"}
  42. #testhandler
  43. NSB_EXTRA_CONFIG=${NSB_EXTRA_CONFIG:=""}
  44. NSB_VIEW=cat
  45. NSB_PERL=
  46. #NSB_PERL=--enable-embedded-perl
  47. NSB_FLOW=
  48. NSB_DATE=${NSB_DATE:=`date +%y%m%d_%H%M`}
  49. #
  50. # System specific additions
  51. #
  52. case `uname -s` in
  53.    SunOS)
  54.       NSB_TAIL_ARGS="-$NSB_ERR_CTX_LINES"
  55.       ;;
  56.    *)
  57.       NSB_TAIL_ARGS="-n $NSB_ERR_CTX_LINES"
  58.       ;;
  59. esac
  60. #----------------------------------------------------------------------
  61. #
  62. # Utility functions
  63. #
  64. nsb-abort()
  65. {
  66.    echo
  67.    echo "ABORTING: $@" >&2
  68.    exit 255
  69. }
  70. nsb-info()
  71. {
  72.    if [ $NSB_QUIET -ne 1 ]; then
  73.       echo $@
  74.    fi
  75. }
  76. nsb-prompt()
  77. {
  78.    if [ "x$1" = "x-f" ]; then
  79.       shift 1
  80.       tmp_nsb_prompt=1
  81.    else
  82.       tmp_nsb_prompt=$NSB_PROMPT
  83.    fi
  84.    if [ $tmp_nsb_prompt -eq 1 ]; then
  85.       echo $@
  86.       read nsb_prompt_dummy
  87.    else
  88.       echo "$@ (PROMPT SKIPPED)"
  89.    fi
  90. }
  91. nsb-flow()
  92. {
  93.     NSB_FLOW=$NSB_FLOW:$@
  94.     echo "Running $@" >&2
  95. }
  96. #----------------------------------------------------------------------
  97. #
  98. nsb-config-dist()
  99. {
  100.    nsb-flow config-dist
  101.    if [ $# -lt 1 ]; then
  102.       nsb-abort "usage: nsb-config-dist src_dir"
  103.    fi
  104.    ngc_src=$1
  105.    if [ ! -d $ngc_src ]; then
  106.       nsb-abort "$ngc_src does not exist!"
  107.    fi
  108.    if [ ! -d $ngc_src/agent/mibgroup ]; then
  109.       nsb-abort "agent/mibgroup directory in $ngc_src does not exist!"
  110.    fi
  111.    ngc_dest=$2
  112.    if [ ! -d $ngc_dest ]; then
  113.       nsb-abort "$ngc_dest does not exist!"
  114.    fi
  115.    #
  116.    # some modules might be release specific, so make sure they
  117.    # exist before we send them off to configure
  118.    #
  119.    NSB_FINAL_MODULES=
  120.    for ncd_x in $NSB_DIST_MODULES
  121.    do
  122. if [ -a $ngc_src/agent/mibgroup/$ncd_x.h ]; then
  123. NSB_FINAL_MODULES="$NSB_FINAL_MODULES $ncd_x"
  124. fi
  125.    done
  126.    #
  127.    # NOTE: for some reason, bash does not expand variables
  128.    # inside of single quotes, so use double quotes
  129.    #
  130.    echo $ngc_src/configure --with-sys-location=Unknown 
  131.       --prefix=$ngc_dest 
  132.       --disable-developer $NSB_EXTRA_CONFIG 
  133.       --with-sys-contact='System Administrator' 
  134.       --with-defaults --with-mib-modules="$NSB_FINAL_MODULES"
  135.    $ngc_src/configure --with-sys-location=Unknown 
  136.       --prefix=$ngc_dest 
  137.       --disable-developer $NSB_EXTRA_CONFIG 
  138.       --with-sys-contact='System Administrator' 
  139.       --with-defaults --with-mib-modules="$NSB_FINAL_MODULES"
  140.    # I'd like to add ' | tee nsb-config.$NSB_DATE' to save output, but then
  141.    # I'd lose the rc from configure, which I need... sigh
  142.    ngc_rc=$?
  143.    if [ $ngc_rc -ne 0 ];then
  144.       nsb-abort "Error during configure dist (rc=$ngc_rc)"
  145.    fi
  146. }
  147. nsb-config-all()
  148. {
  149.    nsb-flow config-all
  150.    if [ $# -lt 1 ]; then
  151.       nsb-abort "usage: nsb-config-with src_dir"
  152.    fi
  153.    ngc_src=$1
  154.    if [ ! -d $ngc_src ]; then
  155.       nsb-abort "$ngc_src does not exist!"
  156.    fi
  157.    if [ ! -d $ngc_src/agent/mibgroup ]; then
  158.       nsb-abort "agent/mibgroup directory in $ngc_src does not exist!"
  159.    fi
  160.    ngc_dest=$2
  161.    if [ ! -d $ngc_dest ]; then
  162.       nsb-abort "$ngc_dest does not exist!"
  163.    fi
  164.    #
  165.    # System specific additions
  166.    #
  167.    case `uname -s` in
  168.    Linux)
  169.       NSB_EXTRA_TRANSPORTS="UDPIPv6 TCPIPv6 IPX"
  170.       ;;
  171.    Darwin)
  172.       ;;
  173.    *)
  174.       NSB_EXTRA_TRANSPORTS="UDPIPv6 TCPIPv6"
  175.       ;;
  176.    esac
  177.    #
  178.    # use libwrap if we can find the header
  179.    #
  180.    if [ -f /usr/include/tcpd.h ]; then
  181.       NSB_EXTRA_CONFIG="$NSB_EXTRA_CONFIG --with-libwrap"
  182.    fi
  183.    #
  184.    # some modules might be release specific, so make sure they
  185.    # exist before we send them off to configure
  186.    #
  187.    NSB_FINAL_MODULES=
  188.    for ncd_x in $NSB_DIST_MODULES $NSB_EXTRA_MODULES
  189.    do
  190. if [ -a $ngc_src/agent/mibgroup/$ncd_x.h ]; then
  191. NSB_FINAL_MODULES="$NSB_FINAL_MODULES $ncd_x"
  192. fi
  193.    done
  194.    #
  195.    # configure
  196.    #
  197.    # NOTE: for some reason, bash does not expand variables
  198.    # inside of single quotes, so use double quotes
  199.    #
  200.    echo $ngc_src/configure  --with-defaults 
  201.       --prefix=$ngc_dest 
  202.       --disable-developer $NSB_EXTRA_CONFIG 
  203.       "--with-mib-modules=$NSB_FINAL_MODULES" 
  204.       "--with-transports=$NSB_DIST_TRANSPORTS $NSB_EXTRA_TRANSPORTS" 
  205.        $NSB_PERL --enable-shared 
  206.    $ngc_src/configure  --with-defaults 
  207.       --prefix=$ngc_dest 
  208.       --disable-developer $NSB_EXTRA_CONFIG 
  209.       "--with-mib-modules=$NSB_FINAL_MODULES" 
  210.       "--with-transports=$NSB_DIST_TRANSPORTS $NSB_EXTRA_TRANSPORTS" 
  211.       $NSB_PERL --enable-shared
  212.    # I'd like to add ' | tee nsb-config.$NSB_DATE' to save output, but then
  213.    # I'd lose the rc from configure, which I need... sigh
  214.    ngc_rc=$?
  215.    if [ $ngc_rc -ne 0 ];then
  216.       nsb-abort "Error during configure all (rc=$ngc_rc)"
  217.    fi
  218. }
  219. nsb-zip()
  220. {
  221.    if [ $# -ne 3 ]; then
  222.       nsb-abort "usage: $0 release build_directory dest_dir"
  223.    fi
  224.    release=$1
  225.    build_dir=$2
  226.    dest_dir=$3
  227.    build=$build_dir/$NSB_PLATFORM
  228.    if [ ! -d $build ]; then
  229.       nsb-abort "$build directory does not exist!"
  230.    fi
  231.    if [ ! -d $build/usr ]; then
  232.       nsb-abort "install directory $build/usr directory does not exist!"
  233.    fi
  234.    cd $build
  235.    rm -f $dest_dir/$release-$NSB_PLATFORM.tar
  236.    nsb-info "tar cf $dest_dir/$release-$NSB_PLATFORM.tar usr"
  237.    tar cf $dest_dir/$release-$NSB_PLATFORM.tar usr
  238.    nsb-info "gzip --best $dest_dir/$release-$NSB_PLATFORM.tar"
  239.    gzip --best $dest_dir/$release-$NSB_PLATFORM.tar
  240.    if [ $NSB_QUIET -ne 1 ]; then
  241.       ls -lt $dest_dir
  242.    fi
  243. }
  244. nsb-upload()
  245. {
  246.    build_dir=$1
  247.    target=$2
  248.    nsb-flow upload to $target: config.log configure-summary nsb-make-all.$NSB_DATE nsb-make-test.$NSB_DATE
  249.    dir=$PWD
  250.    cd $build_dir
  251.    /usr/bin/scp config.log configure-summary nsb-make-all.$NSB_DATE nsb-make-test.$NSB_DATE
  252.                  $target
  253.    cd $dir
  254. }
  255. nsb-make()
  256. {
  257.    nsb-flow make $1
  258.    target=$1
  259.    shift 1
  260.    parms=$@
  261.    if [ -z $NSB_MAKE ];then
  262.       #nsb-info "Searching for GNU make (set NSB_MAKE to skip this step)"
  263.       for p in `echo $PATH | tr ':' ' '`
  264.       do
  265.          #echo $p
  266.          if [ -x $p/make ];then
  267.             dummy=`$p/make --version 2>&1 | grep GNU`
  268.             if [ $? -eq 0 ];then
  269.        #nsb-info "using $p/make ($dummy)"
  270.                NSB_MAKE=$p/make
  271.                break
  272.             fi
  273.          fi
  274.          if [ -x $p/gmake ];then
  275.             dummy=`$p/gmake --version 2>&1 | grep GNU`
  276.             if [ $? -eq 0 ];then
  277.        #nsb-info "using $p/gmake ($dummy)"
  278.                NSB_MAKE=$p/gmake
  279.                break
  280.             fi
  281.          fi
  282.       done
  283.       if [ -z $NSB_MAKE ];then
  284.          nsb-abort "GNU make not found. Set NSB_MAKE to your make executable."
  285.       fi
  286.    fi
  287.    nsb_make_OUTPUT=nsb-make-$target.$NSB_DATE
  288.    nsb-info "Making $target... (log is $nsb_make_OUTPUT)"
  289.    #
  290.    if [ "x$target" = "xall" ]; then
  291.       $NSB_MAKE NOAUTODEPS=y touchit 2>&1 | tee $nsb_make_OUTPUT
  292.    fi
  293.    $NSB_MAKE $NSB_MAKE_EXTRA NOAUTODEPS=y start-flag $target $parms end-flag 2>&1 | tee -a $nsb_make_OUTPUT
  294.    # checking $? would only get us the rc from tee, which is useless
  295.    nsb-info "Checking for errors..."
  296.    egrep -i "error|fail|warn|no such|exists|***" $nsb_make_OUTPUT 
  297.          > nsb-make-$target-allerrs.$NSB_DATE
  298.    # allow for a few exceptions
  299.    egrep -v -i "testing .*failure|[a-z&]fail|warn|error(mib|.3)|In function" nsb-make-$target-allerrs.$NSB_DATE 
  300.          > nsb-make-$target-errs.$NSB_DATE
  301.    if [ -s nsb-make-$target-errs.$NSB_DATE ]; then
  302.       nsb-prompt "press enter to view errors"
  303. #      grep ':' $nsb_make_OUTPUT > nsb-make-$target-errs2.$NSB_DATE
  304. #      tail -n $NSB_ERR_CTX_LINES nsb-make-$target-errs2.$NSB_DATE >&2
  305.       tail $NSB_TAIL_ARGS nsb-make-$target-errs.$NSB_DATE >&2
  306.       nsb-abort "Error(s) during make $target"
  307.    fi
  308.    if [ -f build-in-progress-flag ];then
  309.      nsb-abort "make $target incomplete"
  310.    fi
  311. }
  312. nsb-default-paths()
  313. {
  314.    if [ -z "$NSB_VERSION" ]; then
  315.       NSB_VERSION="unknown-version"
  316.    fi
  317.    if [ -z "$NSB_SRC_DIR" ]; then
  318.       NSB_SRC_DIR=$HOME/src/net-snmp-$NSB_VERSION
  319.    fi
  320.    if [ -z "$NSB_BUILD_DIR" ]; then
  321.       NSB_BUILD_DIR=$HOME/build/$NSB_VERSION
  322.       if [ ! -z "$NSB_SUFFIX" ]; then
  323.          NSB_BUILD_DIR=$NSB_BUILD_DIR/$NSB_SUFFIX
  324.       fi
  325.    fi
  326.    if [ -z "$NSB_INSTALL_DIR" ]; then
  327.       NSB_INSTALL_DIR=$NSB_BUILD_DIR/usr/local
  328.    fi
  329. }
  330. nsb-build()
  331. {
  332.    if [ $# -lt 5 ]; then
  333.       nsb-abort "usage: $0 release src_dir build_directory dest_dir config_all_flag ($@)"
  334.    fi
  335.    nsb_config_all=0
  336.    release=$1
  337.    src_dir=$2
  338.    build_dir=$3
  339.    dest_dir=$4
  340.    nsb_config_all=$5
  341.    shift 5
  342.    nsb-flow build in $build_dir
  343.    nsb-flow host $NSB_HOST
  344.    nsb-flow platform $NSB_PLATFORM
  345.    if [ ! -d $src_dir ]; then
  346.       nsb-abort "$src_dir does not exist!"
  347.    fi
  348.    if [ ! -d $build_dir ]; then
  349.       mkdir $build_dir
  350.       if [ ! -d $build_dir ]; then
  351.          nsb-abort "$build_dir directory does not exist!"
  352.       fi
  353.    fi
  354.    nsb-info "Changing directories to $build_dir"
  355.    cd $build_dir
  356.    if [ $NSB_CLEAN -gt 0 ]; then
  357.       nsb-info "Cleaning up..."
  358.       if [ $NSB_CLEAN -eq 2 ];then
  359.         if [ "x$PWD" = "/" ]; then
  360.            nsb-abort "Not running rm -fR from /"
  361.         fi
  362.         nsb-info "rm -fR * .[a-zA-Z]* 2>&1 > /dev/null"
  363.         rm -fR * .[a-zA-Z]* 2>&1 > /dev/null
  364.       else
  365.         nsb-info "rm -fR nsb-* $dest_dir 2>&1 > /dev/null"
  366.         rm -fR nsb-* $dest_dir 2>&1 > /dev/null
  367.         if [ -f Makefile ]; then
  368.             nsb-make NOAUTODEPS=y distclean
  369.             nsb_build_rc=$?
  370.             if [ $nsb_build_rc -ne 0 ]; then
  371.                 nsb-abort "Error during make distclean (rc=$nsb_build_rc)"
  372.             fi
  373.         fi
  374.       fi
  375.    fi
  376.    if [ ! -d $dest_dir ]; then
  377.       mkdir -p $dest_dir
  378.       if [ ! -d $dest_dir ]; then
  379.          nsb-abort "$dest_dir directory does not exist!"
  380.       fi
  381.    fi
  382.    if [ $NSB_SKIP_CONFIG -ne 1 ]; then
  383.       nsb-info "Configuring... (log is nsb-config.$NSB_DATE)"
  384.       if [ $nsb_config_all -eq 0 ]; then
  385.           nsb-config-dist $src_dir $dest_dir
  386.       else
  387.           nsb-config-all $src_dir $dest_dir
  388.       fi
  389.       nsb-prompt "press enter to continue"
  390.    fi
  391.    if [ $NSB_SKIP_BUILD -eq 1 ]; then
  392.       nsb-info "Skipping 'make all'"
  393.    else
  394.       nsb-make all
  395.    fi
  396.    if [ $NSB_SKIP_TEST -eq 1 ]; then
  397.       nsb-info "Skipping 'make test'"
  398.    else
  399.       nsb-prompt "No errors found, press enter to run tests"
  400.       SNMP_TMPDIR_BASE=$build_dir/tests
  401.       export SNMP_TMPDIR_BASE
  402.       nsb-make test
  403.    fi
  404.    if [ $NSB_SKIP_INSTALL -eq 1 ]; then
  405.       nsb-info "Skipping 'make install'"
  406.    else
  407.       nsb-prompt "No errors found, press enter to install"
  408.       nsb-make install
  409.    fi
  410.    return 0
  411. }