Gibt es eine Möglichkeit, vor dem Starten eines aptitude upgrade
oder apt-get upgrade
etwas einzurichten, so dass Sie Ihr System "leicht" in den Zustand "passend" zurückversetzen können, der vor dem eigentlichen Upgrade bestand, falls etwas schief geht?
Das heißt, Sie müssen beispielsweise die alte Version der Pakete neu installieren, die während des Vorgangs aktualisiert wurden.
(EDIT) Ein paar Hinweise : Ich weiß, dass etckeeper
zum Beispiel einige Hooks verwendet apt
werden, damit es benachrichtigt wird, wenn apt
ein Paket installiert oder deinstalliert wird. Ich nehme an, es könnte eine Art Skript geben, das die Liste der neu installierten Pakete und ihre vorherige Versionsnummer speichert, um sie aus dem apt
Cache neu installieren zu können ( /var/cache/apt/archives
). Es gibt auch checkinstall
welche, die Dateiänderungen verfolgen können ...
Irgendwelche Details, wie man das richtig erreicht?
Antworten:
Ich musste gerade eine Antwort auf diese
apt-get upgrade
Frage finden, weil der letzte auf einem Debian-Server es unmöglich machte, den neuesten Kernel über eine Busybox hinaus zu booten, und die zfs-Root-Partition nicht eingehängt werden konnte. Zumindest ein älterer Kernel konnte noch booten, war aber mit anderer Software nicht kompatibel. Also die Notwendigkeit eines Rollbacks.Die kurze Antwort - Sie könnten den folgenden Befehl verwenden:
Wenn es tut, was Sie wollen, entfernen Sie das
-s
und führen Sie es erneut aus. Hier sind die Schritte, die ich unternommen habe, um dies richtig zum Laufen zu bringen:Ich habe meine vorübergehend so eingestellt
/var/log/dpkg.log
, dass nur das heutige Upgrade übrig bleibtIch habe das winzige Skript
apt-history
von hier in installiert~/.bashrc
und liefDies bietet eine schön formatierte Liste versionierter Pakete, auf die durch Einspeisen ein Rollback durchgeführt werden kann
apt-get install
. Schneiden Sie diese Liste nach Bedarf in einem Texteditor und führen Sie sie dann aus (mit zuerst-s
für den Probelauf):Apt warnt vor den erwarteten Downgrades. Um zu verhindern, dass dieses Rollback beim nächsten Upgrade überschrieben wird, müssen die Pakete fixiert werden, bis das ursprüngliche Problem behoben ist. Zum Beispiel mit:
apt-mark hold zfsutils libzfs2 ...
quelle
apt-history rollback
Befehl kann durch so etwas wie ersetzt werdenawk '$3 ~ /upgrade/ {print $4"="$5}' dpkg.log
.awk '$1 == "2018-09-07" && $3 == "upgrade" {print $4"="$5}' /var/log/dpkg.log
E: Version '5.24.1-3+deb9u3' for 'libperl5.24' was not found
. H. Ich benutze Debian Stretch für Raspian.Die Protokolldateien
/var/log/apt/history.log
und/var/log/apt/term.log
sind die Objekte, die Ihrer Beschreibung am nächsten kommen:history.log
Gibt eine zusammenfassende Liste aller Aktionenapt
in folgendem Format aus:Insbesondere wird eine Liste neu installierter oder entfernter Pakete angezeigt. Außerdem wird angezeigt,
term.log
was während der Aktion tatsächlich auf dem Terminal angezeigt wurde, sodass die alte und die neue Version von Paketen angezeigt werden. Eine zufällige Auswahl von meinemhistory.log
:Der Versuch, ein
apt
automatisches Rollback durchzuführen, wird nicht empfohlen. Wenn Sie jedoch die Protokolle verwenden, sollte dies manuell möglich sein, es sei denn, die fehlgeschlagene Aktion hat einen Fehler verursacht, der dieapt
Aktionen des Benutzers stört , z. B. eine inkonsistente dpkg-Datenbank. In diesem Fall müssen Sie das Problem beheben, bevor Sie fortfahren können.quelle
Nein, apt macht das nicht einfach.
Die beste Option ist eine Art Schnappschuss. Entweder Dateisystem-Snapshots über lvm / zfs / btrfs oder Instanz-Snapshots, wenn Sie eine VM verwenden.
Die einzige andere Möglichkeit besteht darin, vorher und nachher eine Bestandsaufnahme der installierten Pakete (dpkg -l) durchzuführen. Wenn Sie ein Rollback durchführen möchten, müssen Sie die vorherige Version explizit installieren.
quelle
apt install openssl=1.0.2g-1ubuntu4.12
ergibtE: Version '1.0.2g-1ubuntu4.12' for 'openssl' was not found
. Ich habe gerade auf aktualisiert1.0.2g-1ubuntu4.13
und frage mich, ob dies jetzt einige CORS / CSP-Probleme verursacht