staging.inyokaproject.org

Skripte/Alte_Kernel_entfernen

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |
Dieses Thema ist die Diskussion des Artikels Skripte/Alte_Kernel_entfernen.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 7816

TK87 schrieb:

[…] Nicht wirklich, wenn dem so wäre, könnte man ja auch mit "linux-version list" arbeiten.

Wieso kann man damit nicht arbeiten? Bei mir zeigt

linux-version list | while read ; do dpkg --list "linux-*$REPLY" | grep ^ii ; done 

zuverlässig alle installierten Kernel-Pakete an. Was zeigt dieser Befehl bei Dir und welche Pakete vermisst Du in der Liste dieses Befehls?

Aus dieser Liste muss man nur noch mit etwas Skript-Fu die Pakete entfernen, welche man behalten möchte, die 2. Spalte isolieren und dann die eingedampfte Liste an apt remove übergeben, z.B. (noch Entwurfsstadium!)

#! /bin/bash -e
# Alte Linux Kernel entfernen

shopt -s lastpipe
active=$( uname -r)			# den laufenden Kernel immer behalten
echo Aktiver Kernel ist $active
linux-version list							|
while read Version
  do test $Version = $active || dpkg --list "linux-*$Version" ; done	|
while read ii Packet _
  do case $ii in (ii) echo $Packet ; esac ; done  | readarray
sudo apt remove ${MAPFILE[*]}

Ist zwar kein Einzeiler, kommt aber ohne unübersichtliche reguläre Ausdrücke mit Escape-Orgien aus.

TK87

Anmeldungsdatum:
8. Juli 2019

Beiträge: 177

ChickenLipsRfun2eat schrieb:

Find ich die beste Lösung.

Na dann kommen wir der Sache doch schon mal ein Stück näher 😉.

linux-source kann aber weg, wenn es den Kernel eh nicht mehr gibt.

So soll es ja auch sein, nur das source-Paket für den aktuellen Kernels soll erhalten bleiben. Für das aktuelle Beispiel muss da also am Ende

1
grep -v '5.10.0-21'

stehen.

kB schrieb:

Wieso kann man damit nicht arbeiten? Bei mir zeigt

linux-version list | while read ; do dpkg --list "linux-*$REPLY" | grep ^ii ; done 

Ich habe nicht gesagt, dass man mit "linux-version list" nicht arbeiten kann, sondern dass man damit alleine nicht weit kommt. Sieh dir dein Beispiel an, inwiefern ist diese Zeile nun besser als mein Eingangsvorschlag? Zum einen hast DU gesagt, man soll grep meiden, nutzt es nun aber selbst, zum anderen listest du damit weder die source-pakete auf (sofern diese installiert sind), noch wird bei deinem Befehl der aktuelle Kernel ausgelassen.

Gruß Thomas

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 7816

TK87 schrieb:

[…] kB schrieb:

Wieso kann man damit nicht arbeiten? Bei mir zeigt

linux-version list | while read ; do dpkg --list "linux-*$REPLY" | grep ^ii ; done 

Ich habe nicht gesagt, dass man mit "linux-version list" nicht arbeiten kann, sondern dass man damit alleine nicht arbeiten kann. Sieh dir dein Beispiel an, inwiefern ist diese Zeile nun besser als mein Eingangsvorschlag?

Mein von Dir zitierter Befehl war gar nicht als Konkurrenz zu dem von Dir ursprünglich vorgeschlagenen Befehl gemeint, sondern Teil einer konkreten Frage an Dich, welche Du leider nicht beantwortet hast. Ich habe in meinem Beitrag auch dargelegt, dass dies noch nicht die vollständige Lösung ist und was noch zusätzlich geleistet werden müsste.

Und ja, wenn man meinen Befehl in Konkurrenz zu Deinem setzen möchte, dann finde ich meinen besser als Deinen, weil:

  • Statt bei Dir awk und grep und sed verwende ich nur eines, nämlich grep.

  • Ich benötige nicht wie Du komplizierte reguläre Ausdrücke.

  • Mein Programm ist einfacher lesbar als Deines.

Zum einen hast DU gesagt, man soll grep meiden, nutzt es nun aber selbst, zum anderen listest du damit weder die source-pakete auf (sofern diese installiert sind), noch wird bei deinem Befehl der aktuelle Kernel ausgelassen.

  • Kernel-Source-Pakete sind kein Thema für Einsteiger, an die sich der Artikel richtet.

  • Im Artikel geht es um installierte alte Kernel, die man los werden möchte und überhaupt nicht um Source.

  • Wenn Kernel-Source-Pakete installiert sind, dann hat man das manuell und bewusst gemacht und nicht automatisch im Zuge einer Aktualisierung. Manuell installiertes würde ich aber nicht automatisch entfernen lassen wollen.

Es ist daher besser, in Bezug auf diesen Artikel Kernel-Source ganz zu ignorieren.

Siehe Dir bitte mein fertiges Skript an, welches möglicherweise noch verbesserungs- oder ausbaufähig sein könnte, aber aus meiner Sicht alles erfüllt, was ein Skript für diesen Artikel erfüllen sollte und gut lesbar ist.

Der Ve

TK87

Anmeldungsdatum:
8. Juli 2019

Beiträge: 177

kB schrieb:

Mein von Dir zitierter Befehl war gar nicht als Konkurrenz zu dem von Dir ursprünglich vorgeschlagenen Befehl gemeint, sondern Teil einer konkreten Frage an Dich, welche Du leider nicht beantwortet hast.

Welche deiner Fragen habe ich denn nicht beantwortet?

Wieso kann man damit nicht arbeiten?

habe ich beantwortet: Das habe ich so nie gesagt.

Was zeigt dieser Befehl bei Dir und welche Pakete vermisst Du in der Liste dieses Befehls?

habe ich auch beantwortet: Es fehlen die Source-Pakete. Darüber hinaus kann es z.B. auch linux-signature-nvidia-Pakete geben, wenn eine nvidia-graka vorhanden ist.

Ich habe in meinem Beitrag auch dargelegt, dass dies noch nicht die vollständige Lösung ist und was noch zusätzlich geleistet werden müsste.

Ja und dennoch ist dein Befehl jetzt schon für einen Anfänger schwer lesbar - vervollständige diesen noch und ein Anfänger wird damit genauso wenig anfangen können.

Und ja, wenn man meinen Befehl in Konkurrenz zu Deinem setzen möchte, dann finde ich meinen besser als Deinen, weil:

  • Statt bei Dir awk und grep und sed verwende ich nur eines, nämlich grep.

  • Ich benötige nicht wie Du komplizierte reguläre Ausdrücke.

Wie gesagt, dann mach deinen Befehl mal vollständig und du muss mindestens noch mal grep (oder wieder Regex) verwenden. Darüber hinaus habe ich auch schon erläutert, dass der Grundgedanke des Artikels niemals war, dass ein Anfänger dies unbedingt im Detail verstehen muss.

  • Kernel-Source-Pakete sind kein Thema für Einsteiger, an die sich der Artikel richtet.

  • Im Artikel geht es um installierte alte Kernel, die man los werden möchte und überhaupt nicht um Source.

  • Wenn Kernel-Source-Pakete installiert sind, dann hat man das manuell und bewusst gemacht und nicht automatisch im Zuge einer Aktualisierung. Manuell installiertes würde ich aber nicht automatisch entfernen lassen wollen.

Es ist daher besser, in Bezug auf diesen Artikel Kernel-Source ganz zu ignorieren.

Ich muss doch erst mal davon ausgehen, dass sich meine Vorredner bei diesem dynamisch gewachsenen Beitrag durchaus was gedacht haben und dies aus gutem Grund so gemacht haben. Ich habe lediglich die vorhandene Version korrigiert. Darüber hinaus sagte ich ja auch nicht das meine Version perfekt war - sonst hätte ich einfach geändert und nicht gefragt, ob es Einwände gibt.

Zurück zum Thema: Wenn du nun sagst, man solle die Source-Pakete nicht berücksichtigen, dann stimmt deine Aussage schon nicht mehr:

- Mein Programm ist einfacher lesbar als Deines.

Denn der Regex kann in dem Fall entfallen. Es bleibt nur noch:

1
dpkg -l "linux-[ih]*" | awk '$1 == "ii" {print $2}' | grep -v "$(uname -r)"

Trotz awk & grep ist dies imho nicht nur leichter lesbar als deines, sondern ist darüber hinaus auch schon fertig. Du hingegen musst immer noch die aktuellen Kernel ausblenden und noch aus der Zeile

ii  linux-image-5.10.0-21-amd64          5.10.162-1   amd64        Linux 5.10 for 64-bit PCs (signed)

die Paketnamen extrahieren.

Gruß Thomas

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 7816

TK87 schrieb:

[…] Welche deiner Fragen habe ich denn nicht beantwortet?

Ich hatte Dich konkret gebeten, die konkrete Ausgabe des Befehls

linux-version list | while read ; do dpkg --list "linux-*$REPLY" | grep ^ii ; done 

auf Deinem System zu zeigen. Dies ist mir wichtig, weil Du offenbar sehr ungebräuchliche Kernel (s.u.) einsetzt, die vielleicht ein anderes als das mir bekannte Benennungssystem für Ubuntu-Kernel verwenden.

Ich hatte Dich zweitens gebeten, mir die konkreten Paketnamen (abgesehen von Source-Pakete) zu benennen, welche Du konkret auf der Ausgabeliste des Befehls vermisst, und nach Deiner Meinung aber im Zuge eines Skripts für diesen Artikel dennoch zu entfernen wären.

Um Missverständnissen vorzubeugen: Dieser Befehl ist in dieser Form nicht als zukünftiger Inhalt des Artikels vorgeschlagen oder zu verstehen. Er soll nur mit Deiner Hilfe mir helfen, die Thematik des Artikels selber besser zu verstehen.

[…]

ii  linux-image-5.10.0-21-amd64          5.10.162-1   amd64        Linux 5.10 for 64-bit PCs (signed)
Antworten |