libelektra ist so ein OSS-Projekt, für das ich mich sehr begeistern kann. Die meisten werden schon mal etwas davon gelesen haben. Für alle, die es noch nicht kennen möchte ich gerade mal 5 Sätze darüber schreiben.
Was ist libelektra?
Es ist eine Bibliothek, die eine Abstraktionsschicht schafft zwischen Konfigurationsschnittstelle und Konfigurationsspeicher. Es unterstützt dabei eine verschiedene Anzahl von Backends. Z. B. generische wie INI, csv, YAML, XML, JSON oder spezielle wie fstab, hosts, passwd. Es hält dabei keine eigenen internen Daten gar noch in einem binären Format, sondern greift auf vorhandene Dateien zu, speichert und liest dort. D. h. ein Editor bleibt weiterhein eine Alternative um Konfigurationsdateien zu bearbeiten.
Eine Bibliothek und kein Daemon
Da Elektra eine schlanke Bibliothek und kein Daemon ist, ist es immer verfügbar, sofern die Bibliotheken verfügbar sind. Wie schlank es denn dann wirklich ist, entscheidet dann natürlich auch der Einsatz der Plugins, die dann weitere Bibliotheken benötigen.
Wie wird es verwendet?
D. h. man kann Konfigurationsänderungen vornehmen, welche dann in die Dateien geschrieben werden.
z. B. einen Hosts-Eintrag lesen(Hier mit dem Kommandozeilentool kdb):
Code: Alles auswählen
kdb get system/hosts/ipv4/mserver.mydomain.de
Code: Alles auswählen
kdb set system/hosts/ipv4/mserver.mydomain.de 12.34.56.78
Stärke: Validierung
Was ich besonders sinnvoll finde sind Validierungsregeln, damit Werte vor dem Schreiben geprüft werden können. Der Folgende Befehl führt zu einer Fehlermeldung(Weil ::1 keine gültige IPv4-Adresse ist):
Code: Alles auswählen
kdb set system/hosts/ipv4/mserver.mydomain.de ::1
Besonders wichtig sind in Konfigurationsdateien Kommentare. Die müssen erhalten bleiben und ein Konfigurationswerkzeug muss Möglichkeiten dazu bieten. Mit dem folgenden Befehl kann man darüber hinaus Kommentare zu einzelnen Zeilen auch auslesen.
Code: Alles auswählen
kdb getmeta keyname comment*
Das System funktioniert selbst so, dass man Konfigurationsdateien unter Angabe des Backendtyps einhängt. Ja, es wird tatsächlich der Begriff mounten verwendet, Z. B.
Code: Alles auswählen
kdb mount --with-recommends /etc/hosts system/hosts hosts
Programmierumgebungen
Es gibt Bindings für C, C++, Python, lua, haskell (via c2hs), java, ruby.
Werdegang und Verbreitung
Libelektra wird seit langem stetig entwickelt. Die Verbreitung ist gering(Oyranos als grösseres Projekt verwendet es), vor allem in der Open Source Welt. Meine persönlichen Erfahrungen sind Reaktionen, die aufgrund des ursprünglich gewählten Namens "linux-registry" eher feindselig und ablehnend ausgefallen sind. Der ursprüngliche Ansatz war, ein eigenes Backend(Dateiformat) zu haben um sich den Aufwand der 1001 Dateiformatparser zu sparen. Das hat nicht funktioniert. Mir hat damals die Auswahl der verfügbaren Backends nicht gefallen(XML? oder Berkeley-DB? Als Natives Konfigurationsformat? Never!). Seit langer Zeit werden deswegen vorhandene Dateien verarbeitet.
Intern arbeitet das System der Konfigurationsbearbeitung mit Plugins, die austauschbar und erweiterbar sind. Z. B. für Lokalisierung der Daten(aka Resolver, in welcher Datei steht ein Wert?), Validierung, Logging(Protokollierung von Konfigurationsanfragen und Konfigurationsänderungen), Verschlüsselung und Benachrichtigung. Siehe libelektra.org/plugins/.
Ein hübsches & kurzes Demovideo gibt's auf der Homepage: https://www.libelektra.org
---
Was haltet Ihr davon?