Tab
die automatische Vervollständigung von Dateinamen ohne Berücksichtigung der Groß- und Kleinschreibung ermöglicht, ist dies ebenfalls kein Problem. In der Regel werden diese Einstellungen in einer der sogenannten "Profildateien" vorgenommen, die
.bashrc
sich im Home-Verzeichnis des Benutzers befinden. Wenn jemand an einem einzelnen Computer arbeitet, hat er keine Probleme mit den Einstellungen. Es trägt zur Datei bei
.bashrc
und in anderen ähnlichen Dateien die erforderlichen Änderungen, passt das System für sich selbst an und arbeitet in einer Umgebung, die sich so verhält, wie er es möchte. Probleme treten auf, wenn jemand mehrere Computer verwenden muss. Vielleicht sprechen wir über einen Webserver, einen Desktop-Computer, einen Computer, der die Rolle einer Firewall spielt, und ein paar Dutzend Raspberry Pi. Wie konfigurieren Sie alle diese Systeme auf die gleiche Weise? Und wie halten Sie die Einstellungen auf dem neuesten Stand, nachdem sie alle auf die gleiche Weise konfiguriert wurden?
Mehrere Optionen zum Synchronisieren von Einstellungen
Tatsächlich gibt es verschiedene Möglichkeiten, Linux-Systemeinstellungen zu synchronisieren. Da diese Einstellungen normalerweise in einer Art von Dateien gespeichert sind, kann fast jeder Synchronisationsmechanismus verwendet werden, um unser Problem zu lösen. Dies wird einige Zeit dauern, aber als Ergebnis können Sie erreichen, was Sie wollen. Angenommen, Sie können alle Konfigurationsdateien in einem Verzeichnis ablegen und dann symbolische Links zu diesen Dateien an den richtigen Stellen in Ihrem Home-Verzeichnis platzieren. Außerdem können Sie
rsync
diesen Ordner mithilfe verschiedener Systeme synchronisieren.
Wenn Sie mit Git vertraut sind, haben Sie bereits eine andere Option zur Lösung dieses Problems erraten. Hier haben Sie neben der Möglichkeit, Einstellungen zu synchronisieren, auch die Möglichkeit zu erfahren, was und wann in Ihren Konfigurationsdateien geändert wurde. In der Tat, ich bin in einem Material von ungewöhnlichen Möglichkeiten , die Git zu verwenden, hat darüber gesprochen, meine zeigen Systemeinstellungen Synchronisation, basierend auf Git. Kürzlich entdeckte ich jedoch, dass es ein System namens chezmoi gibt , das in Go geschrieben ist und einen Ansatz zum Synchronisieren von Einstellungen verwendet, der sich von meinem völlig unterscheidet.
Chezmoi-Funktionen
Entsprechend den Daten aus dem Projekt-Repository
chezmoi
bietet es dem Benutzer die folgenden Optionen:
- Eine deklarative Beschreibung des gewünschten Status der Home-Verzeichnisdateien.
- Verwenden von Vorlagen zum Erstellen von Dateien.
- Die Sicherheit der Arbeit wird durch die Integration in Bitwarden, in LastPass und in einige Programme zur lokalen Speicherung von Schlüsseln gewährleistet.
- Unterstützung für die Behandlung atomarer Updates. Dies schützt das System vor einem "Zwischenzustand".
- Unterstützung für mehrere Betriebssysteme.
- Der Benutzer wird über die geplanten Aktionen informiert, der "Testlauf" -Modus wird unterstützt.
- Hohe Arbeitsgeschwindigkeit, die Möglichkeit zu wählen, welche in Verbindung mit
chezmoi
dem Versionskontrollsystem verwendet wird.
Es sieht alles sehr interessant aus. Das Verfahren zur Installation des Dienstprogramms unter verschiedenen Betriebssystemen weist seine eigenen Besonderheiten auf. Die entsprechenden Anweisungen finden Sie im Projekt-Repository.
Mit chezmoi
Es
chezmoi
überrascht nicht, dass die ausführbare Datei, die den Zugriff auf die Funktionen ermöglicht , den Namen des Projekts wiederholt. Es unterstützt mehrere Befehle, unter denen ich Folgendes beachten möchte:
add
- Hinzufügen einer Datei zur Liste der vom System verwalteten Dateien.edit
- Dateibearbeitung.diff
- herauszufinden, welche Änderungen gegebenenfalls noch in die Arbeitsversion der Datei aufgenommen werden müssen.apply
- Aufnahme von Änderungen, deren Genehmigung noch aussteht, in die Arbeitsversion der Datei.
Wenn dem System eine neue Datei hinzugefügt wird, wird eine Kopie davon im Verzeichnis abgelegt
~/.local/share/chezmoi
.
chezmoi
Ignoriert aus Gründen der Kompatibilität mit Versionskontrollsystemen Dateien in diesem Verzeichnis, deren Name mit einem Punkt beginnt. Wenn Sie dem System beispielsweise eine Datei hinzufügen,
.bashrc
wird diese automatisch in umbenannt
dot_bashrc
.
Wenn nur diese Möglichkeiten
chezmoi
begrenzt wären, gäbe es in diesem Dienstprogramm nichts Bemerkenswertes. Das Interessanteste dabei ist die Synchronisation von Dateikopien. Um dieses Problem zu lösen,
chezmoi
wird ein externes Versionskontrollsystem verwendet. Aber was passiert, wenn einige Computer, deren Einstellungen synchronisiert werden, spezielle Einstellungen benötigen?
Unterstützung für spezielle Einstellungen
Auf einem Desktop-Computer müssen Sie beispielsweise eine benutzerdefinierte Eingabeaufforderung verwenden. Auf dem Server, in der Firewall und auf den Raspberry Pi-Computern werden Sie mit der üblichen Einladung zufrieden sein. Dies bedeutet, dass auf jedem Computer in der Datei
.bashrc
ein spezieller Parameterwert vorhanden sein muss
PS1
.
Dies kann durch Hinzufügen der entsprechenden Einträge zum Abschnitt der
data
Datei erfolgen
chezmoi.yaml
. Tatsächlich können Sie hier insbesondere verschiedene Formate verwenden -
JSON
und
TOML
. Diese Datei ist für jeden Computer eindeutig. Hier können Sie Änderungen an Vorlagendateien vornehmen. Beispielsweise kann ein
chezmoi.yaml
Desktop-Computer einen Eintrag über enthalten
PS1String
Ein ähnlicher Eintrag, der die komplexen Einstellungen für die Eingabeaufforderung beschreibt, und in derselben Datei für den Raspberry Pi wird bereits viel einfacher angeordnet.
Um eine bestimmte Datei auf dem System hinzuzufügen , das als Vorlage verwendet werden (zB eine Datei
.bashrc
), müssen Sie die verwenden
-T
Befehl Option
add
. Die auf basierende Vorlagendatei
.bashrc
hat einen Namen
dot_bashrc.tmpl
. Die Standardmechanismen für Go-Vorlagen
chezmoi
bieten dem Benutzer eine Vielzahl von Optionen. Darüber hinaus
chezmoi
können Sie Variablen verwenden, mit denen Sie beispielsweise mit dem Computernamen und dem Benutzernamen sowie mit Betriebssystem- und Architekturkennungen arbeiten können.
Dank der in verwendeten Funktionen
chezmoi
In der Vorlagensprache hat der Benutzer viel mehr Freiheit als nur die Verwendung von Variablen. Insbesondere in Vorlagen können Sie Bedingungen verwenden. Zum Beispiel kann es so aussehen:
# export EDITOR=vi # , {{- if eq .chezmoi.hostname "work-laptop" }} # ~/<code>.bashrc</code> work-laptop {{- end }}
Sicherheit
Chezmoi
erkennt private Dateien und verarbeitet sie entsprechend. Wenn ein Verzeichnis also privat ist
chezmoi
, verwendet das System ein Präfix,
private_
wenn privaten Dateien Namen zugewiesen werden (beispielsweise kann der Name einer solchen Datei so aussehen
private_dot_bashrc
).
Es wird davon ausgegangen, dass ein Versionskontrollsystem zum Organisieren der Dateisynchronisierung verwendet wird. Mit anderen Worten, wenn Sie einen neuen Computer einrichten oder die Einstellungen eines bestimmten Computers aktualisieren, synchronisieren Sie den Inhalt des Verzeichnisses
chezmoi
mit einer Kopie der Einstellungen, die im Versionskontrollsystem gespeichert sind. Dann wird alles, was in der Konfigurationsdatei konfiguriert werden muss, und die Änderungen werden angewendet, möglicherweise mit einer vorläufigen Überprüfung, welche Änderungen angewendet werden.
Dies bedeutet natürlich, dass die gespeicherten Dateien so "privat" sind, wie es das Versionskontrollsystem zulässt. Wenn Sie Ihre Konfigurationsdateien auf einem öffentlichen System veröffentlichen, bedeutet dies, dass von "Datenschutz" keine Rede mehr ist. Eine Möglichkeit, dieses Problem zu lösen, besteht darin, ein Vorlagen-System zu verwenden und die Konfigurationsdatei nicht mit dem Versionskontrollsystem zu verarbeiten. Und da es für jeden Computer einzigartig ist, sollte es auf keinen Fall mit einem Versionskontrollsystem verarbeitet werden. Dies bedeutet unter anderem, dass es anders als andere Dateien gespeichert werden muss.
Angenommen, Sie haben einen Eintrag wie diesen in Ihrer Konfigurationsdatei:
hackaday: password: 0xdeadbeef
Das Passwort muss geheim gehalten werden. In öffentlichen Dateien kann die folgende Konstruktion verwendet werden:
password = {{ .hackaday.password }}
Bei der Arbeit mit
chezmoi
können Sie weiterhin mit verschlüsselte Konfigurationsdateien verwenden
gpg
.
Versionskontrollsystem
Wenn wir über Versionskontrollsysteme sprechen,
chezmoi
gibt es Befehle zum Senden von Materialien an unterstützte Versionskontrollsysteme und dementsprechend Befehle zum Laden von Daten. Die Standardeinstellung wird verwendet
git
, es gibt jedoch auch andere Optionen, z
hg
. Die entsprechenden Einstellungen werden in der Konfigurationsdatei vorgenommen.
Es gibt auch Befehle, mit denen Sie einfach den vollständigen Satz von Konfigurationsdateien abrufen oder die Konfiguration exportieren können. Informationen zu diesen Befehlen finden Sie im Projekt-Repository. Standardmäßig werden alle Arbeiten im Ausgangsverzeichnis ausgeführt. Bei Bedarf können Sie das Programm jedoch so konfigurieren, dass es mit einem anderen Zielverzeichnis arbeitet.
Ergebnis
Insgesamt kann festgestellt werden, dass
chezmoi
es sich um ein gut durchdachtes Projekt handelt. Aber ich habe hier nichts gesehen, was mich zwingen würde,
chezmoi
von meinem Einstellungssynchronisationssystem zu wechseln . Wenn ich gestolpert wäre,
chezmoi
als ich nur darüber nachdachte, wie ich das fragliche Problem lösen könnte, würde ich wahrscheinlich dieses spezielle Projekt verwenden und nicht mein eigenes erstellen. Ich behaupte nicht, dass das Template-System
chezmoi
sehr gut ist, aber mein System erzielt einen ähnlichen Effekt, indem es je nach Umgebung unterschiedliche Dateien auswählt.
Eindeutige Einstellungsdatei
chezmoi
schwer mit der Versionskontrolle zu handhaben. Ja, Benutzer neigen normalerweise nicht dazu. Wenn das zum Speichern der Einstellungen verwendete Repository privat ist oder wenn private Informationen nicht in den Konfigurationsdateien enthalten sind, können Sie Optionen für die Einstellungsdatei in dieses System
chezmoi
einfügen (z. B. gibt es möglicherweise eine Version dieser Datei für den Raspberry Pi und für normale Computer). Wenn Sie Ihren Computer zum ersten Mal einrichten, können Sie die entsprechende Datei umbenennen. Es ist jedoch wahrscheinlicher, dass die Systemeinstellungsdatei einfach kopiert wird. Der Ansatz, nach dem die Konfigurationsdatei
chezmoi
Wenn die Versionskontrolle nicht durchgeführt wird, besteht der Vorteil, dass Sie bei korrekter Konfiguration ein öffentliches Repository zum Speichern von Daten verwenden können.
Und für den Betrieb meines Systems ist es sehr wichtig, ein privates Repository zu verwenden - wenn nur derjenige, der es verwendet, sich nicht darum kümmert, seine Konfigurationsdateien öffentlich zugänglich zu machen. Alle Dateien werden jedoch mit einem Versionskontrollsystem verarbeitet. Mit dem System können Sie sich über alle Änderungen auf dem Laufenden halten, ohne Vorlagen verwenden zu müssen, deren Beherrschung einige Zeit in Anspruch nimmt. Sie müssen nur die Einstellungen in den entsprechenden Dateien platzieren. Die einzige Funktion, die ich meinem System ganz hinzufügen kann, inspiriert von
chezmoi
Dies ist die Möglichkeit, neue Dateien hinzuzufügen, die überwacht werden. Obwohl mein System das Synchronisieren von Einstellungen ermöglicht, müssen Sie jetzt manuell Dateien hinzufügen. Die Datei wird in ein spezielles Verzeichnis verschoben, wonach die Dateieinträge dem System hinzugefügt und ein symbolischer Link erstellt wird.
Aber dafür ist Linux gut. Es gibt viele Möglichkeiten, das gleiche Problem zu lösen. Wenn Sie eine Sache nicht mögen, können Sie etwas anderes finden. Und wenn Sie nichts mögen, können Sie ohne große Schwierigkeiten etwas Eigenes erstellen. Dies führt jedoch zu bestimmten Problemen, wenn viele normale Leute, die nicht daran gewöhnt sind, Linux verwenden. Sie möchten nicht aus vielen Optionen auswählen, sondern möchten eine einfache und klare Arbeitslösung. Und in der Linux-Community ist es im Gegenteil üblich, ständig alles mit allem zu vergleichen und mit Inbrunst darüber zu streiten, was besser ist -
emacs
entweder
vi
C oder Python.
Wie synchronisieren Sie die Einstellungen auf Linux-Computern?
