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

SNMP编程

开发平台:

Unix_Linux

  1. #!/bin/ksh
  2. #
  3. # elfdepend.sh
  4. #
  5. # given a path, this scripts searches for ELF binaries and libraries
  6. # and generates package dependency file entries according to ther dependencies
  7. #
  8. # Usage: elfdepend <ELF-binary>|<directory>
  9. #
  10. # 2002/11 Stefan.Radman@CTBTO.ORG
  11. #
  12. # /var/sadm/install/contents format:
  13. #
  14. # /dev d none 0775 root sys SUNWcsr SUNWcsd
  15. # path type class mode owner group packages
  16. # /etc/.login f renamenew 0644 root sys 516 37956 904647695 SUNWcsr
  17. # /etc/acct/holidays e preserve 0664 bin bin 289 22090 904647603 SUNWaccr
  18. # path type class mode owner group x x x packages
  19. # /bin=./usr/bin s none SUNWcsr
  20. # path=link type class packages
  21. # /devices/pseudo/clone@0:hme c none 11 7 0600 root sys SUNWcsd
  22. # path type class x x owner mode packages
  23. #
  24. # types e (sed), v (volatile) have same format like type f (file)
  25. # type l (hardlink) has same format like type s (symlink)
  26. #
  27. prog=`basename $0`
  28. LAST_CHANCE=/opt/OSS/lib
  29. if [ -d "$1" ] ; then
  30.   find $1 -type f -exec file {} ;
  31. elif [ -x "$1" ] ; then
  32.   file $1
  33. else
  34.   echo 1>&2 "usage: $0 <directory>|<ELF executable>"
  35.   exit 1
  36. fi | awk '$2 == "ELF" { print }' | cut -d: -f1 |
  37. while read elf
  38. do
  39.   ldd "$elf" | while read lib x path
  40.   do
  41.     [ -z "$path" ] && continue
  42.     if [ "$path" = '(file not found)' ]
  43.     then
  44.       if [ -x $LAST_CHANCE/$lib ]
  45.       then
  46.         path="$LAST_CHANCE/$lib"
  47.       else
  48.         echo "# $prog: $lib $x $path"
  49.         continue # not found
  50.       fi
  51.     fi
  52.     echo "$path"
  53.     # need symlink handling here - see /usr/platform/SUNW,*/lib/*
  54.   done
  55. done | sort -u | while read libpath other
  56. do
  57.   [ "$libpath" = "#" ] && echo "$libpath $other" && continue # error message
  58.   set -- `grep "^$libpath[ =]"  /var/sadm/install/contents | head -1`
  59.   path=$1; type=$2
  60.   case $type in
  61.     f) # file
  62.       shift 9 # first package
  63.       ;;
  64.     s|l) # link
  65.       shift 3 # first package
  66.       ;;
  67.     '') # not found
  68.       echo "# $prog: $libpath is not associated with any package"
  69.       continue
  70.       ;;
  71.     *) # dubious file type
  72.       echo "# $prog: path $1 has dubious file type $2"
  73.       continue
  74.       ;;
  75.   esac
  76.   set -- `echo $1 | tr : ' '`
  77.   echo $1 # strip off classes
  78. done | sort -u | while read pkg other
  79. do
  80.   if [ "$pkg" = "#" ] ; then # error message
  81.     echo 1>&2 "$other" # goes to stderr
  82.     continue
  83.   fi
  84.   eval `pkgparam -v $pkg PKG NAME`
  85.   printf "P  %-15s%sn" "$PKG" "$NAME"
  86. done