Skip to content

Releases: ElektraInitiative/libelektra

0.8.22 Release

27 Feb 20:13
Compare
Choose a tag to compare

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:

asciicast

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.

Elektra

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. with kdb 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 from dump is easier (especially compared with INI) because the dump 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 key binary for such values automatically.

Documentation

We improved the documentation in the following ways:

Read more

Release 0.8.21

22 Dec 12:07
Compare
Choose a tag to compare

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 and false.
  • 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:

asciicast

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 the dump
    format, unless the dump 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 the jni 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 and jenkins 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 and elektraArrayValidateName in libease
  • fixed kdbinvoke.h interface: make structure private and complete API
  • fixed xmlns and xsi:schemaLocation to be https://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 and jni 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 or kdb-full if kdb is not available (BUILD_SHARED=OFF)

Fixes

Many...

Read more

Release 0.8.20

31 Oct 23:07
Compare
Choose a tag to compare

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 to encrypt/key
    • The plugins now make sure that you configured them properly by
      validating key IDs
    • thanks to Peter Nirschl
  • 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 to 0)
    • New option fcrypt/tmpdir allows you to specify the output directory of gpg
    • 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:
  • 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:

  • scripts now work on macOS (readlink and sed),
    thanks to Armin Wurzinger and René Schwaiger
  • generalized error #60, "invalid line encountered"
  • added new errors #164 - #187
  • added private headerfiles kdbglobal.h, `...
Read more

Website Release

22 Dec 17:34
Compare
Choose a tag to compare
  • 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

  1. Release of new Elektra website with an integrated service for
    sharing of configuration snippets.
  2. The website also supports conversion between different
    configuration formats.
  3. 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:

  1. So in case you cannot or do not want to use JavaScript, you
    can find all resources also here.
  2. 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 disable NoScript 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.

Permalink to this NEWS entry

For more information, see https://libelektra.org

Best regards,
Marvin & Markus

0.8.19 Release

22 Nov 21:35
Compare
Choose a tag to compare
  • 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* methods
  • trie* methods
  • backend*
  • 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 done
  • kdb 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 use format=% -> % to have key -> 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 and configure-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 to outputs
    (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 (using stat).
    (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
    and array.
    (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 orders infos/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, add PLUGIN 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_, added kdbmacros.h
  • ENABLE_DEBUG also works with clang and ENABLE_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 use SWIG bindings instead, which
    will be added with ALL.
  • Intercept libraries are part of BINDINGS.
    They will be added on glibc systems where BINDINGS=ALL is used.
  • Documentation in textfiles is now ...
Read more

0.8.18 Release

16 Sep 23:39
Compare
Choose a tag to compare
  • 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:

asciicast

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.

See here

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.

See here

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 or gmount 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 script elektraenv.sh was
    removed (and is no longer installed), superseded by elektrify-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.

Permalink to this NEWS entry

For more information, see http://libelektra.org

Best regards,
Markus

0.8.17 Release

0.8.16 Release

29 Apr 15:28
Compare
Choose a tag to compare

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:

  1. 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
  2. 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).
  3. Tools on top of LibElektra for administrators, such as CLI tools and GUIs.

See http://libelektra.org

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:

  1. What applications see.
  2. 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...
Read more

0.8.15 Release

17 Feb 07:43
Compare
Choose a tag to compare

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.

See http://libelektra.org

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 and crypto 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:

  1. the spec plugin, and
  2. 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 the KeySet data structure and
    module loading. Every binary using Elektra should link against it.
  • libelektra-kdb.so contains the missing KDB symbols. Together with
    the core they contain everything declared in kdb.h.
    Michael Zehender plans to have multiple variants of libelektra-kdb.so
    that use different kinds of concurrency.
    Headerfile: <kdb.h>
  • libelektra-ease.so adds functionality missing in core to make the
    life for C programmers easier.
    New headerfile: kdbease.h
  • libelektra-proposal.so adds functionality proposed for core. It
    directly uses internal structures of core, 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...

Read more

0.8.14 Release

21 Nov 07:46
Compare
Choose a tag to compare
  • 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:

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...

Read more