3037
|
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 |
for f in $TEMPFILES; do
|
|
21 |
rm -rf $TEMPFILES
|
|
22 |
done
|
|
23 |
}
|
|
24 |
|
|
25 |
trap clean_up HUP INT TERM ERR
|
|
26 |
|
|
27 |
TEMPDIR=/tmp/.gen_pkgsize.$$
|
|
28 |
register_tempfile $TEMPDIR
|
|
29 |
mkdir -p $TEMPDIR
|
|
30 |
|
|
31 |
fatal () {
|
|
32 |
for msg in "${@}"; do
|
|
33 |
echo $msg 1>&2
|
|
34 |
done
|
|
35 |
clean_up
|
|
36 |
exit 1
|
|
37 |
}
|
|
38 |
|
|
39 |
unpack () {
|
|
40 |
cd $TEMPDIR
|
|
41 |
gzip -dc "$1" | /bin/tar xf -
|
|
42 |
}
|
|
43 |
|
|
44 |
print_subdir () {
|
|
45 |
cd $TEMPDIR/$3
|
|
46 |
dummy=$(echo */*)
|
|
47 |
echo "$dummy" | grep '\*' > /dev/null
|
|
48 |
if [ $? != 0 ]; then
|
|
49 |
du -s */* | sed -e "s%^\([0-9]*\)[ ]*\(.*\)%$1 \1 $2/\2%"
|
|
50 |
else
|
|
51 |
du -s * | sed -e "s%^\([0-9]*\)[ ]*\(.*\)%$1 \1 $2/\2%"
|
|
52 |
fi
|
|
53 |
}
|
|
54 |
|
|
55 |
print_sizes () {
|
|
56 |
pname=`echo "$1" | sed -e 's/\.tar\.gz$//' -e 's/\.tgz$//'`
|
|
57 |
cd $TEMPDIR
|
|
58 |
test ! -d $pname && fatal "Cannot find directory \"$pname\" after unpacking \"$1\""
|
|
59 |
basedir=`grep '^BASEDIR=' $pname/pkginfo | cut -f2 -d=`
|
|
60 |
if [ "x$basedir" = x/ ]; then
|
|
61 |
basedir=
|
|
62 |
fi
|
|
63 |
test -d "$pname/reloc" && print_subdir "$pname" "$basedir" "$pname/reloc"
|
|
64 |
test -d "$pname/root" && print_subdir "$pname" "$basedir" "$pname/root"
|
|
65 |
}
|
|
66 |
|
|
67 |
gen_pkgsize () {
|
|
68 |
echo "Generating .pkgsize in $1"
|
|
69 |
dir_pkgs=$(cd "$1"; find . -name 'SUNW*.tar.gz' -print -o -name 'SUNW*.tgz' -print | sed -e 's/^.\///')
|
|
70 |
IFS="
|
|
71 |
"
|
|
72 |
sizefile="$1/.pkgsize"
|
|
73 |
cat /dev/null > "$sizefile"
|
|
74 |
for pkg in $dir_pkgs; do
|
|
75 |
unpack "$1/$pkg" || fatal "Failed to unpack $1/$pkg"
|
|
76 |
print_sizes "$pkg" >> "$sizefile"
|
|
77 |
rm -rf $TEMPDIR
|
|
78 |
mkdir -p $TEMPDIR
|
|
79 |
done
|
|
80 |
}
|
|
81 |
|
|
82 |
# main ()
|
|
83 |
IFS="
|
|
84 |
"
|
|
85 |
mydir=`pwd`
|
|
86 |
for dir in "${@}"; do
|
|
87 |
case "$dir" in
|
|
88 |
/*)
|
|
89 |
gen_pkgsize "$dir"
|
|
90 |
;;
|
|
91 |
*)
|
|
92 |
gen_pkgsize "$mydir/$dir"
|
|
93 |
;;
|
|
94 |
esac
|
|
95 |
done
|
|
96 |
|
|
97 |
clean_up
|
|
98 |
exit 0
|