#!/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