#!/bin/bash
## Changelog :
# 1.0 : mode texte uniquement
# 2.0 : Ajout du mode graphique
# 2.1 : légères modifications cosmetiques
## BUGS etc :
# Une fois les suppressions lancées,
# il n'est pas possible de les interompre.
VERSION=2.1
TERMINAL="FAUX"
## Verification du mode de lancement (texte ou graphique)
if [ ! -z "$1" ]
then
if [ "$1" != "--term" ]
then
echo " "
echo " Syntaxe : $O [--term] "
echo " Ajouter simplement l'option --term pour lancer l'outil en mode texte."
echo " "
exit 1
else
TERMINAL="VRAI"
fi
fi
## Traitements communs
KERNEL=`uname -r | cut -d '-' -f 1,2`
dpkg -l | grep linux | grep ubuntu | grep ii | awk '{print $2}' | grep 2.6 >/tmp/clean_kernel.tmp
dpkg -l | grep linux | grep restricted | grep ii | awk '{print $2}' | grep 2.6 >>/tmp/clean_kernel.tmp
dpkg -l | grep linux | grep image| grep ii | awk '{print $2}' | grep 2.6 >>/tmp/clean_kernel.tmp
dpkg -l | grep linux | grep headers | grep ii | awk '{print $2}' | grep 2.6 >>/tmp/clean_kernel.tmp
if [ "$TERMINAL" = "VRAI" ]
then
### Mode texte
echo " "
echo "Noyau actuellement en cours d'utilisation : $KERNEL"
echo " "
echo "Les paquets suivants vont etres supprimés :"
echo " "
grep -v "$KERNEL" /tmp/clean_kernel.tmp | sed -e "s@^@ @g"
echo " "
echo " Par défaut seul le noyau actuel est conservé."
echo -n " Voulez vous indiquer manuellement d'autres paquets à conserver ? [o/N] :"
read REP
if [ "$REP" = "o" -o "$REP" = "O" ]
then
echo " Indiquez la liste des paquets à conserver en les separant par un espace : "
read REP
for i in `echo "$REP"`
do
sed -i -e /$i/D /tmp/clean_kernel.tmp
done
echo " "
echo " Voilà la liste des paquets qui seront donc supprimés :"
echo " "
grep -v "$KERNEL" /tmp/clean_kernel.tmp | sed -e "s@^@ @g"
echo " "
fi
echo -n " Voulez vous supprimer l'ensemble des paquets indiqués ? [o/N] :"
read REP
if [ "$REP" = "o" -o "$REP" = "O" ]
then
echo " "
if [ $USER = "root" ]
then
echo " Suppression en cours :"
echo " "
for i in `grep -v "$KERNEL" /tmp/clean_kernel.tmp`
do
apt-get remove --yes --purge $i
done
rm -f /tmp/clean_kernel.tmp
echo " "
echo " -------------- Suppression effectuée ---------------"
echo " "
exit 0
else
echo " Erreur : Vous devez avoir les droits de root pour supprimer des paquets"
echo " Avez vous oublié sudo devant le nom du script ?"
echo " "
rm -f /tmp/clean_kernel.tmp
exit 2
fi
else
echo " "
echo " Abandon de l'operation..."
echo " "
rm -f /tmp/clean_kernel.tmp
exit 2
fi
else
### Mode graphique
## On verifie que zenity est installé
which zenity > /dev/null
if [ $? -ne 0 ]
then
echo " "
echo " Cette commande necessite zenity pour fonctionner."
echo " Installez zenity ou utilisez uniquement le mode texte en tapant :"
echo " "
echo " $0 --term"
echo " "
rm -f /tmp/clean_kernel.tmp
exit 3
fi
## On vérifie qu'un display graphique est disponible
if [ -z "$DISPLAY" ]
then
echo " "
echo " Aucun serveur graphique disponible (variable DISPLAY vide)"
echo " Si vous utilisez un serveur en mode texte uniquement,"
echo " vous pouvez utiliser ce logiciel en mode console en tapant:"
echo " "
echo " $0 --term"
echo " "
rm -f /tmp/clean_kernel.tmp
exit 3
fi
## As t-on bien les droits admin ?
if [ $USER != "root" ]
then
zenity --error --text="Ce programme nécessite les droits root pour fonctioner.\nRelancer le en tapant : gksudo $0"
rm -f /tmp/clean_kernel.tmp
exit 2
fi
## On les a...
## Mais y a t-il vraiment des paquets à supprimer ?
if [ -z "`grep -v "$KERNEL" /tmp/clean_kernel.tmp`" ]
then
zenity --info --title "Nettoyage dans les noyaux..." \
--text="Le noyau actuellement utilisé a pour version : $KERNEL.\nAucun paquet faisant référence à un noyau plus ancien n'a été trouvé sur le système...\n\nAppuyez sur OK pour quitter le programme."
rm -f /tmp/clean_kernel.tmp
exit 0
fi
## Oui, il y a des paquets à supprimer...
zenity --warning --title "Netoyage dans les noyaux..." \
--text="Ce programme vous permet de supprimer facilement tous les noyaux (et modules...) installés et qui ne sont plus utilisés. Par defaut, tous les paquets qui ne sont pas utilisés seront supprimés, mais vous pouvez choisir d'en conserver certains.\n\nATTENTION : Si vous décidez de conserver une version x d'un noyau, vérifier bien que tous les paquets comprenant x dans leur noms sont bien désélectionnés !"
## Si on clic sur Annuler...
if [ $? -ne 0 ]
then
rm -f /tmp/clean_kernel.tmp
exit 2
fi
## Sinon
LISTE_PAQUET=""
## Construction de la liste des paquets à supprimer pour zenity
for i in `grep -v "$KERNEL" /tmp/clean_kernel.tmp`
do
LISTE_PAQUET="$LISTE_PAQUET TRUE $i"
done
CHOIX=$(zenity \
--title "Netoyage dans les noyaux" \
--text="Pour information, vous utilisez actuellement la version $KERNEL de Linux.\nEn cliquant sur Valider les paquets suivants seront supprimés:" \
--window-icon="/usr/share/pixmaps/gnome-debian.png" \
--width=420 --height=400 \
--list --print-column="2" --checklist --separator=' ' \
--column="Supprimer" \
--column="Nom des paquets" \
$LISTE_PAQUET )
## Si on clic sur Annuler...
if [ $? -ne 0 ]
then
rm -f /tmp/clean_kernel.tmp
exit 2
fi
## Sinon
NBSUP=`echo $CHOIX | wc -w`
PROGRES=0
INCREMENT=`expr 100 / $NBSUP`
(
for i in `echo $CHOIX`
do
apt-get remove --purge --yes "$i" >/dev/null 2>&1
PROGRES=$(($PROGRES+$INCREMENT))
echo "$PROGRES"
echo "# Suppression de $i"
done
) |
zenity --progress --width=420 --auto-close --percentage=0 \
--text="Suppression des paquets selectionnés..."
zenity --info --title "Nettoyage dans les noyaux..." \
--text="Les paquets sélectionnés ont bien été supprimés."
rm -f /tmp/clean_kernel.tmp
exit 0
fi