Schade, dass die Diskussion (beginnend bei 9371639) letztes Jahr hier abgebrochen ist. Nichtsdestotrotz sind wir uns ja einig, dass der bisherige Bandwurm im Wiki unverständlich ist.
Ich habe diese damals und noch mal heute gelesen und fasse hier die Vorschläge, nicht die Argumente zusammen. Alle haben etwas für sich und wieder auch gegen sich. Außerdem gebe ich gleich meinen Senf dazu. (Ohje)
TK87 schrieb:
| dpkg -l "linux-[ihs]*" | awk '$1 == "ii" {print $2}' | grep -v "$(uname -r |sed -E 's/-[a-z]+[0-9a-z\-]*$//g')"
|
Bei der Fassung sind bspw. die Metapakete für header und image noch in der Liste. Man könnte auch sed …
durch cut -d "-2 -f-2
ersetzen, was ich leichter verständlich halte und m. E. aufgeräumter aussieht.
ChickenLipsRfun2eat schrieb:
dpkg-query --show linux-{headers-[^generic],image-[^generic]}* | grep -Ev $(uname -r)
Bei dem „Dach“ (^
) musste ich stutzen. (Nicht antworten, hab's verstanden). 😉
kB schrieb:
linux-version list | while read ; do dpkg --list "linux-*$REPLY" | grep ^ii ; done
Den Ansatz mit der Schleife finde ich toll. Aber nur um ein mal grep zu sparen, das hinterher, dann doch benötigt wird? Mmmh, …
Ich werfe mal noch meine Vorschläge in die Runde:
dpkg-query -W -f="\${package}\n" "linux-*" | \
grep "$(linux-version list)" | \
grep -v $(uname -r) | \
xargs apt-get remove -s
Dabei habe ich auf einer einfachen Liste nur der Paketnamen ohne Installationsstatus aufgebaut, die ich ausschließlich mit grep filter, ehe sie mittels xargs
an apt-get
übergeben wird. Natürlich erhält man dann für die nicht installierten Pakete eine Info (keinen Fehler), dass sie nicht installiert sind.
Getestet mit focal, jammy und noble. Auch bei einer VM, die sowohl linux-generic als auch linux-hwe-22.04-generic installiert hat, mit noch einer verbliebenen Version, auf die HWE mal gezeigt hat. Je nachdem mit welchem Kernel gestartet wird, wird der Rest inklusive passendem Metapaket entfernt. Das heißt aber auch, wenn mit der „Zwischenversion“ 6.5.0-40 gebootet wurde, dass beide Metapakete entfernt werden. Das dürfte dann unter Layer-8 verbucht werden. (Nur der installierte Kernel mitsamt seinen Metapaketen bleibt erhalten. Wenn kein Metapaket mehr auf diesen Kernel verweist, dann hat der Benutzer im GRUB falsch ausgewählt. Man kann halt nicht alles abfangen.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 | fleet@street:~$ uname -r
6.8.0-40-generic
fleet@street:~$ linux-version list
5.15.0-121-generic
6.5.0-44-generic
6.8.0-40-generic
fleet@street:~$
dpkg-query -W -f="\${package}\n" "linux-*" | \
grep "$(linux-version list)" | \
grep -v $(uname -r) | \
xargs apt-get remove -s
HINWEIS: Dies ist nur eine Simulation!
apt-get benötigt root-Privilegien für die reale Ausführung.
Behalten Sie ebenfalls in Hinterkopf, dass die Sperren deaktiviert
sind, verlassen Sie sich also bezüglich des reellen aktuellen
Status der Sperre nicht darauf!
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
Paket »linux-image-unsigned-5.15.0-121-generic« ist nicht installiert, wird also auch nicht entfernt.
Paket »linux-image-unsigned-6.5.0-44-generic« ist nicht installiert, wird also auch nicht entfernt.
Die folgenden Pakete wurden automatisch installiert und werden nicht mehr benötigt:
linux-headers-5.15.0-121 linux-hwe-6.5-headers-6.5.0-44
Verwenden Sie »apt autoremove«, um sie zu entfernen.
Die folgenden Pakete werden ENTFERNT:
linux-generic linux-headers-5.15.0-121-generic
linux-headers-6.5.0-44-generic linux-headers-generic
linux-image-5.15.0-121-generic linux-image-6.5.0-44-generic
linux-image-generic linux-modules-5.15.0-121-generic
linux-modules-6.5.0-44-generic linux-modules-extra-5.15.0-121-generic
linux-modules-extra-6.5.0-44-generic
0 aktualisiert, 0 neu installiert, 11 zu entfernen und 0 nicht aktualisiert.
Remv linux-generic [5.15.0.121.121]
Remv linux-headers-generic [5.15.0.121.121]
Remv linux-headers-5.15.0-121-generic [5.15.0-121.131]
Remv linux-headers-6.5.0-44-generic [6.5.0-44.44~22.04.1]
Remv linux-image-generic [5.15.0.121.121]
Remv linux-modules-extra-5.15.0-121-generic [5.15.0-121.131]
Remv linux-image-5.15.0-121-generic [5.15.0-121.131] [linux-modules-5.15.0-121-generic:amd64 ]
Remv linux-image-6.5.0-44-generic [6.5.0-44.44~22.04.1] [linux-modules-5.15.0-121-generic:amd64 ]
Remv linux-modules-5.15.0-121-generic [5.15.0-121.131]
Remv linux-modules-extra-6.5.0-44-generic [6.5.0-44.44~22.04.1]
Remv linux-modules-6.5.0-44-generic [6.5.0-44.44~22.04.1]
fleet@street:~$
|
Es bleiben in diesem Fall noch zwei Metapakete für header übrig. Möchte man die auch gleich erwischen, wird es etwas umständlicher, weil mit cut ein weiteres Programm beteiligt ist:
dpkg-query -W -f="\${package}\n" "linux-*" | \
grep "$(linux-version list | \
grep -v $(uname -r) | \
cut -d "-" -f-2)" | \
xargs apt-get remove -s