|
Mylin
Anmeldungsdatum: 23. Juli 2024
Beiträge: 561
|
Kleine Korrektur zum systemd-service weil: | $ sudo journalctl | grep remove-old-kernel
Mär 27 14:03:16 mario-Vivobook systemd[1]: multi-user.target: Found ordering cycle on remove-old-kernel.service/start
Mär 27 14:03:16 mario-Vivobook systemd[1]: multi-user.target: Job remove-old-kernel.service/start deleted to break ordering cycle starting with multi-user.target/start
$
|
Jetzt ist es schick. [Unit]
Description=Entfernen des alten Kernels nach dem Booten
After=graphical.target
[Service]
User=root
ExecStart=/usr/local/bin/remove-old-kernel
Restart=on-failure
RemainAfterExit=true
[Install]
WantedBy=boot-complete.target
|
|
Ruth-Wies
Anmeldungsdatum: 12. April 2023
Beiträge: 1011
Wohnort: im Exil ;(
|
Mylin schrieb: Was ist mit manuell installierten?
Wer macht denn sowas? (nicht antworten) 😉 In dem Fall würde ich mit apt-mark alle manuell installierten Kernelpakete auf auto setzen und schon klappt es wieder mit autoremove. (Aber jeder wie er mag.)
|
|
Berlin_1946
Supporter, Wikiteam
Anmeldungsdatum: 18. September 2009
Beiträge: 10867
|
Hallo in die Runde was spricht gegen die Erweiterung des Befehls
dpkg -l 'linux-[ihs]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | tee zu_entfernende_Kernel
mit ihmst
dpkg -l 'linux-[ihmst]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | tee zu_entfernende_Kernel aasche ist leider nicht mehr aktiv, den kann ich nicht fragen. Nach meinem Kenntnisstand würde das dem Befehl
sudo apt autoremove --purge
entsprechen.
|
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 10394
Wohnort: Münster
|
Berlin_1946 schrieb: […] was spricht gegen die Erweiterung des Befehls […]
Das macht aus einem für den durchschnittlichen Leser völlig unverständlichen „1000-Tatzelwurm-Befehl“ einen „1002-Tatzelwurm-Befehl“. Verbessert also nicht die Verständlichkeit des Artikels. Gegenfrage: Was spricht gegen die Entwicklung eines Skripts, welches statt des Tatzelwurms das Verfahren in mehreren kürzere Befehle auflöst, die dann auch dem Leser erklärt werden könnten? Wenn jemand schon Arbeit in diesen Artikel investieren möchte, wäre m.E. das der bessere Ansatz zur Verbesserung der Qualität des Wikis. Da ich den „1000-Tatzelwurm-Befehl“ nicht verstehe (dazu müsste ich geschätzt einen Arbeitstag verschwenden, um ihn in allen Teilen zu testen – wozu ich nicht bereit bin), kann ich auch nicht beurteilen, ob die von Dir vorgeschlagene, geringfügig erscheinende Erweiterung schädlich oder nützlich wäre und empfehle daher eine Beibehaltung der originalen Fassung.
|
|
Ruth-Wies
Anmeldungsdatum: 12. April 2023
Beiträge: 1011
Wohnort: im Exil ;(
|
Berlin_1946 schrieb: was spricht gegen die Erweiterung des Befehls
Gegenfrage: Was sprich dafür? Ein Beispiel: Wenn man die Abfrage um „m“ erweitert – m für bspw. modules – dann sind die in der Liste, die der Einzeiler verarbeitet. Ja, aber: Jedes nutzbare Modul hat als Abhängigkeit einen expliziten Kernel. Wenn der ursprüngliche Einzeiler also den Kernel entfernt, dann wird auch das passende, nutzbare Modul entfernt, weil dessen Abhängigkeit nicht mehr erfüllt ist. → Im Sinne der Aufgabenstellung ist die Erweiterung unnötig. Die Frage ist eher, was mit Metapaketen, die mit „linux-[mt]“ beginnen, angestellt wird, wenn die mit in die Liste zur Verarbeitung aufgenommen werden. Werden die von dem Einzeiler dann auch entfernt oder belassen? Und das darf nicht nur auf einem System getestet sein, sondern soll für alle denkbaren Konstellationen gelten. Da wird's schwierig. Berlin_1946 schrieb: Nach meinem Kenntnisstand würde das dem Befehl
sudo apt autoremove --purge
entsprechen.
Klares Nein, weil autoremove auch andere, nicht mehr benötigte Abhängigkeiten entfernt. Man darf nicht von einem aufgeräumten System ausgehen. Nicht alle sind so vorbildlich wie du. 😇
|
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 10394
Wohnort: Münster
|
Ruth-Wies schrieb: […] Und das darf nicht nur auf einem System getestet sein, sondern soll für alle denkbaren Konstellationen gelten. Da wird's schwierig.
Sehr richtig!!! Auf meinem System liefert der 1000-Tatzelwurm:
linux-headers-7.0.0-38-generic
linux-hwe-7.0-headers-7.0.0-38
linux-image-7.0.0-38-generic Ich halte das für unvollständig, also falsch. Richtiger (aber ohne Garantie für die volle Wahrheit) wäre wohl:
dpkg -l 'linux-*7.0.0-38*' | grep ^ii
ii linux-headers-7.0.0-38-generic 7.0.0-38.38~24.04.4 amd64 Linux kernel headers for version 7.0.0
ii linux-hwe-7.0-headers-7.0.0-38 7.0.0-38.38~24.04.4 all Header files related to Linux kernel version 7.0.0
ii linux-image-7.0.0-38-generic 7.0.0-38.38~24.04.4 amd64 Signed kernel image generic
ii linux-main-modules-v4l2loopback-7.0.0-38-generic 7.0.0-38.38~24.04.4 amd64 Signed v4l2loopback module for 7.0.0-38
ii linux-main-modules-zfs-7.0.0-38-generic 7.0.0-38.38~24.04.4 amd64 Signed zfs module for 7.0.0-38
ii linux-modules-7.0.0-38-generic 7.0.0-38.38~24.04.4 amd64 Linux kernel modules for version 7.0.0 Gerade bei solchen „Operationen am offenen Herzen“ darf man sich keine Risiken durch Unverständnis leisten. Ich neige jetzt dazu, den Artikel als fehlerhaft zu markieren und mit einer Warnung zu versehen.
|
|
Ruth-Wies
Anmeldungsdatum: 12. April 2023
Beiträge: 1011
Wohnort: im Exil ;(
|
kB schrieb: Ich halte das für unvollständig, also falsch.
Es nur ein anderer Ansatz. Du würdest die komplette Liste ermitteln und übergeben; Ginge auch. Wie bereits geschrieben, sind die Module vom Kernel abhängig. Wenn der entfernt wird, dann werden auch die Module entfernt. – Bei dir würde also das Entfernen der gefundenen drei Pakete – sozusagen als Serviceleistung – auch alle von dir gefundenen Module entfernen. Damit wäre der Sinn erfüllt.
apt-get remove --simulate linux-headers-7.0.0-38-generic linux-hwe-7.0-headers-7.0.0-38 linux-image-7.0.0-38-generic
|
|
Berlin_1946
Supporter, Wikiteam
Anmeldungsdatum: 18. September 2009
Beiträge: 10867
|
Ruth-Wies schrieb: Man darf nicht von einem aufgeräumten System ausgehen.
Ok da gebe ich dir Recht. Wenn ich aber unterstelle, dass der User vllt mal aufräumen will/muss kommt er auch hier vorbei. Ruth-Wies schrieb: Ja, aber: Jedes nutzbare Modul hat als Abhängigkeit einen expliziten Kernel.
Da fehlt mir das Wissen, so wie ich es mir vorstelle.
es wird oder muss aufgeräumt werden. -Skripte/Alte_Kernel_entfernen- wird benutzt es bleiben die Module, die Tools und die main-modules-zfs- der alten Kernel erhalten. können oder sollten diese "Reste" dann auch entsorgt werden?
Damit wird dann noch NUR halb aufgeräumt. Somit kann ich in der Version dieses Wikis keinen richtigen Sinn erkennen. Auch mein Vorschlag hinterlässt auch die Tools, was sudo apt autoremove --purge nicht macht. Ich bin vllt zu übervorsichtig, aber bevor ich sudo apt autoremove --purge benutze, mache ich erst mal das sudo apt autoremove --dry-run und schaue mir an, was gelöscht werden würde. Diesen Post finde ich im Bezug zum Thema Aufräumen super: alte Kernel deinstallieren. Dank eurer Posts (Ruth-Wies und kB) bin ich der Meinung der Beitrag sollte ins Archiv.
|
|
schwarzheit
Supporter
Anmeldungsdatum: 31. Dezember 2007
Beiträge: 9285
|
Berlin_1946 schrieb:
Diesen Post finde ich im Bezug zum Thema Aufräumen super: alte Kernel deinstallieren.
Sinnvoller: >> Systempflege <<
|
|
Berlin_1946
Supporter, Wikiteam
Anmeldungsdatum: 18. September 2009
Beiträge: 10867
|
Hallo schwarzheit dpkg --list | grep "^rc" Das finde ich so interessant. Habe ich noch nicht als Tipp im Wiki gefunden.
|
|
schwarzheit
Supporter
Anmeldungsdatum: 31. Dezember 2007
Beiträge: 9285
|
Braucht es explizit auch nicht. Weil wenn man alte Kernel mit --purge entfernt bleiben keine Konfigurationen (rc) zurück. Und wenn doch dann putzt man mit purge ~c gleich alles auch Konfigs von deinstallierten Programmen (aber nichts aus /home). Und all das steht in dem Artikel.
|
|
Berlin_1946
Supporter, Wikiteam
Anmeldungsdatum: 18. September 2009
Beiträge: 10867
|
@schwarzheit, was ist dein Vorschlag? Archiv oder nicht Archiv, das ist die Frage (an die Literatur angelehnt) ☺
|
|
schwarzheit
Supporter
Anmeldungsdatum: 31. Dezember 2007
Beiträge: 9285
|
Archiv und / oder Verlinkung zu Systempflege.
|
|
Ruth-Wies
Anmeldungsdatum: 12. April 2023
Beiträge: 1011
Wohnort: im Exil ;(
|
Versuch einer Erklärung: dpkg -l 'linux-[ihs]*'
Mit dpkg -l werden alle Pakete angezeigt, die auf das Suchmuster 'linux-[ihs]*' passen. Dabei stehen innerhalb der eckigen Klammern Buchstaben, die jeweils einzeln ausgewertet werden. Es wird also effektiv gesucht nach:
Das heißt auch, dass Pakete angezeigt werden können, die nicht installiert sind. Zudem enthält die Ausgabe eine Erklärung im Kopf und Spalten, die nicht benötigt werden. Daher wird im folgenden mit sed aussortiert. | sed …
Die gesamte bisherige Ausgabe wird über die sogenannte Pipe („|“) an das nachfolgende Kommando übergeben. Die einzelnen Kommandos von sed sind in einzelne Anführungszeichen eingeschlossen und mit Semikolon („;“) voneinander getrennt. /^ii/!d
Innerhalb von zwei Schrägstrichen wird ein Suchmuster angegeben. Es wird als erstes nach „^ii“ gesucht. Dabei steht „^“ für den Zeilenanfang und „ii“ steht innerhalb der Ausgabe von dpkg -l für den geplanten und erreichten Status einer Installation; „ii“ steht also für erfolgreich installiert. Unmittelbar nach dem zweiten Schrägstrich steht die Anweisung, was mit dem Fund gemacht werden soll. Dabei steht „!“ für nicht und „d“ für entfernen. Es werden anders ausgedrückt nur die Zeilen der erfolgreichen Installationen stehen gelassen. /'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d
Hier wird wieder ein Suchmuster zwischen Schrägstrichen angewendet, allerdings diesmal entfernt (d). Das Suchmuster wurde in einfache (single quotes) und doppelte (double quotes) Anführungszeichen gepackt, damit es innerhalb der Schrägstriche funktioniert. Für die Suche wird nämlich eine Kommandosubstitution (command substitution) innerhalb eine subshell bemüht; erkennbar an „$(…)“. uname -r zeigt die Version des installierten Kernels an, der ja nicht entfernt werden soll. Deshalb wird diese Suche auch entfernt, sprich für die weitere Verarbeitung ausgenommen. Aber die Versionsangabe enthält noch „-generic“ (früher ggf. auch „-lowlatency“). Deshalb wird die Ausgabe von uname wieder über eine Pipe an sed weitergeleitet, das mit „s“ angewiesen wird ein Suchmuster zu ersetzen. Das erste Zeichen, das auf „s“ folgt, muss also drei mal vorhanden sein; Vor und nach dem Suchmuster sowie abschließend nach dem, wodurch das Suchmuster ersetzt werden soll. Dies gilt es erst mal zu finden, sonst kann man nichts verstehen.
sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/" Im Suchmuster sind zudem Teilmuster enthalten. Diese werden durch maskierte Klammern „\(“ bzw. „\)“ begrenzt. Das führende „-” innerhalb der eckigen Klammer des ersten Teilmusters gibt an, dass neben den Ziffern null bis neun auch ein Minuszeichen als gültiger Fund akzepiert werden kann; Es muss aber keines dieser Zeichen enthalten sein (Was in diesem Zusammenhang aber nie der Fall sein wird). In der Ausgabe wird also zunächst nach Ziffern („\([-0-9]*\)“) gesucht und zwar beliebig viele nacheinander, wofür der Asterix („*“) steht. Es wird eingeschränkt durch die weitere Angabe, dass auf die Ziffern ein „-“ folgt. Im nächsten Teilmuster wird durch ^ innerhalb der eckigen Klammern angegeben, dass nach dem „-“ eben keine Ziffern gesucht sind (Ist also definitiv etwas anders zu dem oben genannten „^“ für den Zeilenanfang.). Durch das maskierte Plus „\+“ wird gewährleistet, dass mindestens ein Zeichen dem Muster entsprechen muss. Die Ersetzung folgt hier noch mal eine Besonderheit: „\1“ gibt an, dass der erste Teil des erfolgreichen Fund als Ausgabe verwendet wird. (Je nach Anzahl der Einzelmuster im Gesamtsuchmuster könnte die Zahl auch höher sein (maximal neun).) s/^[^ ]* [^ ]* \([^ ]*\).*/\1/
… hier Erklärung einfügen … Den Teil verstehe ich noch nicht. Aber ich weiß, was er macht. Aus den vier Spalten der Ausgabe von dpkg wird die zweite Spalte extrahiert. Für die Kernelliste ist dies wesentlich, aber für das Gesamtverständnis nachrangig. /[0-9]/!d
Abschließend noch ein Suchmuster, das nach allen Zeilen sucht, die Ziffern enthalten, und diese werden nicht löscht. Damit sollen vermutlich Metapakete wie „linux-image-generic“ aus der Liste entfernt werden. Was eine Umleitung in eine Datei ist, habe ich hier verlinkt. → Shell/Umleitungen (Abschnitt „Umleiten-der-Ausgabe-mit“)
Links:
|
|
Ruth-Wies
Anmeldungsdatum: 12. April 2023
Beiträge: 1011
Wohnort: im Exil ;(
|
Jetzt muss ich mal laut denken: Früher gab es auch Metapakete wie „linux-generic-lts-trusty“. Seit 16.04 gibt es Metapakete wie „linux-image-generic-hwe-16.04“. Da ein solches Metapaket Ziffern enthält, wird es im abschließenden sed-Teil nicht aussortiert. Das würde bedeuten, dass, wenn mit dem HWE-Metapaket der aktuelle Kernel zwar installiert wurde, aber über GRUB ein älterer Kernel gestartet wurde, das Metapaket dann entfernt werden könnte, was eigentlich nicht beabsichtigt ist.
|