Wie man einen Kernel nach einem schlechten Update herunterstufen kann (16.04)

20

Die letzten Upgrades auf den Ubuntu 16.04-Kernel (4.4.0-89 und -91) sind auf meinem Laptop fehlgeschlagen. Zum Glück habe ich die vorherige, funktionierende Version noch installiert (4.4.0-57). Im Moment ist Grub so konfiguriert, dass mir ein Menü angezeigt wird, und ich wähle manuell -57 beim Booten aus, aber dies scheint fragil zu sein, was in Zukunft wahrscheinlich nicht funktionieren wird sudo apt upgrade.

Ich glaube ich will:

  • -89 und -91 zu entfernen, da sie mir nicht gut tun.
  • -57 als Standardeinstellung für Grub festlegen, so dass es auch nach Upgrades erhalten bleibt.
  • Damit bleibt der -57 installiert, auch wenn ich später ein Kernel-Upgrade installiere
  • Damit Sie später problemlos Kernel-Updates durchführen können, kehren Sie bei einem Fehler zu -57 zurück. Mein Hauptanliegen ist, dass -57 automatisch entfernt wird.
  • Wenn ich später ein funktionierendes Update finde, ist dies ein einfacher Weg, um all dies rückgängig zu machen und zu den folgenden Kernel-Updates zurückzukehren.

Um -91 mit zu entfernen, sudo apt remove linux-image-4.4.0-91-genericmuss ich linux-generic und linux-headers-generic entfernen. Das scheint schlecht, also habe ich es nicht ausprobiert.

Ich kann eine Vielzahl von Fragen zum allgemeinen Problem finden, aber keine scheint alle meine Ziele zu erreichen, und die meisten sind alt genug, dass ich glaube, dass sie nicht mehr zutreffen.

Wie geht das am besten?

Nachtrag : Dies wurde als Duplikat von Wie kann die Aktualisierung eines bestimmten Pakets verhindert werden? . Diese Antwort könnte einen Teil meiner Frage beantworten, geht aber nicht auf das Gesamtbild ein.

Allgemein ist das Problem, dass der Kernel auf ungewöhnliche Weise gehandhabt wird. Es wird über linux-generic installiert, was nichts anderes ist als eine Abhängigkeit von linux-image-generic und linux-image-headers. Dies sind wiederum nur Abhängigkeiten von linux-linux-image-VERSION-generic und headers-VERSION-generic, also Paketen, bei denen die Versionsnummer in den Paketnamen eingebrannt werden muss (vermutlich, um die parallele Installation mehrerer Pakete zu vereinfachen).

Insbesondere werden in dieser Antwort nicht angesprochen:

  • Behandelt nicht, wie -89 und -91 entfernt werden.
  • Behandelt nicht, wie man -57 zum Standard für Grub macht, auch wenn ich spätere Updates installiere.
  • Es wird nicht erläutert, wie sichergestellt werden kann, dass -57 installiert bleibt, auch wenn ich spätere Updates installiere. Selbst wenn die Antwort darin besteht, ein oder mehrere Pakete zu halten, welche würde ich dann halten, wenn es sich um mehrere Pakete handelt? Wenn es darum geht, Linux-Generika zu behalten, wie kann ich es zuerst downgraden?
Alan De Smet
quelle
Es ist sehr unwahrscheinlich, dass die Kernel auf Ihrem Laptop "ausgefallen" sind. Wahrscheinlich haben Sie einen Treiber falsch installiert und er ist nach einem Kernel-Upgrade "fehlgeschlagen". Haben Sie einen Grafiktreiber installiert?
Pilot6
Wenn Sie den neuesten Kernel und Linux-Generic mit Headern entfernen, werden Sie Ihr Ziel erreichen. Aber wie gesagt das Problem ist anders.
Pilot6
1
"fehlgeschlagen" war kein WLAN und X über meine Grafiken unglücklich. Beide sind von Intel integrierte und gebrauchte Treiber. Das Problem bestand durch mehrere Neustarts, einschließlich eines vollständigen Herunterfahrens / Einschaltens. Also war mein Ziel eine Lücke, bis ich ernsthaft nachforschen konnte. Natürlich fange ich an, Informationen für ernsthafte Untersuchungen zu sammeln, und -91 beginnt, wie erwartet zu arbeiten. Seufzer, ich drücke vorerst die Daumen.
Alan De Smet
1
Dies ist kein Duplikat. Es geht nicht nur darum, ein Paket einzufrieren. Möglicherweise handelt es sich um ein Duplikat, jedoch nicht um die vorgeschlagene Frage.
Pilot6

Antworten:

19

Entfernen Sie den neuesten Kernel von

sudo apt remove linux-image-4.4.0-91-generic linux-headers-4.4.0-91-generic

Das wird Meta - Pakete deinstallieren linux-generic, linux-image-genericund linux-headers-generic. Kernel werden niemals aktualisiert.

Um es zurückzusetzen, können Sie ausführen

sudo apt install linux-generic

Damit wird der neueste Kernel installiert und der Kernel wird aktualisiert.

linux-genericist ein Metapaket. Es ist leer, hängt aber von zwei anderen Metapaketen ab: linux-image-genericund linux-headers-generic.

Die letzten beiden zeigen auf das neueste Kernel-Image und die neuesten Header.

Wenn Sie Metapakete entfernen, wird nichts vom Linux entfernt, aber das Kernel-Image und die Header werden nicht aktualisiert. Sie können sie später jederzeit installieren. Sie werden die neuesten "echten" Kernelpakete ziehen.

Die Lösung besteht also darin, die nicht gewünschten Kernelpakete und auch die Metapakete manuell zu entfernen.

Pilot6
quelle
3

Obwohl die Lösung von Pilot6 die beste Lösung ist, können Sie weniger drastische Maßnahmen ergreifen.

Ich würde persönlich die nicht gewünschten Kernel aus dem Software Center entfernen und diese Pakete dann zurückstellen - siehe Wie kann ich die Aktualisierung eines bestimmten Pakets verhindern?

Dies ist eine triviale Änderung, und Sie können die Änderung relativ einfach rückgängig machen oder rückgängig machen.

Panther
quelle
Welches Paket schlagen Sie vor, um zu halten?
Pilot6
linux-generic ist wahrscheinlich ausreichend, da bin ich mir nicht sicher. Möglicherweise müssen Sie in den anderen hinzufügen und müssen möglicherweise den genauen Kernel angeben, aber ich bezweifle es.
Panther
3
sudo apt-mark hold linux-image-generic linux-headers-genericwird es tun
Panther
1
@Pilot6 - Nein, Sie können die alten Kernel behalten und grub markieren, welcher Kernel gebootet werden soll. askubuntu.com/questions/216398/…
Panther
1
Ja, du kannst. Aber es ist zu kompliziert und macht praktisch keinen Sinn.
Pilot6