Gibt es eine Distribution, die das Zurücksetzen aktualisierter Pakete unterstützt?


23

Gibt es ein Tool oder sogar eine gesamte Distribution, die das Zurücksetzen geänderter Pakete nach einem Update unterstützt?

Als Beispiel: Ich habe die Pakete A, B und C aktualisiert. Nachdem ich einige Tage mit diesen Paketen gearbeitet habe, stoße ich auf einen Fehler in B, der einen Deal bricht.

Während ich einen Fehlerbericht einreiche, muss ich auch B auf die vorherige Version zurückstufen, damit ich meine geplanten Aufgaben abschließen kann. Während A von B abhängig ist, muss es ebenfalls herabgestuft werden, aber C ist von beiden unabhängig, sodass es bei seiner aktuellen Version bleiben kann.

Gibt es ein Tool oder eine Distribution, die dies unterstützt?

Ich weiß, dass die meisten Distributionen die Möglichkeit haben, ein Paket zu downgraden, aber das ist normalerweise etwas skizzenhaft oder gar nicht möglich, da das vorherige Paket aus den Repositorys entfernt wurde und es in einigen Fällen (zum Beispiel nach dem Upgrade des X-Servers und von Mesa) wirklich zu Problemen kommt. unordentlich.


3
Anmerkung: Wenn die Änderung der Paketversion geringfügig war, gelten möglicherweise die folgenden Antworten. Beachten Sie jedoch, dass bei größeren Paketänderungen möglicherweise Daten auf der Festplatte aktualisiert werden, die in älteren Versionen nicht mehr ordnungsgemäß funktionieren. Beispielsweise fügt das Haupt-Upgrade von mysql-server (oder joomla) Felder hinzu und ändert diese und aktualisiert SQL-Tabellen. Das Upgrade von inn2 ändert möglicherweise den Datenbanktyp. Bei einem Upgrade des Distributionskernels werden ext3- auf ext4-Dateisysteme aktualisiert. Bei einem Paket-Upgrade werden Konfigurationsdateien konvertiert. usw. Der einzige Schutz gegen diese "nicht rückgängig zu machenden" Änderungen sind LVM / btrfs / etc-Snapshots (oder viel langsamere Sicherungen / Wiederherstellungen).
Matija Nalis

@MatijaNalis +1 für die Erwähnung!
Steffen Winkler

Antworten:


21

NixOS unterstützt Upgrade-Rollbacks, obwohl es meines Wissens nicht ganz so weit geht, wie Sie möchten: Wenn Sie A, B und C in einem Vorgang aktualisieren, können Sie den gesamten Vorgang zurücksetzen, aber nicht nur A und B. (Sie sollten in der Lage sein, A, B und C rückgängig zu machen und dann C zu aktualisieren ...) Aus transaktioneller Sicht ist dies jedoch sinnvoll.

Debian (in Kombination mit dem Snapshot-Archiv, wenn Sie nicht mehr über die alten Pakete verfügen) ermöglicht Ihnen das Downgrade von B, und Tools wie aptoder aptitudewerden in vielen Fällen feststellen, dass auch A heruntergestuft werden muss (sobald Sie sie davon überzeugt haben) Ich möchte nicht einfach ein Upgrade durchführen. B). Aber wie Sie sagen, ist das etwas chaotisch und Paket-Downgrades werden in Debian sowieso nicht unterstützt (was bedeutet, dass sie die meiste Zeit funktionieren, aber wenn sie kaputt gehen, ist es kein Fehler).


1
das sieht interessant aus! Die Community sieht aktiv und gesund aus. Ich werde es auf jeden Fall versuchen, danke! Wenn es bis Freitagabend keine bessere / andere Antwort gibt, werde ich Ihre Antwort markieren.
Steffen Winkler

Rollbacks auf NixOS sind fantastisch, aber die eigentliche Stärke ergibt sich aus dem deklarativen Ansatz: Die Paket- (und System-) Beschreibung kann aus einem Git-Repository entnommen werden, sodass Sie Ihr System genauso verwalten können, wie Sie ein Softwareprojekt, einschließlich Zweige, verwalten würden und verschmilzt usw. (und aufgrund atomarer Upgrades und Reinheit brechen Sie nie Sachen)
Daniel Jour

Der Nix-Paketmanager kann neben dem 'nativen' Paketmanager auch auf anderen Linux-Distributionen ausgeführt werden. Es läuft auch unter OSX, und ich habe Behauptungen gesehen, dass es unter Windows funktionieren könnte. Sie können Nix auch anweisen, 'native' Versionen einiger Pakete zu verwenden, anstatt eigene Duplikate zu installieren, obwohl Sie auf diese Weise einige Garantien verlieren (z. B. merkt es möglicherweise nicht, dass Sie eine Abhängigkeit ausgetauscht haben).
Warbo

Nur zu Ihrer Information, ich habe es geschafft, NixOS auf meinem Laptop zu installieren (das KDE4-Image hat mir eine Kernel-Panik beschert, aber das kleine (~ 390 MB) Image hat gut gebootet. Für jemanden, der nur Debian-basierte Distributionen installiert hat, war dies recht interessant / lustig , Ich verstehe bestimmte Dinge über den Paketmanager noch nicht, besonders wenn es um Desktop-Umgebungen geht. Ich habe gdm / gnome-shell installiert, aber es hat nicht funktioniert. Ich habe dann gnome3 / gdm in der Datei configuration.nix und beim Neuaufbau aktiviert Es wurden beide Pakete und ihre Abhängigkeiten erneut heruntergeladen. Es hat nach einem Neustart funktioniert, aber ich verstehe nicht warum.
Steffen Winkler

@SteffenWinkler Wenn Sie NixOS verwenden, installieren Sie normalerweise keine Dinge mit nix-env, sondern geben Dinge in an configuration.nixund führen sie dann aus nixos-rebuild switch. Dies hat den Vorteil, dass sich die gesamte Systemkonfiguration an einem Ort befindet und die gesamte Systemkonfiguration leicht gesichert werden kann (sichern Sie einfach die configuration.nixDatei).
Pauan

15

Auf jeder yumbasierten Distribution (z. B. Red Hat EL , CentOS usw.) können Sie:

  1. Untersuchen Sie den Verlauf von Systemänderungen mit sudo yum history list

    Loaded plugins: fastestmirror
    ID     | Login user               | Date and time    | Action(s)      | Altered
    ------------------------------------------------------------------------------
        10 | Administrator <admin>    | 2016-03-08 09:08 | Install        |   11   
         9 | Administrator <admin>    | 2016-03-03 16:48 | Install        |    1   
         8 | Administrator <admin>    | 2016-03-03 16:09 | Install        |    5   
         7 | Administrator <admin>    | 2016-02-26 18:13 | Install        |    1   
         6 | Administrator <admin>    | 2016-02-26 15:12 | Install        |   27   
         5 | Administrator <admin>    | 2016-02-26 15:07 | Install        |    1   
         4 | Administrator <admin>    | 2016-02-26 15:05 | Install        |    3  <
         3 | Administrator <admin>    | 2016-02-26 15:03 | Install        |    1 > 
         2 | Administrator <admin>    | 2016-02-26 15:01 | I, U           |   49   
         1 | System <unset>           | 2016-02-26 14:38 | Install        |  296   
    history list
    
  2. Überprüfen Sie die Details mit sudo yum history info 10

  3. Zurücksetzen auf einen vorherigen Punkt im Verlauf mit sudo yum history rollback 9

Warnung

Es gibt einige offensichtliche Einschränkungen:

  1. Wenn das alte Paket nicht mehr verfügbar ist, sind Sie Toast (um @vonbrand zu zitieren),
  2. Wenn Sie etwas außerhalb von yum installieren, können Sie die Geschichte brechen.

In meinem Beispiel bedeutet dies, dass ich <in der Zeile mit der ID 4(in der letzten Spalte) kein Rollback über diesen Punkt durchführen kann.

sudo yum history rollback 2
Loaded plugins: fastestmirror
Transaction history is incomplete, before 4.
 You can use 'history rollback force', to try anyway.
Error: Failed history rollback, incomplete

3
interessantes Feature! Aber aufgrund des "Toasts" passt meine Rechnung nicht.
Steffen Winkler

AFAIK dies ist nur in RHEL / CentOS 6 oder höher möglich. Wenn Sie RHEL / CentOS 5 noch verwenden, sind Sie SOL.
Wildcard

Übrigens ist dieser Ansatz in einer Unternehmensumgebung mit verwalteten --enablerepoRepositorys durchaus praktikabel, da Sie immer über die alten Pakete verfügen, auch wenn Sie ein Flag verwenden müssen, um ein ansonsten nicht mehr verwendetes altes Repository für das Downgrade zu aktivieren.
Wildcard

Was ist der Vorteil eines Rollbacks gegenüber einer erneuten Installation der älteren Version?
Bratchley

@Bratchley Automatisierung! kümmert sich yum einfach um die Liste der installierten Pakete und Versionen und prüft auf Abhängigkeiten, wenn alte Versionen erneut installiert werden . Natürlich können Sie es von Hand machen .
Andcoz

7

Unter OpenSUSE können Sie Snapper problemlos mit dem Btrfs-Dateisystem verwenden .

Wenn Sie während der Installation die Standard- Dateisystemkonfiguration verwenden, ist diese standardmäßig aktiviert .

Sobald Snapper aktiviert ist, wird es vollständig integriert mit yast2und zypper. Jedes Mal, wenn Sie etwas installieren oder aktualisieren (oder einen Benutzer erstellen usw.), wird ein Dateisystem-Snapshot erstellt.

Um das System auf einen früheren Zustand zurückzusetzen, müssen Sie nur ausführen yast2 snapper.

Bildbeschreibung hier eingeben


interessantes Werkzeug in der Tat. Obwohl ich ext4 sehr mag. Wird dies erforschen! Stimmt die Annahme, dass Snapper nicht an OpenSUSE, sondern an btrfs gebunden ist?
Steffen Winkler

Snapper wird von SUSE entwickelt. Es ist eine Sammlung von Tools, die die Erstellung der Brtfs-Snapshots für "Ereignisse" automatisieren. Ich nehme an, Sie können es auf anderen Distributionen verwenden, aber ich bin nicht sicher. In jedem Fall können Sie Brtfs-Snapshots für jede Distribution manuell erstellen.
Andcoz

3
Denken Sie jedoch daran, dass beim Zurücksetzen eines Snapshots auch Ihre eigenen Daten zurückgesetzt werden, wenn Ihr Volume Daten enthält, nicht nur Binärdateien und Skripts. Diese Option klingt riskant, am besten für diejenigen geeignet , die wirklich das Layout ihrer Dateisystem kennen. Für mich waren Snapshots immer für konsistente Sicherungen, Replikationen und vollständige Wiederherstellungssituationen gedacht.
10.

1
Beachten Sie auch, dass sich in vielen Paketen Dateien und / oder Verzeichnisse befinden, /varsodass /ein Rollback durchgeführt werden muss, auch wenn es sich um ein separates fs oder Subvolume handelt. Es ist viel besser, gründlich ein Upgrade zu testen , bevor sie auf Produktionsserver Anwendung als zu verlassen sich auf Funktionen wie OS - Rollback - Upgrade (was trivial einfach ist in einer Halb arsed Weise zu tun , sondern ist ein äußerst schwieriges Problem zu lösen richtig ).
cas

1
@Jimp Ein guter Rat. In jedem Fall aktiviert OpenSuSE Snapper nur, wenn /homees sich in einem separaten Dateisystem befindet , das kein Snapshot ist .
Andcoz

6

AIX ist sehr gut darin, Updates zurückzusetzen. Nun - wir sind auf der Unix / Linux-Site und Sie haben nie angegeben, dass Sie Linux wollen :)

Jedes einzelne AIX-Update speichert alle geänderten Dateien in einem separaten Unterverzeichnis im Dateisystem / var. Das Update kann mit einem einfachen nativen Befehl rückgängig gemacht werden, und die revert nicht das Netz sein muß , bis es nicht braucht keine Medien / packages, es nicht wieder installieren nichts und es hängt nicht von irgend Snapshot-Technologie - der Effekt ist einfach, dass die Dateien wieder so angezeigt werden, wie sie vor dem Update waren.

Als Bonus gibt es einen einfachen nativen Befehl mksysbzum Erstellen einer bootfähigen eigenständigen Systemsicherung. Die Datei, die einfach auf einem vollständig funktionsgestörten System gestartet werden kann, das aufgrund einer Fehlfunktion / Beschädigung nicht startet.

Und es ist alles bewährte Technologie mit jahrzehntelanger Geschichte :)


Treten häufig Probleme mit Programmen auf, die auf diese Weise wiederhergestellt wurden und sich in einem inkonsistenten Status und einem inkonsistenten Rollback befinden (z. B. eine Datenbank, deren Speicher-Engine geändert wurde, oder ein Dienst, der auf ein neues Konfigurationsdateiformat umgestellt hat), oder gibt es gute Möglichkeiten, dies zu beheben Das?
Josh Rumbut

1
Dies ist das Modell, das ich verwendet habe, als ich ein rudimentäres Paketverwaltungssystem für Software erstellt habe, die traditionell in komprimierten / komprimierten Tarballs verteilt wurde. Jedes Mal, wenn Updates installiert wurden, wurde zuerst ein "Rollback-Paket" von allem erstellt, was geändert werden sollte. Dieses Rollback-Paket kann dann zum Zurücksetzen verwendet werden, sofern in der Zwischenzeit keine anderen Update-Pakete angewendet wurden. Ich habe mich oft gefragt, ob richtige Paketmanager dies tun könnten, aber angesichts der Einschränkungen des Zurückrollens nur in umgekehrter Reihenfolge ... Vielleicht sollten wir stattdessen einfach git verwenden.
Monty Harder

verdammt. Ich hätte angeben sollen, dass ich GNU / Linux-Distributionen meinte. Interessanterweise scheint AIX heutzutage in der Lage zu sein, GNU / Linux-Programme auszuführen.
Steffen Winkler

5

In Fedora (und ich bin mir sicher auch in anderen Distributionen) können Sie darum bitten, zu einer früheren Version zurückzukehren:

dnf downgrade <packages>

Sie erhalten die vorletzte Version der Pakete, und Sie können nach einer bestimmten Version fragen, indem Sie:

dnf downgrade <package>.<version>

Dies funktioniert nur, wenn die Pakete noch in den Repositorys verfügbar sind. Die Funktionalität ist in keiner Weise unerhört. Es hat seine Nachteile, wenn ein Teil des Upgrades darin bestand, Konfigurationen zu ändern, wird das Rollback nicht unbedingt genau auf die frühere Version zurückgesetzt.


Sie können auch dnf history undo #thing verwenden, um den Vorgang rückgängig zu machen
Clearer

This only works if the package(s) are still available in the repositories. Ja, das ist genau das Problem. Ich bin ein bisschen überrascht, dass es dafür keine "umfassendere" Lösung zu geben scheint, insbesondere bei der Menge der Rolling-Release-Distributionen. Ab sofort scheint NixOS meine beste Option zu sein, oder ich benötige eine Art System-Imaging-Tool, das nur Unterschiede bearbeitet und das System zu einem bestimmten Zeitpunkt in den letzten 20 (?) Aktualisierungen wiederherstellen kann.
Steffen Winkler

@SteffenWinkler, wenn das alte Paket nicht mehr verfügbar ist, bist du Toast. Offensichtlich. Es sei denn, Sie haben eine Art lokales Backup.
Vonbrand

2
@MTilsted, weil es schon zu alt ist? Repositorys enthalten nicht alle Versionen von Anfang an.
Vonbrand

1
In dnf.conf (wie in yum.conf) steht keepcache = true zur Verfügung. Alte Pakete, da der aktuelle Cache nicht manuell gelöscht wird. Aber es ging darum, den Paket-Cache "aufzublähen".
mmv-ru

2

Arch Linux unterstützt auch das Downgrade von Paketen und des Kernels. Sie können auch die Tools downgraderund installieren downgrade, um den Prozess zu automatisieren. Die btrfs-Lösung funktioniert auch, ich habe sie zuvor verwendet, um ein manuelles Rollback durchzuführen.

So mache ich ein Rollback meines Systems:

sudo -i
mount /dev/sda3 /mnt/hd #mount the top btrfs subvolume
ls #find the version you want
mv @ @-old #move the '/' subvolume (I named mine '@')
btrfs sub snap @-<date> @ #replace @ with the backup from <date>
sync
reboot #the changes will take effect once the system restarts

Ein Vorteil von btrfs ist, dass Sie Subvolumes und dynamische "Partitionen" verwenden können. Zum Beispiel habe ich ein Subvolume für / (mit dem Namen @), / tmp (@tmp) und / home (@home). Es ist dann einfach, diese zu sichern und zurückzusetzen. Ich habe / tmp in einem separaten Subvolume, weil das Sichern mit dem Rest des Systems sinnlos erscheint, da es bei fast jedem Neustart gelöscht wird.


Ich bin einem Link im Wiki gefolgt und hierher gekommen . Das sieht ziemlich cool aus und von der Überprüfung des Repository gibt es Dateien, die bis 2013 zurückreichen! Warum den BTRFS-Weg benutzen, wenn dies existiert? Wegen Dateien, die "aktualisiert" werden? Oder gibt es einen anderen Grund?
Steffen Winkler

Ich bin nun permanent auf Arch Linux umgestiegen, nachdem ich NixOS einen kurzen Besuch abgestattet hatte. Es (Arch Linux) ist nicht annähernd so instabil, wie ich es mir immer vorgestellt habe, und es hat eine gesunde Community.
Steffen Winkler

@SteffenWinkler Das ist richtig. Außerdem werden die Arch-Downgrade-Optionen nicht "offiziell" unterstützt, und beim Downgrade werden wahrscheinlich Abhängigkeiten ignoriert (was ziemlich chaotisch werden kann, wenn etwas schief geht).
Caleb Reister

2

Ich verwende Arch Linux und es speichert alle heruntergeladenen Pakete, /var/cache/pacman/pkg/so dass Sie jedes Paket jederzeit downgraden können (wenn Sie nicht booten können, verwenden Sie einen Live-USB). Aus Arch Wiki :

pacman -U <file_name_of_the_package>

Um zu verhindern, dass ein Upgrade des Pakets durchgeführt wird, geben Sie den Paketnamen /etc/pacman.confwie folgt ein:

IgnorePkg=linux

Um Platz zu sparen, können Sie den Cache-Ordner löschen mit:

pacman -Sc

Damit werden alle älteren Pakete gelöscht und das neueste beibehalten, oder es wird verwendet -Scc, um alle zu entfernen.


Beachten Sie, dass dies (das Ignorieren von Paketen) ein teilweises Upgrade darstellt, das nicht unterstützt wird ...
jasonwryan

Ich bin einem Link im Wiki gefolgt und hierher gekommen . Das sieht ziemlich cool aus und von der Überprüfung des Repository gibt es Dateien, die bis 2013 zurückreichen! Warum den BTRFS-Weg benutzen, wenn dies existiert? Wegen Dateien, die "aktualisiert" werden? Oder gibt es einen anderen Grund?
Steffen Winkler
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.