rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12954
|
kmu-net.ch schrieb:
Vielleicht kann das ja mal jemand analysieren?
Das Hauptproblem: Ich hatte ein "!" übersehen, so dass ich dachte, alle Pakete sollten ausgegeben werden, die nicht installiert (Status "ii") sind und wo deshalb die Konfigurationsdateien entfernt werden können. Aber es geht scheinbar darum, alle auszugeben, die installiert sind. Dann also so: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | $ dpkg -l 'linux-image-*' 'linux-headers-*' | awk '/^ii/ && !/'"$(uname -r | sed 's#[^0-9]*$##')"'/ {print $2}' >| x3
$ !diff
diff -U3 <(sort x1) <(sort x3)
--- /dev/fd/63 2015-11-06 14:11:14.768880567 +0100
+++ /dev/fd/62 2015-11-06 14:11:14.768880567 +0100
@@ -4,9 +4,11 @@
linux-headers-3.13.0-39-generic
linux-headers-3.13.0-66
linux-headers-3.13.0-66-generic
+linux-headers-generic
linux-image-3.13.0-34-generic
linux-image-3.13.0-39-generic
linux-image-3.13.0-66-generic
linux-image-extra-3.13.0-34-generic
linux-image-extra-3.13.0-39-generic
linux-image-extra-3.13.0-66-generic
+linux-image-generic
|
Die Datei "x1" enthält das Ergebnis des "alten" Skriptes mit sed . Das hat also zwei Pakete nicht ausgegeben. Ganz generelle Anmerkung: wenn man alles löschen will, das nicht mehr benötigt wird, reicht i.d.R. folgendes: | dpkg-query -l | awk '/^rc/ {print $2}' | sudo xargs -d \\n apt-get purge
|
Das muss man gar nicht auf Kernel einschränken. Dann spart man auch mehr Platz. ☺
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29398
Wohnort: WW
|
Hallo, IMHO sollte das Skript - wie auch immer es am Ende aussieht - in einen eigenen Artikel wie z.B. Skripte/alte Kernel entfernen ausgelagert werden und im Kernel Artikel wird darauf verlinkt. ist es "sauberer" ("one topic, one thread") ist es so einfacher, beide Artikel zu warten
Gruß, noisefloor
|
Hans9876543210
Anmeldungsdatum: 2. Januar 2011
Beiträge: 3741
|
rklm schrieb: Aber es geht scheinbar darum, alle auszugeben, die installiert sind. Dann also so:
Ja und nein. Wenn man sich die Supportthreads zu den Themen Kernel, /boot, kein Speicherplatz etc durchliest, dann sind oftmals Kernelversionen bereits vorhanden, die teils installiert sind oder zur Installation vorgemerkt etc. Da kann womöglich nicht mehr der aktuellste und frisch installierte Kernel gebootet werden, weil es noch nicht vollständig installiert ist. Da trifft dann ii nicht mehr zu. Den Filter auf ii würde ich daher nicht unbedingt für sinnvoll halten. Letztlich ist es aber wie bei allen, man kann nicht alles regeln. Auch das beste Wiki / der beste Einzeiler nützt nichts, wenn es nicht gelesen wird. Den Punkt zur Problembehebung sehen viele gar nicht. Da wäre eine weitere Auslagerung des "Skriptes" auch egal. Nebenbei: Theoretisch könnte man eine ToDo Liste erstellen, so quasi: 5 Punkte die man nach einer Ubuntu Installation beachten sollte. Den Hinweis dann dick und fett im Portal anheften.
Ganz generelle Anmerkung: wenn man alles löschen will, das nicht mehr benötigt wird, reicht i.d.R. folgendes: dpkg-query -l | awk '/^rc/ {print $2}' | sudo xargs -d \\n apt-get purge Das muss man gar nicht auf Kernel einschränken. Dann spart man auch mehr Platz. ☺
Sprich alles, was sich im Status rc befindet, würde dann gepurged werden. Das betrifft i.d.R. aber bereits nur die Pakete, die bereits removed wurden und somit nur noch die Konfigurationsdateien. Ich mache das zwar auch immer ganz gerne, aber wirklich viel freien Platz schafft man dadurch nicht.
|
fusi1939
Anmeldungsdatum: 1. August 2015
Beiträge: Zähle...
|
user:kmu-net.ch schrieb > Vielleicht kann das ja mal jemand analysieren? Unter 'Weitere Möglichkeiten' ist die Befehlszeile für 'zu_entfernende_Kernel' weiter zu präzisieren.
Um den verschiedenen Kernel-Update-Bezeichnungen gerecht zu werden, muß die Spalte 3 für die installierte Version hinzugezogen werden.
Bei mehreren Betriebssystemen ist unbedingt grub an der richtigen Stelle neu zu konfigurieren, damit keine Updates verloren gehen. Der Ablauf sieht dann so aus:
~$ sudo update-grub #im Hauptprogramm von grub (Ubuntu 14.04, wenn z.B. noch Ubuntu 12.04 als weitere Version verwendet wird) ~$ dpkg -l 'linux-[hi{,1}]*' |sed '/^ii/!d; /'"$(uname -r |sed 's/\([^-]*\)-\([0-9]*\).*$/\1[-.]\2/')"'/d;s/[^ ]*[ ]*\([^ ]*\).*$/\1/'|tee zu_entfernende_Kernel
~$ cat zu_entfernende_Kernel | xargs sudo apt-get -y purge
dazu Beispiel ubuntu 14.04
~$ dpkg -l 'linux-[hi{,1}]*' |sed '/^ii/!d; /'"$(uname -r |sed 's/\([^-]*\)-\([0-9]*\).*$/\1[-.]\2/')"'/d;s/[^ ]*[ ]*\([^ ]*\).*$/\1/'|tee zu_entfernende_Kernel
linux-headers-3.13.0-65
linux-headers-3.13.0-65-generic
linux-headers-3.13.0-66
linux-headers-3.13.0-66-generic
linux-image-3.13.0-65-generic
linux-image-3.13.0-66-generic
linux-image-extra-3.13.0-65-generic
linux-image-extra-3.13.0-66-generic
Gegenprobe bezüglich Eindeutigkeit der installierten Version, Spalte 3 (z.B. mit .67 oder -67):
~$ dpkg -l 'linux-[hi{,1}]*' |sed '/^ii/!d; /'"$(uname -r |sed 's/[^-]*-\([0-9]*\).*$/\1/')"'/!d;s/[^ ]*[ ]*\([^ ]*[ ]*\)\([^ ]*\).*$/#\1#\2/'|tee gegenwärtiger_Kernel # inklusive installierter Version
#linux-headers-3.13.0-67 #3.13.0-67.110
#linux-headers-3.13.0-67-generic #3.13.0-67.110
#linux-headers-generic #3.13.0.67.73
#linux-image-3.13.0-67-generic #3.13.0-67.110
#linux-image-extra-3.13.0-67-generic #3.13.0-67.110
#linux-image-generic #3.13.0.67.73
Nachbetrachtungen:
~$ sudo update-grub #im Hauptprogramm (Ubuntu 14.04) verwenden, um im Zweitprogramm (12.04) die aktuelle Kernelversion erreichen zu können
und um vorbereitete Kernel-Updates (bei 12.04) versehentlich nicht zu löschen
Weiterhin ändert sich wegen einer nicht eindeutigen Schreibweise .67 und -67 in Spalte 2 und 3 bei 'dpkg -l':
uname -r |sed 's/\([^-]*\)-\([0-9]*\).*$/\1[-.]\2/'
3.13.0[-.]67
Bevorzugen könnte man noch am Beginn der Kommandzeile
~$ dpkg -l 'linux-image-*' 'linux-headers-*' ...
|
aasche
(Themenstarter)
Anmeldungsdatum: 30. Januar 2006
Beiträge: 14259
|
noisefloor schrieb: IMHO sollte das Skript - wie auch immer es am Ende aussieht - in einen eigenen Artikel wie z.B. Skripte/alte Kernel entfernen ausgelagert werden und im Kernel Artikel wird darauf verlinkt. ist es "sauberer" ("one topic, one thread") ist es so einfacher, beide Artikel zu warten
+1 und hiermit erledigt.
|
apt-ghetto
Anmeldungsdatum: 3. Juni 2014
Beiträge: 2943
|
Meiner Meinung nach müsste man zu abändern, damit der Befehl auch mit EFI-Installationen funkioniert. Allerdings:
weiss ich nicht, ob auch die Teile mit sed angepasst werden müssen weiss ich nicht, wie es mit EFI-Systemen und deaktiviertem Secure Boot aussieht
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29398
Wohnort: WW
|
Hallo,
weiss ich nicht, wie es mit EFI-Systemen und deaktiviertem Secure Boot aussieht
Auf meine Systemen mit EFI aber deaktiviertem Secure Boot werden standardmäßig beide Kernel installiert - also der normale und der signed-Kernel. Gruß, noisefloor
|
apt-ghetto
Anmeldungsdatum: 3. Juni 2014
Beiträge: 2943
|
Da keine weiteren Kommentare dazu kamen, habe ich es mal angepasst.
|
BillMaier
Supporter
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6486
|
mittlerweile macht das ja apt-get autoremove oder?
|
Xeno
Ehemalige
Anmeldungsdatum: 6. April 2005
Beiträge: 2572
Wohnort: Schweiz
|
BillMaier schrieb: mittlerweile macht das ja apt-get autoremove oder?
Nein, das stimmt in der Form nicht. Wird der Befehl ohne Paketname verwendet, wird alles vom System geworfen, was so herumtrümmert, also alle alten Kernel, aber auch noch alle anderen nicht mehr benötigten Pakete. Natürlich kann man den Befehl auch dazu verwenden, nur bestimmte alte Kernel zu entfernen. Dann muss man aber ganz genau wissen, wie die (ihre Pakete) heissen. Der Artikel gibt aber auch noch an, wie man überhaupt herausfindet, welche Kernel auf dem System sind, und das weiss man mithin keineswegs "einfach so". Und oft will man eben nicht alle alten Kernel deinstallieren, sondern nur gewisse. Unterm Strich ist der Befehl nicht redundant zu den Infos des Artikels. Lg X.
|
BillMaier
Supporter
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6486
|
Ok, verstehe.
Habe jetzt auch die erste Diskussionsseite dazu gelesen, die Frage kam ja schon mehrfach auf. Es ist natürlich immer die Frage, wie man auf diesen Artikel stößt bzw. was man will. In meinem Fall sind mehrfach Server von meinen Vorgängern oder Kunden mit LVM paritioniert - nach den Grundeinstellungen bei Ubuntu mit separater und (imho) zu kleiner /boot - Partition. Also muss man alte Kernels löschen. Dafür tut es dann das autoremove. Nur noch als Vorschlag: Könnte man das an den Anfang des Artikels stellen mit einem entsprechenden Hinweis - und die alternativen Möglichkeiten nach hinten, quasi als Spezialanforderung? Oder was sind die Gründe, weshalb jemand nach diesem Artikel sucht? Was braucht die so gerne angeführte "Zielgruppe"? 😉
|
aasche
(Themenstarter)
Anmeldungsdatum: 30. Januar 2006
Beiträge: 14259
|
Nur ein kurzer Hinweis zur Entstehungsgeschichte: der Inhalt war Bestandteil des Artikels Kernel und soll eine Problemloesung fuer diejenigen sein, die mit den "normalen", dort weiterhin aufgefuehrten Methoden scheitern. Da sich herausgestellt hat, dass gerade die Problemkinder regelmaessig einen enormen Diskussionsbedarf ausgeloest haben, der aber nichts mit dem sonstigen Inhalt des Kernel-Artikels zu tun hatte, wurde der Abschnitt in einen eigenen Artikel + Diskussion ausgelagert. BillMaier schrieb: Nur noch als Vorschlag: Könnte man das an den Anfang des Artikels stellen mit einem entsprechenden Hinweis - und die alternativen Möglichkeiten nach hinten, quasi als Spezialanforderung?
IMHO nicht - die erstgenannten, "normalen" Methoden reichen in der Regel aus, um alte Kernel zu entfernen. Erst wenn diese scheitern, kann das vorgestellte Skript als Alternative zum Einsatz kommen.
|
horstpenner
Anmeldungsdatum: 7. Februar 2016
Beiträge: 364
|
Der Artikel bedarf der Überarbeitung.
root@PC:/home/user# dpkg -l 'linux-[ihs]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
linux-image-4.8.0-1-amd64
linux-image-amd64
root@PC:/home/user# uname -r
4.8.0-1-amd64
Das ist jetzt zwar nicht von einem Ubuntu- Rechner aus passiert, aber es sollte keinen Unterschied machen...
Die Vorgehensweise ist potenziell fehleranfällig gegenüber autoremove und der sicheren Deinstallation auf normalem Weg und das wird nicht erwähnt. Selbst wenn das Skript den Kernel nicht auflisten würde, der aktuell in Verwendung ist, würde die Beschreibung, dass es "alte" Kernels aufliste, falsch sein.
Siehe Aktuellen Kernel durch Skript gelöscht
|
Frieder108
Anmeldungsdatum: 7. März 2010
Beiträge: 9187
|
Sorry, aber ich kann deine Zweifel nicht bestätigen - das Skript scheint zu funktionieren frieder@T410:~$ dpkg -l | grep linux-image* | grep ii
ii linux-image-4.8.0-27-generic 4.8.0-27.29 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-28-generic 4.8.0-28.30 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-27-generic 4.8.0-27.29 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-28-generic 4.8.0-28.30 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-generic 4.8.0.28.37 amd64 Generic Linux kernel image
frieder@T410:~$ uname -r
4.8.0-28-generic
frieder@T410:~$ sudo dpkg -l 'linux-[ihs]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
linux-headers-4.8.0-27
linux-headers-4.8.0-27-generic
linux-image-4.8.0-27-generic
linux-image-extra-4.8.0-27-generic
frieder@T410:~$ Der Fehler in deinem verlinkten Thread dürfte woanders liegen
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29398
Wohnort: WW
|
Hallo,
Das ist jetzt zwar nicht von einem Ubuntu- Rechner aus passiert, aber es sollte keinen Unterschied machen...
Hier ist ein Ubuntu-Wiki. Was nicht Nicht-*buntu Systemen passiert, ist für's Wiki nicht relevant. Gru0ß, noisefloor
|