111 lines
2.9 KiB
Bash
111 lines
2.9 KiB
Bash
|
#!/bin/sh
|
||
|
#
|
||
|
# openmamba ISO RPM differences report creator
|
||
|
# Copyright (c) 2010 by Silvan Calarco <silvan.calarco@mambasoft.it>
|
||
|
#
|
||
|
TMPDIR=/tmp/isodiff
|
||
|
|
||
|
function create_count_files() {
|
||
|
local F=$1
|
||
|
SIZE=0
|
||
|
rpm -r $TMPDIR/$F -qa --queryformat "%{NAME} %{SIZE}\n" | sort > $TMPDIR/$F-rpm.txt
|
||
|
> $TMPDIR/$F-rpm-size.txt
|
||
|
while read line; do
|
||
|
set -- $line
|
||
|
SIZE=`expr $SIZE + $2`
|
||
|
echo "$1 $SIZE" >> $TMPDIR/$F-rpm-size.txt
|
||
|
done < $TMPDIR/$F-rpm.txt
|
||
|
echo "Total size: $SIZE"
|
||
|
}
|
||
|
|
||
|
ISOFROM=$1
|
||
|
ISOTO=$2
|
||
|
|
||
|
[ "$ISOFROM" -a "$ISOTO" ] || {
|
||
|
echo "Usage: $0 from.iso to.iso"
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
[ -e "$ISOFROM" ] || {
|
||
|
echo "Error: file $ISOFROM does not exist; aborting."
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
[ -e "$ISOTO" ] || {
|
||
|
echo "Error: file $ISOTO does not exist; aborting."
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
umount $TMPDIR/from 2>/dev/null
|
||
|
umount $TMPDIR/to 2>/dev/null
|
||
|
umount $TMPDIR/isofrom 2>/dev/null
|
||
|
umount $TMPDIR/isoto 2>/dev/null
|
||
|
|
||
|
mkdir -p $TMPDIR/{isofrom,isoto,from,to}
|
||
|
mount -o loop $ISOFROM $TMPDIR/isofrom || {
|
||
|
echo "Error: cannot mount $ISOFROM; aborting."
|
||
|
exit 1
|
||
|
}
|
||
|
mount -o loop $ISOTO $TMPDIR/isoto || {
|
||
|
echo "Error: cannot mount $ISOTO; aborting."
|
||
|
umount $TMPDIR/isofrom
|
||
|
exit 1
|
||
|
}
|
||
|
mount -o loop $TMPDIR/isofrom/rootfs.compressed $TMPDIR/from || {
|
||
|
echo "Error: cannot mount compressed fs inside $ISOFROM; aborting."
|
||
|
umount $TMPDIR/isofrom
|
||
|
umount $TMPDIR/isoto
|
||
|
exit 1
|
||
|
}
|
||
|
mount -o loop $TMPDIR/isoto/rootfs.compressed $TMPDIR/to || {
|
||
|
echo "Error: cannot mount compressed fs inside $ISOTO; aborting."
|
||
|
umount $TMPDIR/from
|
||
|
umount $TMPDIR/isofrom
|
||
|
umount $TMPDIR/isoto
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
create_count_files from
|
||
|
create_count_files to
|
||
|
|
||
|
> $TMPDIR/diff.txt
|
||
|
while read line; do
|
||
|
set -- $line
|
||
|
pkgname=$1
|
||
|
fromsize=$2
|
||
|
lineto=`grep "^$pkgname " $TMPDIR/to-rpm.txt 2>/dev/null`
|
||
|
[ "$lineto" ] && {
|
||
|
set -- $lineto
|
||
|
tosize=$2
|
||
|
} || tosize=0
|
||
|
diffsize=`expr $tosize - $fromsize`
|
||
|
[ $diffsize -ne 0 ] && {
|
||
|
percsize=`echo "scale=2; $diffsize * 100 / $fromsize" | bc` || percsize=0
|
||
|
echo -e "$pkgname ${tosize} ${fromsize} ${diffsize} ${percsize}" >> $TMPDIR/diff.txt
|
||
|
}
|
||
|
done < $TMPDIR/from-rpm.txt
|
||
|
|
||
|
while read line; do
|
||
|
set -- $line
|
||
|
pkgname=$1
|
||
|
tosize=$2
|
||
|
linefrom=`grep "^$pkgname " $TMPDIR/from-rpm.txt 2>/dev/null`
|
||
|
[ "$linefrom" ] && continue
|
||
|
echo -e "$pkgname $tosize 0 $tosize 100" >> $TMPDIR/diff.txt
|
||
|
done < $TMPDIR/to-rpm.txt
|
||
|
|
||
|
echo -e "Package\r\t\t\t\t\t N Diff (bytes)" > $TMPDIR/diff-growth.txt
|
||
|
echo "------------------------------------------------------------------------------------" >> $TMPDIR/diff-growth.txt
|
||
|
incr=0
|
||
|
cat $TMPDIR/diff.txt | sort -n -k 4 -r | while read line; do
|
||
|
set -- $line
|
||
|
[ ${3} -eq 0 ] && new="*" || new=" "
|
||
|
incr=`expr $incr + ${4}`
|
||
|
echo -e "$1\r\t\t\t\t\t ${new} ${4}\r\t\t\t\t\t\t\t (${5}%)\r\t\t\t\t\t\t\t\t\t $incr" >> $TMPDIR/diff-growth.txt
|
||
|
done
|
||
|
umount $TMPDIR/from
|
||
|
umount $TMPDIR/to
|
||
|
umount $TMPDIR/isofrom
|
||
|
umount $TMPDIR/isoto
|
||
|
exit 0
|