ubuntuusers.de

Alle Kernel entfernen, bis auf den gerade laufenden

Status: Ungelöst | Ubuntu-Version: Kubuntu 24.04 (Noble Numbat)
Antworten |

trollsportverein

Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 4433

Bei mir funktioniert das:

alias kernelaufräumen='sudo nala purge $(dpkg -l | grep -Ei '\''linux-image-[0-9]|linux-headers-[0-9]'\'' | awk '\''/ii/{print $2}'\'' | grep -v $(uname -r | sed s'\''/-[a-z]-[a-z][0-9]//'\''))'

Die hübsche Nala fragt auch artig nach, bevor sie die Kernel Image- und Header-Pakete entfernt.

Nun ist es aber so, dass ich nicht den Distributionskernel, den "generic" verwende, sondern den Liquorix Kernel. Und in Platznot auf der /boot Partition bin. Daher dieser Frickel™. Mich würde aber interessieren, ob der sed Audruck beim Distributionskernel schief gehen würde, oder ob es auch dann immer noch funktioniert. Mag es jemand mit Distributionskernel testen?

Das Paket meines zur Zeit laufenden Kernels heißt "linux-image-6.8.12-1-liquorix-amd64"

Das:

dpkg -l | grep -Ei 'linux-image-[0-9]|linux-headers-[0-9]' | awk '/ii/{print $2}' | grep -v $(uname -r | sed s'/-[a-z]-[a-z][0-9]//')

... spuckt bei mir aus:

linux-headers-6.8.11-1-liquorix-amd64
linux-image-6.8.11-1-liquorix-amd6

Das ist bei mir das gewünschte, um es zu deinstallieren und gerade noch genug Platz auf /boot zu schaffen, um dann einen neuen Kernel zu installieren, wenn es eine neue Version gibt.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13075

Mit den Standard-Kernels wäre das einfachste sudo apt autoremove...

Bei mir sieht das so aus:

1
2
3
4
5
$ alias kernelaufräumen='echo nala purge $(dpkg -l | grep -Ei '\''linux-image-[0-9]|linux-headers-[0-9]'\'' | awk '\''/ii/{print $2}'\'' | grep -v $(uname -r | sed s'\''/-[a-z]-[a-z][0-9]//'\''))'
$ type kernelaufräumen
kernelaufräumen is aliased to `echo nala purge $(dpkg -l | grep -Ei 'linux-image-[0-9]|linux-headers-[0-9]' | awk '/ii/{print $2}' | grep -v $(uname -r | sed s'/-[a-z]-[a-z][0-9]//'))'
$ kernelaufräumen
nala purge linux-headers-5.15.0-106 linux-headers-5.15.0-106-generic linux-headers-5.15.0-107 linux-image-5.15.0-106-generic

Da fehlen die "-modules".

Ich glaube, ich habe ein einfacheres Kommando:

1
2
3
4
5
6
7
8
$ uname -r
5.15.0-107-generic
$ dpkg-query -l | awk '$2 ~ /linux-(headers|image|modules(-extra)?)-[0-9]/ && $3 !~ /'"$(uname -r | sed 's#-[^-]*$##')"'/ {print $2}'
linux-headers-5.15.0-106
linux-headers-5.15.0-106-generic
linux-image-5.15.0-106-generic
linux-modules-5.15.0-106-generic
linux-modules-extra-5.15.0-106-generic

Komplett dann:

1
2
3
sudo -v
dpkg-query -l | awk '$2 ~ /linux-(headers|image|modules(-extra)?)-[0-9]/ && $3 !~ /'"$(uname -r | sed 's#-[^-]*$##')"'/ {print $2}' \
| xargs -d \\n -r sudo apt purge --yes

Ich würde es noch etwas umständlicher machen, damit man noch bestätigen kann:

1
2
3
4
5
6
7
#!/bin/sh

tmp=$(mktemp)
trap 'rm -f "$tmp"' 0

dpkg-query -l | awk '$2 ~ /linux-(headers|image|modules(-extra)?)-[0-9]/ && $3 !~ /'"$(uname -r | sed 's#-[^-]*$##')"'/ {print $2}' >|"$tmp"
xargs -a "$tmp" -d \\n -r sudo apt purge

Das ist auf einem Xubuntu 22.04.4 voll aktualisiert.

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 4433

rklm schrieb:

Mit den Standard-Kernels wäre das einfachste sudo apt autoremove...

sudo apt autoremove behält immer 2 Kernel auf dem System, womit dann bei mir nicht genug Platz auf /boot wäre, um einen neuen Kernel zu installieren, wenn es eine neue Version gibt.

Bei mir sieht das so aus:

1
2
3
4
5
$ alias kernelaufräumen='echo nala purge $(dpkg -l | grep -Ei '\''linux-image-[0-9]|linux-headers-[0-9]'\'' | awk '\''/ii/{print $2}'\'' | grep -v $(uname -r | sed s'\''/-[a-z]-[a-z][0-9]//'\''))'
$ type kernelaufräumen
kernelaufräumen is aliased to `echo nala purge $(dpkg -l | grep -Ei 'linux-image-[0-9]|linux-headers-[0-9]' | awk '/ii/{print $2}' | grep -v $(uname -r | sed s'/-[a-z]-[a-z][0-9]//'))'
$ kernelaufräumen
nala purge linux-headers-5.15.0-106 linux-headers-5.15.0-106-generic linux-headers-5.15.0-107 linux-image-5.15.0-106-generic

Da fehlen die "-modules".

Also leider nicht kompatibel mit dem Distributionskernel. Modulpakete gibt es beim Liquorix Kernel nicht, der nvidia-driver wird mit DKMS eingebaut.

Ich glaube, ich habe ein einfacheres Kommando:

1
$ dpkg-query -l | awk '$2 ~ /linux-(headers|image|modules(-extra)?)-[0-9]/ && $3 !~ /'"$(uname -r | sed 's#-[^-]*$##')"'/ {print $2}'

Das würde bei mir alle Kernel und Header erwischen, auch den gerade aktiven. laufenden Kernel:

uname -r

6.8.12-1-liquorix-amd64

Versuch:

dpkg-query -l | awk '$2 ~ /linux-(headers|image|modules(-extra)?)-[0-9]/ && $3 !~ /'"$(uname -r | sed 's#-[^-]*$##')"'/ {print $2}'

linux-headers-6.8.11-1-liquorix-amd64
linux-headers-6.8.12-1-liquorix-amd64
linux-image-6.8.11-1-liquorix-amd64
linux-image-6.8.12-1-liquorix-amd64

Dazu fällt mir dann der letzte Absatz im Ubuntu.com Wiki ein:

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13075

Dann ersetz mein sed-Statement durch

1
sed -re 's#(-[^-0-9][^-]*)*$##'

Damit:

1
2
3
4
$ echo '6.8.12-1-liquorix-amd64' | sed -re 's#(-[^-0-9][^-]*)*$##'
6.8.12-1
$ uname -r | sed -re 's#(-[^-0-9][^-]*)*$##'
5.15.0-107

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 4433

rklm schrieb:

Dann ersetz mein sed-Statement durch

1
sed -re 's#(-[^-0-9][^-]*)*$##'

Mach ich nun:

uname -r

6.8.12-1-liquorix-amd64

Test okay, das passt bei mir so, der laufende Kernel wird nicht erfasst:

dpkg -l | awk '/linux-(headers|image|modules(-extra)?)-[0-9]/{print $2}' | grep -v $(uname -r | sed -re 's#(-[^-0-9][^-]*)*$##')

linux-headers-6.8.11-1-liquorix-amd64
linux-image-6.8.11-1-liquorix-amd64

Als alias für die $HOME/.bashrc:

alias kernelaufräumen='sudo nala purge $(dpkg -l | awk '\''/linux-(headers|image|modules(-extra)?)-[0-9]/{print $2}'\'' | grep -v $(uname -r | sed -re '\''s#(-[^-0-9][^-]*)*$##'\''))'

Fein. 😎 Passt es so jetzt auch universell, auch auf den Distributionskernel, mit seinen Modul-Paketen?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13075

trollsportverein schrieb:

rklm schrieb:

Dann ersetz mein sed-Statement durch [...]

6.8.12-1-liquorix-amd64 }}} Test okay, das passt bei mir so, der laufende Kernel wird nicht erfasst:

dpkg -l | awk '/linux-(headers|image|modules(-extra)?)-[0-9]/{print $2}' | grep -v $(uname -r | sed -re 's#(-[^-0-9][^-]*)*$##')

linux-headers-6.8.11-1-liquorix-amd64
linux-image-6.8.11-1-liquorix-amd64

Gut!

Als alias für die $HOME/.bashrc:

alias kernelaufräumen='sudo nala purge $(dpkg -l | awk '\''/linux-(headers|image|modules(-extra)?)-[0-9]/{print $2}'\'' | grep -v $(uname -r | sed -re '\''s#(-[^-0-9][^-]*)*$##'\''))'

Dein grep -v ist ein überflüssiger Prozess und auch etwas weniger zielgenau als meine Lösung, weil er auf die gesamte Zeile geht. Aber, wenn Du schon grep nimmst, dann würde ich auch noch Option -F nutzen - dann wird ein Text-Match gemacht anstatt eines Regex-Matches. In den Versionsnummern kommen halt immer Punkte vor, die in Regex für "beliebiges Zeichen" stehen. Ist zwar nicht sehr wahrscheinlich, aber es könnte theoretisch einen falschen Match geben. ☺

Fein. 😎 Passt es so jetzt auch universell, auch auf den Distributionskernel, mit seinen Modul-Paketen?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ dpkg-query -l | awk '$2 ~ /linux-(headers|image|modules(-extra)?)-[0-9]/ && $3 !~ /'"$(uname -r | sed 's#(-[^-0-9][^-]*)*$##')"'/ {print $2}'
linux-headers-5.15.0-106
linux-headers-5.15.0-106-generic
linux-headers-5.15.0-107
linux-headers-5.15.0-107-generic
linux-image-5.15.0-106-generic
linux-image-5.15.0-107-generic
linux-modules-5.15.0-106-generic
linux-modules-5.15.0-107-generic
linux-modules-extra-5.15.0-106-generic
linux-modules-extra-5.15.0-107-generic

trollsportverein

(Themenstarter)
Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 4433

rklm schrieb:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ dpkg-query -l | awk '$2 ~ /linux-(headers|image|modules(-extra)?)-[0-9]/ && $3 !~ /'"$(uname -r | sed 's#(-[^-0-9][^-]*)*$##')"'/ {print $2}'
linux-headers-5.15.0-106
linux-headers-5.15.0-106-generic
linux-headers-5.15.0-107
linux-headers-5.15.0-107-generic
linux-image-5.15.0-106-generic
linux-image-5.15.0-107-generic
linux-modules-5.15.0-106-generic
linux-modules-5.15.0-107-generic
linux-modules-extra-5.15.0-106-generic
linux-modules-extra-5.15.0-107-generic

Wenn der laufende Kernel immer noch 5.15.0-107-generic ist, dann ist das schlecht, und es würde einen Fall der "You did WHAT?!?!" Klasse geben.

Mir ist noch was aufgefallen, vor allem nicht komplizierter machen als unbedingt nötig, wie wäre es damit:

uname -r

6.9.3-1-liquorix-amd64

Es gab bei mir den 6.9er Kernel mittlerweile. Mein kernelaufräumen alias in der $HOME/.bashrc hat auch funktioniert, aber das tat er ja von Anfang an für mich, mit dem Liquorix Kernel. Und nun:

dpkg -l | awk '/linux-(headers|image|modules(-extra)?)-[0-9]/{print $2}' | grep -Fv $(cat /proc/sys/kernel/osrelease | grep '[0-9]') 

linux-headers-6.8.12-1-liquorix-amd64
linux-image-6.8.12-1-liquorix-amd64

Würde für mich passen mit dem Liquorix Kernel. Aber reicht es, um beim Distributionskernel das gewollte zu erreichen, und nicht den laufenden Kernel zu erwischen?

Antworten |