Wie kann ich einen "apt-get upgrade" -Befehl unter Ubuntu rückgängig machen oder rückgängig machen?

26

Gibt es in Ubuntu eine Möglichkeit, das letzte Upgrade zurückzusetzen oder rückgängig zu machen, apt-get upgradewenn Ihnen die Ergebnisse nicht gefallen?

jjclarkson
quelle
Nicht ohne viel Arbeit, das wäre es nicht wert. Kannst du dein Zuhause retten und von vorne anfangen? Was hat dir nicht gefallen?
user10547
Ich habe es noch nicht getan, aber dies ist ein Produktionsserver und ich muss sicherstellen, dass es keine Inkompatibilitäten mit unserem benutzerdefinierten PHP / MySQL / Apache2-Setup gibt. Ich möchte ein Upgrade durchführen, da ich denke, dass es ein anderes Problem beheben wird, das ich habe.
jjclarkson
Sofern Sie kein dist-upgrade durchgeführt haben, sehe ich nicht, welche Ergebnisse dort nicht angezeigt werden, da es sich höchstwahrscheinlich um Sicherheitsupdates handelt .
LiraNuna
Wenn Sie eine benutzerdefinierte Installation haben, liegt es in Ihrer Verantwortung, Patches zu speichern und sie auf die aktuelle Version anzuwenden.
LiraNuna
2
Wenn es sich um einen Server handelt, probieren Sie einen Dev-Server aus, bevor Sie das Upgrade für den Produktionsserver durchführen
solarc

Antworten:

5

aptitudeErmöglicht Ihnen den Zugriff auf alle Versionen eines Pakets, sofern diese gemäß der Debian-Paketverwaltung verfügbar sind .

user28725
quelle
2.7.3 kann Ihnen beim Downgrade auf Stable helfen. 2.7.16 erklärt das Speichern und Wiederherstellen des dpkg-Status. Mit dpkg-repack können Sie ein einzelnes Paket "komprimieren".
Joeytwiddle
5

Ich bin auf Hartmans Blogstatic Blog gestoßen: Wie man ein Update in Ubuntu Lucid rückgängig macht

Der erste Schritt, um das fehlerhafte Update rückgängig zu machen, bestand darin, herauszufinden, um welche Updates es sich genau handelte. Nach dem Durchsuchen einiger Foren bin ich auf eine Möglichkeit gestoßen, meinen Update-Verlauf anzuzeigen: Öffnen Sie den Synaptic Package Manager ("sudo synaptic" im Terminal). Klicken Sie in der Menüleiste auf Datei -> Verlauf, um alle Aktualisierungen nach Datum sortiert anzuzeigen.

Leider hatte ich heute ungefähr 20 Updates installiert und wusste nicht, welches das Problem verursacht hatte. Durch Durchsuchen der in der Verlaufsliste genannten Pakete konnte ich jeweils ein Downgrade durchführen, bis das Problem behoben und das fehlerhafte Update identifiziert war. Um dies zu tun:

Verwenden Sie die Suchleiste, um das Paket zu finden, für das Sie ein Downgrade durchführen möchten. Wenn Sie gefunden haben, wonach Sie suchen, klicken Sie auf das Paket, um es auszuwählen. Klicken Sie in der Menüleiste auf Paket -> Version erzwingen und wählen Sie die vorherige Version des Pakets aus dem Dropdown-Menü aus. Klicken Sie auf die Schaltfläche "Übernehmen", um das Downgrade zu übernehmen.

Manav Brar
quelle
1
Ich erwarte von allen hier, dass sie die Grundlagen kennen, wie sie das letzte beleidigende Update nachschlagen können:
Manav Brar,
2
Worum ging es bei dieser Bearbeitung? Hast du noch eine Frage? Möchten Sie, dass wir ein Ratespiel spielen?
Slhck
5

Ich musste dies heute auf meinem Debian-System tun. Zuerst habe ich den Zeitraum ermittelt, in dem das fehlerhafte Upgrade durchgeführt wurde, und die Protokolleinträge mit den alten und neuen Versionsnummern der aktualisierten Pakete abgerufen:

$ awk '$1=="2016-03-20" && $3=="upgrade"' /var/log/dpkg.log
2016-03-20 16:58:22 upgrade libwebkitgtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:24 upgrade libjavascriptcoregtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:26 upgrade traceroute:amd64 1:2.0.22-1 1:2.1.0-1
2016-03-20 16:58:33 upgrade ethtool:amd64 1:4.2-1 1:4.5-1
2016-03-20 16:58:34 upgrade libsdl1.2debian:amd64 1.2.15+dfsg1-3 1.2.15+dfsg1-4
2016-03-20 16:58:34 upgrade subversion:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:36 upgrade libsvn1:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:56 upgrade linux-image-amd64:amd64 4.3+70 4.4+71
2016-03-20 16:58:56 upgrade linux-libc-dev:amd64 4.3.5-1 4.4.6-1
2016-03-20 16:59:03 upgrade amd64-microcode:amd64 2.20141028.1 2.20160316.1

Als Nächstes habe ich versucht, die noch zwischengespeicherten Paketdateien auf der Festplatte zu finden (zum Glück hatte ich autoclean nicht ausgeführt):

$ awk '$1=="2016-03-20" && $3=="upgrade" {gsub(/:/, "%3a", $5); split($4, f, ":"); print "/var/cache/apt/archives/" f[1] "_" $5 "_" f[2] ".deb"}' /var/log/dpkg.log | xargs -r ls -ld
ls: cannot access '/var/cache/apt/archives/ethtool_1%3a4.2-1_amd64.deb': No such file or directory
-rw-r--r-- 1 root root   28820 Dec 18  2014 /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb
-rw-r--r-- 1 root root 1978874 Dec 10 18:22 /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root  185006 Mar 12 00:41 /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb
-rw-r--r-- 1 root root 1317644 Mar  3 11:30 /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root 7679400 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root    6108 Dec 14 06:59 /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb
-rw-r--r-- 1 root root 1075506 Feb  7 21:36 /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb
-rw-r--r-- 1 root root  983174 Mar  3 11:30 /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root   53376 Feb 28 18:35 /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb

Es sieht so aus, als hätte ich aus irgendeinem Grund kein älteres ethtool-Paket. Lassen Sie uns dennoch die Installation der älteren Paketdateien erzwingen:

$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb
dpkg: warning: downgrading amd64-microcode from 2.20160316.1 to 2.20141028.1
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20160316.1) ...
dpkg: warning: downgrading libjavascriptcoregtk-3.0-0:amd64 from 2.4.10-1 to 2.4.9-3
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.10-1) ...
dpkg: warning: downgrading libsdl1.2debian:amd64 from 1.2.15+dfsg1-4 to 1.2.15+dfsg1-3
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-4) ...
dpkg: warning: downgrading libsvn1:amd64 from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-3) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
dpkg: warning: downgrading linux-image-amd64 from 4.4+71 to 4.3+70
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.4+71) ...
dpkg: warning: downgrading linux-libc-dev:amd64 from 4.4.6-1 to 4.3.5-1
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.4.6-1) ...
dpkg: warning: downgrading subversion from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-3) ...
dpkg: warning: downgrading traceroute from 1:2.1.0-1 to 1:2.0.22-1
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.1.0-1) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
dpkg: dependency problems prevent configuration of libwebkitgtk-3.0-0:amd64:
 libwebkitgtk-3.0-0:amd64 depends on libwebkitgtk-3.0-common (>= 2.4.9); however:
  Package libwebkitgtk-3.0-common is not installed.

dpkg: error processing package libwebkitgtk-3.0-0:amd64 (--install):
 dependency problems - leaving unconfigured
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64
Errors were encountered while processing:
 libwebkitgtk-3.0-0:amd64

Wie in der Fehlermeldung angegeben, war eines meiner Pakete unmittelbar vor dem Upgrade von einem -common-Paket abhängig, aber das Upgrade hat es entfernt (und apt-get kann es nicht mehr finden). Zum Glück befindet sich die Paketdatei immer noch in / var / cache / apt, sodass ich sie einfach zur Liste hinzufügen und es erneut versuchen kann:

$ ls -ld /var/cache/apt/archives/libwebkitgtk-3.0-common*
-rw-r--r-- 1 root root 452278 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20141028.1) ...
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-3) ...
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.3+70) ...
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.3.5-1) ...
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.0.22-1) ...
Selecting previously unselected package libwebkitgtk-3.0-common.
Preparing to unpack .../libwebkitgtk-3.0-common_2.4.9-3_all.deb ...
Unpacking libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Setting up libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up libwebkitgtk-3.0-0:amd64 (2.4.9-3) ...
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64

Erfolg! Eigentlich hat das mein Problem nicht gelöst. Aber es hat die Pakete, QED, erfolgreich herabgestuft.

aecolley
quelle
3

Ich musste heute auch ein Paket-Upgrade auf einigen Debian-Servern rückgängig machen. Ich habe die Pakete mit aptitute erfolgreich auf die letzte Version zurückgesetzt, während der folgende awk-Befehl sehr hilfreich war.

( Ersetzen Sie im folgenden Befehl die Datumszeichenfolge durch das Datum des Tages, ab dem Sie die Upgrades zurücksetzen möchten. )

awk 'BEGIN{ start="0" } { if($0 ~ /Log started: 2017-06-20/) { start="1"} if ( start == "1" && $0 ~ /Unpacking.*over/) {gsub(/[\s\t)( ]+/,"",$5); printf("%s=%s ", $2 , $5)}}' /var/log/apt/term.log

Überprüfen Sie die Ausgabe, um sicherzustellen, dass dies die Pakete und Versionen sind, die zurückgesetzt werden sollen. Verwenden Sie dann aptitute, um das Downgrade der aufgelisteten Pakete durchzuführen:

aptitute install [paste output here]

Ich hoffe, dass dies auch für andere eine nützliche Zeitersparnis ist.

Andreas Kohlbecker
quelle
2

Ich glaube nicht, beiseite eine vollständige Sicherung der relevanten Dateisysteme von der Einnahme (jene , die enthalten /, /bin, /lib, /sbin, /usr, /var, /etcund /boot(die alle auf Dateisystem sein , auf können) und Ihr Boot Record) , so dass Sie das Gerät wieder danach rollen können.

David Spillett
quelle
Ich könnte (und werde wahrscheinlich) ein Bare-Metal-Backup erstellen, aber ich wollte eine Software-Option, mit der ich das Upgrade in einem schnelleren Zeitraum rückgängig machen kann. Das Wiederherstellen von der Bare-Metal-Sicherung kann mehrere Stunden dauern.
jjclarkson
1
Sie könnten sicherstellen, dass Sie Kopien aller Pakete haben, die Sie in den vorherigen Versionen aktualisieren möchten (sie befinden sich wahrscheinlich immer noch irgendwo in Ihrem Apt-Cache /var) und alle relevanten Konfigurationsdateien gespeichert sind. Sie können dann versuchen, ein Rollback zu erzwingen, indem Sie explizit angeben dpkg, dass diese Versionen installiert werden sollen. Es kann sein, dass Sie später noch etwas zu tun haben, wenn Sie möchten, dass die normalen Upgrades durchgeführt werden. Daher würde ich dies nicht empfehlen.
David Spillett
Ein mit rsync erstelltes Backup (Timestamping aktiviert) kann im Vergleich zu einem mit tar erstellten Backup relativ schnell wiederhergestellt werden.
Joeytwiddle
2

Ich führe meine Linux-Server in einer virtualisierten Umgebung aus und führe einen Shapshot aus, kurz bevor ein entsprechendes Upgrade oder wichtige Updates / Upgrades von Drittanbietern durchgeführt werden.

Wenn dann etwas schief geht, kehre ich einfach zurück und das Leben geht weiter, bis ich mehr Informationen herausfinden kann.

Dies hat sich sehr bewährt, als ich meine Ubuntu-Box auf 12.04 aufgerüstet habe, und irgendwie war MySQL nach dem Upgrade völlig funktionsunfähig. Ich machte einen Rollback, fand die Antwort später, wiederholte das Upgrade, reparierte MySQL und das Leben war gut.

Brain2000
quelle
1

Sie könnten checkinstall versuchen

Nachdem Sie ./configure; Wenn Sie Ihr Programm erstellen, führt CheckInstall make install aus (oder was auch immer Sie von CheckInstall verlangen) und protokolliert jede Datei, die durch diese Installation geändert wurde, mithilfe der hervorragenden Installationsuhr ...

Vielleicht könnten Sie es also anweisen, aptitude safe-upgrade auszuführen, und es würde jede durch das Upgrade vorgenommene Änderung verfolgen.

solarc
quelle
1

Es gibt ein Projekt namens Nexenta, das den OpenSolaris-Kernel mit dem Ubuntu-Benutzerbereich kombiniert. Es bietet ein Tool zur Integration von Solaris ZFS und Debian apt, um eine Schaltfläche zum Rückgängigmachen von Upgrades bereitzustellen. Siehe hier: http://www.nexenta.org/os/TransactionalZFSUpgrades

Im Allgemeinen benötigen Sie ein Versionierungsdateisystem. Btrfs für Linux ist in Entwicklung.

Ryan C. Thompson
quelle
0

Ich habe das einige Male erfolgreich gemacht, aber ich werde es nicht empfehlen. Das habe ich gemacht (wenn ich mich richtig erinnere):

1) Entfernen Sie jegliche nicht offizielle Software, die nicht in den Standard-Ubuntu-Repositories enthalten ist (möglicherweise nicht erforderlich, aber ich schlage vor, dass sie Ihnen im Weg steht).

2) Ändern Sie Ihre /etc/apt/sources.list (und sources.list.d / *) auf die vorherige Version (kommentieren Sie alle nicht offiziellen Repositorys).

3) apt-get update / aptitude update

4) Führen Sie mit aptitude ein Downgrade der Kernpakete (wie X11, Bibliotheken usw.) durch. Es werden viele kaputte Pakete abgefeuert ... Sie müssen also jeden Fall lösen (Sie müssen wissen, wie man das in Eignung macht). Gehen Sie zum Beschreibungsfeld und installieren Sie die Version (durch Drücken von +) unten.

5) Wiederholen Sie Schritt 4, bis die gesamte Software zu Ihrer Zielversion gehört (prüfen Sie die entsprechende Versionsspalte).

Dies sind die Gründe, warum ich diese Methode nicht empfehle:

  • Es braucht viel Zeit (es ist ein schmerzhafter Prozess)
  • Einige Anwendungen funktionieren möglicherweise nicht ordnungsgemäß (da sie möglicherweise immer noch die neueste Konfiguration haben). In diesem Fall müssen Sie "bereinigen" und neu installieren.
  • Es gibt systembezogene Updates, die nach dem Downgrade nicht mehr funktionieren
  • Es ist sehr riskant, da Sie möglicherweise mit einem unbrauchbaren System enden

Ich würde dringend empfehlen, eine Neuinstallation durchzuführen und Ihre Konfiguration nach und nach zu verschieben. Es braucht auch Zeit, aber am Ende haben Sie eine stabile Version.

Der Grund, warum ich es getan habe, war hauptsächlich das Experimentieren und das Ergebnis von Verzweiflung.

Lepe
quelle
0

DPkg :: Pre-Install-Pkgs und ZFS auf Linux-Snapshots

Wenn Sie Ihr Betriebssystem auf einem ZFS-Dateisystem (z. B. ZFS unter Linux ) installiert haben , können Sie die apt-getAusführung zfs snapshotvor der Installation oder Aktualisierung konfigurieren , wodurch Ihr Dateisystem sofort gesichert wird. Es funktioniert möglicherweise mit anderen Sicherungsmechanismen als ZFS-Snapshots, aber ich überlasse das Testen anderen.

Das Drehbuch

Erstellen Sie eine Datei wie

/etc/apt/apt.conf.d/71backup

mit inhalt

// Tell `apt-get' to take a ZFS snapshot before installing or upgrading a
// set of packages:
DPkg::Pre-Install-Pkgs {"/sbin/zfs snapshot rpool/ROOT/debian@apt-get_$(date '+%Y-%m-%d-%H%M')";};

wo rpool/ROOT/debiansollte durch den Namen des ZFS-Dateisystems ersetzt werden, auf dem Ihr Betriebssystem eingehängt ist. Sie haben ihm diesen Namen gegeben, als Sie das Betriebssystem zum ersten Mal installiert haben. Sie finden ihn NAMEmit dem Befehl unter attribute

# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...

Aber geht das?

Sie sollten einen Schnappschuss machen, bevor Sie den Konfigurationsanweisungen einer zufälligen Internetperson folgen:

# zfs snapshot rpool/ROOT/debian@$(date '+%Y-%m-%d-%H%M%S')_test
# zfs list -t snapshot | grep rpool
...
rpool/ROOT/debian@2018-08-01-230001_test

Da ist es. Sollte dies error: fn_borkedbald eintreten, können Sie Ihr System mit in den seligen aktuellen Zustand zurückversetzen

# zfs rollback rpool/ROOT/debian@2018-08-01-230001_test

Probieren Sie es jetzt aus, indem Sie zwei winzige Spiele installieren, die wahrscheinlich in Ihrem Repo verfügbar sind:

# apt-get install tanglet sudoku
...
# zfs list -t snapshot | grep apt\-get
rpool/ROOT/debian@apt-get_2018-08-02-033614

Dieser Schnappschuss enthält Ihr Dateisystem wie vor der Installation der beiden Spiele.

# exit
$ sudoku

Lustige Zeiten für Oma, aber du hasst Sudoku.

$ sudo -i
# zfs rollback rpool/ROOT/debian@apt-get_2018-08-02-033614
# exit
$ sudoku
-bash: /usr/games/sudoku: No such file or directory
$ tanglet
-bash: tanglet: command not found

Nachdem mehrere Schnappschüsse aufgenommen wurden, können Sie durch Hinzufügen des -rFlags einen Rollback auf einen früheren durchführen . In unserem Fall zum Beispiel versuchen

# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test

Seien Sie jedoch gewarnt, dass dadurch nicht nur Ihr Dateisystem in den Zustand zurückversetzt wird, in dem es sich befand, als rpool/ROOT/debian@2018-08-01-230001_testes aufgenommen wurde, sondern auch alle späteren Snapshots unwiederbringlich gelöscht werden. Wenn Sie diesen Beitrag mitverfolgen rpool/ROOT/debian@apt-get_2018-08-02-033614würden , wäre der Schnappschuss jetzt verschwunden.

Ich habe apt-get upgradeauf einem Debian GNU / Linux mit getestet

# apt-get -t=oldstable install tanglet sudoku
...
# apt-get upgrade
...
# zfs list -t snapshot | grep apt\-get

Es klappt. Ein Snapshot wurde für den installBefehl erstellt, ein anderer für den upgradeBefehl.

Einschränkung : Ich habe dies heute zum ersten Mal getestet und weiß sehr wenig über das Innenleben von apt. Sollte dies etwas für Sie zerbrechen oder Risiken mit sich bringen, die mein gesunder Verstand nicht berücksichtigt hat, kommentieren Sie dies bitte weiter unten.

LaTeX2enub1336
quelle