Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?
15.07.2020, 13:47:06

.
Einloggen mit Benutzername, Passwort und Sitzungslänge

Mitglieder
Statistiken
  • Beiträge insgesamt: 670995
  • Themen insgesamt: 54379
  • Heute online: 432
  • Am meisten online: 2287
  • (22.01.2020, 19:20:24)
Benutzer Online

Autor Thema:  [beta] pokwd - Purge Old Kernels With Dialog  (Gelesen 3004 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

[beta] pokwd - Purge Old Kernels With Dialog
« am: 28.01.2018, 17:25:07 »
Etwa einem Monat nach meiner Ankündigung möchte ich nun mein aktuelles Skript hier vorstellen.
In der Überzeugung, es wäre reif genug, wollte ich eine erste Fassung an Weihnachten schon veröffentlichen, aber dann hatte ich es glücklicherweise noch unter Linux Mint 17 getestet. Es enthielt einen «Hammer-Fehler» und entfernte ALLE Kernel, was ich noch vor dem Neustart bemerkte. Deshalb habe ich mir doch noch mehr Zeit genommen, als ursprünglich geplant.
Mittlerweile kann es selbst bei LMDE 2 zwei Kernel geben, weshalb ich auch dort noch eine kleine Anpassung eingebaut habe.

Es ist kein Nachfolger von cikspoc, wenngleich einige Teile, z. B. das Ermittlen der installierten Kernel und das eigentliche Entfernen der ausgewählten sowie der Reste aus /lib/modules eins zu eins daraus kopiert wurden. Immerhin davon übrig geblieben ist die Idee, zusätzlich zur Versionsnummer auch eine Angabe zu liefern, ob der betreffende Kernel innerhalb des Unterstützungszeitraumes ist oder nicht.

Das langwierige Prozedere beim Ermitteln der Linux-Version aus cikspoc habe ich ausgelassen und steige nun beim Auslesen der Meta-Pakete ein und schlussfolgere aus deren Vorhandensein oder Abwesenheit auf das basierende Linux. Dazu wird apt befragt nach Paketen zu suchen, die mit linux-generic anfangen. Gibt es solche Pakete mit «hwe» im Namen, ist es ein ubuntu LTS oder Linux Mint. Finden sich nur solche mit «lts», dann ist es ein ubuntu trusty oder Linux Mint 17. Gibt es die beiden Namensbestandteile nicht, dann ist es ein debian/LMDE 2 oder ubuntu STS.
Während dieser Ermittlung wird ein kleiner Startbildschirm angezeigt, so dass die Wartezeit gar nicht auffällt. ;)

Anschließend wird aus den ermittelten Meta-Paketen ausgesiebt, welche noch unterstützt werden. Bei trusty ist es sehr einfach, da der Zeitraum schon bekannt ist, weil drei bereits abgelaufen sind. Es wird die höchste und niedrigste Versionsnummer unterstützt. Bei xenial ist es auch nicht so schwer. Zu den Meta-Paketen die Versionsnummern auslesen und beim Sortieren eine evtl. doppelt vorkommende ausblenden. Das kommt vor, wenn linux-generic-hwe-16.04 und linux-generic-hwe-16.04-edge auf die gleiche Kernel-Linie zeigen. Dann gibt es nur zwei unterstützte, ansonsten drei unterstützte Linien. Bei ubuntu STS gibt es nur ein Meta-Paket und daher nur eine unterstützte Linie.
Im Dialog-Fenster wird also neben der Checkbox zum Anklicken, der installierten Kernel-Version auch noch angezeigt
«supported», «reached EOL» oder «mainline».
Bei debian bzw. LMDE 2 habe ich aus Unwissenheit, was mit 3.16.0-4 passiert/passieren wird, keine weitere Angabe programmiert; das Feld bleibt leer.
So läuft das Skript nicht nur unter Linux Mint, auch auf LMDE 2, debain und ubuntu, egal ob LTS oder STS.

Startet man das Skript mit irgendeinem Parameter, so wird eine kurze Einführung angezeigt, wie sich das Skript über Tastatur bedienen läßt, falls man es mal in der virtuellen Konsole ohne Mausunterstützung ausführen muss. Der gleiche Text ist auch innerhalb des Skriptes über «Hilfe» zu erreichen.

Bitte nicht wundern, wenn das Skript sich mit «Entferne Alte Kernel Im Dialog» meldet. Das ist keine Fälschung, sondern die deutsche Fassung, eine englische wird angezeigt, wenn die Umgebungsvariable LANG nicht mit «de» anfängt.

Mit 344 Zeichen ist das Skript kürzer als cikspoc und würde noch kürzer sein, wenn ich nicht zwischendurch gelesen hätte, wie man lesbare Skripte schreibt. Ich breche bei mehreren Pipes nun die Zeile um. Außerdem verwende ich vollständige Pfadangaben der verwendeten Programme, was im Falle eine defekten Umgebungsvariable PATH nicht zu Fehlern führt.
Dass shellcheck drei Hinweise meldet, ist mir bekannt. Wer weiß, wie das Skript umgebogen werden muss, damit diese Hinweise nicht mehr kommen, darf sich gerne melden.

Nun seid ihr eingeladen, dass Skript zu testen, zu kommentieren und wenn euch was nicht passt nach eigenen Ermessen anzupassen.

#!/bin/bash

# Purge Old Kernels With Dialog
# entferne Kernel mit «dialog»

last_edited="2018/01/28"
author="{°-°}"
# license      :    GPL v3

# for further information look at line 55 (en)
# für Details siehe auch Zeile 28

# start with any option will show «help» screen
if [ -z "$1" ]; then
  param=0
  retval=0
else
  param=1
  retval=2
fi

# running kernel
active=$(uname -r | /usr/bin/cut -d- -f1-2)

# used messages in diffent languages
case "$(echo "$LANG" | cut -c-2)" in
  "de" )
    ttl_help="Kurze Einführung"
    msg_help="In der Checkliste:\n
Pfeiltaste rauf/runter   Auswahl markieren\n
Leertaste                Auswahl ändern\n\n
Aktionen, d. h. < OK  >  <Abbrechen>  < Hilfe >:\n
TAB, ← und →             zwischen Aktionen wechseln.\n
ENTER                    Aktion ausführen\n\n
Der aktive Kernel bleibt auf jeden Fall erhalten.\n
Weitere Kernel werden, sofern sie innerhalb der gleichen Kernel-Linie sind, automatisch markiert, so dass zusätzlich zum aktiven noch der mit der höchsten Versionsnummer erhalten bliebe.\n
Sind verschiedenen Kernel-Linien (z. B. 4.13.0 und 4.4.0) installiert, erfolgt keine automatische Auswahl."
    ttl_no_root="nicht als root ausführen"
    msg_no_root="Dieses Skript muss nicht als root gestartet werden. \nAn den erforderlichen Stellen wird «sudo» verwendet. \n\nSollten Fehler im Skript sein, erhöht es die Gefahr für\ndas System, wenn es als root ausgeführt wird."
    ttl_one_kernel="nicht zu tun"
    msg_one_kernel="\nNur ein Kernel installiert."
    ttl_choice="Auswahl"
    msg_choice="Der aktive Kernel (${active}) wird nicht entfernt. \n\nWelche der gelisteten Kernel sollen entfernt werden?"
    ttl_no_sudo="Demo beendet"
    msg_no_sudo="Der Benutzer ist nicht Mitglied der Gruppe «sudo». \n\n"
    ttl_error="Fehler"
    msg_error="\n\Z1unbekannter, externer Fehler\nbeim Entfernen des/r Kernel(s)\Zn\nPrüfe die Systemprotokolle."
    ttl_no_selection="nichts zu tun"
    msg_no_selection="\nEs wurde nichts ausgewählt."
    msg_no_apt="/usr/bin/apt nicht gefunden.\nIst dies wirklich ein auf debian oder ubuntu basiererendes System?\n"
    msg_no_dialog="/usr/bin/dialog nicht gefunden.\nIst das Paket «dialog» installiert?\n"
    bckttl="\\Z1E\\Znntferne \\Z1A\\Znlte \\Z1K\\Znernel \\Z1I\\Znm \\Z1D\\Znialog"
  ;;
  * )
    ttl_help="short introduction"
    msg_help="In checklist:\n
arrow up and down           mark your choice\n
space                       selection or unselect\n\n
Actions, e. g. <  OK  > <Cancel> < Help >:\n
TAB, arrow left and right   toggle action\n\n
The running kernel will never purged!\n
If all installed kernels starts with the same three version numbers, the kernel with the lower numbers will be selected automatically.\n
If several kernel lines (e. g. 4.13.0 and 4.4.0) are installed, no selection will be made automatically."
    ttl_no_root="never run as root"
    msg_no_root="This script should not be started as root. \nIt uses «sudo» only where higher privileges are needed.\n\nIn case of any mistake inside the script it encreases the chance to harm your system if it runs as root.\nAbort"
    ttl_one_kernel="nothing to do"
    msg_one_kernel="\nOnly one kernel is installed."
    ttl_choice="make your choice"
    msg_choice="The running kernel (${active}) will not purged. \n\nPlease select the kernels you want to purge."
    ttl_no_sudo="demo"
    msg_no_sudo="The current user is not member of the group «sudo».\n\n"
    ttl_error="Error"
    msg_error="\n\Z1unknown, external error\nwhile purging kernels\Zn\nInspect your system logs"
    ttl_no_selection="nothing to do"
    msg_no_selection="\nNo choise was made."
    msg_no_apt="/usr/bin/apt not found.\nIs this really a debian or ubuntu based system?\n"
    msg_no_dialog="/usr/bin/dialog not found.\nIs Package «dialog» installed?\n"
    bckttl="\\Z1P\\Znurge \\Z1O\\Znld \\Z1K\\Znernels \\Z1W\\Znith \\Z1D\\Znialog"
  ;;
esac

dir=$(mktemp -d)
filename="${dir}/pokwd"

reduce_meta_list () {
  # for non-english systems
  lang=$(locale | /bin/grep LC_ALL=)
  export LC_ALL=C

  while read line; do
    /usr/bin/apt-cache policy "${line}" \
    | /bin/grep Candidate \
    | /bin/sed 's/  Candidate: //' \
    | /usr/bin/cut -d'.' -f1-3
  done < "$1" \
  | /usr/bin/sort -Vu \
  > "${filename}-meta-supported"

  # reset to users language
  export "$lang"
}

get_supported_kernels () {
  /usr/bin/apt search linux-generic 2> /dev/null \
    | /bin/grep -w linux-generic \
    | /usr/bin/cut -d/ -f1 \
    > "${filename}-meta"

  /bin/grep hwe "${filename}-meta" > "${filename}-meta-hwe"
  /bin/grep lts "${filename}-meta" > "${filename}-meta-lts"


  if [[ $(/bin/grep hwe "${filename}-meta-hwe" | wc -l) -ge 1 ]]; then
    echo "linux-generic" >> "${filename}-meta-hwe"
    reduce_meta_list "${filename}-meta-hwe"
  elif [[ $(/bin/grep lts "${filename}-meta-lts" | wc -l) -ge 1 ]]; then
    reduce_meta_list "${filename}-meta-lts"
    # only the first and last in list are supported; delete the rest
    sed -i '2,4d' "${filename}-meta-supported"
  else
    reduce_meta_list "${filename}-meta"
  fi
}

detect_supported () {
  curr=$1
  if [ "${debian}" = "true" ]; then
    # on debian or derivate
    supp=""
  else
    # on ubuntu or derivate
    if [ "x$(echo "${curr}" | egrep '[0-9]{6}')" = "x" ];
    then
      # regular kernel from ubuntu repository
      k_line=$(echo "${curr}" | /usr/bin/cut -d- -f1)
      if [[ $(/bin/grep "${k_line}" "${filename}-meta-supported" | wc -l) -eq 1 ]]; then
        supp="${sep}Z2supported${sep}Zn"
      else
        supp="${sep}Z1reached EOL${sep}Zn"
      fi
    else
      supp="mainline"
    fi
  fi
}

end_pokwd () {
  /usr/bin/find "${dir}" -name 'pokwd*' -delete
  rmdir "${dir}"
  /usr/bin/clear 
  exit "$1"
}

### main ###

#  Cleans up the temp file if script interrupted by control-c.
trap 'end_pokwd 13' TERM INT

# never run as root
if [ "$(id -u)" -eq 0 ]; then
  /usr/bin/dialog --colors\
    --backtitle "${bckttl}" \
    --title "${ttl_no_root}" \
    --msgbox \
    "${msg_no_root}" 0 0
end_pokwd 1
fi

if [ ! -f /usr/bin/apt ] ; then
  echo -e "${msg_no_apt}"
  end_pokwd 1
fi

if [ "x$(/bin/uname -a | /bin/grep -i debian)" = "x" ]; then
  debian="false"
else
  debian="true"
fi

if [ ! -f /usr/bin/dialog ]; then
  echo -e "${msg_no_dialog}"
  end_pokwd 1
fi

# dialog in trusty needs "\" as separator, newer versions "\\"
if [ "$(dialog --version)" = "Version: 1.2-20130928" ]; then
  sep='\'
else
  sep='\\'
fi

# list installed kernels

# make sure the packages are installed. On ubuntu 14.04 there is for example
# un  linux-image-3.0           <none>           <none>           (no description available)
# This uninstalled Package could make a lot of trouble if it is in the list ;)
/usr/bin/dpkg-query -W -f="\${db:Status-Abbrev}\${Package}\n" 'linux-image-[0-9]*' \
  | /usr/bin/awk '/^.i/ {print $2}' \
  | /usr/bin/cut -d- -f3-4 \
  | /usr/bin/sort -Vr \
  > "${filename}-list"

# exit script, if only one installed kernel
if [[ $(wc -l < "${filename}-list") -eq 1 ]]; then
  /usr/bin/dialog --colors\
    --backtitle "${bckttl}" \
    --title "${ttl_one_kernel}" \
    --infobox \
    "${msg_one_kernel}" 5 40
  /bin/sleep 3
  end_pokwd 0
fi

/bin/grep -v "${active}" "${filename}-list" > "${filename}-list-without-active"

# display version while waiting for following «get_supported_kernels»
/usr/bin/dialog --colors\
  --backtitle "${bckttl}" \
  --title "bienvenue | welcome | Willkommen" \
  --infobox \
  "\nVersion from ${last_edited} by ${author}" 5 40

get_supported_kernels

# are different kernel versions installed (e. g. 4.13.0-* and 4.4.0-*)?
if [[ $(/usr/bin/cut -d- -f1 "${filename}-list" | /usr/bin/sort -Vur | wc -l) -eq 1 ]]; then 
  # prepare Checklist
  # the first entry will be unchecked
  detect_supported "${active}"
  first_entry=$(/usr/bin/head -1 "${filename}-list-without-active")
  while read line; do
    if [[ "x$(/bin/grep "${line}" "${filename}-list-without-active")" = "x${first_entry}" ]]; then
      echo "\"${line}\" \"${supp}\" \"off\"" >> "${filename}-content"
    else
      echo "\"${line}\" \"${supp}\" \"on\"" >> "${filename}-content"
    fi
  done < "${filename}-list-without-active"
else
  #  prepare Checklist
  #  all are unchecked, because there are different kernels
  #+ (e. g. 4.13.0-* and 4.4.0-* or more)
  while read line; do
    detect_supported "${line}"
    echo "\"${line}\" \"${supp}\" \"off\"" >> "${filename}-content"
  done < "${filename}-list-without-active"
fi

if [[ $(wc -l < "${filename}-list") -eq 0 ]]; then
  /usr/bin/dialog --colors\
    --backtitle "${bckttl}" \
    --title "${ttl_one_kernel}" \
    --infobox \
    "${msg_one_kernel}" 0 0
  /bin/sleep 4
  end_pokwd 0
fi

# select with dialog

while [[ ${param} -le 1 ]]; do

  # show «help» if started with any option or selected in dialog
  if [[ ${retval} -eq 2 ]]; then
 
  /usr/bin/dialog --colors\
    --backtitle "${bckttl}" \
    --title "${ttl_help}" \
    --msgbox \
    "${msg_help}" 20 60
  fi

  /usr/bin/dialog --colors \
    --help-button \
    --backtitle "${bckttl}" \
    --separate-output \
    --title "${ttl_choice}" \
    --checklist "${msg_choice}" 20 60 11 \
    --file "${filename}-content" 2> "${filename}-purge"

  retval=$?

  # if not «help» selected, make condition to break loop
  if [[ ${retval} -ne 2 ]]; then
    param=2
  fi

done

# purging selected kernels
if [[ ${retval} -eq 0 ]]; then

  if [[ $(wc -l < "${filename}-purge") -ge 1 ]]; then

    if [ "x$(groups | grep sudo)" = "x" ]; then
      /usr/bin/dialog --colors\
        --backtitle "${bckttl}" \
        --title "${ttl_no_sudo}" \
        --msgbox \
        "${msg_no_sudo}" 0 0
      end_pokwd 1
    fi

    while read line; do
      # find all packages of a version "${line}" and make sure it is starting with "linux"
      /usr/bin/dpkg-query -W -f="\${Package}\n" "*${line}*" | /bin/grep ^linux >> "${filename}-purge-apt"
    done < "${filename}-purge"

    # if separate partition /boot has less than 20MB free, use «dpkg» instead of «apt-get»
    if [[ "x$(df /boot | tail -1)" = "x$(df / | tail -1)" ]] && [[ $(df /boot | tail -1 | /usr/bin/awk '{print $4}') -lt 20000 ]]; then
      /usr/bin/xargs -a "${filename}-purge-apt" /usr/bin/sudo dpkg --purge
      retval=$?
    else
      /usr/bin/xargs -a "${filename}-purge-apt" /usr/bin/sudo /usr/bin/apt-get purge --yes
      retval=$?
    fi

    if [[ ${retval} -eq 0 ]] ; then
      while read line; do
        /usr/bin/sudo /usr/bin/find /lib/modules/"${line}"* -type f -print -delete 2> /dev/null
        /usr/bin/sudo /usr/bin/find /lib/modules/"${line}"* -type d -print 2> /dev/null \
          | /usr/bin/sort -r \
          | /usr/bin/xargs /usr/bin/sudo /bin/rmdir 2> /dev/null
      done < "${filename}-purge"
      echo -e "\n  Success: Purge Old Kernels With Dialog \n"
    else
    /usr/bin/dialog --colors\
      --backtitle "${bckttl}" \
      --title "${ttl_error}" \
      --msgbox \
      "${msg_error}" 8 40
    fi
  else
    /usr/bin/dialog --colors\
      --backtitle "${bckttl}" \
      --title "${ttl_no_selection}" \
      --infobox \
      "${msg_no_selection}" 5 40
    /bin/sleep 3
  fi

fi

# cleanup
end_pokwd 0
s. a. In welchem Verzeichnis speichert man zusätzliche Software und eigene Scripte ab?

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #1 am: 28.01.2018, 19:48:52 »
Da ich ja, seit erscheinen von cikspoc, das Script immer verwendet habe hab ich natürlich auch dein neues Script mal eben über den Rechner laufen lassen.
Das neue Script tut was es soll und entfernte alle markierten Kernel. Zur Sicherheit hab ich, nach einem Neustart, nochmal cikspoc laufen lassen und erhielt folgende Ausgabe.
cikspoc (Check Installed Kernels for Support and Purge Obsolete Cautiously)
Version 17.10
für Linux Mint 17.x und 18.x
sowie Ubuntu 14.04.x und 16.04.x

aktueller Füllstand des Wurzelverzeichnisses
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda5       139G     84G   48G   64% /

[  OK  ] Das Betriebsystem ist ein Linux Mint 18,
         wofür dieses Skript entwickelt wurde.

[  OK  ] Die Paketlisten sind jünger als drei Tage.


[  OK  ] Kernel 4.4.0 mit Langzeitunterstützung (LTS)
[  OK  ] Der aktuelle Kernel der Linie 4.4.0 ist installiert.
[  OK  ] In Kernel-Linie 4.4.0 sind weniger als drei installiert.


[  OK  ] Folgende Kernel können installiert bleiben.
4.4.0-112
[  OK  ] Es mussten keine alten Kernels gelöscht werden.

[  OK  ] Es wurden keine Konfigurationsdateien entfernter Kernel gefunden.


[ info ] Im Paket-Zwischenspeicher /var/cache/apt/archives/ wurden Installationsdateien
         entfernter Kernel gefunden?
linux-headers-4.4.0-108_4.4.0-108.131_all.deb
linux-headers-4.4.0-108-generic_4.4.0-108.131_amd64.deb
linux-headers-4.4.0-109_4.4.0-109.132_all.deb
linux-headers-4.4.0-109-generic_4.4.0-109.132_amd64.deb
linux-image-4.4.0-108-generic_4.4.0-108.131_amd64.deb
linux-image-4.4.0-109-generic_4.4.0-109.132_amd64.deb
linux-image-extra-4.4.0-108-generic_4.4.0-108.131_amd64.deb
linux-image-extra-4.4.0-109-generic_4.4.0-109.132_amd64.deb
         Soll(en) dieses Datei(en) entfernt werden?
         Sollen die Änderungen durchgeführt werden? j/n
         j
[sudo] Passwort für renalto:


[ :-(  ] Im Verzeichnis /lib/modules wurden verwaiste Module gefunden.
         Sollen diese entfernt werden?
         Sollen die Änderungen durchgeführt werden? j/n
         j

neuer Füllstand des Wurzelverzeichnisses
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda5       139G     84G   48G   64% /
Es wurden 134 MB befreit

[  OK  ] Fertig
         Das Skript wartet noch 90 Sekunden; noch ein wenig Zeit die Ausgaben
         zu prüfen. Falls es aus dem Dateimanager heraus gestartet wurde,
         schließt sich danach das Terminal.

Das neue Script entfernt also nicht alle Dinge rückstandsfrei so wie cikspoc.

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #2 am: 28.01.2018, 20:39:44 »
Richtig, den Paketzwischenspeicher habe ich weggelassen, weil das streng genommen nicht zum Entfernen eines Kernel gehört. Ich bastel dafür noch ein separates Skript. Das soll dann auch andere Reste aufspüren.

Das bei dir noch etwas im /lib/modules war, ist auch möglich. cikspoc arbeitet auch hier gründlicher, weil es nach dem Entfernen nochmal neu die Liste der installierten Kernel einliest. So kann einerseits geprüft werden, ob das Entfernen geklappt hat und andererseits und räumt auch alles weg, was nicht zu den verbliebenen Kerneln passt.
pokwd entfernt nur das, was angezeigt und auch zum Entfernen markiert wurde. Wenn vorher nicht aufgeräumt war, dann bleibt es auch unaufgeräumt. Etwas wegräumen ohne Bescheid zu sagen, fände ich nicht in Ordnung. Ich wollte pokwd im Moment nicht noch mehr aufblähen. Wenn sich herausstellt, dass das mehrfach gewünscht ist, dann lässt sich das auch noch nachrüsten.

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #3 am: 29.01.2018, 15:36:55 »
Hallo @{°-°},
hab das neue Script "pokwd_beta" ebenfalls durchlaufen lassen, aktuelles System: LM18.3x64Cin. Kernel 4.4.0-112-generic
weitere installierte Kernel waren 4.4.0-53 und 4.4.0-109
Kernel 4.4.0-53 wurde vom Script durch [ * ] zur Deinstallation vorgeschlagen
Kernel 4.4.0-53 sollte aber erhalten bleiben, wurde durch Mausklick abgewählt und Kernel 4.4.0-109 zur Deinstallation ausgewählt.
Klick auf OK startet den Vorgang, Sprung in die Passwortabfrage, Enter, Script überprüft und deinstalliert den Kernel 4.4.0-109.

Anschließend wurde "cikspoc" gestartet,
Terminal Log:
cikspoc (Check Installed Kernels for Support and Purge Obsolete Cautiously) Version 17.04
für Linux Mint 17.x und 18.x
sowie Ubuntu 14.04.x und 16.04.x

aktueller Füllstand des Wurzelverzeichnisses
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda5        20G     10G  8,7G   54% /

[  OK  ] Das Betriebsystem ist ein Linux Mint 18, wofür dieses Skript entwickelt wurde.

[  OK  ] Die Paketlisten sind jünger als drei Tage.


[  OK  ] Kernel 4.4.0 mit Langzeitunterstützung (LTS)
[  OK  ] Der aktuelle Kernel der Linie 4.4.0 ist installiert.
[  OK  ] In Kernel-Linie 4.4.0 sind weniger als drei installiert.
[  OK  ] Der aktive Kernel ist unter denen, die installiert bleiben sollen.
[  OK  ] Folgende Kernel können installiert bleiben.
4.4.0-112
4.4.0-53
[  OK  ] Es mussten keine alten Kernels gelöscht werden.

[  OK  ] Es wurden keine zurückgebliebenen Konfigurationsdateien entfernter Kernel gefunden.

[  OK  ] Im Paket-Zwischenspeicher liegen keine Installationsdateien entfernter Kernel.
[  OK  ] Im Verzeichnis /lib/modules wurden keine Module entfernter Kernel gefunden.
neuer Füllstand des Wurzelverzeichnisses
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda5        20G     10G  8,7G   54% /
Es wurden 0 kB befreit

[  OK  ] Fertig
         Das Skript wartet noch 90 Sekunden; noch ein wenig Zeit die Ausgaben zu prüfen.
         Falls es aus dem Dateimanager heraus gestartet wurde, schließt sich danach das Terminal

Der zuvor testhalber installierte Kernel 4.4.0-109 wurde entfernt, es wurden keine Überbleibsel in /lib/modules gefunden. Vermutlich hat da "cikspoc" in der Vergangenheit schon Ganze Arbeit geleistet.

Übrigens ist dir die Namensfindung "pokwd" anhand der Funktion "Purge Old Kernels With Dialog" gut gelungen.
« Letzte Änderung: 29.01.2018, 19:06:32 von kuehhe1 »

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #4 am: 23.02.2018, 22:37:42 »
Klasse Arbeit, laufen beide sauber durch.

Off-Topic:
Nachteil, versuche mich selbst im coden und das kostet mich Unmengen an Zeit :D

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #5 am: 05.04.2018, 20:34:13 »
Hallo,
nachdem sich mit cikspoc gerade ein Problem andeutete:
cikspoc schlug alle Kernel auch den Aktuellen zur Deinstallation vor
habe ich die Gleiche Aufgabe an "pokwd_beta" gestellt:

Installiert sind die Kernel:
4.4.0-119 = neuster aktiver soll bleiben
4.4.0-116 = vorheriger könnte deinstalliert werden
4.4.0-53   = Rückfallkernel soll bleiben

pokwd_beta schlägt korrekterweise nur die Älteren davon vorrangig den ältesten Kernel vor:
pokwd beta K4 4 0 119
pokwd beta K4 4 0 119
« Letzte Änderung: 05.04.2018, 20:38:53 von kuehhe1 »

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #6 am: 10.05.2018, 14:53:21 »
Wer mit offenen Augen auf die Updates schaut, wird festgestellt haben, dass sich beim Kernel etwas geändert hat. Statt des Paketes mit image-extra im Namen, gibt es nun modules und modules-extra.

Heute habe ich, bevor jemand sein System schrottet, das Skript pokwd auf diese neue Nomenklatur getestet. Dazu habe ich einen älteren Kernel im GRUB ausgewählt, so dass ich Kernel 4.15.0-20 entfernen konnte.

Test bestanden. :D
« Letzte Änderung: 10.05.2018, 15:05:51 von {°-°} »

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #7 am: 10.05.2018, 15:45:07 »
Das nenne ich mal einen schnellen Produkt Support. 1+ :)

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #8 am: 03.06.2018, 10:35:48 »
Nur kurz zur Info. Das Script läuft sauber unter LM 19 Beta.
cikspoc sagt das LM 19 nicht unterstützt wird und bricht demzufolge ab.
« Letzte Änderung: 03.06.2018, 10:45:56 von Renalto »

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #9 am: 12.06.2018, 07:58:56 »
Moin,
das Script funktioniert auch mit einer LM19 Cin. BETA (Tara) Installation auf einem USB-Stick einwandfrei:Statusinformationen werden eingelesen.... Fertig
Paket »linux-image-unsigned-4.15.0-20-generic« ist nicht installiert, wird also auch nicht entfernt.
Die folgenden Pakete werden ENTFERNT:
  linux-headers-4.15.0-20* linux-headers-4.15.0-20-generic*
  linux-image-4.15.0-20-generic* linux-kernel-generic*
  linux-modules-4.15.0-20-generic* linux-modules-extra-4.15.0-20-generic*
0 aktualisiert, 0 neu installiert, 6 zu entfernen und 0 nicht aktualisiert.
Nach dieser Operation werden 335 MB Plattenplatz freigegeben.

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #10 am: 12.06.2018, 11:32:10 »
@{°-°}

Vielen Dank!
Sehr praktisches Script! Tut genau, was es soll  ;D

Grüße
Mark

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #11 am: 12.06.2018, 13:24:18 »
Ich habe mal eine Frage.

Was ist an diesem Scrpit anders als folgender Befehl?
sudo dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #12 am: 12.06.2018, 14:58:34 »
Der Unterschied ist, dass ein Script besser lesbar und damit potentiell verständlich ist, was es macht.
Außerdem liefert es Informationen und Rückfragen, damit genau das Gewünschte gemacht wird und nichts anderes..
Bei einem CLI-Einzeiler mit einer Ansammlung von kryptischen "RegEx" passiert das nicht und das Verstehen ist nur für die außerordentlich begnadeten Durchblicker möglich.
Der Teufel steckt bekanntlich im Detail.

Wenn du die Zeile selbst entwickelt und nicht nur irgendwo abgeschrieben hast … Respekt.
Ansonsten gilt für mich:
Anwendung solcher Befehle nur, wenn ich nichts Besseres habe und nicht ohne vorher ein Backup angelegt zu haben.
« Letzte Änderung: 12.06.2018, 15:07:55 von aexe »

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #13 am: 12.06.2018, 15:13:31 »
Ist leider nicht von mir. So was kann ich leider nicht.
Ein Backup mache ich immer. Mit Clonezilla ist das ja kein Problem.

Re: [beta] pokwd - Purge Old Kernels With Dialog
« Antwort #14 am: 12.06.2018, 15:34:44 »
Off-Topic:
Ein Backup mache ich immer.
Was bedeutet in diesem Zusammenhang "immer"?
Vor jeder Terminaleingabe?
Vor jedem Entfernen eines alten Kernels?