Hello,
Are the old kernels automatically removed in Kubuntu? If not, I found a script on the following page and wanted to ask if it was still up to date?
https://bluelupo.info/post/enfernen-von-kerneln/
Here is the script
Are the old kernels automatically removed in Kubuntu? If not, I found a script on the following page and wanted to ask if it was still up to date?
https://bluelupo.info/post/enfernen-von-kerneln/
Here is the script
Code:
#!/bin/bash
#
#######################
# Variablenbelegung
#######################
#
TIME_STAMP=$(date '+%Y%m%d-%H%M%S')
USER_TMP_DIR="/home/$USER/tmp"
LOGFILE_PURGE="$USER_TMP_DIR/run_kernel_remover.log"
LOGFILE_KERNEL_LIST="$USER_TMP_DIR/kernel_list.txt"
KERNEL_ACTUAL=$(uname -r|awk -F"-" '{print $1"-"$2}')
KERNEL_MAJOR_VERSION=$(uname -r|awk -F"." '{print $1"."$2}')
#
#
################
# Funktionen
################
#
#
show_passive_popup_button_push()
{
# KDE Benachrichtigung anzeigen nach dem Bestätigungsdialog
if [ "$1" = "0" ]
then
echo "[$(date '+%H:%M:%S')] DEL_DIALOG YES=$1" >> $LOGFILE_PURGE
elif [ "$1" = "1" ]
then
echo "[$(date '+%H:%M:%S')] DEL_DIALOG NO=$1" >> $LOGFILE_PURGE
kdialog --passivepopup "[Kernel Remover]\nKernel $KERNEL_SELECTION konnte nicht gelöscht werden, da Button NEIN gedrückt wurde!" 5
close_progressbar
del_log
exit 3
elif [ "$1" = "2" ]
then
echo "[$(date '+%H:%M:%S')] DEL_DIALOG CANCEL=$1" >> $LOGFILE_PURGE
kdialog --passivepopup "[Kernel Remover]\nKernel $KERNEL_SELECTION konnte nicht gelöscht werden, da Button ABBRECHEN gedrückt wurde!" 5
close_progressbar
del_log
exit 4
fi
}
show_passive_popup_kernel_del()
{
# KDE Benachrichtigung anzeigen nach dem Löschen des Kernels
if [ "$1" = "0" ]
then
echo "[$(date '+%H:%M:%S')] PURGE RC="$1 >> $LOGFILE_PURGE
kdialog --passivepopup "[Kernel Remover]\nKernel $KERNEL_SELECTION konnte erfolgreich gelöscht werden" 5
elif [ "$1" != "0" ]
then
echo "[$(date '+%H:%M:%S')] PURGE RC="$1 >> $LOGFILE_PURGE
kdialog --passivepopup "[Kernel Remover]\nAchtung, Kernel $KERNEL_SELECTION konnte nicht gelöscht werden!" 5
fi
}
show_passive_popup_pwd()
{
# KDE Benachrichtigung anzeigen nach dem Passwortdialog bei falschen Passwort oder drücken das Abbrechen-Buttons
if [ "$PASSWD_DIALOG_CHECK" = "1" ]
then
kdialog --passivepopup "[Kernel Remover]\nAchtung, Abbruch da im Passwortdialog der Button ABBRECHEN gedrückt wurde!" 5
elif [ "$PWD_CHECK" = "1" ]
then
kdialog --passivepopup "[Kernel Remover]\nAchtung, Abbruch da das Passwort (sudo) falsch eingegeben wurde!" 5
fi
}
init_progressbar()
{
# initieren der Fortschrittsanzeige
progress=$(kdialog --title "Kernel-Remover" --progressbar "Ausgewählte alte Kernelpakete löschen" 4)
qdbus $progress showCancelButton false
}
run_progressbar()
{
# Fortschrittsanzeige aktualisieren bei jedem Schritt
VALUE="$1"
TEXT="$2"
qdbus $progress Set "" value $VALUE > /dev/null
qdbus $progress setLabelText "$VALUE. Schritt: $TEXT" > /dev/null
}
close_progressbar()
{
# Fortschrittsanzeige schließen
qdbus $progress close > /dev/null
}
print_timestamp()
{
# Timestamp (Start und Ende) ins Logfile schreiben
TS_VALUE=$1
if [ "$TS_VALUE" = "start" ]
then
echo "[$(date '+%H:%M:%S')] ----------------------------------------------- Start -----------------------------------------------" >> $LOGFILE_PURGE
elif [ "$TS_VALUE" = "end" ]
then
echo "[$(date '+%H:%M:%S')] ----------------------------------------------- Ende ------------------------------------------------" >> $LOGFILE_PURGE
fi
}
del_log()
{
# Löschen des Logfiles mit der Kernelliste
if [ -e "$LOGFILE_KERNEL_LIST" ]
then
echo "[$(date '+%H:%M:%S')] DELETE $LOGFILE_KERNEL_LIST" >> $LOGFILE_PURGE
rm "$LOGFILE_KERNEL_LIST"
fi
echo "[$(date '+%H:%M:%S')] cp $LOGFILE_PURGE $LOGFILE_PURGE.$TIME_STAMP" >> $LOGFILE_PURGE
print_timestamp end
# Kopie des aktuellen Logfiles erzeugen
cp $LOGFILE_PURGE $LOGFILE_PURGE"."$TIME_STAMP
}
create_log()
{
# ggf. temporäres tmp Verzeichnis im $HOME erstellen
if [ ! -d "$USER_TMP_DIR" ]
then
mkdir "$USER_TMP_DIR"
fi
# Altes Logfile löschen und neues erstellen
if [ -e "$LOGFILE_PURGE" ]
then
rm $LOGFILE_PURGE
touch $LOGFILE_PURGE
touch $LOGFILE_KERNEL_LIST
print_timestamp start
echo "[$(date '+%H:%M:%S')] Logfile $LOGFILE_INSTALL von User $USER am $(date '+%d.%m.%Y') angelegt (1)" >> $LOGFILE_PURGE
else
touch $LOGFILE_PURGE
touch $LOGFILE_KERNEL_LIST
print_timestamp start
echo "[$(date '+%H:%M:%S')] Logfile $LOGFILE_INSTALL von User $USER am $(date '+%d.%m.%Y') angelegt (2)" >> $LOGFILE_PURGE
fi
}
##################
# Hauptprogramm
##################
#
#
# Logfile anlegen
create_log
# Aktuelle Kernel-Majorversion und Kernelversion ins Logfile schreiben
echo "[$(date '+%H:%M:%S')] KERNEL_MAJOR_VERSION="$KERNEL_MAJOR_VERSION >> $LOGFILE_PURGE
echo "[$(date '+%H:%M:%S')] KERNEL_ACTUAL="$KERNEL_ACTUAL >> $LOGFILE_PURGE
# Alle installierten Kernel ermitteln und in Datei schreiben (LOGFILE_KERNEL_LIST)
dpkg -l | egrep linux-image-[0-9] | awk -F'-' '{printf("%s%s%s\n", $3,"-",$4)}' >> $LOGFILE_KERNEL_LIST
# Aktuell laufenden Kernel aus oben erzeugter Datei wieder entfernen
sed -i '/'$KERNEL_ACTUAL'/d' $LOGFILE_KERNEL_LIST
# löschbare Kernel ins Logfile schreiben
echo "[$(date '+%H:%M:%S')] BEGIN DELETABLE KERNEL" >> $LOGFILE_PURGE
cat $LOGFILE_KERNEL_LIST >> $LOGFILE_PURGE
echo "[$(date '+%H:%M:%S')] END DELETABLE KERNEL" >> $LOGFILE_PURGE
# Dialogbox anzeigen mit allen installierten Kernel außer dem aktuell laufenden
KERNEL_SELECTION=$(kdialog --geometry 400x300 --title "Kernel-Remover" --menu "\nAktuell laufende und damit nicht entfernbare Kernelversion:<h3>$KERNEL_ACTUAL</h3>Bitte die Kernelversion für die Deinstallation auswählen:<br>" $(while read ROW; do MP=$ROW; echo $ROW; echo $MP; done < $LOGFILE_KERNEL_LIST) "9999")
KERNEL_SELECTION_CHECK=$?
# Auf Tastendrücke von Dialogbox KERNEL_SELECTION reagieren
if [ "$KERNEL_SELECTION_CHECK" -eq 0 ]
then
echo "[$(date '+%H:%M:%S')] KERNEL_SELECTION_CHECK="$KERNEL_SELECTION >> $LOGFILE_PURGE
elif [ "$KERNEL_SELECTION_CHECK" -eq 1 ]
then
echo "[$(date '+%H:%M:%S')] KERNEL_SELECTION_CHECK="$KERNEL_SELECTION >> $LOGFILE_PURGE
del_log
exit 1
fi
# Dialogbox zur Passwortabfrage, da sudo Rechte benötigt werden
PASSWD_DIALOG=$(kdialog --title "Kernel-Remover (Passwort)" --password "Bitte das Passwort (sudo) eingeben")
PASSWD_DIALOG_CHECK=$?
# Funktion zum Initialisieren der Fortschrittsanzeige
init_progressbar
run_progressbar "1" "Vorbereitungen zum Löschen des Kernels"
sleep 1
# Test ob Passwort korrekt ist via simulierten "sudo -S apt purge"
echo "$PASSWD_DIALOG" | sudo -S apt purge --simulate `apt-cache search 'linux-(image(-extra)?|hwe-'$KERNEL_MAJOR_VERSION'-headers|headers|modules|modules-extra)-'$KERNEL_SELECTION'(-generic){0,1}' | cut -d" " -f1 | awk '{printf("%s ",$0)}END {print "\n"}'`
PWD_CHECK=$?
# Auswertung der Tastendrücke des Passwortdialogs und des Passwortchecks
if [ "$PASSWD_DIALOG_CHECK" = "0" -a "$PWD_CHECK" = "0" ]
then
echo "[$(date '+%H:%M:%S')] PASSWD_DIALOG RC="$PASSWD_DIALOG_CHECK >> $LOGFILE_PURGE
echo "[$(date '+%H:%M:%S')] PWD_CHECK="$PWD_CHECK >> $LOGFILE_PURGE
elif [ "$PASSWD_DIALOG_CHECK" = "1" -o "$PWD_CHECK" = "1" ]
then
echo "[$(date '+%H:%M:%S')] PASSWD_DIALOG RC="$RC >> $LOGFILE_PURGE
echo "[$(date '+%H:%M:%S')] PWD_CHECK="$PWD_CHECK >> $LOGFILE_PURGE
close_progressbar
show_passive_popup_pwd
del_log
exit 2
fi
# Zu löschende Kernelpakete errmitteln für Bestätigungsdialog
KERNEL_PACKAGES=$(dpkg -l | egrep 'linux-(image(-extra)?|hwe-'$KERNEL_MAJOR_VERSION'-headers|headers|modules|modules-extra)-'$KERNEL_SELECTION'(-generic){0,1}'| awk '{print $2}')
# Dialogbox mit Bestätigungsdialog ob Kernel wirklich gelöscht werden soll
DEL_DIALOG=$(kdialog --title "Kernel-Remover (Bestätigung)" --warningyesnocancel "Kernelversion $KERNEL_SELECTION mit den angegebenen Paketen wirklich löschen?\n\n$KERNEL_PACKAGES\n\nLogdatei unter $LOGFILE_PURGE\n\n")
DEL_DIALOG_CHECK=$?
# KDE Benachrichtigung anzeigen
show_passive_popup_button_push $DEL_DIALOG_CHECK
# Fortschrittsanzeige aktualisieren
run_progressbar "2" "Ausgewählter Kernel wird jetzt gelöscht"
# Löschen der Kernelpakete
# Zum testen den Optionsparameter "--yes" (Pakete löschen ohne Nachfrage) von "apt purge" durch "--simulate" (Ausführung des Kommandos nur simulieren) ersetzen
echo "$PASSWD_DIALOG" | sudo -S apt purge --yes `apt-cache search 'linux-(image(-extra)?|hwe-'$KERNEL_MAJOR_VERSION'-headers|headers|modules|modules-extra)-'$KERNEL_SELECTION'(-generic){0,1}' | cut -d" " -f1 | awk '{printf("%s ",$0)}END {print "\n"}'` >> $LOGFILE_PURGE
PURGE=$?
# Testsimmulation (ggf. aktivieren zu Testzwecken)
#echo "$PASSWD_DIALOG" | sudo -S apt purge --simulate `apt-cache search 'linux-(image(-extra)?|hwe-'$KERNEL_MAJOR_VERSION'-headers|headers|modules|modules-extra)-'$KERNEL_SELECTION'(-generic){0,1}' | cut -d" " -f1 | awk '{printf("%s ",$0)}END {print "\n"}'` >> $LOGFILE_PURGE
#PURGE=$?
# Fortschrittsanzeige aktualisieren
run_progressbar "3" "Temporäre Log-Dateien löschen"
sleep 1
# Anzeige der KDE Beanchrichtigung
show_passive_popup_kernel_del $PURGE
# zu Testzwecken auf der Kommandozeile nachfolgende Zeile entkommentieren (#-Zeichen entfernen), damit das Logfile sofort angezeigt wird
#cat $LOGFILE_PURGE
# Aufruf der Funktion zum Löschen des Logfiles
del_log
# Aufruf der Funktion zum Beenden der Fortschrittsanzeige
close_progressbar
#EOF










Comment