augeas; grammars; apache configuration; compiler; regular languages; toml; ini
en
Abstract:
Nahezu jede Applikation verwendet Konfigurationseinstellungen um ihr Verhalten einem spezifischen Kontext anzupassen. In immer komplexer werdenden Computersystemen kann die große Anzahl verschiedener Einstellungen leicht zu Fehlkonfigurationen führen. Die verschiedenen Möglichkeiten Softwaresysteme zu konfigurieren und die große Anzahl verschiedener Konfigurationsformate verbessert diese Situation...
Nahezu jede Applikation verwendet Konfigurationseinstellungen um ihr Verhalten einem spezifischen Kontext anzupassen. In immer komplexer werdenden Computersystemen kann die große Anzahl verschiedener Einstellungen leicht zu Fehlkonfigurationen führen. Die verschiedenen Möglichkeiten Softwaresysteme zu konfigurieren und die große Anzahl verschiedener Konfigurationsformate verbessert diese Situation sicherlich nicht. Elektra ist ein auf Plugins basierendes Konfigurationsframework, das Konfigurationseinstellungen in eine globale hierarchische Datenbank integriert und eine einheitliche Schnittstelle für diese anbietet um Fehlkonfigurationen zu vermeiden. Damit Elektra ohne oder nur mit geringen Modifikationen an einer Applikation arbeiten kann, muss es das Konfigurationsformat der Applikation verstehen. Um das zu bewerkstelligen verwendet Elektra ein auf Plugins basierendes System um Konfigurationsdateien in seine internen Datenstrukturen umzuwandeln. Veränderungen der internen Datenstrukturen werden dann zurückgeschrieben, um so die Konfiguration einer Applikation über Elektras Schnittstelle zu ändern. Nachdem eine Vielzahl von verschiedenen Konfigurationsformaten existiert, müssen wir uns Gedanken machen, wie wir diese mit möglichst geringem Aufwand syntaktisch analysieren, also parsen, können. Um zu untersuchen, welches System die beste Lösung für die Aufgabe des Parsens von Konfigurationsdateien liefert, analysieren wir zunächst erfolgversprechende Parsing-Techniken in einer Literaturrecherche. Als Beispielsyntax für weitere Untersuchungen verwenden wir ein Subset der populären Sprache YAML, das wir ursprünglich mit Hilfe der Daten einer Befragung von einigen Elektra-Entwicklern ermitteln wollten. Da das gewählte Subset aus Sicht der Syntaxanalyse uninteressante Eigenschaften mit hohem Entwicklungsaufwand aufweist und wegen Problemen mit der Aussagekraft der Umfrage spezifizieren wir schließlich das YAML-Subset selbst. Wir schreiben, generieren und integrieren Parsing-Code für 8 neue Elektra-Plugins und erweitern eines der existierenden Plugins. Schließlich vergleichen wir fünf der Parser-Plugins in einer detaillierten Untersuchung. Der Vergleich der Features der Parsersysteme zeigt, dass für unsere Beispielsprache ANTLR den größten Funktionsumfang und gute Fehlermeldungen liefert, ohne Grammatikänderungen zu benötigen. Während der Code des Generators weder die schnellste Laufzeit, noch den geringsten Speicherverbrauch aufweist, zeigen unsere Messungen eine angemessene Leistung. Um 10 000 Zeilen YAML zu konvertieren benötigt der Parser ungefähr 120ms auf unserem Testsystem.
de
Almost any application uses configuration settings to adapt its behavior to specific contexts. In ever growing complex computer systems, the large amount of different settings for different software can easily lead to misconfiguration. The different methods to configure systems and the large amount of different configuration file formats does certainly not improve the situation. Elektra is a plugi...
Almost any application uses configuration settings to adapt its behavior to specific contexts. In ever growing complex computer systems, the large amount of different settings for different software can easily lead to misconfiguration. The different methods to configure systems and the large amount of different configuration file formats does certainly not improve the situation. Elektra is a plugin-based configuration framework that integrates configuration settings into a global hierarchical database and provides a common interface for configuration settings to make misconfiguration less likely. For Elektra to work without, or with only minor modifications to an application it needs to understand the configuration file format of said application. To do that Elektra uses a plugin-based system to parse configuration files and convert them into its native data structures. Changes to these data structures are then written back, effectively changing the configuration of an application via Elektras interface. Since there exists a plethora of different configuration file formats we need to think how we can parse them with as little effort as possible. To evaluate which parsing system offers the best fit for the task of configuration file parsing, we first study promising techniques in a detailed literature research. As example syntax for further analysis we use a subset of the popular language YAML. Originally we wanted to determine this subset using data from a survey we conduct with some of Elektras developers. Since the chosen subset includes items with high development effort that are not interesting from a parsing point of view, and because of problems with the conclusiveness of the survey, we choose the implemented subset ourselves. We write, generate and integrate parsing code, creating 8 new Elektra plugins, and extend one of Elektras existing plugins in the process. We then compare five of our parser plugins in a detailed evaluation. The comparison of the various features of the parsing systems shows that for our example syntax ANTLR provides the most complete feature set and good error messages without requiring any changes to the grammar. While the parser generated by ANTLR was neither the fastest parser, nor the parser with the lowest memory overhead, the benchmarks in our comparison still show acceptable performance for our example data. To convert 10 000 lines of YAML the parser needs roughly 120ms on our test system.