#!/bin/bash

##############################################
# DPKG listing (list all installed packages) #
##############################################

CHRDIR=/chroot

BACKUP_ROOT=/backup
KEEPDAYS=365

BACKUP_DIR=$BACKUP_ROOT/sys-data/dpkglist

##############################################

function rotate_backup
{
    # delete older than 8 days
    find $BACKUP_DIR/*.tar.bz2 -mtime +8 -exec rm -f {} \; &>/dev/null

    # weekly rotate on sundays
    if [ "`date +%u`" = "7" ]; then
	find $BACKUP_DIR/*.tar.bz2 -mtime +7 -exec mv {} $BACKUP_DIR/weekly/ \; &>/dev/null
	find $BACKUP_DIR/weekly/*.tar.bz2 -mtime +$KEEPDAYS -exec rm -f {} \; &>/dev/null
    fi

    return 0
}

[ -d $BACKUP_ROOT ] || exit 21

[ -d $BACKUP_DIR ] || mkdir -p $BACKUP_DIR
[ -d $BACKUP_DIR/weekly ] || mkdir -p $BACKUP_DIR/weekly

rotate_backup

TS=`date +%Y%m%d`

TMP_DIR=$BACKUP_DIR/tmp-$TS
TAR_FILE=dpkglist-$TS.tar.bz2

[ -d $TMP_DIR ] || mkdir $TMP_DIR

[ -f $TAR_FILE ] && rm $TAR_FILE

# gather from all the places
if [ -d $CHRDIR ]; then
    CHROOTS=`ls $CHRDIR`
fi

dpkg-query -W -f '${Package}\n' > $TMP_DIR/root.txt
for CHRD in $CHROOTS; do
    if [ -x $CHRDIR/$CHRD/usr/bin/dpkg-query ]; then
	chroot $CHRDIR/$CHRD dpkg-query -W -f '${Package}\n' >$TMP_DIR/chr-$CHRD.txt
    fi
done

cd $TMP_DIR
tar -cjPf $BACKUP_DIR/$TAR_FILE *.txt

rm -r $TMP_DIR

chown 0:0 $BACKUP_DIR/$TAR_FILE
chmod 0600 $BACKUP_DIR/$TAR_FILE
