#!/bin/bash
LOGFILE="/var/opt/bukpkgs/log/bukpkgs.$(date +"%y%m%d").log"
OKFILE="/var/opt/bukpkgs/run/bukpkgs.updated"
DEBARX="/var/cache/apt/archives"
DEBARXold="/var/cache/apt/archives.old"
MsgDIR="/var/opt/bukts/run"
MsgFILE="$MsgDIR/shiftopen.msg"
RebootFILE="$MsgDIR/need.reboot"
Message1="С $(date +"%H:%M") Идет установка обновлений системы"
Message2="Установлены обновления, необходима перезагрузка системы"
Message3="Установлены обновления, перезагрузка системы не требуется"
MessageErr="Ошибка при установке обновлений"

echo "----------------" >> $LOGFILE
echo "$(date +"%y.%m.%d %H:%M:%S") ; $(basename $0) ; START ; $USER ; $@ ;" >> $LOGFILE

DISTNAME=
APTKEYS="-y"
TESTOK="yes"
cml_i=$#
FORCE="no"
TREP=""
while [ $cml_i -ge "0" ]
do
    case $1 in
        -t)
	    if [ ! -z "$2" ]; then
	        APTKEYS=${APTKEYS}" -t $2"
	        shift
		cml_i=$(expr $cml_i - 1)
	    fi
            ;;
        -d)
            APTKEYS=${APTKEYS}" -d"
            TESTOK="no"
            ;;
        -v)
            VERBV="yes"
            ;;
        -q)
            VERBQ="yes"
            ;;
        -c)
            TESTCACHE="yes"
            ;;
        -f|--force)
            FORCE="yes"
            ;;
        --stable)
	    DISTNAME="/stable"
	    ;;
    esac
    shift
    cml_i=$(expr $cml_i - 1)
done

if [ "$TESTOK" == "yes" ]; then

    if [ "$TESTCACHE" == "yes" ]; then
        if [ $(ls $DEBARX/*buk*deb $DEBARX/*sbspsb*deb $DEBARX/*siebel*deb 2>/dev/null | wc -w) -ne 0 ]; then
            touch $OKFILE
            if [ "$VERBV" == "yes" -o "$VERBQ" == "yes" ]; then
                echo "Есть пакеты для обновления"
                echo "Есть пакеты для обновления" >> $LOGFILE
                ls $DEBARX/*buk*deb $DEBARX/*sbspsb*deb $DEBARX/*siebel*deb 2>/dev/null >> $LOGFILE
                if [ "$VERBV" == "yes" ]; then
                    ls $DEBARX/*buk*deb $DEBARX/*sbspsb*deb $DEBARX/*siebel*deb 2>/dev/null
                fi
            fi
        fi
    fi

    if [ ! -f $OKFILE ]; then
        echo "$(date +"%y.%m.%d %H:%M:%S") ; $(basename $0) ; end ; no file $OKFILE" >> $LOGFILE
        if [ "$VERBV" == "yes" -o "$VERBQ" == "yes" ]; then
            echo "Нет новых обновлений"
        fi
        exit 0
    fi
    if [ -d $MsgDIR ]; then
        echo $Message1 > $MsgFILE
    fi
fi

BUKLIST=
# Ищем все пакеты в названии которых присутствует buk и исключаем пакеты для Спасибо от Сбербанка
# (sbspsb) и Клуб Чемпионов (siebel) для исключения дублирования наимнований (они будут добавлены
# позже)
for i in $(dpkg -l | grep ^ii | grep buk | grep -v siebel | grep -v sbspsb |awk '{print $2}'); do
    BUKLIST=${BUKLIST}"${i}${DISTNAME} "
done
# Добавление к списку Спасибо от Сбербанка (sbspsb) если установлен
for i in $(dpkg -l | grep ^ii | grep sbspsb | awk '{print $2}'); do
    BUKLIST=${BUKLIST}"${i}${DISTNAME} "
done
# Добавление к списку Клуб Чемпионов (siebel) если установлен
for i in $(dpkg -l | grep ^ii | grep siebel | awk '{print $2}'); do
    BUKLIST=${BUKLIST}"${i}${DISTNAME} "
done

CMD="aptitude ${APTKEYS} install ${BUKLIST}"
echo "$CMD" >> $LOGFILE
if [ "$VERBV" == "yes" ]; then
    $CMD
    ERR=$?
else
    $CMD >> $LOGFILE 2>>$LOGFILE
    ERR=$?
fi
if [ "$FORCE" == "yes" ]; then
    ERR1=0
else
    ERR1=$ERR
fi

if [ $ERR1 -eq 0 ]; then
    if [ "$TESTOK" == "yes" ]; then
        if [ -d $MsgDIR ]; then
            if [ $(ls $DEBARX/bukts-*deb 2>/dev/null | wc -w) -ne 0 -o \
                 $(ls $DEBARX/bukazs*deb 2>/dev/null | wc -w) -ne 0 ]; then
                echo $Message2 > $MsgFILE
                touch $RebootFILE
                if [ "$VERBV" == "yes" -o "$VERBQ" == "yes" ]; then
                    echo $Message2
                fi
            else
                rm -f $MsgFILE
                if [ "$VERBV" == "yes" -o "$VERBQ" == "yes" ]; then
                    echo $Message3
                fi
            fi
        fi
        rm -f $OKFILE
        if [ "$VERBV" == "yes" ]; then
	    echo "OK"
        fi
    fi
    echo "$(date +"%y.%m.%d %H:%M:%S") ; $(basename $0) ; end; ok" >> $LOGFILE
    exit 0
else
    if [ "$TESTOK" == "yes" -a -f $MsgFILE ]; then
        rm -f $MsgFILE
    fi
    if [ "$VERBV" == "yes" -o "$VERBQ" == "yes" ]; then
        echo $MessageErr
    fi
    echo "$(date +"%y.%m.%d %H:%M:%S") ; $(basename $0); end; err=$ERR, force=$FORCE" >> $LOGFILE
    exit 1
fi
