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