10

Nov

by Maniack Crudelis

Actuellement sur Ubuntu et Debian, je remarque un défaut commun aux 2 distributions, l'accumulation de paquets de dépendances liés à des paquets supprimés.
En effet, lors de la suppression d'un paquet, volontairement ou suite à une mise à jour, les dépendances de ce paquets ne sont pas supprimées. Même si celles-ci ne sont plus nécessaire.

Lors de l'usage d'apt-get en ligne de commande, un message nous informera que des paquets inutiles peuvent être supprimés à l'aide de la commande autoremove.
Mais pour les utilisateurs exploitant uniquement les outils graphiques, aucun avertissement ne signale ces paquets. Et aucun mécanisme ne permet leur suppression automatiquement.

Or, les anciennes version du noyau occupent en moyenne 200mo chacune, ce qui peut saturer rapidement un disque système de faible capacité.

Afin de pallier ce manque et éviter de saturer le disque système, ce tuto propose la mise en place d'un script qui se chargera une fois par mois de nettoyer ces paquets inutiles de façon autonome.

Méthode simple

Commençons par la méthode simple, qui installera le script et l'activera.

Pour les initiés, sautez cette partie et allez à la méthode hard directement.

Le script se présente sous cette forme:


#!/bin/bash

SCRIPT="/etc/cron.monthly/autopurge"

echo "#!/bin/bash" | sudo tee $SCRIPT > /dev/null
echo "" | sudo tee -a $SCRIPT > /dev/null
echo "TEMP_AUTOPURGE1=\"\$(mktemp)\"" | sudo tee -a $SCRIPT > /dev/null
echo "TEMP_AUTOPURGE2=\"\$(mktemp)\"" | sudo tee -a $SCRIPT > /dev/null
echo "LOGFILE=\"/var/log/apt/autopurge.log\"" | sudo tee -a $SCRIPT > /dev/null
echo "" | sudo tee -a $SCRIPT > /dev/null
echo "echo \" \" >> \$LOGFILE" | sudo tee -a $SCRIPT > /dev/null
echo "date >> \$LOGFILE" | sudo tee -a $SCRIPT > /dev/null
echo "echo \"apt-get autoremove -s\" >> \$LOGFILE" | sudo tee -a $SCRIPT > /dev/null
echo "apt-get autoremove -s > \"\$TEMP_AUTOPURGE1\" 2>> \$LOGFILE" | sudo tee -a $SCRIPT > /dev/null
echo "" | sudo tee -a $SCRIPT > /dev/null
echo "while read LIGNE" | sudo tee -a $SCRIPT > /dev/null
echo "do" | sudo tee -a $SCRIPT > /dev/null
echo "	if [ \$(echo \$LIGNE | cut -f1 -d ' ') == Remv ]	# Si la ligne commence par Remv, paquet à supprimer." | sudo tee -a $SCRIPT > /dev/null
echo "	then" | sudo tee -a $SCRIPT > /dev/null
echo "		echo -n \$(echo \$LIGNE | cut -f2 -d ' ') >> \"\$TEMP_AUTOPURGE2\"" | sudo tee -a $SCRIPT > /dev/null
echo "		echo -n \" \" >> \"\$TEMP_AUTOPURGE2\"" | sudo tee -a $SCRIPT > /dev/null
echo "	fi" | sudo tee -a $SCRIPT > /dev/null
echo "done < \"\$TEMP_AUTOPURGE1\"" | sudo tee -a $SCRIPT > /dev/null
echo "" | sudo tee -a $SCRIPT > /dev/null
echo "echo -e \"\napt-get purge\" >> \$LOGFILE" | sudo tee -a $SCRIPT > /dev/null
echo "apt-get purge -y \$(cat \$TEMP_AUTOPURGE2) >> \$LOGFILE 2>&1" | sudo tee -a $SCRIPT > /dev/null
echo "" | sudo tee -a $SCRIPT > /dev/null
echo "echo -e \"\napt-get autoclean\" >> \$LOGFILE" | sudo tee -a $SCRIPT > /dev/null
echo "apt-get autoclean >> \$LOGFILE 2>&1" | sudo tee -a $SCRIPT > /dev/null

sudo chmod +x $SCRIPT
sudo /bin/bash $SCRIPT

Le script doit être copié tel quel dans un fichier au format txt et enregistré (de préférence) sous le nom autopurge_build.sh
Puis ce fichier texte doit être rendu exécutable (clic droit / propriétés)

Ensuite les choses se corsent car il va être nécessaire d'ouvrir un terminal de commande à l'endroit où se trouve le fichier.

F4 dans le navigateur de fichier de KDE

Et exécuter le fichier

./autopurge_build.sh

Le mot de passe est demandé, puis il va sans doute travailler pendant un moment. Pour effectuer un premier nettoyage. Il est important de ne pas l'interrompre, même si ça semble long.
Puisqu'on se trouve dans le terminal, on peut aisément suivre l'évolution de son travail à l'aide de la commande suivante:

cat /var/log/apt/autopurge.log

A présent, le script s'exécutera tout seul chaque mois et supprimera les paquets devenus inutiles.

 

Méthode hard

Le script présenté ci-dessus va écrire le script au bon endroit pour épargner la navigation dans le terminal.
Si vous préférer faire les choses vous même, voilà le script final:

#!/bin/bash

TEMP_AUTOPURGE1="$(mktemp)"
TEMP_AUTOPURGE2="$(mktemp)"
LOGFILE="/var/log/apt/autopurge.log"

echo " " >> $LOGFILE
date >> $LOGFILE
echo "apt-get autoremove -s" >> $LOGFILE
sudo apt-get autoremove -s > "$TEMP_AUTOPURGE1" 2>> $LOGFILE

while read LIGNE
do
	if [ $(echo $LIGNE | cut -f1 -d ' ') == Remv ]	# Si la ligne commence par Remv, paquet à supprimer.
	then
		echo -n $(echo $LIGNE | cut -f2 -d ' ') >> "$TEMP_AUTOPURGE2"
		echo -n " " >> "$TEMP_AUTOPURGE2"
	fi
done < "$TEMP_AUTOPURGE1"

echo -e "\napt-get purge" >> $LOGFILE
sudo apt-get purge -y $(cat $TEMP_AUTOPURGE2) >> $LOGFILE 2>&1

echo -e "\napt-get autoclean" >> $LOGFILE
sudo apt-get autoclean >> $LOGFILE 2>&1

On placera ce script de préférence dans /etc/cron.monthly/
Un chmod +x suffira à le rendre opérationnel.

Comments

Leave a Reply