Home | History | Annotate | Download | only in scripts
      1 #!/bin/bash
      2 
      3 # Script to generate file system usage information files (.pkgsize)
      4 # for use of the install-jds script to calculate the disk space
      5 # requirements
      6 
      7 if [ $# = 0 -o "x$1" = "x--help" -o "x$1" = "x-h" ]; then
      8     echo "Usage: $0 directory..."
      9     echo "Calculate file system usage information files for the given directories"
     10     exit 1
     11 fi
     12 
     13 TEMPFILES=
     14 register_tempfile () {
     15     TEMPFILES="$TEMPFILES $1"
     16 }
     17 
     18 clean_up () {
     19     IFS=" "
     20     cd /
     21     for f in $TEMPFILES; do
     22 	rm -rf $TEMPFILES
     23     done
     24 }
     25 
     26 trap clean_up HUP INT TERM ERR
     27 
     28 TEMPDIR=/tmp/.gen_pkgsize.$$
     29 register_tempfile $TEMPDIR
     30 mkdir -p $TEMPDIR
     31 
     32 fatal () {
     33     for msg in "${@}"; do
     34 	echo $msg 1>&2
     35     done
     36     clean_up
     37     exit 1
     38 }
     39 
     40 unpack () {
     41     cd $TEMPDIR
     42     gzip -dc "$1" | /bin/tar xf -
     43 }
     44 
     45 print_subdir () {
     46     cd $TEMPDIR/$3
     47     dummy=$(echo */*)
     48     echo "$dummy" | grep '\*' > /dev/null
     49     if [ $? != 0 ]; then
     50 	du -sk */* | sed -e "s%^\([0-9]*\)[ 	]*\(.*\)%$1 \1 $2/\2%"
     51     else
     52 	du -sk * | sed -e "s%^\([0-9]*\)[ 	]*\(.*\)%$1 \1 $2/\2%"
     53     fi
     54 }
     55 
     56 print_sizes () {
     57     pname=`echo "$1" | sed -e 's/\.tar\.gz$//' -e 's/\.tgz$//'`
     58     cd $TEMPDIR
     59     test ! -d "$pname" && fatal "Cannot find directory \"$pname\" after unpacking \"$1\""
     60     basedir=`grep '^BASEDIR=' $pname/pkginfo | cut -f2 -d=`
     61     if [ "x$basedir" = x/ ]; then
     62 	basedir=
     63     fi
     64     test -d "$pname/reloc" && print_subdir "$pname" "$basedir" "$pname/reloc"
     65     test -d "$pname/root" && print_subdir "$pname" "$basedir" "$pname/root"
     66 }
     67 
     68 gen_pkgsize () {
     69     echo "Generating .pkgsize in $1"
     70     dir_pkgs=$(cd "$1"; find . -name '*.tar.gz' -print -o -name '*.tgz' -print | sed -e 's/^.\///')
     71     IFS=" 	
     72 "
     73     sizefile="$1/.pkgsize"
     74     test ! -z "$dir_pkgs" && cat /dev/null > "$sizefile"
     75     for pkg in $dir_pkgs; do
     76 	unpack "$1/$pkg" || fatal "Failed to unpack $1/$pkg"
     77 	print_sizes "$pkg" >> "$sizefile"
     78 	cd /
     79 	rm -rf $TEMPDIR
     80 	mkdir -p $TEMPDIR
     81     done
     82 }
     83 
     84 # main ()
     85 IFS=" 	
     86 "
     87 mydir=`pwd`
     88 for dir in "${@}"; do
     89     cd "$mydir"
     90     test ! -d "$dir" && continue
     91     case "$dir" in
     92 	/*)
     93 	    gen_pkgsize "$dir"
     94 	    ;;
     95 	*)
     96 	    gen_pkgsize "$mydir/$dir"
     97 	    ;;
     98     esac
     99 done
    100 
    101 clean_up
    102 exit 0
    103