#!/bin/bash
# Очистка системы от ненужных пакетов.
# Список нужных пакетов должен быть представлен в файле exclude_hand.lst
# !!! Файл exclude_base.lst можно получить во время базовой установки, используя mkbaselist.sh !!!

exclbase=exclude_base.lst
exclhand=exclude_hand.lst

if [ `whoami` != "root" ]; then
    echo "Внимание! Для запуска программы требуются права root."
    echo "Используйте \$su -c './`basename $0`'"
    echo "Или \$sudo `basename $0`"
    echo "После чего введите пароль администратора"
    exit 1
fi

debout=margin_out.lst
debout2=margin_out2.lst
tmpfile=tmp-delunpack.sh-`date +%s`

touch $debout2

while true ; do

    # Получаем список всех ненужных файлов в $debout
    
    ./margin.sh >$tmpfile
    {
        while true ; do
            read a
    	    #a=${a#[^ ]*\ }
    	    if [ "$a" == "" ]; then break ; fi
    	    grep -E "\<$a\>" $exclbase &>/dev/null || grep -E "\<$a\>" $exclhand &>/dev/null
	    if [[ $? == 0 ]]; then continue; fi
    	    echo $a
        done
    } <$tmpfile >$debout
    rm -f $tmpfile
    
    # Проверяем - остались ли ненужные пакеты
#    read a <$debout
#    if [ "$a" == "" ]; then break ; fi	# выходим, если больше удалять нечего
    cmp $debout $debout2 &>/dev/null
    if [[ $? == 0 ]]; then break; fi	# выходим, если больше удалять нечего
    cp $debout $debout2

    #  Удаляем все пакеты, представленные в $debout
    keep=`cat exclude_base.lst; cat exclude_hand.lst`
    {
	while true ; do
	    read a
	    if [ "$a" == "" ]; then break; fi
	    # Проверяем - не найден ли пакет, удаляемый по зависимостям
	    # в списках пакетах, нужных пользователю
	    contin=false
	    for a in `apt-get -s -y remove --purge $a|grep Remv|cut -d ' ' -f2`; do
		if [[ `echo $keep|grep -E "\<$a\>"` ]]; then contin=true; fi
	    done
	    if [[ $contin == true ]]; then echo "Пакет, удаляемый по зависимостям...contcontcont" ; continue; fi

	    echo ">>> Удаляем пакет $a <<<"
	    apt-get -y remove --purge $a
	    if [ $? != 0 ]; then
		echo "Невозможно удалить пакет."
        	exit 1
	    fi
	done
    } <$debout

done

    rm -f $debout
    rm -f $debout2

    echo "Удаление пакетов завершено."
    echo "Список оставшихся пакетов можно посмотреть, выполнив команду \$./margin.sh"

exit 0

