Releases: ElektraInitiative/libelektra
0.8.22 Release
You can also read the news on our website
- guid: 4884a54f-996a-4564-a138-38a70166fed7
- author: Markus Raab
- pubDate: Tue, 27 Feb 2018 19:35:58 +0100
- shortDesc: Logo, INI, Lookup
We are proud to release Elektra 0.8.22!
In 429 commits, 8 authors changed 548 files with 60369 insertions(+), 6783 deletions(-).
What is Elektra?
Elektra serves as a universal and secure framework to access
configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
For a small demo see here:
You can also read the FOSDEM interview and watch the FOSDEM main talk given recently.
Elektra is now an official part of Homebrew and
Alpine Linux.
Highlights
- New Logo and Website Theme
- INI plugin greatly improved
- Notifications API and Bindings for Asynchronous I/O
- Plugin Processes
- Lookup with the Order Preserving Minimal Perfect Hash Map
New Logo and Website Theme
We are proud to present our new logo.
It has a new shape and cooler colors.
Thanks to Philipp Frei!
We also gave the website a new look. It has the colors from the logo and new
fonts (Lato and
Libre Franklin) that improve
readability and add to a unique look. The restructured start page contributes to
the new look as well.
We also updated asciinema-player to 2.6.0.
Thanks to Thomas Wahringer.
We also fixed security issues in the Website due to an old version of jquery,
thanks to Marvin Mall.
Thanks to Bernhard Denner for keeping our infrastructure running.
INI plugin greatly improved
dini
is no longer experimental anymore and adds the binary plugin.- We added a crash test for the INI plugin that feeds the plugin with problematic input data we determined using AFL
- We fixed various small bugs that could potentially cause the INI plugin to crash and fixes the problems as reported by AFL
- The INI plugin now converts a section to a normal key-value pair if you store a value inside it. This has the advantage that you will not lose data unexpectedly anymore.
- The INI plugin should now read most key-value pairs containing delimiter characters (
=
) properly.
Thanks to René Schwaiger!
Nevertheless, we did not switch to INI as default format.
This has some reasons:
- In many workflows,
dump
is the better choice: e.g. withkdb editor
you can edit any parts of Elektra with any format (e.g. INI) more safely.
(With the INI plugin in some of these situations meta data is wrongly shown.) - The code base of INI is not fully tested and partly not well understood.
- We plan to switch to a newly written parser (most likely YAML) and want to avoid that users have two migrations.
The migration fromdump
is easier (especially compared with INI) because thedump
format is recognisable without ambiguity.
(Thus the INI file parses nearly any file, it is hard to detect that a file is not INI)
But for those who want to switch, the migration will be smooth:
The dini
plugin makes sure that old dump files are still being read.
Only when writing out configuration files, configuration files are converted to INI.
To change to INI during compilation, simply use:
-DKDB_DEFAULT_STORAGE=dini
Or simply switch for your installation with:
sudo kdb change-default-storage dini
You can also mount INI (or dini) as root:
sudo kdb mount default.ini / dini
Notification API and Bindings for Asynchronous I/O
This release contains an experimental implementation of Elektra's notification feature.
This feature enables applications to get updates when configuration is changed at run-time.
For more details see the preview tutorial at
doc/tutorials/notifications.md
The
Notification API
is implemented by a new library called elektra-notification
.
To use the library you need the new internalnotification plugin.
Since the plugin is experimental it needs to be enabled when building Elektra
from source (e.g. by passing
-DPLUGINS="ALL;-EXPERIMENTAL;internalnotification"
to cmake
).
New bindings for asynchronous I/O called "I/O bindings" also have been added.
These bindings allow Elektra's plugins and other parts to perform asynchronous operations.
I/O bindings are opt-in for application developers.
New features of Elektra that take advantage of I/O bindings will have fallbacks where viable.
These fallbacks will use synchronous I/O thus keeping the status quo.
This release includes an experimental I/O binding for uv.
The interface for I/O bindings is currently experimental and might change in the future.
Elektra's notification feature is not complete yet.
So called "transport plugins" will be responsible for sending and receiving
notifications using different protocols or libraries (like ZeroMQ or D-Bus).
These plugins will make use of the new I/O bindings.
We plan to introduce the first transport plugins with the next release of Elektra.
Plugin Processes
A new library called pluginprocess
has been added. This library contains functions that aid in executing plugins in
a separate process. This child process is forked from Elektra's main process
each time such plugin is used and gets closed again afterwards. It uses a simple
communication protocol based on a KeySet that gets serialized through a pipe via
the dump
plugin to orchestrate the processes.
Such a behavior is useful for plugins which cause memory leaks to be
isolated in an own process. Furthermore this is useful for runtimes or libraries
that cannot be reinitialized in the same process after they have been used.
Lookup with the Order Preserving Minimal Perfect Hash Map
The ksLookup (...)
has a new search algorithm, that acts as an alternative to the
binary search. The Order Preserving Minimal Perfect Hash Map (OPMPHM) is a non-dynamic,
randomized hash map and is very effective for mostly static configurations.
The OPMPHM can be enabled for a search by passing the in kdbproposal.h
defined option KDB_O_OPMPHM
to the lookup.
Be aware that if the KeySet changes often using the OPMPHM might not be a good
idea, read more about the OPMPHM.
When you are not sure if the OPMPHM will speed up you searches, wait for the next release,
that one will include a hybrid search algorithm that combines the best properties of
both search algorithms.
To disable OPMPHM (e.g. on systems with tight memory constraints), you can pass
-DENABLE_OPTIMIZATIONS=OFF
Other New Features
We added even more functionality, which could not make it to the highlights:
- The Web UI was greatly improved, thanks to Daniel Bugl
The version of clusterd was increased from 1.0.0 to 1.1.0. - Elektra is now part of the official Homebrew repository. We still provide a
tap, if you want to install Elektra together with plugins or bindings that require
additional libraries. - The building and linking of the haskell bindings and haskell plugins has been
greatly improved. - The invoke library can now report errors upon opening/closing a plugin,
thanks to Armin Wurzinger. - The YAML CPP plugin does not require Boost anymore, if you
installed yaml-cpp 0.6. - Improved colored output in
kdb
tool. - We added two build jobs: docker and haskell.
Thanks to Bernhard Denner and Armin Wurzinger. - YAML CPP does not write binary data to a config file, if you forget to load the Base64 plugin.
- YAML CPP now encodes empty binary keys as NULL values (
~
), and also adds the meta keybinary
for such values automatically.
Documentation
We improved the documentation in the following ways:
- We have documented how you can setup a build node for Jenkins using a Docker container
We also provide an example Dockerfile based on Debian Stretch for that purpose,
thanks to Armin Wurzinger. - Document how
rlwrap
might be used forkdb shell
. - Fixed docu in `...
Release 0.8.21
0.8.21 Release
We are proud to release Elektra 0.8.21.
- guid: 7f5de1b1-6086-47a6-9922-cac08c898ae7
- author: Markus Raab
- pubDate: Fri, 22 Dec 2017 09:24:02 +0100
- shortDesc:
What is Elektra?
Elektra serves as a universal and secure framework to access
configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
The news can be read rendered at our web server.
Highlights
In this release 8 authors created 307 commits and we changed 217 files (5227 insertions, 1914 deletions).
The highlights of the release are:
- Fosdem Talk about Elektra was accepted
- CC-licensed book about Elektra published
- Maturing of plugins
- Elektra with encryption
- Preparation for switch to INI as default storage
Fosdem Talk about Elektra in Main Track
We are happy to announce that there will be a talk about
Elektra in one of the main tracks of Fosdem 2018:
- Title: Configuration Revolution
- Subtitle: Why it Needed 13 Years and How it Will be Done
- Day: Saturday 2018-02-03
- Start time: 15:00:00
- Duration: 50 min
- Room: K.1.105 (La Fontaine)
And a second talk in the Config Management DevRoom:
- Title: Breaking with conventional Configuration File Editing
- Subtitle: Puppet with a Key/Value API in a User Study
- Day: Sunday 2018-02-04
- Start time: 30:00
- Duration: 25min
- Room: UA2.114 (Baudoux)
See you in Brussels at 3 and 4 February 2018!
I will also be present in the Config Management Camp directly after Fosdem in Gent.
CC-licenced Book About Vision of Elektra Published
I am proud to release a book with the title "Context-aware Configuration" describing:
- the last 13 years of Elektra (focus on last 4 years with the questionnaire survey and code analysis),
- the current state of Elektra, and
- the long-term goals of Elektra (context-aware configuration).
The Fosdem talk will cover some highlights from the book.
A huge thanks to everyone involved in the questionnaire survey,
without you we would not have been able to collect all the
information that led to the requirements for Elektra.
The LaTeX sources are available here
and the compiled book can be downloaded from here.
Maturing of Plugins
- The new Directory Value plugin supports storage plugins such as YAJL and YAML CPP . It adds extra leaf values for directories (keys with children) that store the data of their parents. This way plugins that normally are only able to store values in leaf keys are able to support arbitrary key sets.
- The YAML CPP plugin reads and writes YAML data using yaml-cpp. The plugin supports arrays, binary data and metadata.
- The Camel plugin stores data as simplified YAML flow lists containing double quoted keys and values. For proper YAML support please use the YAML CPP instead.
- The mINI plugin reads and writes simple property list, separated by equal (
=
) signs. - The xerces plugin allows Elektra to read and write XML data. The plugin uses Xerces-C++ for this task. It supports both arrays and metadata.
- The boolean plugin normalizes boolean values such as
0
,1
,true
andfalse
. - The crypto plugin and fcrypt plugin are described below.
Elektra With Encryption
The plugins fcrypt
and crypto
are now considered stable. They are no longer tagged as experimental
.
While crypto
encrypts individual values within configuration files, fcrypt
encrypts and/or signs the whole configuration file.
For this release Peter Nirschl prepared a demo showing Elektra's cryptographic abilities:
Thanks to Peter Nirschl for this great work!
Switch to INI
We plan to switch to INI as default storage instead of Elektra's infamous internal dump format.
As preparation work we implemented the dini
plugin which transparently
converts all dump
files to ini
files on any write attempt.
Furthermore, we fixed most of the INI bugs which blocked INI to be the
default storage.
Due to this progress we will likely switch to INI as default starting
with the next release. If you want to, you can switch now by compiling
Elektra with:
-DKDB_DEFAULT_STORAGE=dini
Or simply switch for your installation with:
sudo kdb change-default-storage dini
If you are already using ini
as default, changing to dini
will:
- add some overhead because
dini
always checks if a file uses thedump
format, unless thedump
plugin is not installed. - add support for binary values using the
binary
plugin
NOTE: INI (dini) was not completely ready for 0.8.21 thus we kept
dump
as default.
dini
is currently an experimental plugin.
Other New Features
We added even more functionality, which could not make it to the highlights:
-
kdb rm
now supports-f
to ignore non-existing keys -
use
%
as profile name to disable reading from any profile -
The new function
elektraArrayDecName
:int elektraArrayDecName (Key * key);
decreases the index of an array element by one. It can be used to reverse the effect of
elektraArrayIncName
,
thanks to René Schwaiger
Documentation
We improved the documentation in the following ways:
- We renamed our beginner friendly issues to "good first issue" as recommended by GitHub.
- In many parts of the documentation we already switched to American spelling
thanks to René Schwaiger - Added more automatic spelling corrections
thanks to René Schwaiger - Fixed many spelling mistakes
thanks to René Schwaiger - We extended the ReadMe of the
jni
plugin. The ReadMe now also contains information about the Java prerequisites of thejni
plugin on Debian Stretch. - Improved notes about testing
thanks to Thomas Wahringer - qt-gui: give hints which package to install
- The build phrases
jenkins build all please
andjenkins build doc please
were documented
thanks to René Schwaiger - Documentation for libelektra-invoke was added
Compatibility
As always, the ABI and API of kdb.h is fully compatible, i.e. programs
compiled against an older 0.8 version of Elektra will continue to work
(ABI) and you will be able to recompile programs without errors (API).
All unit tests of 0.8.20 run successfully with Elektra 0.8.21.
There are, however, some additions and changes in rarely used interfaces:
- added
elektraArrayDecName
andelektraArrayValidateName
in libease - fixed
kdbinvoke.h
interface: make structure private and complete API - fixed
xmlns
andxsi:schemaLocation
to behttps://www.libelektra.org
- the private header file
kdbopmphm.h
got nearly rewritten
Notes for Maintainer
These notes are of interest for people maintaining packages of Elektra:
- We added the following files in this release:
libelektra-dini.so
libelektra-directoryvalue.so
testmod_directoryvalue
- The following plugins are not marked as experimental anymore:
camel
crypto
mini
xerces
yamlcpp
- The binding
intercept-fs
is now marked more clearly as experimental - The
lua
andjni
plugins are again experimental because they do not work with some Lua/Java interpreters.
Notes for Elektra's Developers
These notes are of interest for people developing Elektra:
- From now on release notes are written as part of PRs
- Elektra Initiative is spelled as two words
- At some more places we switched to use the logger, thanks to René Schwaiger
- Shell Recorder got many improvements, see below in Testing.
Please use it. - The plugin's template now adds all placements within backends by default
(must be removed accordingly). - We now warn if plugins do not have any placement.
- Please prefer -log and -debug builds
- The build server now understands the build phrase
jenkins build all please
thanks to René Schwaiger.
Please use it carefully, since it puts our build server under heavy load. - Markdown Shell Recorder Syntax recommended when reporting bugs.
- Elektra's Dockerfile was improved and simplified, thanks to Thomas Wahringer.
- Add more Explanations how to do Fuzz Testing
- Started documenting disabled tests in doc/todo/TESTING
- You now can use
tests/icheck.suppression
to disable already checked API changes. - The (hopefully) last Sourceforge references were removed and a redirection page was added,
thanks to @the-Arioch for reporting.
Testing
- AFL unveiled some crashes in INI code
- fix OCLint problems, thanks to René Schwaiger
- fix ASAN problems, thanks to René Schwaiger
- disabled non-working tests
- Shell recorder
- Benchmark optionally also works with OpenMP, thanks to Kurt Micheli
- The Shell Recorder now uses
kdb-static
orkdb-full
ifkdb
is not available (BUILD_SHARED=OFF
)
Fixes
Many...
Release 0.8.20
0.8.20 Release
- guid: 547d48e2-c044-4a8e-9d32-ca6b6fb914d9
- author: Markus Raab
- pubDate: Thu, 31 Oct 2017 23:08:07 +0200
What is Elektra?
Elektra serves as a universal and secure framework to access
configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
Highlights
This is by far the largest release in Elektra's history.
In 2813 commits, 19 authors changed 1714 files with 92462
insertions(+) and 21532 deletions(-). The highlights are:
- libelektra.org: new website and puppet-libelektra
- plugin+bindings for Haskell and Ruby
- improved shell completion
- new plugins: yamlcpp, camel, mini, date, file, range,
multifile, xerces, ipaddr
libelektra.org
Unfortunately this release was delayed. The reason for the delay is that our
community server (build server, web site,...)
was compromised and we needed to reinstall everything from scratch.
We took advantage of the situation, and reinstalled everything properly
managed by puppet-libelektra.
With puppet-libelektra, you can directly set keys, specifications (validations),
and even mount new configuration files from within Puppet.
Our community server is now completely managed by libelektra.
Thanks to Bernhard Denner, for rescuing us from the difficult situation, especially
for the sprint shortly before the release.
As already already announced in December 2016
we completely reimplemented our website. Now all our websites are available via https.
This release is the first one that includes the source code of the website and its
snippet sharing functionality.
The backend for this snippet sharing website uses Elektra itself: both for its
configuration and for the configuration snippets.
Thanks again to Marvin Mall for the awesome website.
Haskell and Ruby
The Ruby binding, created by Bernhard Denner, was greatly improved and now
includes libtools bindings. It is the first binding that goes beyond Elektra's
main API. Bernhard Denner also added many
examples that
demonstrate how you can take advantage of the Ruby bindings.
Armin Wurzinger created a new binding
for the functional language Haskell. He also added support for
Haskell plugins.
Due to generic CMake and C Code, plugins can be written
exclusively in Haskell, without any glue code. Several Haskell
examples
already exist. The Haskell support is currently experimental.
Shell Completion
René Schwaiger added completion support for Fish
in this release. We also extended our support for other shells: The new
tool kdb complete
suggests how to complete an Elektra path. It considers
mountpoints and also takes bookmarks into account. Thanks to Armin
Wurzinger for creating this useful utility. Our Zsh and fish completions
already take advantage of kdb complete
. Thanks to Sebastian Bachmann
for taking the time to update the zsh
completions.
New Plugins
See plugin overview
to get an overview of the ever-growing number of plugins.
The yamlcpp plugin
and camel plugin
add first support for YAML.
The mini plugin
is yet another minimal INI plugin.
Thanks to René Schwaiger.
The date plugin
supports validation of dates according to three standards:
RFC2822
ISO8601
POSIX
The multifile plugin
allows us to integrate many configuration files via globbing with
a single mount command. It supports .d
configuration directories
as often used today.
The file plugin
interprets the content of a file as configuration value.
The ipaddr plugin
adds support for IP address validation on systems that do not
support getaddrinfo
.
Thanks to Thomas Waser for creating these useful plugins.
The xerces plugin
supplants the xmltool plugin
and allows us to use XML files not following a specific schemata.
Attributes are mapped to Elektra's metadata, multiple keys with the
same names are mapped to arrays.
Thanks to Armin Wurzinger.
Documentation
The documentation was greatly improved within this release.
- Added "Hello, Elektra" and logging tutorial,
thanks to René Schwaiger - extended FAQ
- Christoph Weber (@krit0n) improved some tutorials
- options are passed to PDFLaTeX compiler,
thanks to René Schwaiger - small fixes, thanks to Dominik Hofer
- fix many spelling mistakes, use American english, fix formatting,
fix+add links, unify title style, fix code blocks, add titles
and fix the PDF manual
a big thanks to René Schwaiger
Features
We added even more functionality, which could not make it
to the highlights:
- DBUS support for qt-gui (listening to configuration changes):
qt-gui gets a viewer-mode where configuration settings are immediately updated
via DBus notifications, thanks to Raffael Pancheri
With the new qt-gui and newer qt releases (~5.7) the qtquick experience is much smoother,
for example, the tree view does not collapse on syncs anymore. - Armin Wurzinger greatly improved the JNA binding.
The build system now uses Maven to build them. Armin also added Doxygen documentation
and a script
to test the JNA binding using Randoop. - The improved curlget plugin,
is now able to upload configuration files,
thanks to Thomas Waser and Peter Nirschl (CMake fixes). - New command
kdb rmmeta
, thanks to Bernhard Denner - crypto plugin and fcrypt plugin
- The configuration option
gpg/key
was renamed toencrypt/key
- The plugins now make sure that you configured them properly by
validating key IDs - thanks to Peter Nirschl
- The configuration option
- fcrypt plugin:
- The plugin now list available GPG keys when config is missing
- You can now specify signatures via the configuration option
sign/key
- New text mode, enabled by default (disable by setting
fcrypt/textmode
to0
) - New option
fcrypt/tmpdir
allows you to specify the output directory ofgpg
- If you want to learn how to use the plugin please check out our new ASCII cast
- thanks to Peter Nirschl
- Thomas Waser added useful scripts:
- mount-list-all-files
to list all mounted files. - mountpoint-info
to provide more info about mountpoints. - stash
to stash away Elektra's configuration, to be restored usingrestore
. - backup
to backup Elektra's configuration. - restore
to restore a backup or stash. - check-env-dep
allows users to check if environment has influence on configuration settings. - change-resolver-symlink
allows users to change the default resolver. - change-storage-symlink
allows users to change the default storage.
- mount-list-all-files
- limit min/max depth for
kdb ls
(-mM
), thanks to Armin Wurzinger. - conditionals: allow multiple assigns and conditions
- base64 also works as filter for binary data (not just encrypted data),
thanks to René Schwaiger - csvstorage plugin:
compatibility with RFC 4180, thanks to Thomas Waser - gitresolver plugin:
improvements and update of libgit version, thanks to Thomas Waser - curlget plugin:
also allow uploading of configuration files, thanks to Thomas Waser
Compatibility
As always, the ABI and API of kdb.h is fully compatible, i.e. programs
compiled against an older 0.8 version of Elektra will continue to work
(ABI) and you will be able to recompile programs without errors (API).
We added explicit
to some C++ constructors in libtools and internally moved
some typedefs. ModulesPluginDatabase now has protected members (instead
of private). This might break code in special cases, but should not affect binary
compatibility. As always we tested for binary compatibility.
This time we had to revert some changes to keep libelektra-tools
ABI compatible.
Furthermore:
Website Release
- guid: 102b84a3-c41e-485c-8fe2-f12a24b3fbfd
- author: Marvin Mall
- pubDate: Thu, 22 Dec 2016 17:46:19 +0100
- shortDesc: introduces new Elektra website with snippet sharing
Highlight
- Release of new Elektra website with an integrated service for
sharing of configuration snippets. - The website also supports conversion between different
configuration formats. - Website structures documentation and news sections in a new way.
Introduction
With Elektra developing into a more and more reliable as well as
popular system to manage system configurations, the demand for a
better public appearance increases as well. For this reason, we
are happy to be able to announce the release of our new
website!
The new website does not only give us a chance to better present
ourselves to the open world, it also enables us to structure our
project documentation better. We hope that this will make it easier
for our users to get started with Elektra and all of its awesome
features!
Besides the documentation, the website does also include a database
that can be used to share, search, download and convert configuration
snippets in various formats. We hope that this tool helps developers
and administrators, but also anyone else to simplify their
configuration processes when they have to look for a specific
configuration snippet. Btw. with snippet we mean that you can
also share parts of configuration files that you find particular
useful!
But sharing of snippets does not only help other users, it can help
yourself as well because you can search for them easier. You also
have access to the snippets in various formats at any time, allowing
you to use them across multiple system by mounting them with the
curlget resolver!
The Website
The website was written by Marvin Mall in the course of his
bachelor thesis
as part of the front-end he developed for his snippet sharing service.
His main goals were to create a proper appearance for Elektra, but
also to create a platform that promotes his service. We think that
this worked out quite well by connecting the website with the service
the way it was done.
Documentation
An important aspect of the new website was to make existing documentation
more transparent and structured. A lot of documentation files have been
changed to achieve this goal and an equal amount of effort was put into
writing a system that decouples the documentation structure on the
website from the structure used within the Elektra repository.
The tutorials section was partially reworked to make the first steps
together with Elektra easier for our users. Clearly the effort put into
the tutorials is worth it. Thanks to Erik Schnetter for the valuable
feedback where improvements are needed and Christoph Weber for (re)writing
the tutorials!
We should note -- as always in software -- that the structure on the website
is not final yet and will definitely develop over time, especially the
bindings and libraries sections will get some more attention.
If you are interested in the techniques we use to structure our files,
you can have a look at the
rest-frontend readme.
The website is already the fourth view of our markdown pages!
The others are man pages, doxygen, and github.
Homepage & News
Besides the documentation we also wanted a place to properly present
ourselves and our news around Elektra. For this reason we created a new
home page which shall give an overview of what Elektra is and can do.
Additionally to that, we also added a news section to keep you better
up-to-date!
We hope that you enjoy our new appearance as much as we do!
Snippet Sharing
Another important part of the website and also without doubt the part
that took most effort to create, is the service that allows for sharing
of configuration snippets. It is run by a REST service fully built with
the help of CppCMS on basis of Elektra as
data store. All data concerning snippets and user accounts is stored
in Elektra's key database (of course with password being properly hashed).
The service allows you to paste configuration snippets in various (supported)
formats and to tag, describe and name them. This in return allows you to
search snippets by keywords and to download them -- even in other formats than
the format used for uploading.
Clearly the service is meant to be driven by its users. Therefore we ask
you to share your own configuration snippets, maybe they can be of help, e.g.,
be a time saver for someone else!
Snippets shared with the service are
BSD licensed.
The snippets can also be downloaded directly as bundle from a separate
GitHub repository.
As soon as a snippet is added, changed or deleted on the website, a job
that updates the repository is triggered. So you can expect the repository
to be always up-to-date.
NoScript
The website is fully written with the help of AngularJS and is therefore
heavily based on JavaScript. This should be no issue though as the
website does only use resources that can be found in the official Elektra
repository:
- So in case you cannot or do not want to use JavaScript, you
can find all resources also here. - If you are only worried about executed untrusted JavaScript,
you can study and improve the
Web Frontend,
which builds the website.
Based on this, we hope you disableNoScript
for our page
so that you are able to share snippets!
Domains
All Elektra Domains directly hosted by us are now only served by https
.
The former http
sites are only redirects to https
. This might cause
trouble with some software, e.g., update /etc/apt/sources.list
:
deb [trusted=yes] https://build.libelektra.org/debian/ wheezy main
deb-src [trusted=yes] https://build.libelektra.org/debian/ wheezy main
The build Server is no longer reachable at port 8080, but now only directly at
https://build.libelektra.org/.
The new RestApi serves as backend
for the website. For the docu, simply visit the site with your browser.
While most libelektra.org
now point to the new website, you can still
directly go to github and also to the
bug tracker.
The old Wordpress installation was shut down because of security concerns.
Feedback
At this point there is not much more to say about the new website except for:
Feel free to explore it!
We greatly appreciate all feedback, be it for the website, the snippet sharing
service or other parts of the Elektra project. We always have an open ear
for suggestions and we also like to help with technical issues, simply
leave us a note on github!
Stay tuned!
Subscribe to the reimplemented
RSS feed
to always get the release notifications.
For any questions and comments, please contact the
mailing list,
use the issue tracker on github
or write an email to elektra@markus-raab.org.
For issues or feedback concerning the website, you can also
contact us at website@libelektra.org.
For more information, see https://libelektra.org
Best regards,
Marvin & Markus
0.8.19 Release
- guid: 8e05231a-4f3d-488b-8dc2-5f0d5c474c39
- author: Markus Raab
- pubDate: Tue, 22 Nov 2016 22:04:59 +0100
What is Elektra?
Elektra solves a non-trivial issue: how to abstract configuration
in a way that software can be integrated and reconfiguration can
be automated. Elektra solves this problem in a holistic way.
Read why Elektra
for an explanation of why such a solution is necessary. It can be seen as a
virtual file system
for configuration files.
Highlights
- more tutorials and getting started guides
- new Ruby bindings
- cleanup of core (only 124K for main library on Debian/amd64)
More Tutorials
Elektra already has an open and welcoming environment, with many
interesting discussions. It is our interest that we keep it
that way. To make this a bit more formal we added a code of
conduct.
But without good introductions, it is easy to get lost in such
a large initiative like Elektra. Thus we focused on writing
great tutorials for this release!
- We wrote an overview readme
- We wrote new tutorials about mounting
and validation
(thanks to Christoph Weber) - We wrote a readme to shell recorder transpiler
which allows us to execute tutorials and verify that the examples in
them work. (thanks to Thomas Waser) - Lua and
Python
plugins got tutorials and better explanations!
(Thanks to Marvin Mall) - The doxygen docu now also
uses links to directories, thanks to Kurt Micheli!
Thanks to Armin Wurzinger for pointing to areas of improvement.
A big thanks to Marvin Mall, Kurt Micheli, Christoph Weber and Thomas Waser!
If you like the tutorials, we would love to read from you.
Please feel free to start a discussion or ask a
question.
We also added a
FAQ
and updated
CONTRIBUTING
Ruby Bindings
We now provide Ruby bindings for Elektra. The bindings are based on the
C++ bindings and are generated by SWIG. A strong focus was put on a good
integration with standard Ruby features and conventions, such as naming
conventions, predicates, key and meta data iteration...
A short introduction
shows some basic usage scenarios. More detailed examples can be found in the
examples directory.
A big thanks to Bernhard Denner!
Cleanup of Core
Following methods were hidden (static
) or removed:
mount*
methodstrie*
methodsbackend*
split*
keyGetParentNameSize
keyGetParentName
These are dozens of methods and it was required to adapt
the unit tests to work with the hidden methods.
A big thanks to Kurt Micheli!
Usability
- Improved many error messages
- spelling
- be more friendly to the user
- capitalization
- mention
sudo !!
kdb set
: do not print what was not donekdb editor
handles non-modified files (will not do anything)- Be more chatty about what
kdb
does, can be disabled with-q
or
/sw/elektra/kdb/#0/current/quiet
. - Furthermore,
-v
now tells even more details (e.g.kdb-import
outputs
the key about to import)
Plugins
New
- c plugin generates C code that represents
configuration. This is useful for unit tests or if you need to have hard-coded
fallback configuration in your C application. - base64 plugin allows you to encode
binary data. This is especially handy in combination with the
crypto plugin
to avoid problems with non-printable characters in configuration files.
(Thanks to Peter Nirschl) - fcrypt plugin allows you to
fully encrypt configuration files. They are only decrypted when applications
access them. (Thanks to Peter Nirschl) - required plugin rejects
every key that is not required by an application. - simple spec lang allows you
to define metadata for enum
and required in a more compact way.
Major Enhancements
- simpleini got a configurable
format in which it will read and write configuration files. For example, one
can useformat=% -> %
to havekey -> value
. - enum got support for multi-enums,
i.e., multiple separated values within one value. The error reporting was improved,
too. (Thanks to Thomas Waser) - glob accepts a list of named flags
instead of an integer value and aborts matching after first hit.
(Thanks to Felix Berlakovich) - hosts now only accepts
ipv4
and
ipv6
keys.
(Thanks to Felix Berlakovich)
Development
In the perpetual effort to improve software quality, we made several improvements:
(This information is mainly intended for Elektra's developers.)
- A new logger encourages developers to write more comments (
ELEKTRA_LOG
) ELEKTRA_ASSERT
prints better messages on failure and does not need&&
trick.- get rid of previous
VERBOSE
macro at many places. - Many assertions were added in the low-level helpers (memory management)
- Using the assertions we fixed some undefined behavior.
(Thanks to Thomas Waser) - added new
configure-debian-debug
andconfigure-debian-log
helper scripts - The build server now checks if builds with active logger and debugging
work correctly. - Improved Coding Style in crypto_botan (thanks to Peter Nirschl)
- add
external-links.txt
tooutputs
(The file is generated in the build directory and contains
all external-links. To validate them, use./scripts/link-checker
)
(Thanks to Kurt Micheli) markdownlinkconverter
handles directories correctly (usingstat
).
(Thanks to Kurt Micheli)- Fixed compiler warning caused by libxml2 (different behavior since 2.9.4),
thanks to René Schwaiger - added often used links in main README
- Improve documentation about failing test cases and what to do about it.
- added decisions about
plugin_variants
andarray
.
(Thanks to Marvin Mall) - Rename to metadata, metakey, mountpoint
(Thanks to Peter Nirschl) - std::ios_base::showbase can be used to output metadata when streaming keys (C++)
- New
infos/status
:readonly
,writeonly
,limited
(Thanks to Marvin Mall) - The tool
update-infos-status
ordersinfos/status
and allows devs to easily add/rem
entries. (Thanks to Kurt Micheli) - Automatic setting of
infos/status
:nodoc
,nodep
,unittest
,memleak
,configurable
(Thanks to Kurt Micheli) - Improve
create_lib_symlink
, addPLUGIN
argument
and make it useful also for other library symlinks. - New markdown style applied to most markdown files.
(Thanks to Marvin Mall) - Tracer is now disabled, even for
ENABLE_DEBUG
.
(Thanks to Marvin Mall) - Updated SECURITY document
- Macro naming convention
ELEKTRA_
, addedkdbmacros.h
ENABLE_DEBUG
also works withclang
andENABLE_ASAN
now allows devs
to additionally enable sanitizers.
Thanks to Gabriel Rauter.
Compatibility
As always, the ABI and API of kdb.h is fully compatible, i.e. programs
compiled against an older 0.8 version of Elektra will continue to work
(ABI) and you will be able to recompile programs without errors (API).
It is now possible to enquiry which plugins provide a specific format.
This needed changes in libtools, which got a new major revision.
Changes in the plugin's contract are fully compatible:
You can now use storage/ini
instead of storage ini
in infos/provides
which gives you the information that ini
is a storage format (and not
anything else the plugin might provide). For compatibility reasons,
the build system still adds storage ini
even if only storage/ini
is specified.
That means that kdb mount file.json /examples/json json
still will find
json
plugins even if they are not called json
but
yajl.
Another breaking change in libtools
is that appendNamespace
was renamed
to prependNamespace
.
Error messages changed a bit, so if you tried to parse them, make sure
to make the e
of error case-insensitive ([eE]
).
In the C++ binding, rewindMeta
is now const
and some methods
to check if a key is in a namespace were added.
The intercept libraries were moved to a common
folder.
They can now be included or excluded like other BINDINGS
.
For consistency reasons the libraries were also renamed
(libelektraintercept-fs.so
and libelektraintercept-env.so.0
),
but symlinks allow you to link against their old names
(lib/libelektraintercept.so
and lib/libelektragetenv.so.0
).
Package Maintainers
This information is intended for package maintainers.
- GI Bindings were removed from
BINDINGS=ALL
.
It is recommended to useSWIG
bindings instead, which
will be added withALL
. - Intercept libraries are part of
BINDINGS
.
They will be added on glibc systems whereBINDINGS=ALL
is used. - Documentation in textfiles is now ...
0.8.18 Release
- guid: 190576e0-9fef-486e-b8da-c4e75be08329
- author: Markus Raab
- pubDate: Fri, 16 Sep 2016 23:31:27 +0200
What is Elektra?
Elektra serves as a universal and secure framework to access configuration
parameters in a global, hierarchical key database.
For a small demo see here:
Highlights
- Intercept open syscalls which allows Elektra to dynamically
generate config files from Elektra's database - Experimental version of cryptographic plugins
- A new zsh completion file (next to the bash completion file)
- Gitresolver allows to directly read and write config files
from git instead of files present in the file system. - Survey completed successfully (and debts paid), we are now
preparing raw data.
Crypto Plugin
Gpg is now used to decrypt a master password, which is used
by the individual crypto backends. So all necessary parts
for encryption of decryption of individual keys is present.
Furthermore, a new botan backend
was implemented.
Thanks to Peter Nirschl.
Open Interception
When Elektra directly modifies config files which are on the disc,
and applications read the config files without Elektra, Elektra has
no control over the access, e.g. we cannot dynamically calculate
values. To avoid this, we wrote a library that
intercepts the open
-call.
Together with the mozprefs
plugin, we got control over the configuration
of Firefox and can dynamically change config values with all possibilities
Elektra provides.
For easy setup, we implemented the script configure-firefox
.
Thanks to Thomas Waser.
Resolver
Resolvers in Elektra are the code that are responsible to determine where
content should be read from and stored to. They are independent of the
actual configuration file syntax.
The gitresolver
allows you to get/store config data in git.
The blockresolver
allows Elektra to take control of parts of the configuration
file. This is useful for config files such as vim or zsh, which contain
program code. The plugin allows you to split config files with special markers
into parts containing code and others controlled by Elektra.
zsh completion
Added zsh completion file, and a script (kdb install-sh-completion
)
that installs bash+zsh completion when the default installation places
do not work (e.g. for Mac OS X).
Thanks to Sebastian Bachmann.
Documentation
- fix
kdb-import
man page, thanks to Kurt Micheli - mark
keyIsSystem
/keyIsUser
as internal - fix doxygen reference to example
- better document that
global-mount
orgmount
will overwrite
previously mounted global plugins - fix spelling mistake, thanks to René Schwaiger
- Wrote tutorial how to use Elektra-python bindings,
thanks to Ulrike Schäfer
Quality
- shell recorder test cases now run during
make test
, thanks to Kurt
Micheli and René Schwaiger (Warning: might remove present keys
when it conflicts with their mountpoints) - find-tools now is pep and pyflakes happy, thanks to Kurt Micheli
- fix bashism, thanks to Thomas Waser and Kurt Micheli
- better error message for conditionals plugin, thanks to Thomas Waser
- better error message for augeas plugin, thanks to Felix Berlakovich
- Many compilation warnings fixed, thanks to Gabriel Rauter, Thomas Waser
- GSettings: fix double free, thanks to Gabriel Rauter
- Fix external links and implement an external link checker,
thanks to Kurt Micheli - Fix openwrt/musl warnings with wrong printf format, thanks to
Thomas Waser - Fix NODEP metadata, allows you to build all plugins that do not
have dependencies.
Compatibility
As always, the ABI and API of kdb.h is fully compatible, i.e. programs
compiled against an older 0.8 version of Elektra will continue to work
(ABI) and you will be able to recompile programs without errors (API).
Libtools
Libtools got a new major version (SOVERSION 0 -> 1):
- backend/plugin configs are now validated by plugins (needed
by gpg plugin, which checks if wrong key IDs are supplied during mount) - resolveRecommends was never implemented and was now removed
Plugins
The plugins conditionals and mathcheck are incompatible in some cases
because of changes in syntax.
Proposal
New API: keyRel2
which differs from keyRel
by allowing you to
specify which relation should be checked.
Development
- github descriptions+workflow (displayed by github when creating
PRs and issues) - new trigger phases for github, see
doc/GIT
thanks to Mihael Pranjić - valgrind suppressions are great again, thanks to Peter Nirschl
- Plugins get a new namespace
internal
which can be used for meta-data
that is not relevant for other plugins. - kdberrors.h is only generated once, which allows us to use other build
systems, thanks to René Schwaiger INCLUDE_SYSTEM_DIRECTORIES
in add_plugin allows you to add a include
path where warnings are suppressed (useful for boost).infos/provides
now allows multiple entries
Packaging
- Plugin-provider
CRYPTO
can be used to enable/disable all crypto
plugin variants (not enabled by default because its experimental). - Config option
ENABLE_OPTIMIZATIONS
, enable by default: trade more
memory for speed (can be turned off on embedded systems) INSTALL_SYSTEM_FILES
is now off by default on Mac OS X.- bash-completion is installed to where pkg-config tells us,
thanks to Gabriel Rauter
(fallback is now/usr/share/bash-completion/completions/kdb
)
was/etc/bash_completion.d/kdb
(removed) - zsh is now installed to
/usr/share/zsh/vendor-completions/_kdb
(except for Darwin, where/usr/local/share/zsh/site-functions
is used) - removed
/etc/profile.d/kdb.sh
: the scriptelektraenv.sh
was
removed (and is no longer installed), superseded byelektrify-getenv
- added scripts install-sh-completion configure-firefox elektrify-open
- added plugins libelektra-blockresolver.so libelektra-boolean.so
libelektra-crypto_botan.so libelektra-crypto_openssl.so
libelektra-desktop.so libelektra-mozprefs.so libelektra-passwd.so - added tests testmod_blockresolver testmod_boolean
testmod_crypto_botan testmod_crypto
gcrypt testmod_crypto_openssl testmod_mozprefs testmod_passwd
test_opmphm_vheap test_opmphm_vstack - added test data blockresolver mozprefs passwd
Other
- Conditionals and mathcheck plugins got support to specify relative
keys, thanks to Thomas Waser kdb
command-list: commands are written in bold- GSettings backend can be build standalone, thanks to Gabriel Rauter
- first data structures for order preserving minimal perfect hash map,
thanks to Kurt Micheli - added a new passwd plugin, thanks to Thomas Waser
- boolean
plugin to normalize boolean values, thanks to Thomas Waser - desktop
plugin to detect which desktop currently is running (supports kde,
gnome, tde, unity or any other XDG conformant desktop) doc/paper
contains some info for joss
Get It!
You can download the release from
here
and also here on github
name: elektra-0.8.18.tar.gz
size: 2582183
md5sum: 62fe0fbf9ee57ffaa58a982f602f596a
sha1: 743484e16b102a00cd58956a49f0c558939d56a8
sha256: 9ee65895ba5cba6736c13c264637664c1410b25f4aaaeac8f1f83712ff93d53b
This release tarball now is also available
signed by me using gpg
already built API-Docu can be found here
Stay tuned!
Subscribe to the
RSS feed
to always get the release notifications.
For any questions and comments, please contact the
Mailing List
the issue tracker on github
or by email elektra@markus-raab.org.
For more information, see http://libelektra.org
Best regards,
Markus
0.8.17 Release
0.8.16 Release
In case you do not yet know about it, here is an abstract about Elektra:
Elektra serves as a universal and secure framework to access configuration
parameters in a global, hierarchical key database.
Elektra provides a mature, consistent and easily comprehensible API.
Its modularity effectively avoids code duplication across applications
and tools regarding configuration tasks. Elektra abstracts from
cross-platform-related issues and allows applications to be aware of other
applications' configurations, leveraging easy application integration.
Elektra consists of three parts:
- LibElektra is a modular configuration access toolkit to
construct and integrate applications into a global,
hierarchical key database. The building blocks are:- language bindings (inclusive high-level interfaces)
- GenElektra, the code generator for type-safe bindings
- plugins for configuration access behaviour and validation
- SpecElektra is a configuration specification language
that is easy to use and self-contained in the same key database (i.e.
written in any of the configuration file formats Elektra supports). - Tools on top of LibElektra for administrators, such as CLI tools and GUIs.
The same text as follows is also available
here as html
and
here on github
Highlights
- Elektra now allows applications to support multiple
profiles with a plugin, thus without code modifications in
Elektra applications.
That means a user can select multiple configuration files to use,
even if the application has no explicit support for it.
It completes the cascading feature (level $HOME before /etc), to allows
us also to select different configuration for the same level. - Resolver can now better handle conflicts that happen
when files are removed and others that happen
within a single time tick (resolution of your clock)
and also better handles NFS and older file systems - Default storage and resolver can be changed by symlink.
So no need to recompile Elektra to change the default storage
from INI to dump.
INI now works quite reliable as default plugin and already
used by default by its author Thomas Waser.
Other important features
- shell plugin allows you to execute shell commands on every KDB access
and curlget plugin allows you to download configuration files
from a URL during KDB access. - Improvements in sync/merge of qt-gui with important fix
(Usage of 0.8.15 qt-gui is discouraged) - Add plugin for dpkg database (read-only)
- Assignment for conditionals using
assign/condition
. - Support for multiple and nested statements
- Support for
condition/validsuffix
which allows you to suffix
numbers with signs such as%
or$
.
It does not check if the suffixes are identical. - kdb mount now uses topological sorting to always
find a dependency solution if there is one,
many effort was put in that ordering is as requested, thanks to
Thomas Waser for the topological sorting implementation - Frontend generated by GenElektra now also can reload its
values with taking the correct context into account. - Source is now automatically formatted and formatting is checked on build server
- More flexible CMake syntax for PLUGINS
Plugins
Many new or vastly improved plugins are waiting to be explored.
curlget
The plugin curlget fetches a configuration file from a remote host before
the configuration is being accessed:
kdb mount -R noresolver /tmp/curltest.ini system/curltest ini curlget url="https://raw.githubusercontent.com/ElektraInitiative/libelektra/master/src/plugins/ini/ini/plainini"
kdb ls system/curltest # every get access will redownload the file
Thanks to Thomas Waser!
INI
The INI plugin is still under heavy development and
was again nearly rewritten:
- fixed key is below hacks
- fixed ordering
- custom delimiter
- use meta array for comments
- rewritten ordering
- best effort order
- fixed array support
Thanks to Thomas Waser!
shell
This plugin allows you to executes shell commandos after kdbGet, kdbSet and kdbError (failing kdbSet):
kdb mount /tmp/test.ini system/shelltest ini array= shell 'execute/set=echo set >> /tmp/log,execute/get=echo get >> /tmp/log'
kdb set system/shelltest
cat /tmp/log
Thanks to Thomas Waser!
validation
The validation plugin is not new, but got many new features.
It allows you to match values by a regex and set your own
error messages in case a validation did not match.
Up to now, the regex was given as is to regcomp, which means
that if the regex is contained anywhere in the value, the
value is accepted.
Often this is not what we want, thus Thomas Waser added special
support for icase, word and line validation.
Additionally, flags allow you now to ignore the case or invert
the match. This can be changed for every individual value
or for the whole mountpoint.
Additionally, kdb vset
validation was updated to use the new
metadata and correctly match against the whole value.
Thanks to Thomas Waser!
hosts
Only minor improvements were necessary for the host plugin but
it is quite matured already. The contract was changed so that
ipv6 addresses for ipv4 addresses will be rejected:
# kdb mount --with-recommends /etc/hosts system/hosts hosts
# kdb set system/hosts/ipv4/localhost ::1
The command set failed...
Reason: localhost value: ::1 message: Address family not supported
# kdb set system/hosts/ipv6/localhost ::1
You can also comfortably and safely edit the hosts file
with: kdb editor system/hosts hosts
, then you have the
functionality sudoedit
for the hosts file.
rename
Again not a new plugin, but the plugin was greatly improved
and many test cases were added.
Now you can set upper/lowercase individually for both sides:
- What applications see.
- What the configuration file contains.
For example, if you always want the keys in the configuration file upper case,
but for your application lower case you would use:
$ kdb mount caseconversion.ini /rename ini rename get/case=tolower,set/case=toupper
$ kdb set user/rename/section/key valu
$ cat ~/.config/caseconversion.ini
[SECTION]
KEY = value
Thanks to Thomas Waser!
Resolver
Resolving by ~ as home directory now also for system and spec namespaces,
thanks to Thomas Waser.
Files keep their previous owner, useful when root edits configuration
files of others, thanks to Thomas Waser.
The resolver has many improvements to better detect conflicts.
The lock is now extended longer after the commit and already requested
in the temporary file.
The warnings were improved when getcwd
fails.
Resolver now can correctly handle conflicts with empty files. It can also
better cope with frequent commits of the same binary. Elektra already
reached some limits filesystems have.
Bindings
Java
Marvin Mall improved the Java binding, fixed the appending
of keysets, added lots of documentation, and many unit tests.
C++
Some kind of misusage of vaargs is now detected at compile-time instead
of crashing at runtime.
Generated C++
Value now supports convenience activations.
Values can be used to activate context, no more layers are needed.
Topological sorting makes sure that values are activated in the
correct order, loops are not allowed anymore.
The bool operator<
is now correctly inline (allows to use it in more than
one translation unit)
Documentation
René Schwaiger reworked most of the documentation and
fixed countless spelling mistakes and other problems.
- Peter Nirschl updated the status of the crypto-plugin
and fixed a typo - Daniel Bugl wrote a cascading tutorial
- Daniel Bugl fixed all broken links
- René Schwaiger also drew a new logo with SVG.
It is already used on github as avatar for the organisation. - make all é use the same code point 233.
Testing
- Tests work if the build path contains spaces
- Tests: Fix problems locating memory checker
- remove obsolete TestScript.cmake
Thanks to René Schwaiger
Maintainer
By default now ALL plugins except EXPERIMENTAL are included.
Plugins will be automatically excluded if dependencies are missing.
The PLUGINS syntax was vastly improved. Now many categories can be
intermixed freely and also categories can be used for exclusion.
E.g. to include all plugins without deps,
that provide storage (except yajl) and are maintained, but not include all plugins
that are experimental, you would use:
-DPLUGINS="NODEP;STORAGE;-yajl;MAINTAINED;-EXPERIMENTAL"
Details see /doc/COMPILE.md.
Renamed files:
/usr/include/elektra/merging/kdbmerge.hpp ->
/usr/include/elektra/merging/mergingkdb.hpp
/etc/profile.d/kdb -> /etc/profile.d/kdb.sh
(So that it works on arch linux, thanks to Gabriel Rauter)
removed files:
- /usr/lib/elektra/libelektra-crypto.so
was only necessary because of limitations of the build system and is
now removed. It never had actual functionality, but was only a stub
without a crypto provider selected.
new files:
- /usr/include/kdbease.h
- /usr/lib/elektra4/libelektra-curlget.so*
- /usr/lib/elektra4/libelektra-dpkg.so*
- /usr/lib/elektra4/libelektra-profile.so*
- /usr/lib/elektra4/libelektra-resolver_fm_hpu_b.so
- /usr/lib/elektra4/libelektra-shell.so*
more new files with ALL or EXPERIMENTAL:
- /usr/lib/elektra/libelektra-semlock.so
new tests all in folder /usr/lib/elektra/tool_exec:
testcpp_contextual_update testkdb_conflict test_keyname testmod_curlget
testmod_dpkg testmod_jni testmod_profile testmod_semlock testmod_shell
testtool_mergingkdb
Following Plugins are excluded on specific platforms:
- mathcheck on Intel compiler (reason: failing test cases)
- simpleini on non-glibc systems (rea...
0.8.15 Release
0.8.15 Release
- guid: 1ab4a560-c286-46d2-a058-1a8e7e208fe8
- author: Markus Raab
- pubDate: Tue, 16 Feb 2016 17:47:00 +0100
In case you do not yet know about it, here is an abstract about Elektra:
Elektra serves as a universal and secure framework to access configuration
parameters in a global, hierarchical key database.
Elektra provides a mature, consistent and easily comprehensible API.
Its modularity effectively avoids code duplication across applications
and tools regarding configuration tasks. Elektra abstracts from
cross-platform-related issues and allows applications to be aware of other
applications' configurations, leveraging easy application integration.
Overview
This is one of the largest release up to now. It includes many
user-visible improvements. Some highlights:
- Mounting is vastly improved:
think about Debian's "dpkg" to "apt"-like functionality - In previous releases you could already specify the structure
of the configuration. Now you can also automatically enforce
this property. - We split the shared library
libelektra
into smaller parts.
Now users can link against the parts of the library they need. - As always, the ABI and API is fully forward-compatible.
- The release contains improvements in the
bootstrapping process. - We improved the
ini
,rename
andcrypto
plugins. - The tool
kdb
now supports bookmarks and profiles. - The new tool
kdb editor
allows you to edit KDB configuration in
your favorite text editor. - We are glad of the new packages for Debian, Arch Linux and OpenWRT.
The same text as follows is also available
here as html
and
here on github
Global Mount
Sometimes you simply want some functionality for the whole key database.
For example, you want to enable logging or notification of configuration
changes. In previous versions, you had to change every mountpoint
individually. Even more problematic, every mountpoint created its
individual logs and notifications, without any way for someone to know
if an application has issued its last log/notification.
These problems are now solved by global plugins. The same plugins are
reused for this purpose. Also the mounting works nearly in the same way,
you only have to omit the configuration file and the mountpoint:
kdb global-mount syslog journald dbus
Voilà, from now on every configuration change gets logged to syslog
and journald. Additionally, every application gets notified via dbus.
If you want it more verbose for debugging, you can easily do so by:
kdb global-mount logchange counter
Which gives you detailed information to standard output which keys
were changed/edited/deleted. Additionally, Elektra counts how often
the counter
plugin is invoked.
The underlying work for the global plugins, i.e. hooks in the core
libraries and the list
plugin that allows us to use many plugins
without bloating the core was done by Thomas Waser.
It was already possible in earlier versions of Elektra to specify the
configuration of your program. Until now, this specification could be
mainly used to to generate code as described
here.
This release adds two more interesting options:
- the spec plugin, and
- the spec mount.
Spec Plugin
The most important global plugin that is now newly introduced with this
release (thanks to Thomas Waser) is the spec
plugin. By default it
will be added for every global-mount. So for a new installation make
sure you executed at least once:
kdb global-mount
The spec plugin is a global plugin that copies metadata from the
spec
-namespace to other namespaces. That means, it reads the
specification, and makes sure that the configuration conforms to it. The
actual validation is done by the many validation plugins already present.
Lets start by saying a key is a long and must have at least the
value 10:
kdb setmeta spec/example/longkey check/type long
Then we can create a key in a different namespace and see if the spec
plugin applies the meta-data correctly:
kdb set /example/longkey 25
kdb lsmeta /example/longkey
Should now at least print check/type
.
By itself, this is useful for documentation of keys.
For example, the application developer says:
kdb setmeta spec/example/longkey description "Do not change"
kdb setmeta spec/example/longkey example 30
The user can retrieve this documentation by:
kdb getmeta /example/longkey description
But we want check/type
to be not only a documentation, but also
enforced.
Spec Mount
Using kdb setmeta
extensively and always looking out that all plugins
are mounted correctly is error-prone. So instead, one can directly mount
the plugins as specified. For the example above one simply needs:
kdb setmeta spec/example mountpoint example.ecf
kdb spec-mount /example
Now, when we try to modify /example/longkey
it will be validated:
kdb set /example/longkey a
> Error (#52) [...] long [not] matched [...] a
Based on the present meta-data, the correct plugins (in this case type
because of the metadata check/type
) will be loaded.
We can also create a whole specification file, first mount the
specification and then the mountpoint according the specification, e.g
when we have battery.ini
in the folder $(dirname $(kdb file spec))
with following content:
[]
mountpoint = battery.ini
infos/plugins = ini
[level]
check/enum = 'critical', 'low', 'high', 'full'
Then we can use:
# mount the file itself:
kdb mount battery.ini spec/example/battery ni
# make sure all plugins are present (e.g. enum for check/enum):
kdb spec-mount /example/battery
Now lets verify if it worked:
kdb lsmeta /example/battery/level
# we see it has a check/enum
kdb getmeta /example/battery/level check/enum
# now we know allowed values
kdb set /example/battery/level low
# success, low is ok!
kdb set /example/battery/level wrong
# fails, not one of the allowed values!
The main idea of the spec-mount is: search a plugin for every
specification (meta-data) found in the spec-namespace.
General Mount Improvements
In earlier versions kdb mount
failed when plugin dependencies were
not satisfied. Now dependencies will automatically be fulfilled, e.g.
kdb mount /etc/modules system/modules line
In earlier versions you would have got an error because of the missing
null
plugin. Now it simply adds the needed plugins.
The plugins given in the command-line used to be real plugins. Now also
so called providers are accepted.
To make providers useful we need to actually know which plugin is the
best candidate. To get the information we added a infos/status
clause
in the contract. In this clause the plugin developer adds many details
how well the plugin is tested, reviewed, documented, maintained and so
on. Based on this information, the best suited plugin will be chosen.
For example, you now can use:
kdb mount /etc/security/limits.conf system/limits augeas \
lens=Limits.lns logging
And the best suitable logger will automatically be chosen.
The configuration variable /sw/kdb/current/plugins
now allows
us to pass plugin configuration with the same syntax as the plugin
specification passed on the commandline. A subtle difference is that
thus the shell-splitting of arguments is missing, it is not possible to
include whitespaces in the plugin configuration that way.
Now it is also possible to include the same plugin multiple times and
also give them individual names. This feature is essential for
script-based plugins, e.g. you now might add:
kdb mount file.x /example/mountpoint \
lua#resolver script=resolver.lua \
lua#storage script=storage.lua
Furthermore, kdb mount
now supports recommendations, which can be
enabled with --with-recommends
. E.g. supplied to the mount command
using augeas above, comments will automatically transformed to meta-data
to avoid cluttering of the real configuration.
Library Split
Up to now, Elektra consisted only of a single shared library,
libelektra.so
. Not all symbols in it were relevant to end users, for
example, some were only needed by plugins. Others were only proposed and
not yet part of the stable API. And finally, other symbols were not needed
in some situations, e.g. the plugins do not need the kdb
interface.
Thus, we split libelektra.so
, so that only coherent parts are in the
same library:
libelektra-core.so
only contains theKeySet
data structure and
module loading. Every binary using Elektra should link against it.libelektra-kdb.so
contains the missingKDB
symbols. Together with
thecore
they contain everything declared inkdb.h
.
Michael Zehender plans to have multiple variants oflibelektra-kdb.so
that use different kinds of concurrency.
Headerfile:<kdb.h>
libelektra-ease.so
adds functionality missing incore
to make the
life for C programmers easier.
New headerfile:kdbease.h
libelektra-proposal.so
adds functionality proposed forcore
. It
directly uses internal structures ofcore
, thus they always need to
have exactly the same version.
Headerfile:kdbproposal.h
The source code is now better organized by the introduction of a libs
folder. The explanation of every library can be found in
/src/libs/.
The rationale of the library split is documented
here.
Shortly put, it was needed for further evolution and allowing us to grow
and enhance without gettin...
0.8.14 Release
- guid: 519cbfac-6db5-4594-8a38-dec4c84b134f
- author: Markus Raab
- pubDate: Thu, 19 Nov 2015 17:48:14 +0100
Again we managed to release with many new features and plugins (lua, enum,
list, crypto, csvstorage, conditionals, mathcheck, filecheck, logchange)
many fixes, and especially with a vastly improved polished documentation.
Documentation Initiative
The Documentation Initiative is a huge success and now the documentation
of Elektra is in a state where someone (preferable a linux guru),
never heard of Elektra, still can use Elektra only by reading man pages.
There are now many ways to show a man page:
- on github
- in the API docu
- by using
kdb --help
orkdb help <command>
- by using
man kdb
Help system
Ian Donnelly wrote man pages for all the tools delivered with Elektra.
Additionally, nearly all README.md are now also converted to man pages
and also to Doxygen.
Doxygen Filter
Kurt Micheli did an amazing work with a new doxygen filter.
The filter allows all Elektra markdown pages to be also included
in the doxygen documentation. Thus all technical concepts are now
explained in Markdown pages, this filter is essential.
But even more, the filter also includes all man pages written
for the tools, giving a nice html view for them. (In addition to
the markdown rendering on github).
Enjoy the result.
A big thanks to Kurt Micheli!
Further Docu fixes
- getenv debugging docu was improved
- typo fix: Specify, thanks to Pino Toscano
- Design decisions
Definition of Bool, capabilities and
Publish Subscribe (thanks to Daniel Bugl) - Improve iconv docu
- usage examples for many plugins
- improve README for line plugin (thanks to Ian Donnelly)
- add docu about dependencies for some plugins (thanks to Ian Donnelly)
- create many new links within the documentation
Simplicity
We shifted our goals
a bit: We want to prefer simplicity to flexibility. Not because we
do no like flexibility, but because we think we achieved enough of it.
Currently (and in future) you can use Elektra:
- obviously as primitive key/value storage
- with specifications and dozens of plugins driven by it
- with code generation
- ...
But we cut flexibility regarding:
- namespaces are only useful for configuration (not for arbitrary key/value)
- the semantics of metadata
- mounting functionality
- error code meanings are fixed, if a resolver detects a conflict, our defined
error must be used - of course ABI, API
Qt-gui 0.0.9
Raffael Pancheri again updated his qt-gui to version 0.0.9 (beta)
with important of fixes and improvements:
- Fixes for Qt 5.5
- Handling of merge-conflicts improved
- Avoid rewriting on merge-conflicts
- Allow QML to destroy C++ owned model
- Dialog at startup
- Reduce memory footprint
- add man page
A bit thanks to Raffael Pancheri!
Compatibility
As always, the API and API is fully forward-compatible, i.e. programs
compiled against an older 0.8 versions of Elektra will continue to work.
The behaviour of some plugins, however, changed:
- the INI plugin, the section handling was improved.
- in the NI plugin, the symbol Ni_GetVersion vanished
- in the resolver plugin files of other namespaces which are not
mounted are not resolved anymore
Build System
ENABLE_CXX11 does not exist anymore, it is always on.
We do not care about 199711L compilers anymore, which
makes development easier, without losing any actually
used platform.
Some programs that are only used in-source are not installed
anymore. (by Pino Toscano)
Python and Lua plugins are enabled now in -DPLUGINS=ALL
.
Python3 plugin was renamed to python.
Lua Plugin
Manuel Mausz add a lightweight alternative to the python plugin:
the lua plugin.
In a similar way, someone can write scripts, which are executed on every
access to the
key database.
To mount a lua based filter, you can use:
kdb mount file.ini /lua ini lua script=/path/to/lua/lua_filter.lua
Even though it works well, it is classified as technical preview.
Thanks to Manuel Mausz for this plugin!
Cryptography Plugin
In this technical preview, Peter Nirschl
demonstrates how a plugin
can encrypt Elektra's values. In testcases it is already able to do so,
but for the end user an easy way for key derivation is missing.
A big thanks to Peter Nirschl!
INI Plugin
The INI plugin got a near rewrite. Now it handles many situations better,
has many more options and features, including:
- preserving the order
- using keys as meta-data
- many new testcases
- fix escaping
Thanks to Thomas Waser for this work!
Mathcheck plugin
This plugin allows you to check and even calculate keys from
other keys using an polish prefix notation.
It supports the typical operations + - / *
and
<, <=, ==, !=, =>, >, :=
. To mount, check and
calculate values, one would use:
kdb mount mathcheck.dump /example/mathcheck dump mathcheck
kdb setmeta user/example/mathcheck/k check/math "== + a b"
kdb setmeta user/example/mathcheck/k check/math ":= + a b"
For details see the documentation.
Thanks to Thomas Waser for this important plugin!
List Plugin
Currently, Elektra has some limitations on how many plugins can be
added to certain
placement.
Because of the rapidly growing number of plugins, some combinations
are not possible anymore.
This plugin tackles the issue, by delegating the work to an arbitrary
number of subplugins. As a bonus, it works lazily and thus might avoid
the loading of some plugins all together.
Thanks to Thomas Waser for this plugin!
Conditionals
Brings if
inside Elektra. It lets you check if some keys have
the values they should have.
kdb mount conditionals.dump /tmount/conditionals conditionals dump
kdb set user/tmount/conditionals/fkey 3.0
kdb set user/tmount/conditionals/hkey hello
kdb setmeta user/tmount/conditionals/key check/condition "(hkey == 'hello') ? (fkey == '3.0')" # success
kdb setmeta user/tmount/conditionals/key check/condition "(hkey == 'hello') ? (fkey == '5.0')" # fail
For details see the documentation.
Again, thanks to Thomas Waser for this plugin!
Csvstorage Plugin
You can now mount csv-files. To mount test.csv
simply use:
kdb mount test.csv /csv csvstorage
There are many options, e.g. changing the delimiter, use header
for the key names or predefine how the columns should be named.
For details see the documentation.
Thanks to Thomas Waser!
Filecheck plugin
This plugin lets you validate lineendings, encodings, null, bom and
unprintable characters.
The also new plugin lineendings is already superseded by the filecheck
plugin.
Thanks to Thomas Waser!
Enum plugin
The Enum plugin checks string values of Keys by comparing it against a
list of valid values.
Thanks to Thomas Waser!
Elektrify Machinekit.io
We are proud that Machinekit starts using
Elektra.
Alexander Rössler is digging into all details, and already enhanced
the DBUS Plugin for their needs. DBus now can emit a message for every
changed key.
A big thanks to Alexander Rössler!
Bugfixes
- libgetenv did not reinitalized its mutexes on forks
- add needSync also in C++ binding
- handle removed current working directories (fallback to /)
- avoid segfault on missing version keys (when doing
kdb rm system/elektra/version
) - fix glob plugin + kdb mount with
config/needs usage - fix different handling of strerror_r in Mac OS X (thanks to Daniel Bugl)
- do not change the users parentKey in early-error scenarios
- do not try to interpret some binary keys as function keys
Other Gems
- getenv example: do not link to elektra/elektratools,
thanks to Pino Toscano - fixes in other examples
- avoid useless UTF-8 chars and fix typos, thanks to Kurt Micheli
- fix kdb check return code (open fail)
- pdf now also allows UTF-8 characters if added to
elektraSpecialCharacters.sty, thanks to Kurt Micheli - libgetenv: lookup also used for layers
- handle wrong arguments of metals better, thanks to Ian Donnelly
- Improvement of error messages in the augeas plugin
kdb set
avoids fetching unnecessary namespaces- verbose unmount
- logchange: small demonstration plugin to show how to log added,
removed and changed keys - setmeta will use spec as default
- libtools: avoid useless getName, add verbosity flag for findBackend
- Improve iconv error messages
- That mount needs permissions to /etc should now really be obvious
with new error message - many fixes in the template for new plugins
Get It!
You can download the release from
here
and now also here on github
- name: elektra-0.8.14.tar.gz
- size: 2252008
- md5sum: a87cd3845e590bf413959dfd555e3704
- sha1: 2360603c347ae3f3a28e827eb9260ff0b9881e46
- sha256: af681a38c9c2921b8d249f98ab851c3d51371735471d8a1f833a224c4446fe2e
This release tarball now is also available
signed by me using gpg
already built API-Docu can be found [here](http://doc.libelektra.org/api/0.8.14/html...