Wie kann ich ein "Git" -ähnliches Update-Management für Linux erreichen?


14

Ich möchte die Updates meines Linux-Systems auf ähnliche Weise wie Git verwalten , indem ich mich innerhalb von "Revisionen" vor- und zurückbewegen kann. Wie könnte ich das machen?


Als Linux / Unix-Systemadministrator, der sich mit den tieferen Aspekten der Funktionsweise von Linux / Unix-Systemen befasst, kann ich mir nicht vorstellen, welche Änderungen an ihrem System erforderlich sind, um ein Git-ähnliches Revisionssystem zu erfordern. Die wichtigsten Änderungen auf diesen Systemen sind Software-Installationen und Konfigurationsdateien. Konfigurationsdateien können einfach manuell gesichert und nachverfolgt werden. Und es fällt in eine Denkweise "Set it and forget it".
JakeGould

Antworten:


12

Sie sollten sich wahrscheinlich NixOS ansehen , das den Nix-Paketmanager verwendet .

NixOS ist eine GNU / Linux-Distribution, die den Stand der Technik im Systemkonfigurationsmanagement verbessern soll. In vorhandenen Distributionen sind Aktionen wie Upgrades gefährlich: Das Upgrade eines Pakets kann dazu führen, dass andere Pakete beschädigt werden. Das Upgrade eines gesamten Systems ist weitaus weniger zuverlässig als eine Neuinstallation von Grund auf. Sie können Änderungen am System usw. nicht einfach rückgängig machen.


12

Was Sie wahrscheinlich suchen, werden Konfigurationsmanagement-Tools genannt . Es gibt mehrere zur Auswahl, aber es ist sehr subjektiv, welches in jeder Situation am besten ist.

Ich persönlich fand Puppet ziemlich einfach, aber andere beliebte Optionen sind Salt und Ansible .


Ich habe bereits Puppet in Vagrant verwendet, aber ich kann mich nicht erinnern, jemals etwas Unordentliches in meinem Betriebssystem rückgängig gemacht zu haben ...
Patrick Villela

4
Konfigurationsmanagement-Tools bieten im Allgemeinen keine "Rollback" -Funktionalität. Das "Rollback" bläst das System weg und verwendet das Konfigurationsverwaltungstool, um das System neu zu konfigurieren. Sie können beispielsweise ein Bare-Metal-Provisioning-Tool wie Razor verwenden, um das Betriebssystem zu formatieren und neu zu installieren. Dann wird es an ein Tool wie Chef übergeben, um die Konfiguration anzuwenden.
CTC

2
Ist die Hexe beabsichtigt? :)
Ruslan

Ist Cfengine tot? Ich erinnere mich, dass ich versucht habe, etwas zu finden, mit dem ich glücklich war, als ich Sysadmin war. Aber ich habe es nie eingesetzt.
Peter Cordes

Mit jedem dieser Tools erhalten Sie eine Versionskontrolle, indem Sie Ihre Master-Konfigurationsdateien in Git halten. Was Sie von ihnen erhalten, ist die Zentralisierung und Reduzierung der Konfiguration eines gesamten Systems auf eine von wenigen Textdateien.
Peter Cordes

10

Dies ist wahrscheinlich zu viel für Ihre Frage, aber der einfachste Weg, um Änderungen auf Systemebene rückgängig zu machen, ist der Schnappschuss:

https://en.wikipedia.org/wiki/Snapshot_%28computer_storage%29

Sie haben die Besonderheiten Ihres Rigs nicht erwähnt, aber da Sie mit Git vertraut sind, wäre es nicht allzu schwierig, sich vorzustellen, dass Sie an einem komplexeren Dateisystem interessiert sein könnten. Wenn Sie ein Dateisystem der nächsten Generation verwenden (ignorieren Sie den Click-Bait-Y-Namen), können Sie Ihr gesamtes System mit einem einfachen Befehl "zurückspulen", der in Ihr Terminal eingegeben wird. Alle vorgenommenen Änderungen würden mit sehr geringer Verzögerung / Mühe rückgängig gemacht. ZFS ist die beste Wahl, und Sie können in diesem erstaunlichen Ars-Artikel nachlesen, ob es sich für Sie lohnt (es gibt auch viele, viele andere großartige Funktionen):

http://arstechnica.com/information-technology/2014/02/ars-walkthrough-using-the-zfs-next-gen-filesystem-on-linux/


2
Eine andere Option ist btrfs, das BTW über offizielle Unternehmensunterstützung von Ubuntu, SUSE> = 11, Oracle verfügt. Obwohl es immer noch entwickelt und blahblahblah, es ist zuverlässig für den täglichen Einsatz am Desktop Rechner und führt auch verdammt.
Ignis

1
@ignis: Ich bin kürzlich auf ein inkonsistentes und nicht wiederherstellbares Btrfs gestoßen, obwohl sich darunter ein RAID 5 befand, und habe von zwei weiteren Instanzen bei der Arbeit gehört. Daher würde ich diese Warnungen nicht leichtfertig ignorieren. Ich wollte es nicht selbst glauben, bevor ich darauf stieß. Möglicherweise lag es an schlechtem RAM, was einer der Gründe ist, warum ZFS- Benutzer die Verwendung von ECC-Speicher dringend empfehlen . Ich denke, dasselbe könnte für Btrfs gelten.
MVG,

6

Je nachdem, was Sie unter "Updates" verstehen , interessieren Sie sich möglicherweise für Konfigurationsverwaltungstools wie " etckeeper" , mit denen Sie Änderungen an der Systemkonfiguration automatisch aufzeichnen und zu früheren Konfigurationen zurückkehren können.

Wenn Git ein bekanntes Tool ist und Sie unter "Updates" "Updates für die Systemkonfiguration" und nicht "Updates für Systempakete" oder "Updates für alle auf dem Server gespeicherten Dateien" verstehen, ist dies möglicherweise das, wonach Sie suchen zum.

Unabhängig davon, ob Sie Tools wie Puppet, Ansible, Etckeeper usw. verwenden, ist es nicht immer möglich, einen sauberen Rollback ohne Datenverlust durchzuführen, es sei denn, Sie machen den gesamten Vorgang (z. B. Schnappschuss, wie in einer anderen Antwort erwähnt). Die richtige Vorgehensweise hängt von Ihrer Situation ab (z. B. wäre das Erstellen von Snapshots für ein Produktionssystem nicht geeignet, in dem Sie beim Zurücksetzen möglicherweise Kundenaufträge verlieren).



1

Wenn Sie wirklich Ihr gesamtes System (einschließlich der Kernel-Version) wie Git verwalten möchten, suchen Sie nach NixOS .

Für eine weniger komplizierte Version können Sie den Paketmanager von NixOS, nix, von fast jedem Unix aus verwenden. Nix kann als einfacher Benutzer installiert werden, es ist jedoch einfacher, es als root zu installieren. Sobald nix installiert ist, können Sie damit Pakete als nicht privilegierter Benutzer installieren und es wird problemlos mit Ihrem vorhandenen Paketmanager ausgeführt, ohne dass Konflikte auftreten. Es ist auch sehr einfach, nix vollständig von Ihrem System zu entfernen. Es gibt also keine Entschuldigung, es nicht auszuprobieren. ;-)

Um Ihre Frage direkt zu beantworten, definiert Nix Ihr gesamtes installiertes System als eine Umgebung, die ähnlich wie ein Git-Commit einen Zeiger auf eine Reihe von Zeigern auf sehr spezifische Versionen aller installierten Pakete darstellt.

Wenn Nix ein Paket aktualisiert, wird eine neue Umgebung erstellt, die auf einen neuen Satz von Zeigern auf Pakete verweist (meist auf vorhandene, für Pakete, die nicht aktualisiert wurden). Dies ähnelt wiederum einem neuen git-Commit, das meistens verwendet wird verweist auf vorherige unveränderte Dateien und einige neue Versionen geänderter Dateien).

Es ist natürlich trivial, zu einer früheren Version der Umgebung zu wechseln und, wie ich glaube, eine Verzweigung (dh eine neue Umgebung zu erstellen, die auf einer älteren als der letzten basiert). Eine Umgebung kann für eine bestimmte Shell geladen werden (es handelt sich tatsächlich um den Satz von Umgebungsvariablen, die für eine Shell verfügbar sind, daher der Name), sodass Sie auch ganz einfach verschiedene Umgebungen für verschiedene Projekte auf demselben Computer haben können. Keine Abhängigkeitsprobleme mehr, da ein nicht verwandtes Projekt eine andere Version einer Bibliothek benötigt!

NixOS bringt das auf die nächste Ebene und verwaltet Ihren gesamten Computer, einschließlich des Kernels, auf ähnliche Weise, sodass Upgrades des gesamten Computers mit sehr geringem Risiko möglich sind.

Ich habe noch nicht alle gelesen, aber ich empfehle Lethalman's Nix Pillen als Einführung in Nix.


0

Wenn Sie der experimentelle Typ sind, können Sie versuchen, einfach Ihr gesamtes Dateisystem in ein lokales Git-Repository einzuchecken. Das wäre ... interessant, denke ich.

  1. git init im Stammverzeichnis /
  2. Erstellen Sie einen .gitignore für das Stammverzeichnis, der Verzeichnisse ignoriert, deren Inhalt sich häufig ändert oder die nicht eingecheckt werden sollten:
    • / dev
    • /Lauf
    • / tmp
    • / proc
    • / lost + found
    • ...
  3. Fügen Sie den .gitignore-spezifischen Dateitypen hinzu, die Sie möglicherweise ausschließen möchten:
    • * .tmp
    • *.Log
    • ...
  4. Fügen Sie Ihren Anfangsinhalt mit hinzu git add -A .
  5. Übernehmen Sie den Schnappschuss mit git commit -m "Initial Snapshot"
  6. Verwenden Sie Ihren Computer
  7. Fügen Sie regelmäßig Schnappschüsse git commit -Am "Snapshot X"oder ähnliches hinzu

Einige Vorteile wären:

  • Bekannte Tools für die Versionsgeschichte, wie gitkundgit diff
  • Jede Live-CD oder jedes andere Betriebssystem mit Git kann Ihre Backups wiederherstellen
  • Sie könnten Ihr gesamtes System auf Github hochschieben und es auf anderen Computern wiederherstellen oder es mit anderen teilen ...?
  • Das Verzweigen wäre schnell und intuitiv
  • /, Git-Verzeichnis in Ihrem Stamm würde das Vertrauen wecken, Ihr System zu missbrauchen und abenteuerlicher zu sein, ähnlich wie Quellcode
  • Jeder nachfolgende Snapshot wäre im Vergleich zu anderen Backup-Lösungen relativ klein
  • Wäre großartig, um Konfigurationsänderungen in / etc zu überprüfen und nachzuverfolgen
  • Sie können dies als Pionierarbeit bezeichnen und es als linit - linux in git bezeichnen.
  • Schande

Einige Kuriositäten könnten sein:

  • Es ist unwahrscheinlich, dass Sie Zweige oder Revisionen mit erheblichen Änderungen oder Änderungen an den Dateien, die während des Betriebs des Systems verwendet werden, wiederherstellen / auschecken können. Möglicherweise ist ein minimaler USB-Boot-Speicher für diesen Zweck vorhanden
  • Eher große anfängliche Commits
  • In nachfolgenden .git-Verzeichnissen eingecheckt -?
  • gitIch hoffe, Sie arbeiten wie erwartet, wenn Sie sich in einem Quellcodeverzeichnis befinden, das im Stammcontainer verschachtelt ist git.
  • / etc / passwd und / etc / shadow müssten in das Repository aufgenommen werden, um Benutzer zu pflegen, zu verfolgen und auf anderen Computern wiederherzustellen. Jetzt kann jedoch jeder mit Ansichtszugriff (möglicherweise auf Github) vertrauliche Informationen wie Inhalte, Berechtigungen, und Passwort-Hashes Ihrer Benutzer.

3
Dieser Ansatz würde höchstwahrscheinlich schrecklich scheitern, da git Berechtigungen nicht richtig handhabt. Angenommen, Sie tun dies alles als root, würden Sie im Wesentlichen das gesamte Dateisystem als root deklarieren, was wiederum die Schreibvorgänge stören würde. Sie erstellen beispielsweise einen Snapshot, stellen ihn wieder her, der Eigentümer des Apache-Protokollverzeichnisses wird root (anstelle von http), der Apache kann nicht in das Verzeichnis schreiben und startet nicht. Ich weiß das, weil ich etwas Ähnliches ausprobiert habe, aber in viel kleinerem Maßstab, und sogar in diesem Bereich gab es Probleme.
Tuncay Göncüoğlu

Werfen Sie einen Blick auf Nix, wie in einer anderen Antwort vorgeschlagen;)
Michael Pankov

Gut zu wissen! Ich dachte, es handhabt Berechtigungen, zumindest das Oktett, da meine Skripte das x-Flag beim Klonen beibehalten, aber ich habe nicht über Datei- und Gruppenbesitz
nachgedacht

Es scheint, dass es zusätzliche Tools gibt, die die vollständigen Berechtigungen und Eigentumsrechte behalten, wenn Sie dies erforderlich gemacht haben. Ein solches Tool ist Git-Cache-Meta , und hier ist eine Liste
Ehryk
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.