Recent Releases of Elektra

Elektra - 0.10.0 Release

  • guid: e0a2b6f4-b18d-47d8-b642-e27907255666
  • author: Tomislav Makar
  • pubDate: Tue, 23 May 2023 13:33:52 +0200
  • shortDesc: New Changetracking API, New spec plugin, Go into repo

We are proud to release Elektra 0.10.0.

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.

You can also read the news on our website.

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:

sh docker pull elektra/elektra docker run -it elektra/elektra

Highlights

  • New Changetracking API
  • New spec plugin
  • Go into repo

New Changetracking API

We've created a new KeySet diffing and changetracking API for both internal and external use. Several plugins already had their own implementations to detect changes made to the key database. Every implementation did something different and results varied. With this new release every plugin now uses the same shared implementation, with identical results!

To try the amazing new API yourself, take a look at the tutorial.

Elektra's internal code now also uses this new API to detect which backends to execute. This can lead to better performance in I/O bound cases, where previously certain keys would have been detected as changed when they weren't.

We ran some memory benchmarks and found a slightly increased memory usage on a stock instance of Elektra. If you're using many plugins that do changetracking, the overhead will decrease.

| Number of Keys | Old Implementation (bytes) | New Implementation (bytes) | Memory Increase (%) | | -------------: | -------------------------: | -------------------------: | ------------------: | | 50 | 225792 bytes | 229580 bytes | 1,68 % | | 500 | 383180 bytes | 411238 bytes | 7,32 % | | 5000 | 1992294 bytes | 2306867 bytes | 15,79 % | | 50000 | 18245222 bytes | 21181235 bytes | 16,09 % | | 500000 | 178782208 bytes | 207827763 bytes | 16,25 % |

Apart from memory benchmark, we also ran some performance benchmarks. As the benchmark is heavily I/O bound, the biggest bottleneck is the I/O performance of the system. We could not reliably detect a real, reliably reproducible performance impact measured in seconds. Alternatively, we have measured executed instructions. There seems to be about 10 % overhead, but we don't expect it to be noticeable in real-world workloads.

| Number of Keys | Old Implementation (Instructions) | New Implementation (Instructions) | Performance Overhead (%) | | -------------: | --------------------------------: | --------------------------------: | -----------------------: | | 50 | 18910449 | 19583227 | 3,56 % | | 500 | 63001911 | 68948096 | 9,44 % | | 5000 | 526801917 | 586344210 | 11,30 % | | 50000 | 5730261920 | 6340292587 | 10,65 % | | 500000 | 104614374974 | 110702166761 | 5,82 % |

New spec plugin

The spec plugin was rewritten to use the standardized error handling in Elektra. It is now strictly defined that the spec plugin throws a warning on kdbGet and on any other call an error.

Default values are now created in the default namespace. The instantiated array specifications are now also created in the default namespace.

Keys with a require metakey and no default metakey do throw an error now.

Known limitations:

  • # and _ keys do not work on MINGW
  • No defaults for _ globbing character

For more information see Spec Plugin.

Go into repo

The go binding is now inside of libelektra repository. It is now also included into our build pipeline. For more information on how to use it see go readme.

NOTE: On information how to publish new versions of go-elektra to go packages see go-publishing.

Plugins

The following text lists news about the plugins we updated in this release.

General

  • Updated target name of shared object files according to #3486

spec

  • Rewrite spec plugin, fix bugs and use correct error handling (Tomislav Makar @tmakar)
  • Remove info metakey from spec plugin (Tomislav Makar @tmakar)

counter

  • Move static variables into functions to avoid global variables (@kodebach)

logchange

  • Utilize new changetracking API (Maximilian Irlinger @atmaxinger)
  • Add Maximilian Irlinger as maintainer (Maximilian Irlinger @atmaxinger)

yajl

  • The itKs global variable workaround, which was used to replace the now removed internal KeySet cursor, was replaced with a custom context struct. (@kodebach)

toml

  • The flex lexer and bison parser are now fully reentrant and therefore thread-safe. (@kodebach)

multifile

  • Remove multifile plugin as it is unmaintained and conflicts with the new backend architecture (Maximilian Irlinger @atmaxinger)

c

  • Add Florian Lindner as maintainer (Florian Lindner @flo91)
  • Use separate symbols for set and commit functions to satisfy kdb plugin-check (@kodebach)
  • Use new elektraPluginGetPhase() instead of counting executions (@kodebach)

mmapstorage

Note: The plugin is currently disabled, because it is not yet compatible with the COW data structures.

TODO: remove above note, when COW support is added.

  • The magic data structures are now fully compile-time constants. The magic number to detect endianness is generated in CMake instead of at runtime. (@kodebach)

syslog

  • Convert to hook plugin (Maximilian Irlinger @atmaxinger)
  • Utilize new changetracking API (Maximilian Irlinger @atmaxinger)

lineendings

  • Add Florian Lindner as maintainer (Florian Lindner @flo91)

length

  • Add Florian Lindner as maintainer (Florian Lindner @flo91)

missing

  • Add Florian Lindner as maintainer (Florian Lindner @flo91)

unit

  • Add Florian Lindner as maintainer (Florian Lindner @flo91)

dbus

  • Utilize new changetracking API (Maximilian Irlinger @atmaxinger)
  • Add Maximilian Irlinger as maintainer (Maximilian Irlinger @atmaxinger)

internalnotifications

  • Utilize new changetracking API (Maximilian Irlinger @atmaxinger)
  • Add Maximilian Irlinger as maintainer (Maximilian Irlinger @atmaxinger)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Compatibility

Core

  • The syslog logging code now calls openlog before every syslog to avoid the use of a global variable. (@kodebach)
  • Fix memleak in kdb.c, #4925 (@hannes99)

loader

  • Adapt target rename with -plugin- in dl.c (Tomislav Makar @tmakar)

go

  • Golang is now included to build go binding (Tomislav Makar @tmakar)
  • From now on we use tags which are prefixed with v so go package versioning works (Tomislav Makar @tmakar)

kdb

  • Add new changetracking API (Maximilian Irlinger @atmaxinger)
  • Fix unwanted removal of subkeys when using mv (Hannes Laimer @hannes99)
  • Fix inconsistent return values in code, tests and man pages (Hannes Laimer @hannes99)
  • Remove smount alias (Hannes Laimer @hannes99)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up-to-date with the multi-language support provided by Elektra.

jna

  • Updated Java binding related dependencies. (Michael Tucek @tucek)
  • Updated KDBException to only access error key at construction time. (Michael Tucek @tucek)
  • Removed public naive resource release API. To migrate just remove calls to the affected methods Key#release(), KeySet#release() and KDBException#releaseErrorKey() (Michael Tucek @tucek)
  • Enabled strict javadoc checking for Gradle build (Michael Tucek @tucek)
  • add merging based on elektraMerge (Maximilian Irlinger @atmaxinger)
  • Added support for ksIncRef for KeySet (Michael Tucek @tucek)
  • Enabled ReferenceCleaner (Michael Tucek @tucek)

go-elektra

  • Move go-elektra binding from repository into bindings folder of libelektra (Tomislav Makar @tmakar)
  • Change module for go-elektra (Tomislav Makar @tmakar)
  • Rename go-elektra module (Tomislav Makar @tmakar)
  • Adapt README for go-elektra and change module name to match github.com (Tomislav Makar @tmakar)

Tools

elektrad

  • Implemented new request to add multiple metakeys for one key (Tomislav Makar @tmakar)
  • Adding bulk creation request for configuration keys (Tomislav Makar @tmakar)

webd

  • Implemented new request to add multiple metakeys for one key (Tomislav Makar @tmakar)
  • Adding bulk creation request for configuration keys (Tomislav Makar @tmakar)

Scripts

Jenkins

  • Use only v prefix for tags not in real version (Tomislav Makar @tmakar)

Release

  • Exclude v prefix from populate-release-notes.sh script (Tomislav Makar @tmakar)
  • Handle tag prefix v correctly in release.sh (Tomislav Makar @tmakar)
  • Check for v prefix in make-source-package script and Jenkinsfile.release (Tomislav Makar @tmakar)
  • Use correct tags for git-release-stats script (Tomislav Makar @tmakar)

Documentation

  • Adapt and remove outdated docs https://issues.libelektra.org/4882 (Tomislav Makar @tmakar)
  • Added missing dependencies in COMPILE.md for APT-based systems (Michael Tucek @tucek)
  • Add default namespace to namespaces documentation (Tomislav Makar @tmakar)
  • Added Tomislav Makar to AUTHORS.md (Tomislav Makar @tmakar)
  • Added Florian Lindner to AUTHORS.md (Florian Lindner @flo91)
  • .github rework (Markus Raab)
  • Added hook to placements contract in CONTRACT.ini (Tomislav Makar @tmakar)
  • Added hook information to hooks.md
  • Added Hannes Laimer to AUTHORS.md (Hannes Laimer @hannes99)
  • Add README to tools/kdb (Hannes Laimer @hannes99)
  • Fixed shell-recorder test in install-webui.md (Tomislav Makar @tmakar)
  • Add new shell-recorder test in install-webui.md for newly implemented request for adding multiple metakeys for one key (Tomislav Makar @tmakar)
  • Small fixes in decisions. (Markus Raab)
  • Remove wikipedia from release todos in RELEASE.md (Tomislav Makar @tmakar)
  • Update AUTHORS.md info (@kodebach)
  • Add Stefan Hanreich to AUTHORS.md (Stefan Hanreich @lawli3t)

Use Cases

  • Add specification use case for array-specification (Tomislav Makar @tmakar)
  • Add specification use case for underline-specification (Tomislav Makar @tmakar)
  • Add specification use case for simple-specification (Tomislav Makar @tmakar)
  • Add specification use case for enum-specification (Tomislav Makar @tmakar)
  • Add complete specification for dockerd configuration file (daemon.json) (Tomislav Makar @tmakar)

Decisions

Tutorials

  • Add basic tutorial about changetracking (Maximilian Irlinger @atmaxinger)

Man Pages

Tests

  • Add shell test to verify correct behavior for https://github.com/ElektraInitiative/libelektra/issues/4061 (Tomislav Makar @tmakar)
  • Add link to linkchecker.whitelist (Tomislav Makar @tmakar)

Build

Docker

  • CentOS 8 Stream: manually install config-manager DNF plugin. (Maximilian Irlinger @atmaxinger)

Infrastructure

Cirrus

  • Rename deprecated d-bus to dbus in macOS.yml and .cirrus.yml Issue-#4900 (Tomislav Makar @tmakar)
  • Push FreeBSD 12.3 to 12.4 since 12.3 is end of life. (Richard Stöckl @eiskasten)

GitHub Actions

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date. Furthermore, we changed:

Miscellaneous

  • Many global variables that where used as constants have been made fully const (@kodebach)

Outlook

We are currently working on following topics:

  • Rewriting tools in C (@hannes99)
  • Elektrify KDE and GNOME (Mihael Pranjić @mpranj)
  • Elektrify XFCE (Richard Stöckl @Eiskasten)
  • Mounting SQL databases (Florian Lindner @flo91)
  • Recording Configuration (Maximilian Irlinger)
  • Ansible-Elektra (Maximilian Irlinger)
  • Configure Olimex Base Images (Maximilian Irlinger)
  • Improving Build Server Infrastructure (Lukas Hartl)
  • Improve Java Development Experience (Michael Tucek)

Statistics

About 9 authors changed 309 files with 10024 insertions(+) and 4025 deletions(-) in 402 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from

The hashsums are:

  • name: elektra-0.10.0.tar.gz
  • size: 9230228
  • md5sum: 39ac04c8a0b07061bea781fd73cb13aa
  • sha1: 846dcfa22410403b575a4d4d87970aa4841aafdd
  • sha256: cb56e40b37c42e1e235cf9e76c9250024f912cbb61cca1a2888f9305f5228dcd

The release tarball is also available signed using GnuPG from

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API documentation can be found

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments, please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by tmakar over 2 years ago

Elektra - 0.9.14 Release

  • guid: 9e1e0790-e7ae-4947-9906-2c176a4f8dd2
  • author: Mihael Pranjić
  • pubDate: Thu, 16 Mar 2023 14:43:04 +0100
  • shortDesc: Bugfix Release

We are proud to release Elektra 0.9.14.

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.

You can also read the news on our website.

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:

sh docker pull elektra/elektra docker run -it elektra/elektra

Highlights

  • The main purpose of this bugfix release is to fix regressions (#4859) introduced in Elektra 0.9.12 and 0.9.13.
  • Please refer to the Elektra 0.9.12 release notes for a complete list of changes. Due to breaking changes since 0.9.11 we highly recommend to read the upgrade instructions.

Plugins

The following text lists news about the plugins we updated in this release.

timeofday

  • Use separate symbols for set and commit functions to satisfy kdb plugin-check (@kodebach)
  • Use new elektraPluginGetPhase() instead of counting executions (@kodebach)

tracer

  • Use separate symbols for set and commit functions to satisfy kdb plugin-check (@kodebach)

Tests

  • Enable more kdb plugin-check tests (@kodebach)

Build

Docker

  • Fix conflicting Java versions in CentOS Stream 8 image (@kodebach)

Outlook

We are currently working on following topics:

  • 1.0 API (Klemens Böswirth @kodebach) and (Stefan Hanreich)
  • Session recording and better Ansible integration (Maximilian Irlinger @atmaxinger)
  • Change tracking (Maximilian Irlinger @atmaxinger)
  • Rewriting tools in C (@hannes99)
  • Elektrify KDE and GNOME (Mihael Pranjić @mpranj)
  • Elektrify XFCE (Richard Stöckl @Eiskasten)
  • Mounting SQL databases (Florian Lindner @flo91)
  • Recording Configuration (Maximilian Irlinger)
  • Ansible-Elektra (Lukas Hartl) and (Maximilian Irlinger)
  • Configure Olimex Base Images (Maximilian Irlinger)
  • Improving Build Server Infrastructure (Lukas Hartl) and (Maximilian Irlinger)
  • Improve Java Development Experience (Michael Tucek)

Statistics

We closed 2 issues for this release.

About 4 authors changed 22 files with 299 insertions(+) and 139 deletions(-) in 14 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from

The hashsums are:

  • name: elektra-0.9.14.tar.gz
  • size: 9299478
  • md5sum: eb0f1d2e5d93bbae122999b5a27be343
  • sha1: 8d7a44ae6b4d53c52ab4219f955d6010f87682c8
  • sha256: e4632bb6baa78f6a68c312469e41fd1ef07406571749e32f2645b1858d01a58d

The release tarball is also available signed using GnuPG from

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API documentation can be found

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments, please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards,

Scientific Software - Peer-reviewed - C
Published by mpranj almost 3 years ago

Elektra - 0.9.13 Release

  • guid: e8fd116d-12ab-4281-aaf3-b6441056dd63
  • author: Mihael Pranjić
  • pubDate: Tue, 14 Mar 2023 10:05:11 +0100
  • shortDesc: Bugfix, Ubuntu Packages

We are proud to release Elektra 0.9.13.

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.

You can also read the news on our website.

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:

sh docker pull elektra/elektra docker run -it elektra/elektra

Highlights

  • The main purpose of this bugfix release is to fix a regression (#4859) introduced in Elektra 0.9.12.
  • We added fresh Ubuntu Jammy Jellyfish (22.04 LTS) and Kinetic Kudu (22.10) packages.
  • Please refer to the Elektra 0.9.12 release notes for a complete list of changes. Due to breaking changes since 0.9.11 we highly recommend to read the upgrade instructions.

Plugins

The following text lists news about the plugins we updated in this release.

spec

  • Add hook placement to spec plugin in README (Tomislav Makar @tmakar)

gopts

  • Add hook placement to gopts plugin in README (Tomislav Makar @tmakar)

internalnotifications

  • Add Maximilian Irlinger as maintainer (Maximilian Irlinger @atmaxinger)

logchange

  • Add Maximilian Irlinger as maintainer (Maximilian Irlinger @atmaxinger)

dbus

  • Add Maximilian Irlinger as maintainer (Maximilian Irlinger @atmaxinger)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

tools

  • Check for hook placement on plugin-check (Tomislav Makar @tmakar)

merge

  • Add Maximilian Irlinger as maintainer (Maximilian Irilnger @atmaxinger)

Documentation

  • .github rework (Markus Raab)
  • Added hook to placements contract in CONTRACT.ini (Tomislav Makar @tmakar)
  • Added hook information to hooks.md
  • Add correct error code in hosts readme (Tomislav Makar)

Build

CMake

  • Add infos/maintainer in plugins. (Maximilian Irlinger @atmaxinger)

Docker

  • Add Ubuntu Jammy Jellyfish (22.04 LTS) images. (Mihael Pranjić @mpranj)
  • Add Ubuntu Kinetic Kudu (22.10) images. (Mihael Pranjić @mpranj)

Infrastructure

Jenkins

  • Add Ubuntu Jammy Jellyfish (22.04 LTS) builds and drop Bionic builds. (Mihael Pranjić @mpranj)
  • Add Ubuntu Kinetic Kudu (22.10) builds. (Mihael Pranjić @mpranj)

Outlook

We are currently working on following topics:

  • 1.0 API (Klemens Böswirth @kodebach) and (Stefan Hanreich)
  • Session recording and better Ansible integration (Maximilian Irlinger @atmaxinger)
  • Change tracking (Maximilian Irlinger @atmaxinger)
  • Rewriting tools in C (@hannes99)
  • Elektrify KDE and GNOME (Mihael Pranjić @mpranj)
  • Elektrify XFCE (Richard Stöckl @Eiskasten)
  • Mounting SQL databases (Florian Lindner @flo91)
  • Recording Configuration (Maximilian Irlinger)
  • Ansible-Elektra (Lukas Hartl) and (Maximilian Irlinger)
  • Configure Olimex Base Images (Maximilian Irlinger)
  • Improving Build Server Infrastructure (Lukas Hartl) and (Maximilian Irlinger)
  • Improve Java Development Experience (Michael Tucek)

Statistics

We closed 5 issues for this release.

About 7 authors changed 35 files with 1186 insertions(+) and 534 deletions(-) in 48 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from

The hashsums are:

  • name: elektra-0.9.13.tar.gz
  • size: 9297899
  • md5sum: 871eaaad39bc834ceb7fb42cb8de66f0
  • sha1: 68984021d08500693d692c2cb61eb3409fe75226
  • sha256: 9b7512d493c284afcca9875d093081c85c4cfe4926dea193202fbdc5fe89b468

The release tarball is also available signed using GnuPG from

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API documentation can be found

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments, please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj almost 3 years ago

Elektra - 0.9.12 Release

  • guid: F2193578-1773-43A9-85CA-79EA8CE48D7B
  • author: Mihael Pranjić
  • pubDate: Fri, 03 Mar 2023 08:07:28 +0100
  • shortDesc: New Backend Logic, Copy-on-Write, FLOSS Course

We are proud to release Elektra 0.9.12.

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.

You can also read the news on our website.

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:

sh docker pull elektra/elektra docker run -it elektra/elektra

Highlights

  • New Backend
  • Copy-on-Write
  • FLOSS

New Backend

The entire logic for backends has been rewritten, to allow for more flexibility und an unlimited number of plugins. Instead of calling plugins directly, libelektra-kdb now only calls so-called backend plugins and special hook plugins. There is a contract between libelektra-kdb and the backend plugins. All backend plugins must adhere to this contract. To achieve this goal, most backend plugins will call other plugins (like libelektra-kdb did previously).

The logic previously implemented in libelektra-kdb was moved to the new default backend plugin backend. It works like the old system, but now also allows an unlimited number of plugins in positions where that makes sense. For example, you can have unlimited postgetstorage plugins, but only a single getresolver.

There have also been slight changes to kdbGet and kdbSet. Please read their API docs to find out, if you rely on any behavior that has been altered. You can also read the new low-level docs to find out all the intricate details.

The structure of system:/elektra/mountpoints changed as well. Take a look at the new docs, if you need to know details.

Updating config

The mountpoint configuration format contains breaking changes and a manual upgrade process is needed. Follow these steps to upgrade the old mountpoint configuration to the new format:

Warning: BACK UP YOUR CONFIG FILES BEFORE UPDATING! We recommend making a backup of the file printed by kdb file system:/elektra/mountpoints before updating your installation. In the unlikely case that the migration script fails, you can still use the information from the backup to manually recreate your mountpoints.

To update your existing system:/elektra/mountpoints data you can use the migration script.

Note: To run the script you must have Elektra, Python (>= 3.7) and the Python binding installed. The script uses the Python binding to manipulate Keys and KeySets, but it does not use the kdb CLI tool, or the KDB API. It is safe to run this script before, or after you update your Elektra installation.

By default, the script loads the file /etc/kdb/elektra.ecf. If you changed where system:/elektra/mountpoints is stored, you can provide an alternative path:

./migrate-mountpoints.py /path/to/your/mountpoints/config.file

Note: Because the script does not use the KDB API it only works, if the mountpoints config file uses the default dump format.

If your mountpoints config file is not using the dump format, you may still be able to use the migration script. However, in that case, you will have to use the script before updating your Elektra installation:

  1. Run kdb export system:/elektra/mountpoints dump to get a copy of your mountpoints config in dump format
  2. Write this data to a file and run the migration script on the file.
  3. To get the data back in your original format you can use

sh ./migrate-mountpoints.py /path/to/file/from/step2 | kdb convert dump your-format > /path/to/converted/file

  1. Run kdb file system:/elektra/mountpoints to find out where your mountpoint config is stored. Make sure to back up this file, before upgrading your installation.
  2. Now upgrade your Elektra installation.
  3. Copy the file /path/to/converted/file from step 3 to the location you got in step 4.

The script will read the old mountpoint configuration from the given file. It will convert the configuration and print the new version to stdout.

You can inspect the output to make sure, everything is in order. When you are ready to commit the changes, you can manually edit the config file, or use:

./migrate-mountpoints.py --output=/etc/kdb/elektra.ecf /etc/kdb/elektra.ecf

Individual changes

  • Implement hooks. (Maximilian Irlinger @atmaxinger)
  • Removed old global plugins code. (Maximilian Irlinger @atmaxinger)
  • New backend logic, based on PR #2969 by @vLesk. (@kodebach)
  • Add script to migrate system:/elektra/mountpoints to new format. (@kodebach)

Copy-on-Write

Thanks to (Maximilian Irlinger @atmaxinger) our Key and KeySet datastructures are now fully copy-on-write! This means noticeably reduced memory usage for cases where keys and keysets are copied and/or duplicated!

We ran some very promising benchmarks, each were performed with 400,000 keys. All benchmarks were executed using valgrind --tool=massif --time-unit=B --max-snapshots=200 --threshold=0.1.

| Benchmark | Old Implementation | Copy-on-Write | Size Reduction | Remarks | | :------------- | -----------------: | ------------: | -------------: | :------------------------- | | createkeys.c | 5.3 MiB | 6.5 MiB | -22 % | | | deepdup.c | 10.5 MiB | 8.2 MiB | 22 % | | | large.c | 18.9 MiB | 15.3 MiB | 19 % | | | kdb.c | 23.5 MiB | 17.8 MiB | 24 % | | | kdbget.c | 11.0 MiB | 8.8 MiB | 20 % | | | kdbmodify.c | 11.0 MiB | 8.8 MiB | 20 % | Same results as kdbget.c |

First, it should be noted that a single key, without counting payload, is about 50% larger with the copy-on-write implementation. This explains why the createkeys.c benchmark yields a negative reduction result. This benchmark only allocates keys, so not much improvement can be expected there. Still, as other stuff also uses heap memory, the overall memory consumption only increased by 22%, which is far less than 50%.

All other benchmarks saw meaningful reductions of heap memory used. One interesting observation is that kdbget.c and kdbmodify.c used exactly the same memory. This can most likely be explained by internal caching within the memory allocator of glibc.

We also performed runtime tests on the same benchmarks using perf stat --repeat 13 to ensure no major performance regressions occur.

| Benchmark | Old Implementation | Deviation | Copy-on-Write | Deviation | Runtime Increase | | :------------- | -----------------: | --------: | ------------: | --------: | ---------------: | | createkeys.c | 0.209572 s | 0.36 % | 0.21987 s | 0.77 % | 4.9 % | | deepdup.c | 0.23025 s | 0.47 % | 0.231804 s | 0.32 % | 0.6 % | | large.c | 1.14038 s | 0.21 % | 1.14837 s | 0.21 % | 0.7 % | | kdb.c | 1.9270 s | 2.63 % | 1.93354 s | 0.17 % | 0.3 % | | kdbget.c | 0.145663 s | 0.17 % | 0.15763 s | 0.70 % | 8.2 % | | kdbmodify.c | 0.146506 s | 0.19 % | 0.156347 s | 0.15 % | 6.7 % |

Overall, the runtime performance hit is less than 10%. The more a program does, the less the additional overhead of the copy-on-write algorithms matter. One interesting detail is that keyCopy and keyDup have become quite a bit faster. This can be seen by comparing the differences between createkeys.c and deepdup.c. The differences are 21 ms for the old implementation and 12 ms for the copy-on-write implementation.

FLOSS

A Free/Libre and Open Source Software (FLOSS) Initiative couldn't survive with many small contributions fixing annoying problems. This release also contains all contributions done via one term of the FLOSS course. The success was tremendous, as shown in the rest of the release notes.

A big thanks to the students for their contributions!

Plugins

The following text lists news about the plugins we updated in this release.

yajl

  • Fix an issue where trying to set invalid meta-keys won't show an error. (Juri Schreib @Bujuhu)

list

  • Removed the outdated list plugin. (Maximilian Irlinger @atmaxinger) (Was only needed for global plugins, which are now replaced by hooks.)

logchange

  • Made logchange a notification-send hook plugin. (Maximilian Irlinger @atmaxinger)

toml

  • Fix bug, where meta-keys that cannot be inserted don't report an error. (@Bujuhu)

uname

  • Add error handling if uname call fails. (Richard Stöckl @Eiskasten)

quickdump

  • elektraQuickdumpSet: don't fclose if stdout. (@hannes99)

blockresolver

  • Add encoding test for blockresolver read. (@dtdirect)
  • Refactor and restructure blockresolver. (@dtdirect)

desktop

  • Add a unit test. (Richard Stöckl @Eiskasten)

mini

  • Fix a bug where writing meta-keys will fail silently. (Juri Schreib @Bujuhu)

mmapstorage

  • Remove code duplication in the data block calculation. (Richard Stöckl @Eiskasten)

network

  • Add a retry mechanism. (Richard Stöckl @Eiskasten)

xfconf

  • Add xfconf storage plugin with the ability to read and write to xfconf channels. (Richard Stöckl @Eiskasten)
  • Make xfconf valgrind suppressions more flexible to lib updates. (Mihael Pranjić @mpranj)

date

  • Fix an issue with validationg RFC 822 date-times. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
  • Improve Code Coverage. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)

csvstorage

  • Fix a bug where writing unkown meta-keys will fail silently. (Juri Schreib @Bujuhu)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Compatibility

  • Global plugins do not work anymore, use hooks instead.

Core

  • The Key and KeySet datastructures are now fully copy-on-write. (Maximilian Irlinger @atmaxinger)
  • keyCopy now only allocates additional memory if KEY_CP_META or KEY_CP_ALL is used. (Maximilian Irlinger @atmaxinger)
  • Check for circular links (overrides). (@0x6178656c)

io

  • Check file flags for elektraIoFdSetFlags: file flags must be exactly one of: read only, write only or read write. (Richard Stöckl @Eiskasten)

Merge

  • Add methods elektraMergeGetConflictingKeys and elektraMergeIsKeyConflicting to check which keys were causing a merge conflict. (Maximilian Irlinger @atmaxinger)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up-to-date with the multi-language support provided by Elektra.

intercept/env

  • Remove fallback code. (Markus Raab)
  • Command-line functionality is broken due to new-backend differences.

intercept/fs

  • Use KDB_MAX_PATH_LENGTH for better portability. (Markus Raab)

jna

  • Documentation: Improved build instructions. (@Bujuhu)
  • Add validation on get for whitelist plugin. (@Bujuhu)
  • Upgrade Gradle to 8.0.1. (Mihael Pranjić @mpranj)

rust

  • Fix "feature resolver is required" error. (Markus Raab)

elixir

  • Initial release of the Elixir binding. (@0x6178656c)
  • Mark tests as memleak. (@0x6178656c)

Tools

kdb

  • Removed global-mount and global-umount commands. (Maximilian Irlinger @atmaxinger)
  • Fixed SIGSEGV when using kdb find without argument. (Christian Jonak-Moechel @joni1993)

elektrad

  • Removed leftover package-lock.json file. (stefnotch)

Scripts

  • Added automatic spelling corrections for changeset. (Maximilian Irlinger @atmaxinger)
  • Introduce shebang-conventions. (@0x6178656c)
  • Apply auto-fixes from shellcheck. (@0x6178656c)
  • Use prettier 2.8.4. (Mihael Pranjić @mpranj)
  • Add scripts to enable and disable pre-commit hooks. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
  • Only let http links pass the check if whitelisted. (Richard Stöckl @Eiskasten)
  • Link Checker: Add documentation for the usage and how it behaves. (Richard Stöckl @Eiskasten)
  • Sed: Add spelling correction for "key-value storage". (@Bujuhu)
  • Fix/extends some shell recorder tests. (@Joni1993)
  • Use clang-format v15. (Mihael Pranjić @mpranj)
  • Fix warning parsing in shell recorder. (@Joni1993)
  • Replaced egrep by grep -E. (@0x6178656c and @janldeboer)
  • Add audit-dependencies script to check for vulnerabilities for npm depndencies. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)

Documentation

  • Restructured contrib/api. (Markus Raab).
  • Improve page on compilation. (@0x6178656c)
  • Improve page for bindings. (@0x6178656c)
  • Improve page for getting started. (@stefnotch)
  • Remove version number from docker README and replace it with latest. (@Joni1993)
  • Fix grammar for elektra-granularity.md. (@dtdirect)
  • Rephrase sections in doc/dev/error-\*. (@dtdirect)
  • Improve Git.md. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
  • Unify spelling of man pages. (@stefnotch) (@janldeboer)
  • Extend consistency check check_doc.sh to work for contrib, dev and tutorials. (@Joni1993)
  • Fix internal links. (@0x6178656c)
  • Update AUR Link from elektra to libelektra package. (@Bujuhu)
  • Update example Ansible playbook in VISION.md. (@Bujuhu)
  • Harmonize spelling of Git. (@Joni1993)
  • Update packaging instructions for Fedora. (@0x6178656c)
  • Improve use of gender. (@0x6178656c)
  • Fix some minor mistakes in CONTRIBUTING.md. (@Joni1993)
  • Fix various spelling errors. (@Joni1993)
  • Denoted package names & global variable names in INSTALL.md as Code. (@janldeboer)
  • Improve readability of doc/tutorials/highlevel.md. (@deoknats861)
  • Improve reference to Podman documentation. (@0x6178656c)
  • Unify spelling. (@Joni1993)
  • Fix typo in dev/hooks.md. (@dtdirect)
  • Remove unused images from doc/images. (@dtdirect)
  • Fixed Coverage Badge Link. (@janldeboer)
  • Improve CONTRIBUTING doc. (Juri Schreib @Bujuhu) and (Nikola Prvulovic @Dynamichost96)
  • Update Doxyfile with Doxygen 1.9.4. (@0x6178656c)
  • Add project logo to Doxygen in Doxyfile. (@dtdirect)
  • Add mermaid.js to the project using doxygen-mermaid. (@dtdirect)
  • Create diagrams in mermaid.js to use in doxygen. (@dtdirect)
  • Create README for Doxygen and Mermaid JS. (@dtdirect)
  • Tutorial: Add automatic validation to Docker tutorial (Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
  • Add mention of audit-dependencies script in doc/todo/RELEASE.md. (@Bujuhu)
  • Move note in GETSTARTED.md. (@Joni1993)
  • Use code blocks to prevent Markdown from falsy rendering LaTeX. (@stefnotch), (@janldeboer)
  • Fix broken links in use cases for KDB after files were renamed. (Florian Lindner @flo91)
  • Replace http links with https. (Richard Stöckl @Eiskasten)
  • Enhance notifications.md in doc/tutorial. (@dtdirect)
  • Add tutorial how to suppress memleaks in plugins from dependencies. (Richard Stöckl @Eiskasten)
  • Write about history to make plans of Elektra's adoption more clear. (Markus Raab)

Use Cases

  • Improve use cases Template. (@kodebach and Markus Raab)
  • Use cases for KDB. (@kodebach)
  • Use cases for libelektra-core. (@kodebach)

Decisions

  • Decide and implement decision process. (Markus Raab)
  • Decided future library split. (@kodebach)
  • Decided decision process. (Markus Raab)
  • Draft for man pages. (Markus Raab)
  • Add decision for change tracking. (Maximilian Irlinger @atmaxinger)
  • Create decision for allowed and prohibited operation seqences. (Maximilian Irlinger @atmaxinger)
  • Add decisions about location of headers and use of #include in the repo. (@kodebach)
  • Add decision about metadata semantics. (@kodebach)
  • Many small fixes to adapt to documentation guidelines and new decision process. (Markus Raab)
  • Add decision for read-only keynames. (Maximilian Irlinger @atmaxinger)
  • Revive keyname decision. (@kodebach)
  • Add decisions for constructor functions and builder functions. (@kodebach)
  • Add decision for copy-on-write and provide implementation suggestions. (Maximilian Irlinger @atmaxinger)
  • Update internal cache. (Markus Raab) (@kodebach)
  • Create transformations. (Maximilian Irlinger @atmaxinger)
  • Replace TOC-style README.md with folders and generate HTML for website. (@kodebach)
  • Restructured decisions directories based on new agreed-upon steps. (Maximilian Irlinger @atmaxinger)
  • Decision for types of KeySets. (@kodebach)
  • Added Documentation Guidelines. (Markus Raab)
  • Add links and formatting to documents affected by PR#4492 (Document Guidelines) and rephrase some parts. (Florian Lindner @flo91)
  • Decisions for changes to keyIsBelow and new keyGetNextPart functions. (@kodebach)
  • Apply fix spelling to more files. (Markus Raab)

Tutorials

  • Add tutorial for manual installation from the AUR on Arch Linux. (@Bujuhu)
  • Add Markdown shell recorder validation to install.webui.md. (@deoknats861)
  • Fix the outdated array tutorial. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
  • Reinstate mounting tutorial. (@Bujuhu)
  • Make namespaces tutorial verifiable. (@0x6178656c)
  • Move Podman-related information to a dedicated page. (@0x6178656c)

Man Pages

  • Update man page (patch) as suggested by the CI to fix CI error on master. (Florian Lindner @flo91)
  • Added links to the website & webui after further reading. (Philipp Nirnberger @nirnberger)
  • Upgrade ronn-ng to 0.10.1.pre3. (Mihael Pranjić @mpranj)

Tests

  • Fix an Issue where scripts/dev/fix-spelling does not work, if a resolved path contains whitespaces. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
  • Rename scripts/sed to scripts/spelling.sed. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
  • Add memleak label to test_getenv. (@0x6178656c)
  • Add test using shellcheck. (@0x6178656c)
  • Remove --rerun-failed from run_* scripts. (@kodebach)
  • Fix paths for icheck test. (Mihael Pranjić @mpranj)

Shell Recorder

  • Add check if file exists. (@0x6178656c)

Packaging

  • Add missing new backend plugin to components of libelektra package. (Mihael Pranjić @mpranj)

Build

CMake

  • Fix warning for CMP0115. (0x6178656c)
  • Change Doxygen configuration for LaTeX. (0x6178656c)
  • Fix developer warning for package DISCOUNT. (Dennis Toth @dtdirect)
  • Pass --stacktrace to gradle for the JNA builds. (Maximilian Irlinger @atmaxinger)
  • Adapt npm build flags to remove reproducability issues. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
  • Fix creation of shell recorder tests. (@0x6178656c)

Docker

  • Update packagename libpcrec++-dev to libpcrecpp0v5 in Debian Sid. (Richard Stöckl @Eiskasten)
  • Add shellcheck to Debian containers. (@0x6178656c)
  • Use openjdk-17-jdk in Debian Sid. (Maximilian Irlinger @atmaxinger)
  • Add Fedora 37 images. (Mihael Pranjić @mpranj)
  • Update Debian Sid image to use repository Python modules instead of installing with pip3 due to upstream debian changes. (Mihael Pranjić @mpranj)
  • Debian Bullsye: use clang 13. (Mihael Pranjić @mpranj)
  • Update Alpine Linux to 3.17.2. (Mihael Pranjić @mpranj)

Gradle

  • Use Gradle 7.5.1. (Mihael Pranjić @mpranj)
  • Update java-library.gradle to use archiveClassifier (Maximilian Irlinger @atmaxinger)

Infrastructure

Jenkins

  • Add Fedora 37 builds, drop Fedora 35 builds. (Mihael Pranjić @mpranj)
  • Run more tests also on Master. (Markus Raab)
  • Move doc to main build stage. (Markus Raab)
  • Disable parallel test runs. (Maximilian Irlinger @atmaxinger)
  • Upgrade Jenkins node container to Debian bullseye. (@0x6178656c)
  • Undo previous change that added automatic ctest --rerun-failed to Jenkins CI. (@kodebach)

Cirrus

  • Use Fedora 37. (Mihael Pranjić @mpranj)
  • Fix macos_instance reference, upgrade to macOS Ventura (by default), use Python 3.11 and Ruby 3.x. (Mihael Pranjić @mpranj)
  • Automatically rerun testmod_dbus* tests on macOS. (@kodebach)
  • Fix dbus not starting on macOS. (Maximilian Irlinger @atmaxinger)

GitHub Actions

  • Add auto-cancellation-running action. (Tomislav Makar @tmakar)
  • Automatically rerun testmod_dbus* tests on macOS. (@kodebach)
  • Fix dbus not starting on macOS. (Maximilian Irlinger @atmaxinger)
  • Change stale issue/PR checking to GitHub action. (@0x6178656c)
  • Update configuration of stale issue/PR action. (@0x6178656c)
  • Upgrade actions to recent versions and remove deprecated ruby-setup action. (Mihael Pranjić @mpranj)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date. Furthermore, we changed:

  • Fix broken /pythongen link on homepage. (@stefnotch)
  • Fix redirect logic to not cause loops. (@stefnotch)
  • Remove duplicated link to TESTING.md file. (@stefnotch), (@janldeboer)
  • Restructure parts of the links on the website. (@stefnotch), (@janldeboer)
  • Removed broken links to packages for Linux distributions. (@Dynamichost96)
  • Update npm packages. (Mihael Pranjić @mpranj)
  • Change URLs to say man-page with a dash. (@stefnotch) (@janldeboer)

Outlook

We are currently working on following topics:

  • 1.0 API (Klemens Böswirth @kodebach) and (Stefan Hanreich)
  • Session recording and better Ansible integration (Maximilian Irlinger @atmaxinger)
  • Change tracking (Maximilian Irlinger @atmaxinger)
  • Rewriting tools in C (@hannes99)
  • Elektrify KDE and GNOME (Mihael Pranjić @mpranj)
  • Elektrify XFCE (Richard Stöckl @Eiskasten)
  • Mounting SQL databases (Florian Lindner @flo91)
  • Recording Configuration (Maximilian Irlinger)
  • Ansible-Elektra (Lukas Hartl) and (Maximilian Irlinger)
  • Configure Olimex Base Images (Maximilian Irlinger)
  • Improving Build Server Infrastructure (Lukas Hartl) and (Maximilian Irlinger)
  • Improve Java Development Experience (Michael Tucek)

Statistics

We closed about 150 issues for this release.

About 28 authors changed 960 files with 29400 insertions(+) and 20927 deletions(-) in 1421 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from

The hashsums are:

  • name: elektra-0.9.12.tar.gz
  • size: 9297913
  • md5sum: a6de9401709283b69ec211681f2a7757
  • sha1: cb4e282d1346fda771de7510663652555f8e6c7d
  • sha256: 38238ba4a5318f999dc3045da06467abf529344dc46ad3fdf42bdca0155e149c

The release tarball is also available signed using GnuPG from

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API documentation can be found

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments, please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj almost 3 years ago

Elektra - 0.9.11 Release

  • guid: 1390D163-9CEC-493D-839D-3930B9FFB6C4
  • author: Mihael Pranjić
  • pubDate: Wed, 05 Oct 2022 08:14:35 +0200
  • shortDesc: New Backend System, Opensesame Application, FLOSS Course

We are proud to release Elektra 0.9.11.

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.

You can also read the news on our website.

You can try out the latest Elektra release using our Docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:

sh docker pull elektra/elektra docker run -it elektra/elektra

Highlights

  • Preparing new-backend merge
  • Olimex
  • Improving Elektra in FLOSS course

Preparing new-backend merge

In a separated branch we rewrote the whole backend system. With this new backend system, backends are now also plugins, allowing backends also to be non-file-based, e.g., using databases. The main purpose of this release is to give a last stable release before master gets disrupted with a huge change set. The next release is not to be expected in this year.

A huge thanks to (Klemens Böswirth @kodebach), (Maximilian Irlinger @atmaxinger) for the many changes in the branch. Thanks to (Richard Stöckl @Eiskasten) for testing.

Olimex

Elektra is used for server, desktop and embedded. With this release, we strengthen our embedded mainstay, specifically in open source hardware OSHW. We developed a major application running on OSHW Olimex boards. The application is called opensesame. It is heavily relying on Elektra and ansible-libelektra.

In the initial release opensesame already allows:

  • [x] opening (garage) doors via a novel PIN entry method: you can press and release buttons in any sequence
  • [x] switching on entry lights
  • [x] ringing doorbells
  • [x] detection of fire
  • [x] report events to Nextcloud chats (English and German)

To give a smoother experience when running such an application we will develop Ansible scripts to customize the Olimex base images. They will allow changing the language, time zone, static network configuration etc.

Olimex likes this idea and will send us an A20 board. A big thanks to Olimex.

Improving Elektra in FLOSS course

Also in the upcoming term Elektra will be object of study how FLOSS initiatives work. Students will make improvements in Elektra as part of their homework, teamwork and, if chosen, also for their project. Alternatively, they can also improve other self-chosen FLOSS initiatives.

Plugins

The following text list news about the plugins we updated in this release.

  • fix unused-but-set-variable warnings. (Markus Raab)

csvstorage

  • Remove superfluous if-conditions that lead to a build error on Debian Unstable (Maximilian Irlinger @atmaxinger)

specload

  • fail if either the spec or parentKey parameter of elektraSpecloadSendSpec is NULL (@hannes99)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

  • fix unused-but-set-variable warnings. (Markus Raab)

opts

  • opts: fix possible 'free(): invalid pointer' error and add test for it (@hannes99)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up-to-date with the multi-language support provided by Elektra.

Python

  • add merging based on elektraMerge (Maximilian Irlinger @atmaxinger)

Rust

  • start again to publish on crates.io, used by opensesame (Markus Raab)

Documentation

  • Added Documentation Guidelines (Markus Raab)
  • Decisions for changes to keyIsBelow and new keyGetNextPart functions (@kodebach)
  • Apply fix spelling to more files. (Markus Raab)

Tutorials

  • opts: use arg/help instead of arg/name (@hannes99)

Man Pages

  • Update FAQ. (Markus Raab)

Tests

  • Use GoogleTest framework v1.12.1. (Mihael Pranjić @mpranj)

Build

CMake

  • Fix build with newer libgit2 versions (Fabian Vogt)
  • We now require at least CMake 3.12 (released in July 2018). (Maximilian Irlinger @atmaxinger)

Docker

  • Bump Alpine Linux to 3.16.0. (Mihael Pranjić @mpranj)
  • The Docker image for building the documentation is now based on Debian Bullseye. (Maximilian Irlinger @atmaxinger)
  • Add Fedora 36 images. (Mihael Pranjić @mpranj)

Infrastructure

Jenkins

  • We no longer build and test on Ubuntu Xenial and Debian Stretch due to outdated CMake versions (Maximilian Irlinger @atmaxinger)
  • Add Fedora 36 builds, remove Fedora 34 builds. (Mihael Pranjić @mpranj)

Cirrus

  • Update FreeBSD images to 13.1 and 12.3 and update packages before builds. (Mihael Pranjić @mpranj)
  • Bump Fedora builds to Fedora 36. (Mihael Pranjić @mpranj)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date.

Outlook

We are currently working on following topics:

  • 1.0 API (Klemens Böswirth @kodebach) and (Stefan Hanreich)
  • Elektrify KDE and GNOME (Mihael Pranjić @mpranj)
  • Elektrify XFCE (Richard Stöckl @Eiskasten)
  • Mounting SQL databases (Florian Lindner @flo91)
  • Recording Configuration (Maximilian Irlinger)
  • Ansible-Elektra (Lukas Hartl) and (Maximilian Irlinger)
  • Configure Olimex Base Images (Maximilian Irlinger)
  • Improving Build Server Infrastructure (Lukas Hartl) and (Maximilian Irlinger)
  • Improve Java Development Experience (Michael Tucek)
  • Rewriting tools in C (@hannes99)

Statistics

We closed 17 issues for this release.

About 11 authors changed 156 files with 4020 insertions(+) and 3298 deletions(-) in 134 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from

The hashsums are:

  • name: elektra-0.9.11.tar.gz
  • size: 9149900
  • md5sum: 227094a7760f8faece1a7b8386d01fce
  • sha1: a0d2f0d39c8360f67da96585993223b7f9cdebe6
  • sha256: 3509adf83efdf08fa0dc5d51396772addff7d8fc82299c18b146fa4406eecff5

The release tarball is also available signed using GnuPG from

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj over 3 years ago

Elektra - 0.9.10 Release

  • guid: CC66FD33-7491-4BFA-975A-36FAB67D45D6
  • author: Mihael Pranjić
  • pubDate: Sat, 09 Jul 2022 09:40:18 +0200
  • shortDesc: Kotlin Binding, Remove Internal Iterators

We are proud to release Elektra 0.9.10.

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.

You can also read the news on our website.

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:

sh docker pull elektra/elektra docker run -it elektra/elektra

Highlights

  • Kotlin Binding
  • Remove internal iterators

Kotline Binding

We created a new Binding for Kotlin with convenience functions and various utilities. There is also the possibility to convert KeySets to Kotlin data classes or collections and back. Read the Kotlin Readme for more information.

A big thanks to (@Gratla and @mandoway) for this beautiful work.

Remove Internal Iterators

In Elektra there are currently two different ways to iterate over KeySets. The so-called "internal" iterator is, however, inferior and creates several problems, e.g. it was a side effect to be considered for every function call that involved a KeySet.

With this release, we started removing the internal iterators by removing keyRewindMeta, keyCurrentMeta, ksHead, and ksTail functions. The external iterators are now the way to go, see Iterators.

A huge thanks to (Florian Lindner @flo91) for doing this thankless cleanup task.

Plugins

The following section lists news about the plugins we updated in this release. Overall changes:

  • We changed all plugins, except directoryvalue to use external iteration of KeySets (Florian Lindner @flo91)

Python

  • Added .pop(), .cut(), .head() and .tail() examples to keySet example (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)
  • Added a new DNS plugin fully written in Python (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)

lineendings - Plugin

  • Enable emitting of warnings during kdbGet(), refactor and update methods and return values to match the conventions (e.g. #defined constants for return values) (Michael Langhammer @milangs, Florian Lindner @flo91)

date

  • Exclude the tests for formats that require GNU extensions of strptime on non-GNU systems. (@kodebach)

Length

  • Warnings are now added on kdb get (@mandoway)

Curlget

  • Removed usages (and contents) of VERBOSE macro (@mandoway)

Sorted

  • Added new validation plugin: Sorted. It checks whether an Elektra array is sorted by its value or a given key in a configurable direction (@mandoway @Gratla)

mini

  • Fix usage of bitwise operator with boolean operands. (Mihael Pranjić @mpranj)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Compatibility

  • Remove keyRewindMeta, keyCurrentMeta, ksHead, and ksTail functions for internal iteration of Keysets and Metadata of Keys (Florian Lindner @flo91)

Core

  • Removed mentions of VERBOSE and replaced debug prints with the logger (@mandoway)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up-to-date with the multi-language support provided by Elektra.

  • Remove internal iterators for SWIG (Python, Lua, Ruby) and go-bindings (Florian Lindner @flo91)

Java

  • Implement NavigableSet in JNA KeySet (Burkhard Hampl @bhampl)
  • Added a Java example for meta keys and arrays (@mandoway)
  • Added examples to HelloElektra.java (Leonard Guelmino @leothetryhard, Lukas Hartl @lukashartl)
  • Added example which shows how to add a basename for a key. (Philipp Leeb @Gratla)
  • Introduced Key#setNull, ReadableKey#isNull (Michael Tucek @tucek)
  • Fixed Key#setBoolean, ReadableKey#isBoolean (Michael Tucek @tucek)
  • Fixed Java Whitelist plugin tests (Michael Tucek @tucek)
  • Fixed missing Javadoc in Java Sorted plugin (Michael Tucek @tucek)

Ruby

  • Replace NULL in rb_funcall with Qnil to avoid compiler errors/warnings on some systems. (@kodebach)

Kotlin

  • Added new JNA subproject which builds an Elektra extension library for Kotlin (@mandoway & @Gratla)
  • Added get(), getOrNull() extension with type inference for primitive types (@mandoway)
  • Added set() extension with type inference for primitive types (@mandoway)
  • Added keySet serialization capabilities (to any format and data classes, with array support) (@mandoway)
  • Added keyOf() extension and keyOf{} builder for key creation (@Gratla)
  • Added keySetOf() extension and keySetOf{} builder for keySet creation (@Gratla)
  • Added withKDB() extension which wraps the try block (@Gratla)
  • Added nameParts extension value which provides a sequence of key name parts (@mandoway)
  • Added various utility functions like Key.isEmpty, Key.getMetaOrNull, ... (@Gratla & @mandoway)
  • Added example project for kotlin binding (@Gratla & @mandoway)
  • Added lookupOrThrow(), lookupOrNull(), and get operator to search for keys in KeySets without Java Optionals (@mandoway)
  • Fixed setting null, by using new JNA setNull() function (@mandoway)

Python

  • Deleted occurrences of removed property key.fullname (@mandoway)

CPP

  • Removed mentions of VERBOSE (@mandoway)

Python

  • Deleted occurrences of removed property key.fullname (@mandoway)

CPP

  • Removed mentions of VERBOSE (@mandoway)

Tools

elektrad

  • improve logging in elektrad (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)
  • Update elektrad to use last version of the go-bindings without internal iterators for Keysets and Metadata (Florian Lindner @flo91)

webui

  • fix issues from namespace-overhaul (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)
  • apply non-breaking updates to packages (Leonard Guelmino @leothetryhard, Lukas Hartl @lukashartl)

webd

  • fix path building for requests to elektrad (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)

QT GUI

  • Removed mentions of VERBOSE (@mandoway)
  • Fixed dependency for Debian packages (Markus Raab)

Scripts

  • Fix kdb reset. (Markus Raab)

Documentation

  • Small readability improvement (@Toniboyyy)
  • Python: add guide for Debian 11 (bullseye) (Lukas Hartl @lukashartl)
  • Fix some errors in the tutorials Cascading Lookups and Command-line Options (Florian Lindner @flo91)
  • Extend and update the tutorial for writing specifications, add section about using specs in production (Florian Lindner @flo91)
  • Tutorial: add cleanup section to the specification tutorial (Lukas Hartl @lukashartl) and (@leothetryhard)
  • Add readme-file Iterators about cm2022s project showcasing usage in various programming languages (Florian Lindner @flo91 and Michael Langhammer @Milangs)
  • Updated elektra-web installation manual (doc/tutorials/install-webui.md) (Leonard Guelmino @leothetryhard, Lukas Hartl @lukashartl)
  • Improve jna documentation (Burkhard Hampl @bhampl)
  • Add Stream API example in Java binding documentation (Richard Stöckl @Eiskasten)
  • Minor readability improvement in CODING.md (@loessberth)
  • Fix dead link and compile instructions (Burkhard Hampl @bhampl)
  • Update links from certificate section (Richard Stöckl @Eiskasten)
  • Fix wrong KDBException reference in java tutorial and improve it (Burkhard Hampl @bhampl and Richard Stöckl @Eiskasten)
  • Update FAQ. (Markus Raab)

Tutorials

  • The tutorial for Contributing from Windows has been updated. (@kodebach)
  • The tutorial for CLion now contains a section for setting up the WSL compiler (@mandoway)
  • Rephrased sentence in code-generator.md to enhance readability (@Gratla)

Tests

  • Add tests for the Error/Warnings-Factory in libtools (Florian Lindner @flo91)
  • Add tests for keySet in the python binary (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)
  • Added test for JNA KDB which checks if both get-method implementations return the same result. (Philipp Leeb @Gratla)

Build

CMake

  • CMake now automatically detects all JNA plugins that are added to Gradle. (@kodebach)

Infrastructure

Jenkins

  • make copying of artifacts much faster (Lukas Hartl)
  • fixed several problems (Lukas Hartl)

Cirrus && GitHub Actions

  • Fix wrong path for clang builds on macOS. (Mihael Pranjić @mpranj)

Git

  • We added a .gitattributes file to make it easier to build Elektra with WSL. (@kodebach)

GitHub

  • Added dependabot configuration (Lukas Hartl @lukashartl)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date. Furthermore, we changed:

  • Overhauled the Get Started page by adding a brief kdb introduction. (@Milangs)

Outlook

We are currently working on following topics:

  • 1.0 API (Stefan Hanreich) and (Klemens Böswirth @kodebach)
  • Elektrify KDE and GNOME (Mihael Pranjić @mpranj)
  • Elektrify XFCE (Richard Stöckl @Eiskasten)
  • Mounting SQL databases (Florian Lindner @flo91)
  • Recording Configuration (Maximilian Irlinger)
  • Ansible-Elektra (Lukas Hartl)
  • Improving Build Server Infrastructure (Lukas Hartl) and (Maximilian Irlinger)
  • Improve Java Development Experience (Michael Tucek)
  • KDB access using FUSE (Alexander Firbas)
  • Shell completion (Ulrike Schäfer)
  • Rewriting tools in C (Florian Lindner @flo91), (Maximilian Irlinger) and (Richard Stöckl @Eiskasten).

Statistics

We closed 51 issues for this release.

About 25 authors changed 376 files with 39350 insertions(+) and 13609 deletions(-) in 393 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.9.10.tar.gz
  • size: 9150058
  • md5sum: c77f5bcf4e8202fd6d8b6ad6e7c841f4
  • sha1: d63c24ea6c666b02d0bd9f059f2d73f96009496d
  • sha256: ee50fb5e9814b45a8e99f39435b1461d4b7a7daa27eee240bdbfed98f2c4c0f5

The release tarball is also available signed using GnuPG from here or on GitHub

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj over 3 years ago

Elektra - 0.9.9 Release

  • guid: 3177C958-9473-41BA-9918-A56A18CF20E8
  • author: Mihael Pranjić
  • pubDate: Thu, 10 Mar 2022 07:40:35 +0100
  • shortDesc: Bug Fixes, Java Plugins, Elektra 1.0 Decisions

We are proud to release Elektra 0.9.9.

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.

You can also read the news on our website.

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:

sh docker pull elektra/elektra docker run -it elektra/elektra

Highlights

  • Bug fixing in FLOSS course
  • Java plugins
  • 1.0 decisions

Bug Fixing in FLOSS Course

As you will read in this release notes, a massive amount of bugs were fixed within this release. Many of them were resolved from students participating in a university course about FLOSS This demonstrates that homework of students can be very useful and in public service.

In the upcoming term there will be a course about configuration management in which Elektra will also be used and improved upon.

Java Plugins

The version of the process plugin, makes it much easier to implement plugins in Java. You can now call an implementation org.libelektra.Plugin via process and the org.libelektra.process.PluginProcess class. To mount Java plugins the new helper script kdb mount-java can be used.

For more information take a look at the updated tutorial and the new manpage for kdb mount-java.

1.0 Decisions

With this release we greatly updated our decisions for the 1.0 release. This brings us one big step closer to 1.0.

Plugins

The following section lists news about the plugins we updated in this release.

filecheck

  • Removed unused variable that threw an error in filecheck.c. (Vaibhav Ganesh @flackojr)

mmapstorage

  • Removed unused variable that threw an error in mmapstorage.c. (Vaibhav Ganesh @flackojr)

csvstorage

  • Add array meta key to the parentKey of imported Keys (@muskater) (@4ydan) (@lawli3t)

specload

  • Change and move keyCompareMeta (const Key * k1, const Key * k2) from src/libs/elektra/keytest.c to src/plugins/specload/specload.c and integrate functionality of keyCompare (const Key _ key1, const Key _ key2) into isChangeAllowed (Key * oldKey, Key * newKey), because that is the only place where it was used. (@flo91)

uname

  • Minor improvement of source code readability in uname.c (@lawli3t)

quickdump

  • Fixed an issue with type-limits on ARM32 (see issue #4217). (Klemens Böswirth @kodebach)

dump

  • The exported functions serialise and unserialise have been renamed to serialize and unserialize. (Klemens Böswirth @kodebach)
  • New exported functions int fserialize(KeySet * ks, FILE * file, Key * errorKey) and int funserialize(KeySet * ks, FILE * file, Key * errorKey) have been added. These are wrappers around serialize and unserialize that allow calling from C with a standard FILE *. (Klemens Böswirth @kodebach)

process

  • The plugin was completely rewritten. The new version is incompatible with the old version. The new plugin that uses a simple protocol to allow an external application to act as a plugin. This can for example be used to write plugins in Java without going through JNI. (Klemens Böswirth @kodebach)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Compatibility

  • Remove the deprecated flags KEY_NAME and KEY_COMMENT (closes issue #3152) (Florian Lindner @flo91)

Core

  • KeySet now also has a reference counter like Key. The new functions ksIncRef and ksDecRef behave like their counterparts keyIncRef and keyDecRef. ksDel also behaves like keyDel in regard to reference counting, i.e. it does nothing unless the reference count is 0. The reference counting is very useful for bindings (especially with automatic garbage collection). (Klemens Böswirth)
  • Clarified that our reference counting mechanism is more related to a shared lock than to the concept of shared ownership. (Klemens Böswirth)
  • Both the reference count for Key and for KeySet now use uint16_t to reduce memory usage. Key previously used size_t. (Klemens Böswirth)
  • Reorder Key and KeySet struct members to aviod padding and make space for a new uint16_t member, reserved for future use. (Mihael Pranjić @mpranj)
  • Improve keyReplacePrefix by using new keyCopy function instead of manually copying the name of the Key (@lawli3t)
  • Added else error to core for elektraGetCheckUpdateNeeded (Aydan Ghazani @4ydan)
  • Include NULL terminators in hashing to avoid collisions (@lawli3t)
  • Fix check for valid namespace in keyname creation (@JakobWonisch)
  • Fix keyCopyMeta not deleting non existant keys in destination (see #3981) (@JakobWonisch)
  • The ELEKTRA_ERROR_*_NAME and ELEKTRA_WARNING_*_NAME constants have been removed from the public API. Use ELEKTRA_ERROR_* and ELEKTRA_WARNING_* instead. (Klemens Böswirth @kodebach)
  • Fixed a bug that prevented the creation of cascading keys whose name contains a colon (:). (Klemens Böswirth @kodebach)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.

Java binding

  • Integrated the HelloElektra example as Gradle sub-project to allow it to directly depend on the current binding (Michael Tucek)
  • Extend HelloElektra example with cutpoint and value setting example (@JakobWonisch)
  • Updated Gradle to 7.4. (Mihael Pranjić @mpranj)
  • Added integration with the new process plugin. (Klemens Böswirth @kodebach)
  • Integrated the HelloElektra example as gradle sub-project to allow it to directly depend on the current binding (Michael Tucek)
  • Add LinkChecker Java Plugin. (@aaronabebe)

FUSE Binding

  • Added check for existence of accessed path before opening new file descriptor (@lawli3t)

Python Binding

  • Added examples for append, extend and remove keysets in python. (@4ydan)

Tools

  • Implement kdb validate <key>, collect warnings and errors while kdb.get() and kdb.set(), see #3674 (@flo91), (@JakobWonisch)
  • Remove names from kdb mount (@JakobWonisch)
  • Add kdb mount-java helper script for mounting Java plugins (Klemens Böswirth @kodebach)

Scripts

  • Updated reformat-c script to use clang-format version 13. (Mihael Pranjić @mpranj)
  • Fix bug where the PATH environment variable would get overwritten in some of the Docker images. Reduce image size (Ivaylo Ivanov)
  • Allow JSON to be also written as json. (@muskater)

Documentation

  • Integrate missing pages to website (Ivaylo Ivanov)
  • Improved compilation documentation (Ivaylo Ivanov)
  • Fix Links in README.md and small clarifications. (Markus Raab)
  • Remove previous authors. (Markus Raab)
  • add pre/postconditions and invariants to module keytest (@lawli3t)
  • Updated the news template. (Mihael Pranjić @mpranj)
  • Update and improve tutorial and in-code comments for high-level API (Tobias Schubert @qwepoizt)
  • Improve documentation of opts library (Tobias Schubert @qwepoizt)
  • Update tutorial "High-level API (with code-generation)" to reflect change of loadConfiguration()'s signature in release 0.9.5 (Tobias Schubert @qwepoizt)
  • add pre/postconditions and invariants to module keyvalue (@lawli3t)
  • Update and improve inline documentation of kdb gen. (Tobias Schubert @qwepoizt)
  • Fix broken links. (Robert Sowula)
  • Emphasize that type is required when the HL API is used. (Tobias Schubert @qwepoizt)
  • Add debugging tutorial. (Tobias Schubert @qwepoizt)
  • Improve wording and formatting of DESIGN.md (@lawli3t)
  • Correct various typing-, spelling- and grammar-errors in the .md-files in the directory doc and its subdirectories. (Florian Lindner @flo91)
  • Continue 1.0 decisions. (Markus Raab and @lawli3t)
  • Make version description in key names man page consistent (@JakobWonisch)
  • Fix typo in elektra-backends man page (@JakobWonisch)
  • Fix readability in bootstrapping man page (JakobWonisch)
  • explained in the docker test tutorial how to run the container with podman instead of docker. (@muskater)
  • Add a new example on how to use keyCopy. (@muskater)
  • Fix small error in the "Get Started" guide: the build and test command used a wrong directory and would not work if they were copy and pasted. (@muskater)
  • Added verification to the "Arrays" tutorial (Ivaylo Ivanov)
  • Remove deprecated type=int from .ini files (Ivaylo Ivanov)
  • Added verification to the "Validation" tutorial (Ivaylo Ivanov)
  • Fix some typos in the "Getting Started" page (Ivaylo Ivanov)
  • Added debian buster tutorial to python bindings tutorial (@4ydan)
  • made the debian tutorial a bit more precise and removed sudo command (@4ydan)
  • Fixed some typos in the "namespaces.md" documentation (@muskater)
  • Fix an error and some overmatching problems in scripts/sed and fix errors in documentation (by running the scripts/dev/fix-spelling script) (Florian Lindner @flo91)
  • Added some improvements to the core api documentation (@muskater)
  • Update and improve the CLion tutorial (doc/tutorials/contributing-clion.md), add screenshots (@flo91)
  • Improve documentation for storage plugins (@lawli3t)
  • Add list of sources mentioning or linking to Elektra (@JakobWonisch)
  • Linked to the installation instruction of the webui in its README file. (@muskater) (@lawli3t) (Aydan Ghazani @4ydan)
  • Linked to the installation instruction of the webui in its README file and added references to Docker in the get-startde-guide. (@muskater) (@lawli3t) (Aydan Ghazani @4ydan)
  • Linked to the installation instruction of the webui in its README file and added references to Docker in the get-started-guide. (@muskater) (@lawli3t) (Aydan Ghazani @4ydan)
  • Added screenshots and a quick walk through in the Qt-GUI README. (@muskater) (@lawli3t) (Aydan Ghazani @4ydan)
  • Improve example for kdb-restore man page and fix typos (@JakobWonisch)
  • Improve example for kdb-restore man page and fix typos (@JakobWonisch)
  • Fix some typos in the "Getting Started" page (Ivaylo Ivanov)
  • Added some improvements to the core api documentation (@muskater)
  • Add screenshots with hints to CLion PR tutorial (@JakobWonisch)
  • Fix typo in elektra-backends man page (@JakobWonisch)
  • Expanded the webside guid for easier understanding and linked to cmake.org. (Philipp Nirnberger @nirnberger)
  • Expanded the webside guide for easier understanding and linked to cmake.org. (Philipp Nirnberger @nirnberger)
  • Fix small error in CLion tutorial: CMake options would create a directory named ~ in home directory (Maximilian Irlinger @atmaxinger)

Tests

  • Disable Rust from buster (Markus Raab)
  • Cleanup tests/linkchecker.whitelist and fix off-by-1 bug of the counter in the scripts/link-checker script (increase counter before printf) (Florian Lindner @flo91)
  • add tests for the intercept/env binding (Ivaylo Ivanov)
  • add and improve checks in scripts/sed (Florian Lindner @flo91)
  • change the cpp Key-class (key.hpp) to check the return values of the called c-functions and throw exceptions if values that indicate an error are returned + add tests that check for this exceptions (Florian Lindner @flo91)
  • Added more test cases for the keyCopy function (@muskater)
  • add exception tests for key C++ bindings (Ivaylo Ivanov)
  • Added a shell script and a task that checks whether the filenames of newly added files are compliant with the convention. It is executed by the cirrus CI as well as the Jenkins CI (@muskater)
  • Add a new shellrecoder test to doc/tutorials/merge.md (Florian Lindner @flo91)
  • Added the possibility to enable all the shell recorder test cases for all plugins and fixed some plugin README files in process (@muskater)
  • Convert example in doc/help/kdb-test.md to shell recorder test (@JakobWonisch)

Packaging

  • add flatpak package. See scripts/flatpak/README.md and scripts/flatpak/org.libelektra.kdb.yamlfor more info (Ivaylo Ivanov)
  • Remove hardcoded SWIG 3.0 paths. (Mihael Pranjić @mpranj)

Build

CMake

  • Marked certain variables as advanced and separated user modifiable and unaccessable variables. (Vaibhav Ganesh @flackojr)

Docker

  • Add Fedora 35 images. (Mihael Pranjić @mpranj)

Infrastructure

Jenkins

  • Replace Fedora 33 builds with Fedora 34, and Fedora 34 builds with Fedora 35. (Mihael Pranjić @mpranj)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date. Furthermore, we changed:

  • Update npm dependencies, add forked and update angular-marked module. (Mihael Pranjić @mpranj)
  • Remove links to Travis CI and replace them with Github Actions (with badge). (Mihael Pranjić @mpranj)

Other

  • Make Elektra reuse reuse compliant (Ivaylo Ivanov)

Outlook

We are working on following new topics since the last release:

  • Ansible-Elektra (Lukas Hartl)
  • Recording Configuration (Maximilian Irlinger)

Furthermore, we are still working on following topics:

  • 1.0 API (Stefan Hanreich) and (Klemens Böswirth)
  • Improve Java Development Experience (Michael Tucek)
  • KDB access using FUSE (Alexander Firbas)
  • Shell completion (Ulrike Schäfer)
  • Elektrify KDE and GNOME (Mihael Pranjić)

Statistics

We closed 90 issues for this release.

About 29 authors changed 491 files with 17997 insertions(+) and 6089 deletions(-) in 648 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.9.9.tar.gz
  • size: 8878567
  • md5sum: f5109eb0c96fb4164a5437bdebc3bf79
  • sha1: a08df79301d56dd8f3711efa1b78b5a4d003d42f
  • sha256: 834da360170daa632bbb46dd2e819271327dce1c51be1d7bb2ec22311ded54cb

The release tarball is also available signed using GnuPG from here or on GitHub

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj almost 4 years ago

Elektra - 0.9.8 Release

  • guid: 0CB8C139-730C-4CCD-9FB4-0C7C4AA4DBF2
  • author: Mihael Pranjić
  • pubDate: Mon, 04 Oct 2021 00:02:45 +0200
  • shortDesc: Redshift Elektrified, HL API & Java Binding Improvements

We are proud to release Elektra 0.9.8.

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.

You can also read the news on our website.

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:

sh docker pull elektra/elektra docker run -it elektra/elektra

Highlights

  • kdb now prohibits write operations on cascading keys that miss a corresponding existing key. See the details in the Tools section below and the new subsection on cascading writes in the tutorial on cascading keys for further information. (Alexander Firbas)
  • Redshift is now elektrified. (Tobias Schubert @qwepoizt)

Redshift and Elektra

We have created a version of Redshift that uses Elektra for configuration management!

We removed and refactored Redshift's code for loading configuration files, parsing CLI options and validating configuration to use Elektra. Redshift with Elektra has about 700 fewer lines of code (-16%) and is a great example of what Elektra is all about: More applications with less code for configuration management!

To test it, take a look at our PR Refactor to use Elektra and follow the instructions provided in CONTRIBUTING.md.

Benefits of Redshift using Elektra

Refactoring Redshift to use Elektra brings the following benefits:

  • Fewer lines of code: reduction of ~700 LOC or 16% (measured across all *.c and *.h files exclusive of files automatically generated by Elektra).
  • Adding new configuration settings is easier and takes less time: Validation and parsing of setting values (from configuration file and CLI options) is handled by Elektra - no custom code required!
  • Clean separation of application code and the specification of supported configuration settings (including defaults and validation rules).
  • Automatic generation of CLI help text.

HL API improvements

Redshift with Elektra uses the high-level API.

We have made a large number of improvements to the high-level API in the course of refactoring Redshift. The highlights are:

  • Improved detection of differences in specification between an application's compilation and runtime.
  • Improved validation of CLI options.
  • Early detection of errors in specification files.
  • Updated and improved documentation and tutorials.
  • Various other bugfixes.

More improvements and details are explained in later sections of these release notes.

Thanks to Klemens Böswirth, Markus Raab and Tobias Schubert!

Windows releases

We are now shipping experimental releases for Windows 32- and 64-bit! They can be downloaded here.

A big success is that Redshift already works with Elektra under Windows.

Plugins

The following section lists news about the plugins we updated in this release.

gopts

  • The gopts plugin now includes deeply nested options and arguments in the generated help message. (Tobias Schubert @qwepoizt)
  • Errors from gopts are now correctly reported. (Klemens Böswirth)
  • Fix wrong variable names in gopts_win32.h. (Tobias Schubert @qwepoizt)

range

  • The range plugin now uses metakey type as fallback, if check/type is not specified. (Tobias Schubert @qwepoizt)
  • The range now treats all validation problems as warnings during kdbGet(). (Tobias Schubert @qwepoizt)

spec

  • The spec plugin now runs before other postgetstorage plugins, so that validation can happen during kdbGet as well. This is especially relevant in combination with gopts. (Klemens Böswirth)
  • Make spec plugin (with no support for # and _ in key names) work in mingw-w64 builds. (Tobias Schubert @qwepoizt)

sync

  • Add support for mingw-w64 builds using fflush. (Tobias Schubert @qwepoizt)

wresolver

  • Add missing ELEKTRA_PLUGIN_COMMIT export. (Tobias Schubert @qwepoizt)

TOML

  • Improvements to the parser, comment handling and especially quoting of strings. (Klemens Böswirth)
  • The toml plugin now supports all four kinds of strings via the tomltype metadata. The plugin also remembers which kind was used and handles escape sequences properly, instead of always converting to basic strings. For details take a look at the updated README (Klemens Böswirth)
  • The comment/#/space metakey is now used correctly to store the actual whitespace characters from the file, instead of a number. (Klemens Böswirth)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Compatibility

  • Introduced public C API function ksSearch
  • Previously public function ksSearchInternal is now static. Use ksSearch instead.

(Michael Tucek)

Core

  • Remove obsolete ksNeedSync function. (Mihael Pranjić)
  • Replace various occurences of sprintf by snprintf and fix out of bounds array access in markdownlinkconverter. (Mihael Pranjić)

High-level API

  • Modified High-level API to treat all warnings as errors. (Tobias Schubert @qwepoizt)
  • Implemented support for warnings in High-level API error handling. (Tobias Schubert @qwepoizt)
  • Fix a small bug for warnings in High-level API. (Tobias Schubert @qwepoizt)
  • Fix resource management in High-level API error handling. (Tobias Schubert @qwepoizt)
  • Implement a check to detect whether an application's specification was properly mounted and spec-mounted. (Tobias Schubert @qwepoizt)
  • Implement a check to detect whether an application's specification was changed after installation. (Tobias Schubert @qwepoizt)
  • Add sanity-checks to resource management. (Tobias Schubert @qwepoizt)
  • Refactor and modularize code. (Tobias Schubert @qwepoizt)
  • Update and improve inline documentation. (Tobias Schubert @qwepoizt)
  • Remove "minimal validation" in favor of the new checks (see above). (Tobias Schubert @qwepoizt)

Ease

  • Implement calculation of a specification token (=sha-256 hash). (Tobias Schubert @qwepoizt)
  • Add asmonier's sha-2 for sha-256 hash calculation. (Tobias Schubert @qwepoizt)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.

Java binding

  • Upgraded Java binding gradle wrapper to 7.2.
  • Java source files are formatted using the Google Java format
  • Renamed zero argument static factory method Key::createNameless to Key::create. To migrate to this change, just update calling code to use the new method name.
  • Updated method documentation previously publishing the error key based error handling approach to the Java binding consumer. Such arguments are now explicitly only used for returning warning information in case no error occurred. In case of an exceptional state, appropriate exceptions are thrown. Such exceptions provide access to the underlying key containing warning and error information as meta data. Please review API usage to consider the more elaborated explanation of how Elektra uses this argument's value. Affected signatures:
    • Updated javadoc for KDB::open(Key)
    • Updated javadoc for KDB::open(KeySet, Key)
    • Updated javadoc for KDB::close(Key)
    • Updated javadoc for KDB::get(Key)
    • Updated javadoc for KDB::get(KeySet, Key)
    • Updated javadoc for KDB::set(KeySet, Key), better explaining the relevance of the second argument parentKey
  • Introduced KeySet::remove(Key) and KeySet::remove(String)
  • Removed KeySet::lookup(Key, int) and KeySet::lookup(String, int) as well as accompanying flag definitions KeySet::KDB_O_NONE, KeySet::KDB_O_DEL and KeySet::KDB_O_POP. Please use KeySet::lookup(Key) and KeySet::lookup(String) instead. Instead of KeySet::KDB_O_DEL, please consider using Key::release. The proper replacement for KeySet::KDB_O_POP is KeySet::remove(Key) or KeySet::remove(String).
  • Native library proxy interface Elektra is now package private (previously was public).
  • Added example Java plugin whitelist (see here)
  • Changed Key nextMeta() to Optional<Key> nextMeta () no longer throwing NoSuchElementException for non-exceptional behavior
  • Native library proxy interface Elektra is now package private (previously was public)
  • Added example Java plugin whitelist
  • Added support of binary valued keys:
    • Introduced Key::getBinary() and Key::setBinary(byte[])
    • Renamed KeyBinaryTypeNotSupportedException to KeyStringValueException
    • Introduced KeyBinaryValueException
    • Improved Key test coverage
  • Fixed example project in examples/external/java/read-keys-example
    • now works with a standard installation of Elektra
    • updated code to work with current Java binding
  • KeySetReleasedException and KeyReleasedException have been replaced by the native IllegalStateException
  • Introduced abstraction ReadableKey to better reflect the limitations of meta data keys via a type hierarchy. Meta data keys are now returned as ReadableKeys:
    • Key extends ReadableKey
    • Key class is now final
    • Changed Key Key::nextMeta() to Optional<ReadableKey> Key::nextMeta(), no longer throwing NoSuchElementException for non-exceptional behavior
    • Changed Key Key::currentMeta() to ReadableKey Key::currentMeta()
    • Changed Optional<Key> Key::getMeta(String) to Optional<ReadableKey> Key::getMeta(String)
    • Meta data keys can no longer be manually released
    • Removed Key::incRef, Key::decRef and Key::getRef
    • ReadableKey/Key now implements Comparable<ReadableKey>
    • int Key::cmp(Key) has been renamed to int Key::compareTo(Key)
    • ReadableKey now implements equals and hashCode in line with the contract for int Key::compareTo(Key)
    • ReadableKey/Key no longer implements Iterable<String> for iterating over the parts of a key's name - use Iterator<String> ReadableKey::keyNameIterator () instead
    • Key now implements Iterable<Key> to iterate over a key's meta data ReadableKeys
    • Fixed API method typo: Renamed ReadableKey::isDirectBelow/Key::isDirectBelow to isDirectlyBelow
  • KeyNameIterator and KeySetIterator are now package private
  • KeySetAppendException has been renamed to KeySetException and now conveys general KeySet related exceptional states
  • KeySet now implements SortedSet<Key> (see Java API). Previously KeySet was only implementing Iterator<Key>. Now a native key set can be used via its KeySet representation wherever one of the following Java Collection Framework interfaces is supported:
    • Iterable
    • Collection
    • Set
    • SortedSet

(Michael Tucek)

GLib

  • Compile glib binding with -Wno-pedantic for compatibility. (Mihael Pranjić)

Tools

  • Really add all tools when using -DTOOLS=ALL. (Markus Raab)
  • ZeroMQ Hub: fix compilation and man page. (Markus Raab)
  • Configure packaging for FUSE tool. (Alexander Firbas)
  • FUSE: fix bug preventing binary writes. (Alexander Firbas)
  • Ambiguous write operations are now disabled in kdb. (Alexander Firbas)
  • webd: update npm dependencies. (Mihael Pranjić)

KDB

  • kdb set, kdb meta-set: Only allow writes to the cascading namespace if the lookup succeeds. Otherwise, the operation is ambiguous and therefore aborted. No more guessing of namespaces in case a cascading key is given (user:, system: for kdb set, spec: for kdb meta-set), (Alexander Firbas)
  • kdb set, kdb meta-set: Validation of keys can no longer be bypassed by using non-cascading keys (except with the new --force (-f) option). (Alexander Firbas)
  • Disable -N/--namespace option in all kdb subcommands (Alexander Firbas)
  • Implement new name part getter commands kdb namespace, kdb basename and kdb dirname. (Alexander Firbas)
  • kdb file: Remove namespace guessing (in case a cascading key is given, it needs to resolve to an existing key). (Alexander Firbas)
  • kdb editor/import: Disable the use of cascading names (and the 'validate' strategy operating on cascading keys) entirely. (Alexander Firbas)
  • Update numerous tests to comply with changes above. (Alexander Firbas)
  • Add a new subsection on cascading writes to the tutorial on cascading keys. (Alexander Firbas)
  • kdb gen: Generate specification token during code-generation and add it to generated contract. (Tobias Schubert @qwepoizt)
  • kdb gen: Improve naming of variables to make code easier to understand. (Tobias Schubert @qwepoizt)
  • kdb spec-mount: Improve usability by failing with helpful error messages, if the specification contains errors. (Tobias Schubert @qwepoizt)

Scripts

  • Add script for mingw-w64 i686 build. (Tobias Schubert @qwepoizt)

Documentation

  • Add link and small improvements to tutorial about writing specifications and logger. (Markus Raab)
  • doc: add pre/postconditions and invariants to module key (@lawli3t)
  • doc: add pre/postconditions and invariants to module keymeta (@lawli3t)
  • Fix broken links (@lawli3t)
  • Remove previous authors. (Markus Raab)
  • add pre/postconditions and invariants to module keytest (@lawli3t)
  • Updated the news template. (Mihael Pranjić)
  • Update and improve tutorial and in-code comments for high-level API (Tobias Schubert @qwepoizt)
  • Improve documentation of opts library (Tobias Schubert @qwepoizt)
  • Update tutorial "High-level API (with code-generation)" to reflect change of loadConfiguration()'s signature in release 0.9.5 (Tobias Schubert @qwepoizt)
  • add pre/postconditions and invariants to module keyvalue (@lawli3t)
  • Update and improve inline documentation of kdb gen. (Tobias Schubert @qwepoizt)
  • Fix broken links. (Robert Sowula)

Tests

  • Fix failing testshell_markdown_tutorial_crypto on Mac OS and other OS with GnuPG version >= 2.3.1. (Peter Nirschl @petermax2)
  • Use clang-format 12 for Restyled and update Restyled version. (Mihael Pranjić)
  • Update all Restyled formatters to current versions. (Mihael Pranjić)
  • Add additional test cases for module keytest (@lawli3t)
  • Update tests for high-level API to work with new specification token mechanism. (Tobias Schubert @qwepoizt)
  • Add tests for libease's sha-256. (Tobias Schubert @qwepoizt)
  • Add tests for sha-256 hash calculation of a KeySet. (Tobias Schubert @qwepoizt)
  • Add additional test cases for module keymeta (@lawli3t)

Packaging

  • Add packages for openSuse Leap 15.3. (Robert Sowula)

Build

CMake

  • Add files generated by CMake to .gitignore. (Tobias Schubert @qwepoizt)
  • Add support for i686 to mingw-w64 toolchains. (Tobias Schubert @qwepoizt)
  • Add plugins type, cache, spec, gopts, sync to mingw-w64 builds. (Tobias Schubert @qwepoizt)

Docker

  • Add docker images for ABI tests. (Robert Sowula)
  • Enable BuildKit features to leverage tmpfs to speed up docker build commands. (Mihael Pranjić)
  • Bump Gradle to version 7.2. (Mihael Pranjić)
  • Bump Debian Buster images to Bullseye and Stretch images to Buster. We still leave one Debian Stretch job due to upstream Debian LTS support until June 2022. (Mihael Pranjić)
  • Add Dockerfiles for openSUSE Leap 15.3 and CentOS Stream 8. (Robert Sowula)
  • Add docker image for OpenWrt package building. (Robert Sowula)
  • Add files generated by docker when tutorial run-all-tests-with-docker is followed to .gitignore. (Tobias Schubert @qwepoizt)

Restyled

  • Upgrade to latest stable restylers. (Mihael Pranjić)
  • Added Google Java formatter (Michael Tucek)

Infrastructure

Jenkins

  • Add ABI test stage for release pipeline. (Robert Sowula)
  • Move check stages that don't build the code to a dedicated stage, to avoid confusion when parallel builds are aborted. (Robert Sowula)
  • Add test stages for openSUSE and CentOS. (Robert Sowula)
  • Use tmpfs in Docker to speed up the test suite. (Mihael Pranjić)
  • Add OpenWrt package building stage to release pipeline. (Robert Sowula)
  • Add debian-bullseye-mingw-w64-i686 build to Jenkinsfile. (Tobias Schubert @qwepoizt)

Cirrus

  • Bump FreeBSD images to 12.2 and 13.0 using the LLVM 12 toolchain, drop FreeBSD 11. (Mihael Pranjić)
  • Fix cirrus-file parsing errors. (Mihael Pranjić)
  • Redistribute CPU and memory resources and enable greedy instances. (Mihael Pranjić)

GitHub Actions

  • Migrate most macOS build jobs to GitHub actions to speed up builds. (Mihael Pranjić)
  • Upgrade macOS GCC build job to GCC 11. (Mihael Pranjić)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date. Furthermore, we changed:

  • Update npm dependencies. (Mihael Pranjić)

Outlook

We are currently working on following topics:

  • 1.0 API (Stefan Hanreich) and (Klemens Böswirth)
  • KDB access using FUSE (Alexander Firbas)
  • Improve Java Development Experience (Michael Tucek)
  • Improve Plugin Framework (Klemens Böswirth)
  • Default TOML plugin (Klemens Böswirth), (Markus Raab) and (Jakob Fischer)
  • Elektrify KDE (Dardan Haxhimustafa), (Felix Resch) and (Mihael Pranjić)
  • Elektrify GNOME (Mihael Pranjić)
  • Continious Releases (Robert Sowula)
  • Improve 3-way merge (Dominic Jäger)
  • Shell completion (Ulrike Schäfer)
  • Ansible module (Thomas Waser)

Statistics

We closed 59 issues for this release.

About 17 authors changed 396 files with 13155 insertions(+) and 8331 deletions(-) in 597 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.9.8.tar.gz
  • size: 7753097
  • md5sum: d978c17aae94d79f9d1f26b547bc46fe
  • sha1: 9725bfd6fca832ed472290e9de3711e01e9bfe54
  • sha256: b1e8908c138b84e788fdff25eab1c2b07e0b422a5fd1667814539ea02f151c58

The release tarball is also available signed using GnuPG from here or on GitHub

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj over 4 years ago

Elektra - 0.9.7 Release

  • guid: 39F907DA-8B5B-4984-9D19-33BAB7B71B3D
  • author: Mihael Pranjić
  • pubDate: Fri, 09 Jul 2021 10:19:29 +0200
  • shortDesc: FUSE Tool, TOML Improvements, ElektraSettings GSettings Bindings

We are proud to release Elektra 0.9.7.

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.

You can also read the news on our website.

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:

sh docker pull elektra/elektra docker run -it elektra/elektra

Highlights

FUSE Tool

We added an experimental preview of the Filesystem in User Space FUSE tool. This tool enables the inspection and modification of the KDB, in the form of a classical filesystem. (Alexander Firbas)

ElektraSettings GSettings Backend

The experimental ElektraSettings GSettings backend has been updated and is working well with GNOME 40. We do not recommend to use it on production systems yet, but we have been testing ElektraSettings as a replacement for dconf successfully and want to share the progess with you. If you want to try ElektraSettings back up all your data first. (Mihael Pranjić)

TOML Improvements

Multiple critical bugs have been fixed in the experimental TOML plugin see below. We are currently working towards using the TOML plugin as the default storage plugin for Elektra. (Klemens Böswirth and Jakob Fischer)

Plugins

The following section lists news about the plugins we updated in this release.

email

  • Introduce email address validation plugin based on regex. (a-kraschitzer)

Resolver

  • Fix invalid cache key name. (Mihael Pranjić)

Length

  • Implement a plugin that validates that a string length is less or equal to given number. (Philipp Oppel)

Blacklist

  • Implement a blacklist plugin that rejects values specified in a metadata array. (Robert Sowula)

TOML

  • Fixed a bug (#3896) that caused the toml plugin to swallow the first letter of all keys (after the namespace), if the parent key was a root key (e.g. user:/). (Klemens Böswirth)
  • The type metakey is now set for numbers on reading. (Jakob Fischer)
  • Rewrote some error messages, to make them less technical. (Jakob Fischer)
  • Fixed parsing of floats/empty keynames/multiline strings. (Jakob Fischer)

Python

  • Fix format string overflow and add error checking when appending to sys.path. (Mihael Pranjić)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Core

  • A few rare bugs (mostly related to empty keyname parts /%/) in the keyname validation and canonicalization logic have been fixed. (Klemens Böswirth)
  • Fix default backend key name for cache compatibility. (Mihael Pranjić)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.

JNA

  • Currently the binding's automated clean-up of native keys and key sets is deactivated until JNI segmentation fault issues are resolved in an upcoming release. After these issues have been resolved, manual clean-up of native resources will be discouraged. Therefore the Key::get*AndRelease convenience methods introduced with the last release have been removed. (Michael Tucek)
  • Upgrade Gradle to 7.1.1. (Mihael Pranjić)

Gsettings

  • Fix user and default (system) namespaces and key names. (Mihael Pranjić)
  • Rewrite dbus change notification mechanism. (Mihael Pranjić)

Scripts

  • Add a script that automates the process of inserting source archive hashsums and git statistics into the release notes during a release. (Robert Sowula)

Documentation

  • JNI docu updates and small fixes. (Markus Raab)
  • Small updates in notification tutorial. (Markus Raab)
  • Add tutorial about writing specifications. (Aaron Abebe aaron.abebe@gmail.com)
  • Change GPG keyserver for receiving the apt key from keys.gnupg.net to keyserver.ubuntu.com (Robert Sowula)
  • The manpages now use the date of the last change recorded in git. (Klemens Böswirth)

Tests

  • Upgrade GoogleTest frameworks to version 1.11.0. (Mihael Pranjić)
  • Add additional test cases for module key. (@lawli3t)
  • Add additional test cases for module keyname. (@lawli3t)
  • Add additional test cases for module keyvalue. (@lawli3t)
  • Add tests for module keyset. (@lawli3t)

Packaging

  • Add packages for following bindings: glib, io_ev, io_glib and io_uv. (Robert Sowula)

Build

Docker

  • Upgrade Alpine Linux images to 3.14.0. (Mihael Pranjić)

Infrastructure

Jenkins

  • Add the deployment of the website to the release pipeline, therefore removing the need to wait until the main pipeline succeeds after a release. (Robert Sowula)
  • Restructure the release job stages to make it more failsafe and enable a re-run without any version conflict until the last stage. (Robert Sowula)
  • Fix invalid package artifact path in release pipeline. (Robert Sowula)
  • Clean Jenkins workspaces after builds. (Mihael Pranjić)

Outlook

We are currently working on following topics:

  • Elektrify KDE (Dardan Haxhimustafa), (Felix Resch) and (Mihael Pranjić)
  • 1.0 API (Stefan Hanreich) and (Klemens Böswirth)
  • Improve Java Development Experience (Michael Tucek)
  • Elektrify GNOME (Mihael Pranjić)
  • Continious Releases (Robert Sowula)
  • KDB access using FUSE (Alexander Firbas)
  • Default TOML plugin (Jakob Fischer) and (Klemens Böswirth)
  • Improve Plugin Framework (Klemens Böswirth)
  • Improve 3-way merge (Dominic Jäger)
  • Shell completion (Ulrike Schäfer)
  • Ansible module (Thomas Waser)

Statistics

About 18 authors changed 307 files with 6547 insertions(+) and 1914 deletions(-) in 304 commits.

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.9.7.tar.gz
  • size: 7712448
  • md5sum: 4355e7df0dcf4178974097604f996747
  • sha1: c418d344d72879dd2b3fd6fa8e9831c921cfaba5
  • sha256: 12b7b046004db29317b7b937dc794abf719c400ba3115af8d41849127b562681

The release tarball is also available signed using GnuPG from here or on GitHub

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj over 4 years ago

Elektra - 0.9.6 Release

  • guid: ad3d9308-4019-46dc-9de0-b3b82de5302a
  • author: Mihael Pranjić
  • pubDate: Mon, 07 Jun 2021 09:48:41 +0200
  • shortDesc: Java Fixes, Documentation Updates, GCC 11 and Clang 12 Compatibility

We are proud to release Elektra 0.9.6.

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.

You can also read the news on our website

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run docker run -it elektra/elektra.

Highlights

  • Java fixes: JNI plugin fixed and JNA bindings improved
  • Fedora 34 and Debian Bullseye packages added
  • Documentation Improvements & Cleanups
  • GCC 11 and Clang 12 compatibility

JNI plugin fixed

The JNI plugin was encountering a double free on open. This has been fixed in conjunction with an update to JNA binding release mechanism. The previously disabled JNI test have been fixed and enabled.

For how to write plugins, please refer to java-plugins.md as well as the JNI plugin and JNA binding documentation.

Note that it is currently not possible to mount plugins written in Java (see #3881).

Plugins

The following section lists news about the plugins we updated in this release.

JNI

  • Fixed double free issues and re-enabled tests
  • Updated documentation
  • Increased minimum required JDK version to 9

(Michael Tucek)

Special thanks to (Klemens Böswirth), (Mihael Pranjić) and (Robert Sowula) for helping with the problem analysis!

Dbus, Dbusrecv and Zeromqsend

  • Internal changes to ensure compatibility with the new elektraNotificationContract. (Klemens Böswirth)

Xerces

  • Store length of an array in metakey array according to array decision. (Robert Sowula)

YAML Smith and Yan LR

  • Removed plugins. (René Schwaiger)

ni

  • Silence Clang 12 warnings about suspicious string literal concatenation. (Mihael Pranjić)

Lua

  • Removed outdated information from docs (@a-kraschitzer)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Core

  • Remove keyCompareBy(Name)?Owner (@a-kraschitzer)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.

SWIG

  • Remove -Wno-shift-overflow warnings option from SWIG bindings compile flags. (Mihael Pranjić)
  • Suppress SWIG/Ruby bindings warning about operator != ignored. (Mihael Pranjić)

JNA

  • Gradle wrapper and docker images upgraded to 7.0.2
  • Minumum Gradle version decreased to 6.0
  • Upgraded JNA dependency from 4.5.2 to 5.8.0
  • Increased minimum required JDK version to 11
  • Updated Java binding API documentation
  • Migrated native resource clean-up from finalize() to Cleaner
    • Please revisit the documentation for Key::release and KeySet::release for recommended resource release handling
    • Currently automated native key and key set resource clean-up is deactivated due to some possible race conditions wich might result in double free errors (#3869). Manual key release is also disabled to not break current API release semantic. This leads to memory leaks, which is a known issue and will be resolved in an upcoming release.
  • Introduced multiple exceptions when native API calls fail - see updated java doc for details
  • Introduced early parameter validation for values which would otherwise lead to unspecific errors in native API calls
  • Several under the hood improvements
  • Update Key API introducing the following changes:
    • Extracted exceptions from Key class
    • Fixed Key::getCurrentMeta
    • Moved Elektra.KeyNewArgumentFlags to Key.NewArgumentTag
    • Changed return types from int to boolean or enabled a fluent interface where appropriate
    • Renamed Key::*Integer to Key::*Int
    • Renamed KeyInvalidNameException to KeyNameException
    • Renamed KeyTypeMismatchException to KeyBinaryTypeNotSupportedException
    • Introduced Key::get*AndRelease convenience methods
    • Introduced Key::createNameless
    • Introduced KeyReleasedException being thrown when a released Key is being accessed
    • Introduced KeyMetaException
    • Removed unused KeyTypeConversionException
    • Removed Key::needsSync
    • Removed Key::isNull
    • KeyReleasedException is now being thrown when a released (= previously isNull) Key is being accessed
    • Keys with no backing native key pointer cannot be created anymore
  • Updated KeySet API introducing the following changes:
    • Changed return type enabling a fluent interface where appropriate
    • Renamed KeySet::head to KeySet::first
    • Renamed KeySet::tail to KeySet::last
    • Introduced KeySetReleasedException being thrown when a released KeySet is being accessed
    • Introduced KeySetAppendException
    • Removed KeySet::create(int, Object[])
    • Removed KeySet::needsSync
    • Methods which have been returning a nullable Key, now return an `Optional´
    • KeySet::lookup* now returns Optional<Key>
    • Key::getMeta now returns Optional<Key>
    • Example: java // checking whether the key has been found BEFORE API change Key found = ks.lookup("/some/key"); if (found != null) { // process found key } java // checking whether the key has been found AFTER API change ks.lookup("/some/key").ifPresent(k -> // process found key );
  • Updated KDB API introducing the following changes:
    • Introduced KDBClosedException being thrown when a closed KDB session is being accessed
    • Introduced KDB::get(Key)
    • Introduced KDB::open()
    • Introduced KDB::open(KeySet)
    • Introduced `KDB::goptsContract(String[], String[], Key, KeySet)
    • Changed return type enabling a fluent interface where appropriate
  • Updated tests accordingly

(Michael Tucek)

Tools

  • Remove kdb set functionality that creates a null key. (Robert Sowula)
  • Rename elektraStrnDup to elektraMemDup (@a-kraschitzer)
  • Update specmount error message (@a-kraschitzer)
  • Update elektraMemDup to void * and update the documentation. (Mihael Pranjić)
  • There have been a few bugfixes for elektrad. (Klemens Böswirth)
  • Update lodash and hosted-git-info dependencies of webd due to security update. (Mihael Pranjić)

Scripts

  • Require clang-format 12 for reformatting C and Java. (Mihael Pranjić)
  • Use basename of release file in generate-hashsums. (Mihael Pranjić)
  • Use shfmt v3.2.4 to reformat shell scripts. (Mihael Pranjić)
  • Use cmake-format v0.6.13 (cmakelang) to reformat CMake. (Mihael Pranjić)
  • Aptly repositories are now automatically created if they do not exist during a package release. (Robert Sowula)

Documentation

  • Added Reviews for all functions contained in the Elektra Core API (@lawli3t)
  • Added packaging section to news template. (Mihael Pranjić)
  • Minor readability improvement in highlevel.md (Tobias Schubert @qwepoizt)
  • Fix examples of spec plugin. (Robert Sowula)
  • Added Reviews for all functions contained in the Elektra Core API (@lawli3t)
  • Document package names of plugins, bindings and tools. (Robert Sowula)
  • Small update in API docu related to different namespaces in returned keys. (Markus Raab)
  • improved docu of noresolver. (Markus Raab)
  • improved plugin tutorial. (Markus Raab)
  • Adding info about syncing forks to doc/GIT.md (Klemens Böswirth)
  • Work on COMPILE.md and INSTALL.md to help with understanding (@a-kraschitzer)
  • Update and correct licensing information (@a-kraschitzer)
  • Rename RELEASE.md (@a-kraschitzer)
  • Improved documentation for module kdb in Elektra Core. (@lawli3t)
  • Improved documentation for module key in Elektra Core. (@lawli3t)
  • Improved documentation for module keyname in Elektra Core. (@lawli3t)
  • Improved documentation for module keyvalue in Elektra Core. (@lawli3t)
  • Improved documentation for module keymeta in Elektra Core. (@lawli3t)
  • Improved documentation for module keytest in Elektra Core. (@lawli3t)
  • Improved documentation for module keyset in Elektra Core. (@lawli3t)
  • Fixed example in the "mount-configuration-files" tutorial #3722. (Philipp Oppel)
  • Update and correct third party licensing information (@a-kraschitzer)
  • Added contact details to AUTHORS.md (Michael Tucek)
  • Use Ronn-NG instead of unmaintained ronn to generate man pages. (Mihael Pranjić)
  • Re-generate man pages to add missing information and remove unnecessary symbols and escaping. (Mihael Pranjić)
  • Update doc/Doxyfile to Doxygen 1.9.1 and fix a syntax error with the FILTER_PATTERNS directive. (Mihael Pranjić)

Tests

  • Fix failing testshell_markdown_tutorial_crypto on Mac OS and other OS with GnuPG version >= 2.3.1. (Peter Nirschl @petermax2)
  • Use clang-format 12 for Restyled and update Restyled version. (Mihael Pranjić)
  • Update all Restyled formatters to current versions. (Mihael Pranjić)

Packaging

  • We now package the Ruby bindings, ruby plugin and the gitresolver plugin. (Robert Sowula)
  • We added Fedora 34 packages. (Mihael Pranjić)
  • We added Debian Bullseye packages. (Robert Sowula)

Build

CMake

  • Disable binding tests when BUILD_TESTING is disabled. (Robert Sowula)
  • Remove unused FindCppCMS.cmake CMake module and unused Boost variables. (Mihael Pranjić)

Docker

  • Add Fedora 34 images. (Mihael Pranjić)
  • We added release images that come with pre-installed dependencies and sudo permissions for each distribution we build packages for. (Robert Sowula)
  • Use Clang 12 and Gradle 7.0 in Debian Sid image. (Mihael Pranjić)
  • Remove Boost and some unused dependencies from all Docker images. (Mihael Pranjić)
  • Use Gradle 7.0 and Ronn-NG 0.10.1.pre1 in Docker images. (Mihael Pranjić)
  • Remove unused Debian Buster doc image. (Mihael Pranjić)

Infrastructure

Cirrus

  • Use Clang 12 and Python 3.9 for macOS builds. (Mihael Pranjić)
  • Pin GnuPG version to 2.2.x. (Mihael Pranjić)
  • Update Fedora image to version 34. (Mihael Pranjić)
  • Clean up unused dependencies in Arch Linux image and add Ronn-NG to generate man pages. (Mihael Pranjić)

GitHub Actions

  • Pin GnuPG version to 2.2.x. (Mihael Pranjić)
  • Enable jni plugin and fix JAVA_HOME detection. (Mihael Pranjić)

Jenkins

  • We now build and test on Fedora 34 and 33. Fedora 32 was removed from the CI. (Mihael Pranjić)
  • Build release documentation on Debian Sid, due to newer TeX and Doxygen packages. (Mihael Pranjić)

Travis

  • Update Ubuntu to Focal, use GCC 10 and clean up travis scripts. (Mihael Pranjić)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date. Furthermore, we changed:

  • Update highlight.js due to a ReDOS vulnerability and upgrade other dependencies as well. (Mihael Pranjić)
  • Catch errors when code highlighting fails. (Mihael Pranjić)
  • Get rid of unused code: authentication, backend, users, snippets and conversion service. (Mihael Pranjić)
  • Fix docsearch sourcemap error. (Mihael Pranjić)
  • Update lodash dependency due to security update. (Mihael Pranjić)

Outlook

We are currently working on following topics:

  • Elektrify KDE (Dardan Haxhimustafa), (Felix Resch) and (Mihael Pranjić)
  • 1.0 API (Stefan Hanreich) and (Klemens Böswirth)
  • Improve Java Development Experience (Michael Tucek)
  • Elektrify GNOME (Mihael Pranjić)
  • Continious Releases (Robert Sowula)
  • KDB access using FUSE (Alexander Firbas)
  • Default TOML plugin (Jakob Fischer)
  • Improve Plugin Framework (Vid Leskovar)
  • Improve 3-way merge (Dominic Jäger)
  • Shell completion (Ulrike Schäfer)
  • Ansible bindings (Thomas Waser)

Statistics

We closed 39 issues for this release.

About 17 authors changed 627 files with 15988 insertions(+) and 16768 deletions(-) in 465 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.9.6.tar.gz
  • size: 7650067
  • md5sum: ed33e7b61f2b1ed3742f3bc6dd046d53
  • sha1: fd6082ee38e31e54b66a96a50fc4d20c9c107c89
  • sha256: c8e75f4d21bf3bd6b1028e776af9ff644a17a7dfbb1f2052f50392767deea197

The release tarball is also available signed using GnuPG from here or on GitHub

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj over 4 years ago

Elektra - 0.9.5 Release

  • guid: 8a56a045-3d2e-427d-84bb-8256635159d2
  • author: Mihael Pranjic
  • pubDate: Mon, 12 Apr 2021 08:43:05 +0200
  • shortDesc: Java Binding Improvements, Breaking Change to kdbOpen

We are proud to release Elektra 0.9.5.

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.

You can also read the news on our website

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run docker run -it elektra/elektra.

Highlights

  • Breaking change to kdbOpen. see below
  • Ongoing improvements of Java bindings and publishing of bindings to maven central for easy dependency integrations in Java projects

kdbOpen Contracts

The signature of kdbOpen has been changed from

c KDB * kdbOpen (Key * errorKey);

to

c KDB * kdbOpen(const KeySet * contract, Key *parentKey);

You can use kdbOpen (NULL, errorKey) to get the same behaviour as before.

The new parameter contract is similar to what could be done via kdbEnsure (which has been removed). Currently, the contract allows you to mount global plugins and add data into the global KeySet (passed to all plugins) during kdbOpen. This alone is already quite powerful, but we might more functionality in future releases.

For now, there are three use cases for the contract parameter. All of them are covered by helper functions:

c int elektraGOptsContract (KeySet * contract, int argc, const char * const * argv, const char * const * envp, const Key * parentKey, KeySet * goptsConfig); int elektraIoContract (KeySet * contract, ElektraIoInterface * ioBinding); int elektraNotificationContract (KeySet * contract);

With elektraGOptsContract you can mount and set up the gopts plugin used for command-line argument parsing. The other two functions are the new way to configure Elektra's notification feature.

For more information take a look at doc/dev/kdb-contracts.md

Plugins

The following section lists news about the plugins we updated in this release.

Cache

  • The cache plugin now only caches the parts of the global keyset that are below system:/elektra/cache or below system:/elektra/cached. The part below system:/elektra/cache is meant for internal data of the cache, so you should put data below system:/elektra/cached, if you want it to be cached. (Klemens Böswirth)

internalnotification

  • Fix use of kdb_long_double_t on armel platforms (#3450). (Mihael Pranjić)

Dbus & Dbusrecv

  • Internal changes to ensure compatibility with the new elektraNotificationContract. (Klemens Böswirth)

YAML Smith & Yan LR

  • Removed plugins yamlsmith and yanlr. (René Schwaiger)

Zeromqsend & Zeromqrecv

  • Internal changes to ensure compatibility with the new elektraNotificationContract. (Klemens Böswirth)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Compatibility

  • keyCopy and keyDup now take an additional flag. See below.
  • kdbEnsure was removed and integrated into kdbOpen, which now takes an additional KeySet * contract parameter. See above

Core

  • The keyCopy and keyDup functions have been changed. They now take a flags argument which specifies which parts of the Key should be copied. The API also changed slightly. Most importantly NULL values are handled differently. For example, keyDup (NULL, KEY_CP_ALL) returns a key similar to what keyNew ("/", KEY_END) produces, whereas previously keyDup (NULL) returned NULl. (Klemens Böswirth)
  • We added keyReplacePrefix, a function that allows you to easily move a key from one parent to another. (Klemens Böswirth)
  • kdbEnsure was removed and replaced by similar functionality added to kdbOpen. see above (Klemens Böswirth)
  • KEY_END is now defined as (void *) 0 instead of 0. This allows us to mark keyNew with the GCC attribute __attribute__ ((sentinel)), which causes a compiler warning, if keyNew calls don't use KEY_END as their last argument. (Klemens Böswirth)

Io

  • elektraSetIoBinding has been removed. Use elektraIoContract instead. (Klemens Böswirth)

Notification

  • elektraNotificationOpen has been removed. Use elektraNotificationContract instead. elektraNotificationClose has also been removed. There is no replacement, cleanup now happens automatially during kdbClose. (Klemens Böswirth)
  • The contract for transport plugins has been changed. The exported functions "openNotification", "closeNotification" and"setIoBinding"are no longer used. Instead, plugins should retrieve the I/O binding from the keysystem:/elektra/io/bindingin the global keyset. The notification callback and context that were passed to"openNotification", can now be read from the global keyset as well. The keys aresystem:/elektra/notification/callbackandsystem:/elektra/notification/context` respectively. (Klemens Böswirth)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.

JNA

  • Since internal iterator support for KeySet is due to being dropped, the following methods have been removed:

    • Elektra::ksNext
    • Elektra::ksCurrent
    • Elektra::ksGetCursor
    • Elektra::ksSetCursor
    • KeySet::next
    • KeySet::current
    • KeySet::rewind
    • KeySet::getCursor
    • KeySet::setCursor

Until internal KeySet iterator support has been dropped form native library, Elektra::ksRewind is being retained while also being annotated as 'deprecated for removal'. The reason is, that we still need to rewind a KeySet before passing it to a native plugin via NativePlugin::set, NativePlugin::get or NativePlugin::error. (Michael Tucek)

Furthermore Elektra::ksPop and KeySet::pop have been removed and KeySet::remove has been introduced as replacment. Until internal KeySet iterator support has been dropped form native library, Elektra::ksRewind is being retained while also being annotated as 'depricated for removal'. The reason is, that we still need to rewind a KeySet before passing it to a native plugin via NativePlugin::set, NativePlugin::get or NativePlugin::error. (Michael Tucek)

Further more Elektra::ksPop and KeySet::pop have been removed and KeySet::remove has been introduced as replacment. (Michael Tucek)

  • Renamed KeyException specializations: KeyInvalidNameException, KeyTypeConversionException, KeyTypeMismatchException

  • Migration from Maven to Gradle (Michael Tucek)

  • Updated documentation for usage of published artifacts (Michael Tucek)

  • Integration of Maven Central publishing on Elektra release (Robert Sowula)

Outlook

Ongoing work on bringing the JNA binding up to scratch and improving developer experience. Both for JNA binding API consumers, as well as future JNA binding contrubutors. (Michael Tucek)

Python & Lua

Add support for keyset.remove(key). (Manuel Mausz)

Tools

  • webd: update ini, y18n and elliptic dependencies. (Mihael Pranjić)
  • Make search for providers not skip rest of plugins on exceptions. (Markus Raab)

Examples

  • Fix enums in examples/spec. (Markus Raab)

Documentation

  • Document names of different components. (Markus Raab)
  • Update buildserver documentation (Robert Sowula)
  • Reworked METADATA.ini (Markus Raab)
  • Minor rewording in INSTALL.md (@a-kraschitzer)
  • Write notes that \\ are due to shell recorder, and are not to be copied (Markus Raab)
  • Add link to Go bindings (Markus Raab)
  • Fix order of tutorials (Markus Raab)
  • Added API-Reviews for multiple functions in the public API (Stefan Hanreich)
  • Minor rewording in java-kdb.md (@aaronabebe)
  • Added a short Visual Studio 2019 tutorial (/doc/tutorials/contributing-windows.md) (Dominic Jäger)
  • Added hint regarding WSL filesystem configuration (/doc/tutorials/contributing-windows.md) (@tucek)
  • Fixed broken link in yanlr-plugin readme (@lawli3t)
  • Minor readability improvement in highlevel.md (Tobias Schubert @qwepoizt)
  • Fix examples of spec plugin. (Robert Sowula)

Tests

  • Added small test for jna Return plugin (Return.java), KeyNameIterator.java (@aaronabebe)

Packaging

  • Change shlibs version compatibility policy of Debian packages to ">=". (Robert Sowula)
  • Automate publishing of the release Elektra Docker images. (Robert Sowula)

Build

CMake

  • Fix issue where the library runpaths of the jni plugin could not be resolved. (Robert Sowula)

Docker

  • Update Alpine Linux images to version 3.13.1 and update Elektra release image. (Mihael Pranjić)

Infrastructure

Cirrus

  • Update FreeBSD images from version 12.1 to 12.2 (Robert Sowula)
  • Update brew before installing packages and print brew config. (Mihael Pranjić)
  • Restart dbus service before running tests and find DBUS_LAUNCHD_SESSION_BUS_SOCKET manually (as workaround). (Mihael Pranjić)
  • Use macOS Big Sur images. (Mihael Pranjić)

GitHub Actions

  • Fix issues with dbus and java paths, exclude jni. (Mihael Pranjić)

Jenkins

  • Update daily job to always keep the latest Docker images containing installed Elektra packages that were build on master or during release. (Robert Sowula)
  • Add a cleanup of the aptly database to the daily job. (Robert Sowula)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date. Furthermore, we changed:

  • It is now possible to have two links on the same line of a markdown file rendered on the website. (Klemens Böswirth)
  • The file doc/KEYNAMES.md is now rendered on the website. (Klemens Böswirth)
  • Update ini dependency. (Dependa Bot)
  • Update many dependencies (Node 14.x LTS, angular, bootstrap, ..) and fix broken RSS feed permalinks. (Mihael Pranjić)

Outlook

We are currently working on following topics:

  • Elektrify KDE (Dardan Haxhimustafa), (Felix Resch) and (Mihael Pranjić)
  • 1.0 API (Stefan Hanreich) and (Klemens Böswirth)
  • Improve Java Development Experience (Michael Tucek)
  • Elektrify GNOME (Mihael Pranjić)
  • Continious Releases (Robert Sowula)
  • KDB access using FUSE (Alexander Firbas)
  • Default TOML plugin (Jakob Fischer)
  • Improve Plugin Framework (Vid Leskovar)
  • Improve 3-way merge (Dominic Jäger)
  • Shell completion (Ulrike Schäfer)
  • Ansible bindings (Thomas Waser)

Statistics

We closed 20 issues for this release.

About 19 authors changed 515 files with 19081 insertions(+) and 10602 deletions(-) in 375 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.9.5.tar.gz
  • size: 7636892
  • md5sum: 2245727ed0042645d98de34a1872fbb4
  • sha1: c0181bbee212a46b5a9eda3180ff7673f657d6ed
  • sha256: 0b6ee9d6bf13c3749f4d014df444606f84a2f5a797a541002f8d4e745007c3a5

The release tarball is also available signed using GnuPG from here or on GitHub

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj almost 5 years ago

Elektra - 0.9.4 Release

  • guid: a3f66c2f-ae6a-412b-bdbd-f8950adb2334
  • author: Mihael Pranjic
  • pubDate: Mon, 01 Feb 2021 22:54:30 +0100
  • shortDesc: Key Name Improvements, Debian and Fedora Packaging

We are proud to release Elektra 0.9.4.

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.

You can also read the news on our website

Highlights

  • Important Breaking Changes to key names et al. see below
  • Debian and Fedora Packaging with CPack see below

Important Breaking Changes

  • The structure of key names has been changed. see below (Klemens Böswirth)
    This change breaks mountpoint configurations. Please follow the upgrade procedure shown below.
  • The backend fallback procedure introduced in Elektra 0.8.15 has been removed and the structure of the warnings metadata array has been changed. see below (Klemens Böswirth)
  • We removed the ini plugin (superseded by the TOML plugin), the null plugin (superseded by the base64 plugin) and the tcl plugin (Markus Raab, Philipp Gackstatter)

Important Changes to Key Names

There have been significant changes to Elektra's key names:

  • The most important change is that you now need a : after the namespace. So instead of system/elektra/version you have to use system:/elektra/version.

  • The second big change is to array elements. From now on keyNew ("/array/#10", KEY_END) will create a Key with name /array/#_10, to make arrays more user-friendly by preserving numerical ordering.

  • The whole implementation for keySetName, keyAddName, etc. has been completely rewritten. If you rely on specific behaviour of Elektra's key names and have already taken the two changes above into account, please refer to the newly created key name documentation and Python reference implementation.

  • Metakeys now use the namespace meta:/. The accessor functions keyGetMeta and keySetMeta automatically add this namespace to preserve compatibility. However, if you use the recently introduced keyMeta or otherwise directly access the key name of a metakey, you will have to update your code.

  • default:/ is a new namespace used for keys that exist purely to represent a default value (e.g. generated by the spec plugin).

Looking up cascading keys with ksLookup now looks at namespaces in the following order:

  • proc:/
  • dir:/
  • user:/
  • system:/
  • default:/
  • / (cascading key itself)

The final lookup of the cascading key itself, will be removed in a future release. Please update your code to generate default:/ keys, if you rely on this feature.

Note: The spec plugin already generates default:/ keys.

  • The function keyInactive has been removed. The concept of inactive keys no longer exists, use comment/# instead.

  • ElektraNamespace is the new C++ enum class for the Elektra's namespaces. You should prefer it to using KEY_NS_SYSTEM et al. directly, if you use C++.

  • keyGetFullName et al. have been removed. The concept of a "full name (with owner)" no longer exists.

A huge thanks to (Klemens Böswirth) for doing these important changes and clean-ups.

Mountpoint upgrade

The change to key names breaks existing mountpoint configurations.

It is not hard to fix the mountpoint configs even after the updating to the new version.

There are two places that will still contain the old syntax after the update:

  1. Every key below (and including) system:/elektra/mountpoints/<MOUNTPOINT> uses an old key names as <MOUNTPOINT>, if the mountpoint was created with kdb mount.
  2. The value of all keys matching system:/elektra/mountpoints/*/mountpoint must be valid key names.

Fixing the first instance is optional. There the key name is just used to create a unique name for the mountpoint.

The second instance, however, must be fixed or Elektra will be unusable.

Disclaimer: We cannot guarantee that the commands below work for all cases. We also make no guarantees that the command will not break things.

Please report any problems.

You have been warned. Manually backup important data first.

For the migration you can use the following commands:

```sh

! /usr/bin/env sh

kdb export system:/elektra/mountpoints ni > mountpoints.ini sed -E 's~((^[?|/mountpoint = )(user|system))((\\)?/)~\1:\4~g' mountpoints.ini > mountpointscorrected.ini kdb mv -r system:/elektra/mountpoints system:/elektra/mountpoints-backup kdb import system:/elektra/mountpoints ni < mountpointscorrected.ini ```

Note: The original system:/elektra/mountpoints data will be moved to system:/elektra/mountpoints-backup

Debian and Fedora Packaging with CPack

We are now using CPack to generate modular Debian, Ubuntu (DEB) and Fedora (RPM) packages. This simplifies the packaging process and solves problems where a PR, which introduces changes to installed files, fails. We can now also set distribution specific dependencies with CPack, which is needed for some packages. (Robert Sowula)

We now provide DEB and RPM packages for releases and for every commit on master in our own repositories using CPack for:

  • DEB packages for Debian Buster
  • DEB packages for Ubuntu Bionic
  • DEB packages for Ubuntu Focal
  • RPM packages for Fedora 33

A big thanks to (Robert Sowula) for introducing CPack and creating the repositories.

Short Installation Guide

DEB packages
  1. First, you need to obtain the repository key:

sh sudo apt-key adv --keyserver keys.gnupg.net --recv-keys F26BBE02F3C315A19BF1F791A9A25CC1CC83E839

  1. Add deb https://debs.libelektra.org/<DISTRIBUTION> <DISTRIBUTION> main into /etc/apt/sources.list where <DISTRIBUTION> is the codename of your distributions e.g. focal, bionic or buster.

sh apt-get install libelektra5-all

RPM packages

Download our .repo configuration file and add it to yum/dnf.

To get all packaged plugins, bindings and tools install:

sh dnf install libelektra5-all

For more available packages, further instructions on how to add our repositories or instructions on how to use our master built packages, please refer to our install documentation.

Version Bump

The 0.9.* series of Elektra is for development of Elektra 1.0. Elektra 1.0 will be incompatible to 0.8 and as such, we need a SO version bump. We used this release to bump the SO version from 4 to 5 due to the breaking changes that are not visible in the API.

Note: that within 0.9.* we likely introduce further breaking changes but we will not bump the SO version again.

The package names which consist of the SO Version also changed from libelektra4* to libelektra5*. If you used our previous repository with master built packages, please make sure to migrate to our new package repositories described above or in our install documentation.

The version of the Java bindings was also bumped from 4 to 5, although the API is also work in progress.

A big thanks to (Robert Sowula) for doing the necessary renamings.

Plugins

The following section lists news about the plugins we updated in this release.

jni

  • Fix rare memleak when the jni plugin is closed. (Mihael Pranjić)

mINI

  • We changed the provides clause in the plugin contract. Now mINI offers support for the properties format (storage/properties) instead of the INI file format (storage/ini). This makes sense, since the plugin never supported the section syntax of INI files. (René Schwaiger)

Quickdump

  • Support for the old quickdump v1 and v2 formats has been removed. (Klemens Böswirth)

Simple INI

  • The plugin contract now correctly states that the plugin offers support for the properties format. Before it would state that the plugin offered support for the INI file format. This is not true, since the plugin does not support the section syntax of the INI file format.

YAML CPP

Yan LR

  • The plugin now works (with and) requires ANTLR 4.9. (René Schwaiger)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Compatibility

  • We removed the fallback procedure introduced in Elektra 0.8.15 (using KDB_DB_FILE (default.ecf) for system:/elektra, if the bootstrap backend KDB_DB_INIT (elektra.ecf) isn't found). If you still rely on this feature, either use kdb upgrade-bootstrap before upgrading, or manually extract system:/elektra into elektra.ecf.
  • There was an update to how warnings are generated. For users this means that the warnings metadata now forms a proper array. Specifically, the first 100 warnings are stored below to the meta keys warnings/#0, warnings/#1, ..., warnings/#9, warnings/#_10, ..., warnings/#_99. After that, warnings will wrap around, so the 101st warning will be stored as warnings/#0, 102nd as warnings/#1 etc.

Core

  • kdbSet now properly handles, if the given parentKey is NULL or has read-only name, value or metadata. (Klemens Böswirth)

Proposal

  • Removed elektraKeyGetMetaKeySet and moved keySetStringF to the hosts plugin. (Philipp Gackstatter)
  • Removed ksPopAtCursor. (Philipp Gackstatter)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.

Lua

  • Remove ipairs support and add our own iterator to add support for Lua 5.4, since __ipairs was deprecated. (Manuel Mausz)

JNA

  • Fixed allocation not correctly conveyed on key set initialization (Michael Tucek)

C++

  • ElektraNamespace is the new C++ enum class for the Elektra's namespaces. You should prefer it to using KEY_NS_SYSTEM et al. directly, if you use C++. The array ELEKTRA_NAMESPACES can be used to iterate over all namespaces. (Klemens Böswirth)

Ruby

  • Enable __declspec attributes for Ruby 3.0. (Mihael Pranjić)

Tools

  • The kdb cmd-line tool outputs better error messages on wrong names like user or user: as user:/ is now required. (Markus Raab)
  • The QtGUI was updated to be compatible with the new key name structure. (Klemens Böswirth)

Scripts

  • We fixed the (possibly) infinitely running function generate-random-string in check-env-dep. (René Schwaiger)

Documentation

  • Finalize 1.0 decisions. (Markus Raab)
  • Update API design document (Markus Raab and Stefan Hanreich)
  • Update release instructions (Robert Sowula)
  • Changed API documentation terms [current, latest] to [latest, master]. The API documentation of the latest release is now available at https://doc.libelektra.org/api/latest/html/ and of the current git master at https://doc.libelektra.org/api/master/html/. (Robert Sowula)

Tests

  • Tests that use additional executables can now be installed and run via kdb <testname>. Existing tests have been update to support this. (Klemens Böswirth)
  • Update source formatting check to clang-format 11. (Mihael Pranjić)

Build

CMake

  • Use Lua 5.4 when available. (Mihael Pranjić)
  • Force RTLD_NODELETE on dlopen() when the ENABLE_ASAN CMake option is used. This enables ASAN to find symbols which otherwise might be unloaded. (Mihael Pranjić)

Docker

  • We added a Docker image for building the documentation on Debian Sid. (René Schwaiger)
  • We removed the Docker image for building the documentation on Debian Stretch. (René Schwaiger)
  • Add Fedora 33 Dockerfile for Cirrus and Jenkins CI. (Mihael Pranjić)
  • Debian Sid: update to clang 11. (Mihael Pranjić)

Infrastructure

Cirrus

  • Upgrade Cirrus Fedora docker image to Fedora 33. (Mihael Pranjić)
  • Upgrade to Ruby 3.0 for macOS builds. (Mihael Pranjić)

GitHub Actions

  • We added a build job that translates Elektra with GCC on macOS. (Mihael Pranjić, René Schwaiger)

Jenkins

  • We refactored shared code between pipelines into a Jenkins Shared Library. (Robert Sowula)
  • We now use Debian Sid to build the documentation instead of Debian Stretch. The Doxygen version in Debian stretch contains a bug that causes the generation of the PDF documentation to fail. (René Schwaiger)
  • Use Fedora 33 and 32, drop Fedora 31 use in Jenkins. (Mihael Pranjić)
  • The Main and Release Pipeline now creates packages for Debian Buster, Ubuntu Bionic, Ubuntu Focal and Fedora-33. These packages are also installed and automatically tested before they are published. To install these packages, please refer to our Install documentation. (Robert Sowula)
  • We updated our Release Pipeline to push changes directly to our git repositories. (Robert Sowula)

Travis

  • Move macOS GCC 10 build job to Github Actions. (Mihael Pranjić)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date.

Outlook

We are currently working on following topics:

  • Elektrify KDE (Dardan Haxhimustafa), (Felix Resch) and (Mihael Pranjić)
  • 1.0 API (Stefan Hanreich) and (Klemens Böswirth)
  • Improve Java Development Experience (Michael Tucek)
  • Elektrify GNOME (Mihael Pranjić)
  • Continious Releases (Robert Sowula)
  • KDB access using FUSE (Alexander Firbas)
  • Default TOML plugin (Jakob Fischer)
  • Improve Plugin Framework (Vid Leskovar)
  • Improve 3-way merge (Dominic Jäger)
  • Shell completion (Ulrike Schäfer)
  • Ansible bindings (Thomas Waser)

Statistics

We closed 21 issues for this release.

About 13 authors changed 1280 files with 26471 insertions(+) and 29959 deletions(-) in 428 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.9.4.tar.gz
  • size: 7562103
  • md5sum: 670a3e9ab225ef53cb2db9058225d7d9
  • sha1: 2a5729462fc61694f2b81ca7dbd3620f09cbbf72
  • sha256: e1f11f063ab262ce056238ca17aa60442a450a0bb6c5f57a9959df0365576bc6

The release tarball is also available signed using GnuPG from here or on GitHub

The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj about 5 years ago

Elektra - 0.9.3 Release

  • guid: 9b9e8889-0c77-45ce-8441-8bdf26a110ac
  • author: Mihael Pranjic
  • pubDate: Fri, 30 Oct 2020 23:03:43 +0100
  • shortDesc: TOML Storage Plugin

We are proud to release Elektra 0.9.3. This release again brings us a big step towards Elektra 1.0. It introduces the new soon-to-be-default storage plugin: TOML.

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.

You can also read the news on our website

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles, simply run docker run -it elektra/elektra.

TOML

The highlight of this release is the TOML plugin. The TOML plugin has a similar huge feature set as the INI plugin, but is written in a much cleaner and more maintainable way using flex and bison. Furthermore, it follows the popular TOML spec.

It has nearly no run-time dependency, it only needs base64 if binary values are needed.

A huge thanks to Jakob Fischer for this amazing work!

Warning: In one of the following 0.9.* releases, INI will be removed and TOML will become the default plugin. If you are using INI, please migrate to TOML now.

Plugins

The following section lists news about the plugins we updated in this release.

xmltool

  • Values of KDBStream changed to fit with elektraKeyFlags: recompilation of application is needed. (Markus Raab)

TOML

  • Added the TOML plugin, which can read and write TOML files using flex and bison. (Jakob Fischer)
  • Removed the null plugin dependency of the plugin. (Jakob Fischer)
  • The type metakey is now set for numbers on reading. (Jakob Fischer)

dump

  • The dump plugin got a major update. The new version can read old files, but only write new files. The new files cannot be read by the old version of the plugin and will result in a "version error" message. (Klemens Böswirth)
  • The new version stores keynames relative to the mountpoint, so exported dump files can now be imported into a different mountpoint. (Klemens Böswirth)
  • dump no longer writes unnecessary zero-bytes into files. This means that as long as all key-values are human-readable, so is the dump output. This makes dump usable for tests and demo purposes, as it is a very simple format closely modelled after a KeySet's structure. This also makes it much easier to manually fix broken dump files. You only need a text editor most of the time. (Klemens Böswirth)

Compatibility

Elektra 0.9.* does not make any compatibility promises, as we want a clean 1.0.0 release. In this release, we did the following changes:

  • keyswitch_t renamed to elektraKeyFlags. (Markus Raab)
  • option_t renamed to elektraLockFlags and elektraLookupFlags. (Markus Raab)
  • cursor_t renamed to elektraCursor. (Markus Raab)

Note: We made this release before merging larger changes. Please expect more fundamental changes in the next releases.

Errors

  • Improved error messages. (Markus Raab)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.

JNA

  • Made examples work again. (Markus Raab)

Scripts

  • Fix googletest framework path in debian configure script. (Mihael Pranjić)
  • The fish completion script does not fail any more, if you try to complete a simple command that expects a namespace. For example, completing

sh kdb ls ‸

with the tab key () ( represents the current cursor position) should work correctly again. (René Schwaiger)

  • The formatting scripts using prettier now use npx, which is included in npm v5.2.0 or newer. This allows us to specify an exact version of prettier to use. (Klemens Böswirth)
  • The reformat-shell script now accepts the alias shfmt2, in case shfmt v3 is needed for another project. (Klemens Böswirth)
  • The config for restyled.io now specifies the image to use for each formatter. This clearly reflects the version used for formatting. (Klemens Böswirth)
  • Add a release script to automate the release process. (Robert Sowula)

Documentation

  • Updated GOALS.md. (Markus Raab)
  • Describe hierarchy and limitations of hosts plugin. (Markus Raab)
  • The Doxygen PDF documentation now also requires the packages
    • stix (part of texlive-fonts-extra) and
    • stmaryrd (part of texlive-science or texlive-math-extra). (René Schwaiger)
  • Write down some fundamental decisions, mostly about key names and key set structure. (Markus Raab in discussions with Klemens Böswirth)

Tests

  • Fixed the is_not_rw_storage function. (Lukas Kilian)
  • We now ensure that the check_import and check_export tests run for at least one plugin. (Lukas Kilian)

Build

CMake

  • make uninstall also uninstalls symlinks. (Markus Raab)
  • external-links.txt and extra_install_manifest.txt are cleaned up at cmake runs. (Markus Raab)
  • Increased CTest timeout for testscr_check_kdb_internal_suite due to timouts reached on slow test machines. (Mihael Pranjić)

Docker

  • Added Alpine Linux docker image with latest Elektra installed. This image is published on docker hub as elektra/elektra. We will update the image for each Elektra release such that novices can easily test Elektra without compiling or installing. (Mihael Pranjić)
  • Remove unused libgtest-dev from docker images. (Mihael Pranjić)
  • Add Ubuntu Focal (20.04) docker image. (Robert Sowula)
  • Update Alpine Linux docker image to 3.12.1. (Mihael Pranjić)

Infrastructure

Cirrus

  • Update FreeBSD images from version 11.3 to 11.4. (Mihael Pranjić)
  • Increase CPU count for containers to 4. (Mihael Pranjić)
  • Use Ruby 2.7 on macOS. (Mihael Pranjić)
  • Export Python 3.8 path for macOS builds. (Mihael Pranjić)

Jenkins

  • Temporarily resolve cyclic dependency between go-elektra and libelektra builds. (Mihael Pranjić)
  • Add a new Jenkinsfile for release automation. (Robert Sowula)
  • Our release pipeline now also builds deb packages for Ubuntu Focal (20.04). (Robert Sowula)

Travis

  • Update macOS builds to use GCC 10, Ruby 2.7.1 and Xcode 12.2. (Mihael Pranjić)
  • Increase wait time on builds to fix build timeout errors ("No output has been received in the last 10m0s"). (Mihael Pranjić)
  • Export Python 3.9 path for macOS builds. (Mihael Pranjić)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date. Furthermore, we changed:

  • Renamed the source folder of the website and removed the backend. (Markus Raab)
  • Use strict dependency injection for website modules. (Marvin Mall)
  • Added package-lock.json to ensure repeatable builds. (Marvin Mall)

Decisions

We are intensively working on Elektra 1.0. The last details of the semantics of Elektra 1.0 are in discussion. The decisions are documented, but some of them are not finalized.

If you are interested in the discussions, please subscribe.

Outlook

We are currently working on following topics:

  • Elektrify KDE (Dardan Haxhimustafa), (Felix Resch) and (Mihael Pranjić)
  • Elektrify GNOME (Mihael Pranjić)
  • Default TOML plugin (Jakob Fischer)
  • Improve Plugin Framework (Vid Leskovar)
  • Keyname Overhaul (Klemens Böswirth)
  • Continious Releases (Robert Sowula)
  • FUSE Integration (Alexander Firbas)
  • 1.0 API (Philipp Gackstatter)
  • Improve 3-way merge (Dominic Jäger)
  • Shell completion (Ulrike Schäfer)
  • Improve Elektra developer experience (Hani Torabi)
  • Ansible bindings (Thomas Waser)

Statistics

We closed 15 issues for this release.

About 17 authors changed 533 files with 26133 insertions(+) and 15834 deletions(-) in 545 commits.

Thanks to all authors for making this release possible!

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

  • author: mpranj
  • name: elektra-0.9.3.tar.gz
  • size: 7540609
  • md5sum: 649fe13100266ab0e9a4cd19b99e2049
  • sha1: 02900ef5c8b24cf067930068c62f2ff09b44354d
  • sha256: 5022a6ebf004d892ded03fcf6eb3d223942a7fadd2d68f14d847d1f7f243e1d7

The release tarball is also available signed by Mihael Pranjić using GnuPG from here or on GitHub

The following GPG Key was used to sign this release: 9C18145C22F9E746D743DEC59ECC0F4CF0359C7B

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj over 5 years ago

Elektra - 0.9.2 Release

  • guid: ea79f59e-f471-4658-a11b-1371802814c2
  • author: Mihael Pranjic
  • pubDate: Tue, 26 May 2020 19:33:30 +0200
  • shortDesc: KDE and GNOME Integration, elektrad in Go

We are proud to release Elektra 0.9.2.

With the 0.9.x series of releases we shift our focus to bugfixes and stability improvements as needed for the KDE and GNOME integration. We do not guarantee any compatibility in this series.

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.

You can also read the news on our website

Highlights

  • KDE integration
  • GNOME Integration
  • elektrad rewritten in Go

KDE Integration

We created a fork of KDE's KConfig configuration system and patched it to use libelektra. We have done some initial testing and replaced the KConfig library for Kate and KDevelop successfully.

Additionally, we added a new Elektra plugin called kconfig, which can read and write kconfig's INI files. The plugin enables smooth migration of existing KDE configurations. (Dardan Haxhimustafa) and (Felix Resch)

GNOME Integration

We continued work on Elektra's bindings for GNOME GSettings. Our implementation should be able to replace the widely used dconf backend. Elektra's gsettings bindings are not yet ready for production use, but they are already able to replace dconf for a complete GNOME session without problems. We are still lacking proper dbus integration for change notifications. (Mihael Pranjić)

elektrad rewritten in Go

elektrad provides an HTTP API to access Elektra remotely. elektrad is now completely rewritten in Go, which drastically improves the performance by leveraging the new go-elektra bindings instead of calling the kdb command-line tool on every request. The new elektrad creates a session per user to reuse the same KDB handle for correct conflict handling and better performance. (Raphael Gruber)

Try out Elektra

You can try out the latest Elektra release using our docker image elektra/elektra. This is the quickest way to get started with Elektra without compiling and other obstacles.

Get started with Elektra by running docker run -it elektra/elektra.

Plugins

We removed the maintained status of the following plugins:

  • blockresolver
  • csvstorage
  • gitresolver
  • list
  • multifile
  • spec

New maintainers are very much welcomed!

Augeas

  • Improved error message for Augeas to show lensPath. (Michael Zronek)

CCode

Crypto

  • The crypto plugin no longer supports Botan and OpenSSL as provider of cryptographic functions. The support has been removed to improve the maintainability of the code. (Peter Nirschl)
  • The unit test of the crypto plugin attempts to kill the gpg-agent if a regular shutdown via connect-gpg-agent failed. (Peter Nirschl)

Directory Value

  • The plugin now only interprets a KeySet as array if the parent contains the meta key array. (René Schwaiger)

Fcrypt

  • Improve handling of temporary files after encryption and decryption by trying to perform a manual copy if the call of rename fails. This problem might occur if another file system is mounted at /tmp. (Peter Nirschl)

KConfig

  • Write support for the KConfig INI format was added. (Dardan Haxhimustafa)

SWIG

  • Configure line (-DBINDINGS="..") for SWIG based bindings have been changed from swig_foo to foo. (Manuel Mausz)
  • Exclude SWIG bindings if SWIG Version is 4.0.1 and Python is >= 3.8 or Ruby is >= 2.7 due to incompatibility (#3378, #3379). (Mihael Pranjić)

SWIG/python

  • Added bindings for libelektratools. (Manuel Mausz)
  • Add test for kdbEnsure. (Mihael Pranjić)

SWIG/python2

  • Removed python2 binding, as python2 support ended. (Manuel Mausz)

Tcl

YAMBi

  • We removed the plugin in favor of Yan LR. (René Schwaiger)

YAML CPP

  • The plugin now always prints a newline at the end of the YAML output. (René Schwaiger)
  • The plugin does not interpret a key set such as

user/example user/example/#0 user/example/#1 user/example/#2

as array unless the parent key user/example contains the meta key array. (René Schwaiger)

  • YAML CPP now always sets and requires the metakey type with the value boolean for boolean data. (René Schwaiger)

  • We limited the scope of a logging function of the module. This makes it possible to build Elektra again, if

    • you enabled the logger (ENABLE_LOGGER=ON),
    • build the “full” (BUILD_FULL=ON) version of Elektra, and
    • include both the Directory Value and YAML CPP plugin in your build configuration. (René Schwaiger)

Yan LR

  • The CMake code of the plugin does not print error messages produced by the tool ldd any more. (René Schwaiger)
  • The plugin now also supports ANTLR 4.8. (René Schwaiger)
  • We limited the scope of the logging code of the module. For more information, please take a look at the last news entry of the YAML CPP plugin. (René Schwaiger)

GOpts

  • The plugin now supports an offset into argv given by the /offset config key. If /offset is set, gopts will ignore a number of arguments at the start of argv. This can be used in e.g. python scripts to ignore the interpreter arguments. (Klemens Böswirth)
  • gopts now also writes help message into the key proc/elektra/gopts/help/message in addition to setting proc/elektra/gopts/help = 1. This is especially useful in non-C/C++ environments. (Klemens Böswirth)
  • gopts is also affected by the changes and improvements to the opts library outlined below.

Cache

  • Respect XDG_CACHE_HOME when resolving the mmap cache directory. (Mihael Pranjić)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Compatibility

  • We clarified compatibility requirements for Elektra and its plugins and bindings. Furthermore, we renamed system/elektra/version/constants/KDB_VERSION_MICRO to system/elektra/version/constants/KDB_VERSION_PATCH to be compatible with Semantic Versioning 2.0.0. (Markus Raab)

Opts

  • The library function elektraGetOpts now supports sub-commands. Sub-commands are best explained by looking at an application that uses them, like git. For example add is a sub-command in git add, and interprets -p differently from git: git -p add is git --paginate add, but git add -p is git add --patch. elektraGetOpts now implements this notion of sub-commands. For more information take a look at the tutorial for command-line-options. By extension this functionality is also available via the gopts plugin. (Klemens Böswirth)
  • The generated help message was improved. It now also gives details about parameter arguments, sub-commands and environment variables in addition to the existing support for option arguments. This also means that it is no longer possible to have multiple keys with the args=remaining metadata (because their opt/help may not be the same). (Klemens Böswirth)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.

python2

  • Removed python2 plugin, as python2 support ended. (Manuel Mausz)

Rust

  • Published elektra and elektra-sys to crates.io. (Philipp Gackstatter)

Tools

  • Update kdb cache tool synopsis to reflect man page. (Mihael Pranjić)
  • Pull elektrad, webui and webd out of shared web folder to allow fine grained selection of tools. (Raphael Gruber)
  • webd has updated dependencies. (Mihael Pranjić)

Scripts

now uses clang-format 9 to reformat the code base. (René Schwaiger)

  • The script reformat-shell now makes sure that you do not use shfmt 3, which formats parts of the code base slightly differently. (René Schwaiger)

Documentation

  • Improved formatting of the validation tutorial (Anton Hößl)
  • We fixed some minor spelling mistakes. (René Schwaiger)
  • We updated the man pages of the web tool. (René Schwaiger)
  • Updated documentation for Ubuntu-Bionic Packages. (Djordje Bulatovic)
  • Fixed an old path of the reformatting script in the docker reformatting tutorial (Jakob Fischer)

Tests

  • We now use Google Test version 1.10 to test Elektra. (René Schwaiger)
  • The C++ test code does not produce warnings about a missing macro argument for ... any more. (René Schwaiger)
  • Whitelisted many broken links. (Mihael Pranjić)
  • Enabled regex in link checker. (Mihael Pranjić)
  • The formatting check now also works correctly, if it is invoked multiple times. (René Schwaiger)
  • KDB_EXEC_PATH is not being set globally to contain the build directory any longer. (Peter Nirschl)
  • Rewrite gpg-agent shutdown logic to use fork and execv instead of system. (Peter Nirschl)
  • Removed a broken link from the link checker. (Djordje Bulatovic)

Build

Compilation

  • We do not use implicit typing in the code of the

    • augeas,
    • base64, and
    • blockresolver

plugin any more. After this update, the code compiles without any warnings, even though we now use the compiler switch -Wconversion. (René Schwaiger)

Support

  • Debian 9 “stretch” (oldstable) is now the oldest supported platform. (René Schwaiger)

CMake

  • Generating the build system now requires CMake 3.4 (released in November 2015). (René Schwaiger)
  • We fixed warnings about CMake policy CMP0078 and CMP0086. (René Schwaiger)
  • The CMake functions add_msr_test and add_msr_test_plugin do not export the list of required plugins as environment variable any more. (René Schwaiger)
  • The CMake code of the code generation does not print warnings about unknown regex operators any more. (René Schwaiger)

Docker

Infrastructure

Cirrus

  • We fixed a minor problem with the package install procedure on macOS build jobs. (René Schwaiger)
  • We updated the startup command for D-Bus on macOS. (René Schwaiger)
  • We removed python2 (EOL and removed from homebrew). (Mihael Pranjić)
  • Use latest macOS Catalina Xcode stable. (Mihael Pranjić)
  • Use newer FreeBSD images and use image family instead of concrete image names. (Mihael Pranjić)
  • Disable tcl plugin on FreeBSD images because of test failures (see #3353). (Mihael Pranjić)
  • Disable curlget plugin for macOS jobs (see #3382). (Mihael Pranjić)
  • Add more dependencies to Fedora image to cover many tests. (Mihael Pranjić)
  • Installed Ruby 2.6 to test the ruby bindings and plugins. (Mihael Pranjić)
  • Upgraded Fedora image to current stable (version 32). (Mihael Pranjić)

Jenkins

  • Fixed coveralls coverage report. (Mihael Pranjić)
  • The build jobs debian-unstable-clang-asan and debian-unstable-full-clang now use Clang 9 to compile Elektra. (René Schwaiger)
  • Added the Jenkins.monthly in the Jenkins' scripts file. (Djordje Bulatovic)
  • Enabled building packages for Bionic. (Djordje Bulatovic)
  • Improve gpgme unit test stability. (Peter Nirschl)
  • Publishing packages for Bionic to community. (Djordje Bulatovic)
  • Added Fedora 32 image to main build stage, moved Fedora 31 to full build stage. (Mihael Pranjić)
  • Fixed path for publishing in Jenkinsfile. (Djordje Bulatovic)
  • Reliably build the rust bindings based on the same version, by adding back the Cargo.lock file. (Philipp Gackstatter)

Restyled

  • Restyled now also checks the formatting of C, C++ and Java code in the repository. (René Schwaiger)

Travis

  • Use newer Xcode 11.4 and ruby 2.6.5 on macOS builds and use macOS 10.15. (Mihael Pranjić)
  • Disable curlget plugin for macOS jobs (see #3382). (Mihael Pranjić)

Issue Tracker

  • We now automatically close issues after one year of inactivity. (Mihael Pranjić)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date. Furthermore, we changed:

  • Fix and re-enable website auto-deployment. (Mihael Pranjić)
  • Update docker images for website frontend and backend to debian buster. Update dependencies to newer versions. (Mihael Pranjić)
  • Remove obsolete parts from the website. (Mihael Pranjić)

Outlook

We are currently working on following topics:

  • Elektrify KDE (Dardan Haxhimustafa), (Felix Resch) and (Mihael Pranjić)
  • Elektrify GNOME (Mihael Pranjić)
  • Elektrify LCDproc (Klemens Böswirth) and (Jakob Fischer)
  • Packaging for popular Linux distributions (Djordje Bulatovic)
  • Improve 3-way merge. (Dominic Jäger)
  • Go bindings and improved Web-UI (Raphael Gruber)
  • TOML plugin as new default storage (Jakob Fischer)
  • Shell completion (Ulrike Schäfer)
  • Improve Elektra developer experience (Hani Torabi)
  • Ansible bindings (Thomas Waser)
  • Plugin interface improvements (Vid Leskovar)

Statistics

We closed 40 issues for this release.

About 23 authors changed 653 files with 15221 insertions(+) and 18890 deletions(-) in 815 commits.

Thanks to all authors for making this release possible!

Finished Thesis

René Schwaiger finished his thesis about parsing techniques and parsing tools for configuration files.

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

  • author: mpranj
  • file: elektra-0.9.2.tar.gz
  • size: 7416188
  • md5sum: 6e92ebcbef31cdeab91d228b61456947
  • sha1: 8f874de3e7a47baa55d7c5106efbbae635fff499
  • sha256: 6f2fcf8aaed8863e1cc323265ca2617751ca50dac974b43a0811bcfd4a511f2e

The release tarball is also available signed by Mihael Pranjic using GnuPG from here or on GitHub.

The following GPG Key was used to sign this release: 9C18145C22F9E746D743DEC59ECC0F4CF0359C7B

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj over 5 years ago

Elektra - 0.9.1 Release

  • guid: 8c64fe8a-87a5-4b72-b772-d98c8a4a5efd
  • author: Mihael Pranjić
  • pubDate: Tue, 26 Nov 2019 14:55:19 +0100
  • shortDesc: KDE Integration, Rust&Go Bindings, Code Generation

We are proud to release Elektra 0.9.1.

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.

You can also read the news on our website

Highlights

  • We are working on integrating Elektra into KDE. A new Elektra plugin called kconfig was added which can read KDE's kconfig ini files. Additionally we are working on a fork of KDE's KConfig configuration system and patching it to use libelektra. (Dardan Haxhimustafa) and (Felix Resch)
  • The elektra and elektra-sys crates have been published to crates.io for easier usage of our Rust binding. (Philipp Gackstatter)
  • We improved our Go bindings. (Raphael Gruber)
  • Code Generation is ready for productive use. (Klemens Böswirth)

Code Generation

While the new kdb gen was already included in the last release, it is now fully functional and ready for productive use. To get started take a look at the new man-page for kdb-gen(1).

If you specifically want to use it with the High-Level API take a look at this tutorial.

We also created a new CMake function that will be available, if you include Elektra via CMake's find_package. The function is called elektra_kdb_gen and can be used to tell CMake about files that are generated via kdb gen. (Klemens Böswirth)

Further Highlights

  • We migrated our build server and website to up-to-date hardware. (Markus Raab and Djordje Bulatovic)
  • Elektra now has a technical preview of a new merge library. It is written in C99 and can currently be used with kdb cmerge. (Dominic Jäger)
  • We make it easier for new developers to join Elektra, e.g., see new get started. (Hani Torabi)
  • We made many cleanups, to get Elektra ready for 1.0!

Plugins

The following section lists news about the plugins we updated in this release.

General

  • We removed 12 obsolete or unfinished plugins:
    • boolean,
    • cachefilter,
    • cpptype,
    • dini,
    • enum,
    • regexstore,
    • required,
    • haskell,
    • simplespeclang,
    • regexdispatcher,
    • typechecker,
    • struct. (Markus Raab, René Schwaiger)
  • We unified the name of the config check function of the plugins to nameOfPluginCheckConf. Before this update some plugins used the name nameOfPluginCheckConfig instead. (René Schwaiger)
  • We improved the error messages in crypto, fcrypt, and gpgme plugins. (Peter Nirschl)
  • We now correctly handle return codes (error codes) of execv in the GPG module. (Peter Nirschl)
  • We improved the documentation of ksAppendKey regarding ownership of keys. (Raphael Gruber)
  • We removed the experimental status of the following plugins:
    • gopts
    • specload. (Klemens Böswirth)
  • We added the following experimental plugins:
    • kconfig. (Dardan Haxhimustafa)

Camel

We removed the experimental plugin. For a plugin that is able to parse similar syntax, please take a look at the

plugins. (René Schwaiger)

GOpts

  • The error message, if non of the gopts variants can be compiled, was improved. (Klemens Böswirth)
  • A better error, if the plugin fails to load argv from the system, was added. (Klemens Böswirth)
  • A function to detect help mode, without invoking elektraGetOpts was added. It simply checks, whether --help is one of the string in argv. (Klemens Böswirth)
  • Increase test timeout from 120s to 240s. (Mihael Pranjić)

KConfig

  • We added a plugin which can be used to parse kconfig INI files. (Dardan Haxhimustafa)

Mmapstorage

  • We now store the OPMPHM inside of the mmap format. (Mihael Pranjić)
  • The storage format was changed and many sanity checks were improved or added. (Mihael Pranjić)
  • Enforce consistency by writing the magic file footer last. (Mihael Pranjić)
  • Filter empty meta KeySets to save space. (Mihael Pranjić)

Noresolver

  • The plugin now correctly sets the path in the parentKey. It therefore now supports set calls. (Klemens Böswirth)

Path

Spec

  • There is now the config key missing/log that allows logging of all missing required keys. (Klemens Böswirth)
  • spec now internally handles errors differently. There should be no external impact apart from better performance. (Klemens Böswirth)

Specload

  • We now treat relative paths as relative to KDB_DB_SPEC instead of the current working directory. (Klemens Böswirth)
  • Changes to default or type metadata are no longer supported, since they are not safe in every case. (Klemens Böswirth)
  • The plugin no longer has the experimental status. (Klemens Böswirth)

Tcl

  • We made sure that building the plugin works, if you use the latest version of CMake (3.15.3) and Boost (1.71). (René Schwaiger)

Type

  • We added an option to disable the restoring of boolean values. This useful for storage formats like YAML that have native boolean types. (Klemens Böswirth)

Yajl

  • Yajl now correctly supports Elektras boolean types using the type plugin. For example, setting on, enable or true all map to JSONs native true value. See the type plugin for more details about boolean types. (Philipp Gackstatter)

YAwn

  • We removed the plugin in favor of Yan LR. (René Schwaiger)

YAy PEG

  • We removed the plugin in favor of Yan LR. (René Schwaiger)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Compatibility

We introduced several incompatible changes:

  • The library libelektra, which is a collection of different elektra libraries, is now removed. Users of CMake or pkg-config should not be affected. Otherwise change -lelektra to -lelektra-core -lelektra-kdb or whatever parts of Elektra your application uses. (Markus Raab)
  • The conversion functions elektraKeyTo* and elektra*ToString are now part of the elektra-ease library instead of the elektra-highlevel library. This should not cause any breaking changes since elektra-highlevel already depends on elektra-ease. In addition the header elektra/conversion.h is kept for compatibility. (Klemens Böswirth)
  • Fixes in documentation that might disallow some code operating in grey areas before. (Markus Raab)
  • We removed keyRel and keyRel2 since it can be easily replaced by other existing functions. (Philipp Gackstatter)

We changed the following symbols:

  • ELEKTRAPLUGINCOMMIT
  • elektraKeyToString
  • elektraKeyToBoolean
  • elektraKeyToChar
  • elektraKeyToOctet
  • elektraKeyToShort
  • elektraKeyToUnsignedShort
  • elektraKeyToLong
  • elektraKeyToUnsignedLong
  • elektraKeyToLongLong
  • elektraKeyToUnsignedLongLong
  • elektraKeyToFloat
  • elektraKeyToDouble
  • elektraKeyToLongDouble
  • elektraBooleanToString
  • elektraCharToString
  • elektraOctetToString
  • elektraShortToString
  • elektraUnsignedShortToString
  • elektraLongToString
  • elektraUnsignedLongToString
  • elektraLongLongToString
  • elektraUnsignedLongLongToString
  • elektraFloatToString
  • elektraDoubleToString
  • elektraLongDoubleToString
  • kdboctett
  • kdbbooleant
  • kdbshortt
  • kdblongt
  • kdblonglong_t
  • kdbunsignedshort_t
  • kdbunsignedlong_t
  • kdbunsignedlonglongt
  • kdbchart
  • kdbfloatt
  • kdbdoublet
  • kdblongdouble_t

Core

  • A new plugin function, kdbCommit, was implemented. The function is carried out in the commit phase of kdbSet and separates the commit functionality from the kdbSet() function. (Vid Leskovar)
  • kdbconfig.h is no longer included in the installed headers. This is because it could cause conflicts with other config.h-type headers from applications. (Klemens Böswirth)
  • ksAppendKey: state that it only fail on memory problems. (Markus Raab)
  • Fix memory leak in kdbGet. (Markus Raab)
  • Implemented kdberrors.h directly without generation of the specification file because of drastically reduced error code count (Michael Zronek)
  • keyIsDirectBelow was renamed to keyIsDirectlyBelow. (Philipp Gackstatter)
  • keyMeta was added to provide access to a key's underlying KeySet that holds its metadata keys. (Philipp Gackstatter)
  • Removed the obsolete ksLookupByString and ksLookupByBinary, as well as deprecated KDB_O_* options. (Philipp Gackstatter)
  • Added keyLock and keyIsLocked. (Manuel Mausz)
  • Removed keyVInit. (Manuel Mausz)

Opts

  • The option -h is no longer used to indicate help mode. Only --help, will invoke help mode. (Klemens Böswirth)

Proposal

  • Removed or moved several functions of kdbproposal.h:
    • elektraKsToMemArray was moved to kdbease.h,
    • elektraLookupOptions was moved to kdbprivate.h,
    • keySetStringF was moved to kdbinternal.h,
    • Removed ksPrev and elektraKsPrev,
    • Removed elektraRenameKeys and replaced it with ksRenameKeys. (Philipp Gackstatter)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.

  • We removed the Haskell and GI bindings. (Markus Raab)
  • Avoid unnecessary copying std::string where possible (setString and setMeta only). (Manuel Mausz)
  • CPP: add Key::is{Name,Value,Meta}Locked. (Manuel Mausz)
  • GLIB: removed gelektra_keyset_resize. (Manuel Mausz)
  • GLIB: removed gelektra_keyset_rewind, gelektra_keyset_next, gelektra_keyset_current, gelektra_keyset_getcursor, gelektra_keyset_setcursor. (Manuel Mausz)
  • GLIB: renamed gelektra_keyset_atcursor to gelektra_keyset_at. (Manuel Mausz)
  • gsettings: adapt iterator. (Manuel Mausz)
  • SWIG: Add KeyNotFoundException exception. (Manuel Mausz)
  • SWIG: Fix KeySet equality operators. (Manuel Mausz)
  • SWIG/Python: hash(key) will throw unless the key name is locked. (Manuel Mausz)
  • SWIG/Python: Add operator overloadings for len(Key), repr(Key), str(KeySet), repr(KeySet). (Manuel Mausz)
  • SWIG/Python: Add alternative Key constructor Key(name, value, [dict]). (Manuel Mausz)
  • SWIG/Python: Add KeySet.extend([key1, key2,...]) and KeySet.append(key1, key2, ...). (Manuel Mausz)
  • SWIG/Python: Add KeySet.append(key_name, key_value, key_opts) which directly creates and appends a key. (Manuel Mausz)
  • SWIG/Python: Add KeySet.unpack_names(), KeySet.unpack_basenames(), KeySet.filter(func), KeySet.filter_below(where), Key.array_elements(). (Manuel Mausz)

Java

  • Completely overhauled the Java binding to be able to use Elektra plugins directly. A new PluginLoader can load Elektra plugins or a native implemented Java plugin. All Plugins now implement the new Plugin interface. For an example see the test case. (Michael Zronek)
  • Upgraded maven dependencies for Java binding (Michael Zronek)
  • The Java binding now supports the error codes in a native way. All exceptions contain the necessary information. (Michael Zronek)
  • Further improved the Java binding such as wording and documentation. (Michael Zronek)

Rust

  • Add the elektra-sys crate which contains raw bindings to libelektra for Rust. (Philipp Gackstatter)
  • Add the elektra crate which contains safe wrapper methods for the raw bindings. The crate contains bindings for the low-level API, which means that the data types Key and KeySet can now safely be used from Rust. The Rust version of the API has been designed to take advantage of Rust's type system and to be in accordance with the memory safety of Rust. For instance, the Key has been divided into StringKey and BinaryKey, to prevent type mismatches at compile time. With the binding for KDB, one can take advantage of the elektra ecosystem from Rust. See the Readme for more. (Philipp Gackstatter)
  • Rewrote the KDBError to follow the specification fully and in particular allow catching out of memory errors by catching resource errors. (Philipp Gackstatter)
  • Added a keyset! macro to easily create a keyset with many keys in a single invocation. (Philipp Gackstatter)

Tools

  • KDB_EXEC_PATH, which can be used to add further external tools to kdb, now supports : to separate paths. kdb list-tools and run_env were improved to take advantage of this. (Markus Raab)
  • Checks for kdbCommit have been added to kdb plugin-check. (Vid Leskovar)
  • Added PID file config setting for kdb-run-rest-frontend (Markus Raab)
  • Added kdb meta-show command which prints out all metadata along with its values for a given key. (Michael Zronek)
  • Removed kdb vset as it does not properly put meta-data to the spec namespace. (Michael Zronek)
  • Renamed kdb plugin commands following a hierarchical structure. kdb info is now kdb plugin-info, kdb check is now kdb plugin-check and kdb list is now kdb plugin-list. We also removed the obsolete kdb fstab. (Philipp Gackstatter)
  • Renamed kdb meta commands:
    • kdb getmeta is now kdb meta-get
    • kdb lsmeta is now kdb meta-ls
    • kdb showmeta is now kdb meta-show
    • kdb rmmeta is now kdb meta-rm
    • kdb setmeta is now kdb meta-set (Philipp Gackstatter)
  • Fix test tool gen-gpg-testkey by giving a narrower GPG key description. Fixes mismatches with existing GPG keys that contain "elektra.org" as e-mail address. (Peter Nirschl)
  • kdb list-commands and kdb plugins-list now sort their output in an alphabetical order (Anton Hößl)
  • kdb plugin-list does now mention in the helptext that with option -v the output is sorted by the plugin status (Anton Hößl)
  • kdb import, kdb export and kdb editor now search the plugin database for suitig plugins so it's now possible to run kdb export /hello json instead of having to specify the plugin for the desired format directly. (Anton Hößl)
  • get and mount: Remove dependency on kdbprivate.h (Philipp Gackstatter)

Scripts

  • We structured the scripts. (Markus Raab)
  • Removed the scripts

    • scripts/elektra-merge,
    • scripts/elektra-mount,
    • scripts/elektra-umount,
    • convert-fstab,
    • convert-hosts,
    • convert-inittab,
    • convert-users,
    • scripts/benchmark_libsplit.sh,
    • scripts/zsh and
    • example-xorg. (Markus Raab)
  • Renamed scripts/run_dev_env to scripts/dev/run_env. (Markus Raab)

  • The script draw-all-plugins now also works properly, if the repository path contains space characters. (René Schwaiger)

  • The script link-checker now deduplicates the list of links before checking them. The timeout and amount of retries was also reduced. Lastly the script now supports a whitelist. Any link stored in tests/linkchecker.whitelist will not be checked. (Klemens Böswirth)

  • We removed a script used to compare the runtime performance of YAML plugins. (René Schwaiger)

  • Cleanup: separation of dev, admin and completion scripts. (Markus Raab, Rene Schwaiger)

  • Pre-commit hook pre-commit-check-formatting now lives in scripts/dev/pre-commit-check-formatting. (Klemens Böswirth)

  • The new script reformat-javascript formats the JavaScript code of the repository using the tool prettier. (René Schwaiger)

  • We renamed

    • the script reformat-source to reformat-c, and
    • the script reformat-shfmt to reformat-shell. (René Schwaiger)
  • The script cmake-format now requires cmake-format 0.6. (René Schwaiger)

  • The new script reformat-java formats the Java code in the repository using clang-format. (René Schwaiger)

  • The Markdown Shell Recorder now also works correctly on FreeBSD. (René Schwaiger)

Documentation

  • Added a tutorial on how to write language bindings. Visit our new README. (Michael Zronek, Raphael Gruber, Philipp Gackstatter)
  • Clarified subtyping in the language bindings tutorial. (Michael Zronek)
  • A second tutorial on writing bindings for the high-level API was created as well. (Klemens Böswirth, Raphael Gruber)
  • Added info on how to include xerces plugin with homebrew installation. (Anton Hößl)
  • The compile instructions do not assume that you use make or gcc to build Elektra anymore. (René Schwaiger)
  • Add hints about reformatting with docker. (Dominic Jäger)
  • Add instructions about sourcing on FreeBSD. (Dominic Jäger)
  • Add information on debuggers to main testing documentation. (Dominic Jäger)
  • Added design decision for error code implementations. (Michael Zronek)
  • Fixed some typos and links in the documentation and add new iterate example. (Philipp Gackstatter)
  • Clarified warnings metadata in the error-handling guideline. (Michael Zronek)
  • We fixed minor spelling mistakes in the documentation. (René Schwaiger)
  • Corrected buildserver documentation. (Djordje Bulatovic)
  • Add merge library into kdbset example. (Dominic Jäger)
  • We updated links for the INI parsing library Nickel. (René Schwaiger)
  • Added some informations about contributing to Elektra. (Hani Torabi)

Tests

  • We changed how the formatting test detects code differences. This update should get rid of transient errors as reported here. (René Schwaiger)
  • We disabled the test for the conversion engine. For more information, please take a look at issue #3086. (René Schwaiger)
  • We disabled the test testmod_zeromqsend from the command kdb run_all, since it caused timeouts in high load scenarios. (Mihael Pranjić)
  • The (Markdown) Shell Recorder now prints the protocol for a failed test, even if the test modified the database permanently. (René Schwaiger)
  • We rerun ctest twice to ignore temporary build failures. (Markus Raab)

Build

CMake

  • kdbtypes.h is now generated directly via a CMake configure_file call. (Klemens Böswirth)
  • The variable ELEKTRA_STAT_ST_SIZE_F now contains the correct format specifier for the st_size member of the stat struct on macOS. (René Schwaiger)
  • We simplified and unified the CMake code for the Shell Tests and the Shell Recorder. (René Schwaiger)
  • CMake now prints warnings about missing man pages. (René Schwaiger)
  • The build system does not update a man page in the folder doc/man any more, if ronn only changed the creation date of the man page. (René Schwaiger)

Compilation

  • We now have a setup for proper symbol versioning. (Klemens Böswirth)
  • We do not use implicit typing in the code of the conditionals and yamlcpp plugin any more. After this update, the code compiles without any warnings, even though we now use the compiler switch -Wconversion. (René Schwaiger)
  • JNA and JNI are not built concurrently anymore to avoid dependency resolution fails. (Michael Zronek)

Docker

Vagrant

  • We added a Vagrantfile for a virtual machine based on FreeBSD 12. (René Schwaiger)

Other

  • The reformatting script now checks that the correct version of cmake-format is used. (Klemens Böswirth, René Schwaiger)
  • Improved various error messages and synchronized documentations. (Michael Zronek)
  • Improved range plugin error message. (Michael Zronek)
  • Improved error codes documentation to clarify the hierarchy for developers. (Michael Zronek)
  • Release notes now use git's union merge driver. (Dominic Jäger)
  • Updated asciinema recording to correctly use sudo. (Michael Zronek)
  • Add pkg-config file for kdbmerge. (Raphael Gruber)

Infrastructure

Cirrus

  • The 🔗 Check build job now merges PRs before checking links. (Klemens Böswirth)
  • We enabled logging in the build job 🍎 Clang. This update makes sure that Elektra’s logging code compiles without warnings on macOS. (René Schwaiger)
  • All macOS build jobs now use Xcode 11.1 instead of Xcode 10.1. (René Schwaiger)
  • We removed all non-POSIX shell code from the Cirrus configuration file. (René Schwaiger)
  • The macOS build jobs now use Ruby 2.6. (René Schwaiger)
  • We do not call ninja directly anymore. Instead we use cmake --build. This has the advantage that we do not have to care about the Generator used by CMake. (René Schwaiger)
  • We added the build job 😈 ASAN, which builds and executes Elektra on FreeBSD with enabled AddressSanitizer. (René Schwaiger)
  • We now store common commands in one place at the top of the configuration file. This makes it easier to selectively disable certain build jobs. (René Schwaiger)
  • The new job 📚 Check checks

    • that the man pages are up to date, and
    • that building the PDF version of the Doxygen documentation works. (René Schwaiger)
  • The new build job 🐧 Fedora builds and tests Elektra on Fedora Linux. (René Schwaiger)

Jenkins

  • We upgraded all servers to Buster. (Markus Raab)
  • Jenkins does not auto cancel build jobs of the master branch anymore. (René Schwaiger)
  • Updated xUnit plugin in Jenkinsfile. (Djordje Bulatovic)

Restyled

Travis

  • The build job 🍏 GCC now uses the Travis Homebrew addon to install dependencies. (René Schwaiger)
  • We now build and test Elektra on Ubuntu 18.04 (Bionic Beaver) instead of Ubuntu 16.04 (Xenial Xerus). (René Schwaiger)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date. Furthermore, we changed:

  • Renamed the sub menu Getting Started in the menu Documentation to About Elektra and removed the sub-sub-menus Compiling, Installation and Tutorials. These sub-sub-menus are now sub-menus of Documentation. A new sub menu labeled Get Started added to the menu Documentation with some newcomer-friendly informations. Renamed the Getting Started sub menu in Development to Contribute to Elektra. The green button on the main page is routed to the new Get Started page. (Hani Torabi)
  • The website now lives in the folders website-frontend and website-backend to avoid confusion with the REST backend of the Web-UI. (Markus Raab)
  • Improve main page of website, restructure getting started. (Markus Raab)

Outlook

We are currently working on following topics:

  • Elektrify KDE (Dardan Haxhimustafa) and (Felix Resch)
  • Elektrify LCDproc (Klemens Böswirth) and (Jakob Fischer)
  • Reduce the number of merge conflicts in 3-way merge. (Dominic Jäger)
  • Go bindings and improved Web-UI (Raphael Gruber)
  • Improved Error handling (Michael Zronek)
  • New default storage (René Schwaiger) and (Jakob Fischer)
  • Shell completion (Ulrike Schäfer)
  • Improve Elektra developer experience (Hani Torabi)
  • Ansible bindings (Thomas Waser)
  • Plugin interface improvements (Vid Leskovar)

Statistics

We closed 75 issues for this release.

About 29 authors changed 1651 files with 82267 insertions(+) and 41690 deletions(-) in 1623 commits.

Thanks to all authors for making this release possible!

Finished Thesis

  • Klemens Böswirth: We explore the feasibility of using Elektra in a real-world project. We focused especially on using the high-level API with code-generation. In the thesis, we implemented new versions of LCDproc, one with the low-level API and one with the high-level API. Then we did some benchmarks to compare them. Our results indicate, that Elektra is very much usable in real-world projects. However, we also found that there is still potential for further optimizations.
  • Mihael Pranjić: We design a binary storage format for Elektra's data structures and implement a cache plugin based on the format. The cache plugin leverages the mmap() system call to read and write data. Our cache implementation for Elektra's data structures makes the access to the KDB more than 80 times faster for larger data sets. The penalty for cache misses is below 20 percent for reasonably sized data sets.

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

  • author: mpranj
  • file: elektra-0.9.1.tar.gz
  • size: 7534156
  • md5sum: 42ff587adb7c3f15807ac4dae6722261
  • sha1: bf250260a4efa20e5444f0a7f0027430bc7aa8a0
  • sha256: df1d2ec1b4db9c89c216772f0998581a1cbb665e295ff9a418549360bb42f758

The release tarball is also available signed by Mihael Pranjic using GnuPG from here or on GitHub

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by mpranj about 6 years ago

Elektra - 0.9.0 Release

  • guid: e8c753c0-74af-410b-9f66-77c3ce194717
  • author: Markus Raab
  • pubDate: Tue, 06 Aug 2019 12:09:02 +0200
  • shortDesc: Cache, Command-line Options, Error Codes

What is Elektra?

Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.

You can also read this document on our website.

We wrote a new article describing our vision from configuration management perspective.

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

0.9.*

We are proud to present our largest release so far. It is the first release of the 0.9.* version series, which goal is it:

  • To prepare Elektra for version 1.0.0, which includes incompatible changes like new error codes (which are already part of this release, hence 0.9.0). When 0.9.* is mature enough, we will call it 1.0.0.
  • To make Elektra future-proof so that during 1.*. most of Elektra's functionality can be kept stable
  • To cleanup Elektra, including removal of compatibility layers and research prototypes.

Business Plans

To get away from a purely research-oriented approach to a mature foundation, we also need paid employees to fix problems.

We plan to introduce following ways of income:

  1. donations
  2. paid support/feature requests
  3. consultancy

If you are interested in any of these, please contact us via business@libelektra.org

The 0.8.* version series will be maintained on paid requests. If you have maintenance requests and want 0.8.27 to be released, please contact us via business@libelektra.org

Please note, that Elektra will definitely stay 100% free software (BSD licensed). We do not plan to make any part proprietary. We only introduce a way for paid customers to get desired features or help more quickly.

Highlights

  • Cache
  • Command-line Options
  • Error Codes

Cache

Cache is a new global caching plugin. It uses mmapstorage as its storage backend and lazily stores the whole configuration from previous configuration accesses.

With large or many configuration files, the cache brings amazing performance improvements: Let us say, you have 649 INI configuration files mounted with the multifile resolver, completely specified (which means that the specification must be copied to all the configuration settings). Before the cache, retrieving the whole configuration would take 6 or even 13 seconds. With the cache, the whole operation now takes less than 0.5 seconds after the first access.

This is an important step towards the goal of Elektra to integrate all configuration files present on a system.

Limitations:

  • Mountpoints that are not connected with files, currently cannot be cached.
  • The cache currently does not work together with other global plugins.

By default, the cache will automatically enable itself once the cache plugin is installed. The cache can be found in ~/.cache/elektra.

We also added tools for enabling, disabling and clearing the cache (kdb cache {enable,disable,default,clear}).

A big thanks to (Mihael Pranjić) for the excellent work.

Command-line Options

Gopts is a new plugin that integrates support for command-line options to applications:

  • The gopts plugin retrieves the values of argc, argv and envp needed for elektraGetOpts and then makes the call. It is intended to be used as a global plugin, so that command-line options are automatically parsed when kdbGet is called. (Klemens Böswirth)
  • The plugin works under WIN32 (via GetCommandLineW and GetEnvironmentString), MACOSX (`NSGetArgc,NSGetArgv) and any system that either has asysctl(3)function that acceptsKERNPROC_ARGS(e.g. FreeBSD) or whenprocfsis mounted and either/proc/selfor /proc/curproc` refers to the current process. If you need support for any other systems, feel free to add an implementation.

This means, that using the plugin, you do not need to call elektraGetOpts yourself anymore.

kdbEnsure is a new function in elektra-kdb. It can be used to ensure that a KDB instance meets certain clauses specified in a contract. In principle this a very powerful tool that may be used for a lot of things. All changes made by kdbEnsure are purely within the KDB handle passed to the function.

For example, kdbEnsure can be used, to ensure the availability of command-line options for your application.

Limitations:

  • kdbEnsure only works, if the list plugin is mounted in all appropriate global positions.
  • kdbEnsure does not take care of dependencies between plugins.
  • Mounting of non-global plugins is not supported.

A big thanks to (Klemens Böswirth) for the excellent work.

Error Codes

With this release, we changed our messy error code system into a more structured and clean way. Similar to SQLStates we changed to structure of our error codes and migrated them. Have a look into the new codes. This allows us to easily extend the specification without breaking existing codes and to avoid risking duplicated errors as we had before. (Michael Zronek)

We were able to reduce the former 214 to now only 9 error codes.

For background information read:

A big thanks to (Michael Zronek) for the excellent work.

Plugins

The following section lists news about the plugins we updated in this release. In total, we added 9 plugins and removed 2 plugins.

Type (New Version)

The type plugin was completely rewritten in C. The old version is now called cpptype. (Klemens Böswirth)

The new type plugin also provides the functionality of the enum and the boolean plugin. These plugins are now considered obsolete and you should use type instead.

A few notes on compatibility:

  • the new type does not support the full feature set of enum and boolean, but it supports the features we consider useful.
  • the new type doesn't support FSType and empty. These have been deprecated for a long time and there are good alternatives available.
  • the new type supports enum, wchar and wstring as types, whereas the old cpptype would throw an error for these. In most cases this won't be a problem, but you should be aware of this breaking change.
  • the new type does not support check/type/min and check/type/max, please use the range plugin instead.

To switch from enum to the new type, you have to add either check/type=enum or type=enum. Without a check/type or type metakey, the type plugin will ignore the key. We now also support converting enum values to and from integer values (see README).

To switch from boolean to the new type, you don't have to do anything, if you used the default config. If you used a custom configuration please take a look at the README.

Base64

  • We fixed some warnings about implicit type conversions reported by UBSan in the base64 plugin. (René Schwaiger)

Crypto and Fcrypt

  • Empty GPG key IDs in the plugin configuration are being ignored by the crypto plugin and the fcrypt plugin. Adding empty GPG key IDs would lead to an error when gpg is being invoked. (Peter Nirschl)
  • Apply Base64 encoding to the master password, which is stored within the plugin configuration. This fixes a problem that occurs if ini is used as default storage (see 2591). (Peter Nirschl)
  • Fix compilation without deprecated OpenSSL APIs. Initialization and deinitialization is not needed anymore. (Rosen Penev)

CSVStorage

  • Support DOS newlines for the csvstorage plugin. (Vlad - Ioan Balan)

Filecheck

  • We fixed some warnings about implicit type conversions reported by UBSan. (René Schwaiger)

INI

  • Fixed INI plugin when only the root key needs to be written. (Mihael Pranjić)
  • Plugin writes to INI files without spaces around '=' anymore. Reading is still possible with and without spaces. (Oleksandr Shabelnyk)

Macaddr

  • Added a plugin to handle MAC addresses. kdbGet converts a MAC address into a decimal 64-bit integer (with the most significant 16 bits always set to 0), if the format is supported. kdbSet restores the converted values back to there original form. (Thomas Bretterbauer)

mINI

  • We fixed compiler warnings reported by GCC 9 in the unit test code of the plugin. (René Schwaiger)

Mmapstorage

  • mmapstorage is now able to persist the Global KeySet, which is used by the cache plugin. (Mihael Pranjić)
  • Fixed support for kdb import and kdb export. (Mihael Pranjić)

Multifile

  • Fixed segmentation fault in kdbError() function. (Mihael Pranjić)
  • Added Global Keyset handle to storage plugin. (Mihael Pranjić)
  • Fixed use of wrong resolver handle in the kdbError() function. (Mihael Pranjić)

Quickdump

  • quickdump is a new storage plugin. It implements a more concise form of the dump format, which is also quicker too read. Contrary to dump, quickdump only stores keynames relative to the parent key. This allows easy relocation of configurations. (Klemens Böswirth)
  • quickdump now also uses an variable length integer encoding to further reduce file size. (Klemens Böswirth)

Reference

  • Fixed missing Metadata in README and METADATA.ini. (Michael Zronek)
  • Update README.md web tool to show, how to test REST API on localhost. (Dmytro Moiseiuk)

RGBColor

  • New plugin to validate hex formatted colors (e.g. #fff or #abcd) and normalize them to rgba (4294967295 (= 0xffffffff) and 2864434397 (= 0xaabbccdd) respectively). It also has support for named colors according to the extended color keywords from CSS3. (Philipp Gackstatter)

Semlock

Removed due to:

  • constant pain
  • never worked properly
  • poor design
  • no time in future to maintain (Kurt Micheli)

Spec

  • The spec plugin was partly rewritten to better support specifications for arrays. This includes some breaking changes concerning the less used (and also less functional) parts of the plugin. To find out more about these changes take a look at the README. It now better reflects the actually implemented behaviour. (Klemens Böswirth)

Specload

  • The specload plugin is a special storage plugin. Instead of using a storage file it calls an external application to request its specification. For the transfer it relies on the quickdump plugin. (Klemens Böswirth)
  • Currently changing the specification is only allowed in a very limited way. However, in future the plugin should allow overriding a specification in all cases where this can be done safely. NOTE: While the plugin technically allows some modifications, because of a problem with the resolver this cannot be used right now (see limitations).
  • We also export elektraSpecloadSendSpec to abstract over the quickdump dependency. (Klemens Böswirth)

Syslog

  • We fixed an incorrect format specifier in a call to the syslog function. (René Schwaiger)

Unit

  • New plugin to validate units of memory and normalize them into bytes. E.g. 20 KB (normalized to 20000 Byte). (Marcel Hauri)

YAJL

The YAJL plugin which parses JSON files:

  • now allows setting a value to the mountpoint. This is represented as a top level value in JSON if no other key is present. (Philipp Gackstatter)
  • no longer lists empty parent keys with kdb ls. (Philipp Gackstatter)
  • signifies arrays with the metakey array according to the array decision. (Philipp Gackstatter)
  • no longer produces additional ___dirdata entries for empty array keys. See also issue #2477. (Philipp Gackstatter)

YAMBi

  • YAMBi is now able detect multiple syntax errors in a file. (René Schwaiger)
  • The error message now includes more information about the location of syntax errors. For example, for the incorrect YAML input config.yaml:

yaml key 1: - element 1 - element 2 key 2: scalar - element 3

, the plugin prints an error message that includes the following text:

config.yaml:2:2: syntax error, unexpected start of sequence, expecting end of map or key - element 2 ^ config.yaml:4:8: syntax error, unexpected start of sequence, expecting end of map or key - element 3 ^

. (René Schwaiger)

  • YAMBi now supports Elektra’s boolean data type. (René Schwaiger)
  • The plugin now handles YAML key-value pairs without a value at the end of a file correctly. (René Schwaiger)
  • The plugin now converts YAML key-value pairs with empty value to null/empty keys. (René Schwaiger)
  • YAMBi now converts empty files to a key set containing an empty version of the parent key. (René Schwaiger)

YAML CPP

  • The plugin now handles keys that are part of a map, but use a basename ending with array syntax correctly. For example, in a key set that contains keys with the following names:

user/array/#0 user/array/#1 user/map/#0 user/map/key user/map/#1

, user/array/#0 and user/array/#1 represent array elements, while user/map/#0, and user/map/#1 do not, since the key set also contains the key user/map/key. The following Markdown Shell Recorder snippet shows the new behavior of the plugin:

sh kdb mount config.yaml user yamlcpp kdb set user/array/#0 one kdb set user/array/#1 two kdb set user/map/#0 three kdb set user/map/key four kdb set user/map/#1 five kdb file user | xargs cat #> array: #> - one #> - two #> map: #> "#0": three #> "#1": five #> key: four

. (René Schwaiger)

  • YAML CPP now handles the conversion from and to Elektra’s boolean type properly. (René Schwaiger)
  • The plugin converts “sparse” key sets properly. For example, for the key set that contains only the key:

    • user/parent/#1/#2/map/#0 with the value arr

and uses user/parent as parent key, YAML CPP stores the following YAML data:

yaml - ~ - - ~ - ~ - map: - arr

. (René Schwaiger)

  • YAML CPP now supports mixed data (nested lists & sequences) better. For example, the plugin now correctly converts the YAML data

yaml root: - element: one - element: two

to the key set that contains the following keys:

user/tests/yaml/root user/tests/yaml/root/#0/element user/tests/yaml/root/#1/element

.

YAML Smith

  • YAML Smith now converts keys that shares a common prefix correctly. For example, the last command in the script:

sh kdb mount config.yaml user/tests/yaml yaml kdb set user/tests/yaml/common/one/#0 value kdb set user/tests/yaml/common/two/#0 first kdb set user/tests/yaml/common/two/#1 second kdb export user/tests/yaml yamlsmith

now prints the following YAML data:

yaml common: one: - "value" two: - "first" - "second"

. (René Schwaiger)

  • The plugin now converts Elektra’s boolean values (0, 1) back to YAML’s boolean values (true, false). (René Schwaiger)

Yan LR

  • The build system now disables the plugin, if you installed a version of ANTLR 4 that does not support ANTLR’s C++ runtime (like ANTLR 4.5.x or earlier). (René Schwaiger)
  • We fixed an ambiguity in the YAML grammar. (René Schwaiger)
  • The build system now regenerates the modified parsing code, every time we update the grammar file. (René Schwaiger)
  • The plugin now reports the location of syntax errors correctly. (René Schwaiger)
  • The lexer for the plugin now emits start tokens for maps at the correct location inside the token stream. This update fixes a problem, where the plugin sometimes reported incorrect error messages for the first syntax error in a YAML file. (René Schwaiger)
  • The plugin now stores the end position of map start tokens correctly. Before this update the plugin would sometimes not show the markers (^) that point to the error positions inside the input. (René Schwaiger)
  • Yan LR now supports Elektra’s boolean data type. (René Schwaiger)
  • The plugin now handles YAML key-value pairs that contain no value at the end of a file correctly. (René Schwaiger)
  • The plugin now converts YAML key-value pairs with empty value to null/empty keys. (René Schwaiger)
  • The plugin converts “empty” YAML files to a key set that contains an empty version of the parent key. (René Schwaiger)

YAwn

  • YAwn is now able to print error messages for multiple syntax errors. (René Schwaiger)
  • We also improved the error messages of YAwn, which now also contain the input that caused a syntax error. For example, for the input

yaml key: value - element

the plugin prints an error message that contains the following text:

config.yaml:2:3: Syntax error on input “start of sequence” - element ^

. (René Schwaiger)

  • The plugin now supports Elektra’s boolean data type. (René Schwaiger)
  • YAwn handles YAML key-value pairs that contain no value at the end of a file correctly. (René Schwaiger)
  • The plugin now converts YAML key-value pairs with empty value to null/empty keys. (René Schwaiger)
  • YAwn now stores empty files as a key set containing an empty parent key. (René Schwaiger)

YAy PEG

  • YAy PEG now also supports PEGTL 2.8. (René Schwaiger)
  • The plugin now includes the input that could not be parsed in error messages. (René Schwaiger)
  • We improved the error messages for certain errors slightly. For example, the error message for the input

yaml "double quoted

now includes the following text

1:14: Missing closing double quote or incorrect value inside flow scalar "double quoted ^

. (René Schwaiger)

  • YAy PEG now supports compact mappings:

yaml - key1: value1 key2: value2

and compact sequences:

yaml - - element1 - element2

correctly. (René Schwaiger)

  • The plugin now supports Elektra’s boolean data type. (René Schwaiger)
  • YAy PEG now converts YAML key-value pairs with empty value to null/empty keys. (René Schwaiger)
  • The plugin now translates an empty file to a key set that contains a single empty parent key. (René Schwaiger)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

Compatibility

We introduced several incompatible changes:

  • different error codes are returned
  • INI and YAJL plugins might write different files with the same KeySets

We changed following symbols:

  • elektraIsReferenceRedundant
  • elektraResolveReference
  • elektraPluginFindGlobal
  • kdbEnsure

Core

  • kdbGet now calls global postgetstorage plugins with the parent key passed to kdbGet, instead of a random mountpoint. (Klemens Böswirth)
  • Fixed a double cleanup error (segmentation fault) when mounting global plugins. (Mihael Pranjić)
  • Logging in Elektra was changed with this release. If Elektra is compiled with ENABLE_LOGGER enabled, we now log warnings and errors to stderr and everything except debug messages to syslog. If ENABLE_DEBUG is also enabled, debug messages are logged to syslog as well. Previously you had to make some manual changes to the code, to see most of the logging messages. (Klemens Böswirth)
  • The logger does not truncate the file name incorrectly anymore, if __FILE__ contains a relative (instead of an absolute) filepath. (René Schwaiger)
  • Disabled any plugin execution when we have a cache hit or no update from backends. The old behaviour can be enabled for testing using ENABLE_DEBUG and adding the "debugGlobalPositions" meta key to the parentKey of the kdbGet invocation. (Mihael Pranjić)
  • Removed ingroup from error messages to reduce verbosity. (Michael Zronek)
  • Fixed minor problem when kdb_long_double_t is not available (e.g. mips32). (Matthias Schoepfer)
  • Only add benchmarks if BUILD_TEST is set in cmake. (Matthias Schoepfer)
  • We fixed some warnings about implicit conversion to unsigned int reported by UBSan. (René Schwaiger)

Ease

  • The functions for reference resolving used in the reference plugin have been extracted into libease. This lets other parts of Elektra easily use references and ensures a consistent syntax for them. (Klemens Böswirth)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.

  • JNA is now not experimental anymore. (Markus Raab)
  • gsettings is not default anymore when installed. (Markus Raab)
  • Add fix for creating the Key and KeySet objects in the HelloElektra.java file. (Dmytro Moiseiuk)
  • We fixed a warning about a deprecated default constructor in the C++ binding reported by GCC 9.0. (René Schwaiger)

Tools

  • kdb get -v now displays if the resulting value is a default-value defined by the metadata of the key. (Thomas Bretterbauer)
  • kdb cp now succeeds if the target-keys already have the same values as the source-keys. (Thomas Bretterbauer)
  • web-ui does not show empty namespace anymore (Josef Wechselauer)
  • kdb import does not fail anymore if executed more than once with the same target in the spec-namespace. (Thomas Bretterbauer)
  • kdb mount avoid adding sync if sync is already provided. (Markus Raab)
  • kdb list-tools now supports KDB_EXEC_PATH environment variables that contain spaces. (René Schwaiger)
  • gen-gpg-testkey is added to the default tools list (see #2668).(Peter Nirschl)
  • kdb getenv now executed correctly from within tests (Markus Raab)
  • kdb-bash-completion now works on Mac (see #2836). (Eduardo Santana)
  • kdb rm supports --without-elektra and returns 11 on key not found. (Markus Raab)

Code generation

kdb gen is now no longer an external tool implemented via python, but rather a first class command of the kdb tool. For now it only supports code generation for use with the highlevel API. Try it by running kdb gen elektra <parentKey> <outputName>, where <parentKey> is the parent key of the specification to use and <outputName> is some prefix for the output files. If you don't have your specification mounted, use kdb gen -F <plugin>:<file> elektra <parentKey> <outputName> to load it from <file> using plugin <plugin>.

. (Klemens Böswirth)

Scripts

  • The reformat-source script now also formats tests/shell/include_common.sh.in. Additionally it ensures that the file is 1000 lines long, so that line numbers of files using it are easier to read. (Klemens Böswirth)
  • The clang-format wrapper script now also checks the supported maximum version of Clang-Format. (René Schwaiger)
  • The script reformat-shfmt now also reformats shell support files (*.in) in the scripts folder. (René Schwaiger)
  • The reformat-* scripts now allow you to specify a list of files that should be formatted. Only files actual suitable for the reformat script, will reformat. So e.g. calling reformat-cmake src/include/kdbprivate.h doesn't change any files. (Klemens Böswirth)
  • The script scripts/reformat-all is a new convenience script that calls all other reformat-* scripts. (Klemens Böswirth)
  • The script scripts/pre-commit-check-formatting can be used as a pre-commit hook, to ensure files are formatted before committing. (Klemens Böswirth)
  • The link checker now prints broken links to the standard error output. (René Schwaiger)
  • We added a script, called benchmark-yaml that compares the run-time of the YAML plugins:

for a certain input file with hyperfine. (René Schwaiger)

  • Added kdb reset and kdb reset-elektra, fixed kdb stash. (Markus Raab)

Benchmarks

  • The benchmarking tool benchmark_plugingetset now also supports only executing the get method for the specified plugin. For example, to convert the data stored in the file benchmarks/data/yaypeg.test.in with the YAy PEG plugin to a key set you can now use the following command:

sh benchmark_plugingetset benchmarks/data user yaypeg get

. (René Schwaiger)

Documentation

Style

to the coding guidelines. (René Schwaiger)

Tutorials

. (René Schwaiger)

  • For beginners we added a tutorial that guides them through the process of contributing to libelektra. (Thomas Bretterbauer)
  • Added a section on elektraPluginGetGlobalKeySet in the plugin tutorial. (Vid Leskovar)
  • Added a step-by-step tutorial for beginners to run all tests with Docker. (Oleksandr Shabelnyk)
  • Extend/improve Java bindings related documentation in tutorial and readme. (Oleksandr Shabelnyk)
  • Added a step-by-step tutorial for running reformatting scripts with Docker. (Oleksandr Shabelnyk)
  • Covered Resolving Missing *.so Library Error in tutorial. (Oleksandr Shabelnyk)
  • Added a basic tutorial on How-To: Write a Java Plugin (Dmytro Moiseiuk) and (Miruna Orsa)

Spelling Fixes

  • Write Elektra with capital letter in cascading tutorial. (Vlad - Ioan Balan)
  • Add typo fix to the hello-elektra tutorial. (Dmytro Moiseiuk)
  • Add typo fix to the Java kdb tutorial. (Dominik Hofmann)
  • Fixed capitalization of the initial letter in Readme. (Miruna Orsa)
  • Improved readability in README. (Philipp Gackstatter)
  • We fixed some spelling mistakes in the documentation. (René Schwaiger)
  • Fix typo in root README.md and 'build-in' => 'built-in' in several places (Raphael Gruber)
  • Fixed typos in cassandra.ini (arampaa)

Other

filename:line:0

instead of

filename|line col 0|

to show the location data for broken links. This is also the same style that Clang and GCC use when they display location information for compiler errors. This update has the advantage, that certain tools such as TextMate are able to convert the location data, providing additional features, such as clickable links to the error source. (René Schwaiger)

  • The Markdown Link Converter uses the index 1 for the first line number instead of 0. This update fixes an off-by-one-error, when the user tries to use the error location data printed by the tool in a text editor. (René Schwaiger)
  • We added a badge for LGTM to the main ReadMe file. (René Schwaiger)
  • Added LCDproc and Cassandra specification examples. These examples provide a good guideline for writing specifications for configurations. (Michael Zronek)
  • Drastically improved the error message format. For more information look here. (Michael Zronek)
  • Added a guideline for writing consistent and good error messages. For more information look here. (Michael Zronek)
  • Every kdb command now accepts v and d as option to show more information in case of warnings or errors. (Michael Zronek)
  • Improved qt-gui error popup to conform with the new error message format. (Raffael Pancheri)
  • We fixed the format specifiers in the “Hello, Elektra” example. (René Schwaiger)
  • Expanded the Python Tutorial to cover installation under Alpine Linux. (Philipp Gackstatter)
  • We wrote a tutorial which is intended to help newcomers contributing to libelektra. (Thomas Bretterbauer)
  • We fixed various broken links in the documentation. (René Schwaiger)
  • Fix finding of jni.h library. (Dmytro Moiseiuk)
  • Added license for asciinema. (Anastasia @nastiaulian)
  • We incorporated kdb-introduction into the man page for kdb (Markus Raab)

Tests

  • We now test the Directory Value Plugin with additional test data. (René Schwaiger)
  • The variables:

    • SPEC_FOLDER
    • SYSTEM_FOLDER
    • USER_FOLDER

in the inclusion file for shell test were set incorrectly, if the repository path contained space characters. (René Schwaiger)

now also works correctly, if the user and system directory file paths contain space characters. (René Schwaiger)

Source Code Checks

  • The formatting instructions printed by check_formatting now also work correctly, if

    • the diff output does not start with the test number added by CTest, and
    • you use a non-POSIX shell such as fish

. (René Schwaiger)

  • We reformatted the CMake source code with cmake format 0.5.4 and also check the style of CMake code with this new version of the tool. (René Schwaiger)
  • We now check the source code of the repository with LGTM. (René Schwaiger)
  • We fixed various warnings about

    • missing or duplicated include guards,
    • undefined behavior,
    • incorrect format specifiers,
    • unnecessary statements,
    • short names for global variables, and
    • empty if-statements

reported by LGTM. (René Schwaiger)

Build

CMake

  • We now disable the option INSTALL_SYSTEM_FILES by default. This change makes it possible to install Elektra using Homebrew on Linux without any changes to Elektra’s Linuxbrew formula. (René Schwaiger) Add -DINSTALL_SYSTEM_FILES=ON for previous behavior.
  • The build system now rebuilds the JNA binding with Maven, if you change any of the Java source files of the binding. (René Schwaiger)
  • testshell_markdown_tutorial_crypto is not compiled and executed if gen-gpg-testkey is not part of TOOLS. (Peter Nirschl)
  • Plugin tests are now only added, if BUILD_TESTING=ON. (Klemens Böswirth)
  • The symbol list for the static version is now exported directly from a CMake function. (Klemens Böswirth)
  • Building Elektra with enabled io_glib binding does not require libuv anymore. (René Schwaiger)

Docker

Alpine Linux

Debian

  • We now use the default JDK on Debian sid, since the package openjdk-8-jdk is not available in the official unstable repositories anymore. (René Schwaiger)
  • We added

to the image for Debian sid. (René Schwaiger)

  • We now offer images for the latest stable version of Debian codenamed “buster”. (René Schwaiger)

Ubuntu

Other Updates

now include the Python YAML library recommended by cmake format. (René Schwaiger)

Vagrant

Infrastructure

Cirrus

  • We added the build job 🔗 Check, which checks the documentation for broken links. (René Schwaiger)

Jenkins

  • We disabled the tests:

    • testmod_crypto_botan,
    • testmod_crypto_openssl,
    • testmod_dbus,
    • testmod_dbusrecv,
    • testmod_fcrypt,
    • testmod_gpgme, and
    • testmod_zeromqsend

, since they are known to fail in high load scenarios. (René Schwaiger)

  • We added deprecated plugins to the tests. (Markus Raab)
  • We increased the automatic timeout for jobs that show no activity from 5 to 10 minutes. (René Schwaiger)
  • We improved the exclusion patterns for the Coveralls coverage analysis. (René Schwaiger)
  • We now again build the API docu of master and we now also build the API docu of PRs. (Markus Raab)
  • We added buster build jobs. (Markus Raab)

Restyled

Travis

  • We removed the build job for the Haskell binding and Haskell plugin. For more information, please take a look here. (Klemens Böswirth)
  • We always use GCC 9 for the build job 🍏 GCC. This update makes sure that the build job succeeds, even if Homebrew adds a new major version of the compiler. (René Schwaiger)
  • We simplified our Travis configuration file, removing various unnecessary and unused code. In this process we also got rid of the caching directives, we previously used to speed up the Haskell build job 🍏 Haskell. (René Schwaiger)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date. Furthermore, we changed:

  • Our entry for Elektra has been approved in the Free Software Directory: https://directory.fsf.org/wiki/Elektra
  • Added github build status badges to website (hesirui)
  • We updated part of a test for the snippet converter. (René Schwaiger)
  • Fixed anchor links on the website (hesirui)
  • Added Docsearch in top-bar of website (hesirui)

Outlook

We are currently working on following topics:

  • Go bindings and improved Web-UI (Raphael Gruber)
  • semantic 3-way merging (Dominic Jaeger)
  • improved error handling (Michael Zronek)
  • Rust bindings (Philipp Gackstatter)
  • elektrify LCDproc (Klemens Böswirth) and (Jakob Fischer)
  • configuration upgrades (Lukas Kilian)
  • default storage (René Schwaiger) and (Jakob Fischer)
  • shell completion (Ulrike Schäfer)
  • improved developer experience (Hani Torabi)
  • Ansible bindings (Thomas Waser)
  • misconfiguration tracker (Vanessa Kos)
  • plugin interface improvements (Vid Leskovar)

Statistics

About 40 authors changed 1278 files with 49409 insertions(+) and 13883 deletions(-) in 2025 commits.

We closed 114 issues for this release.

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

  • name: /home/markus/elektra-0.9.0.tar.gz
  • size: 7390149
  • md5sum: 5cf9935515aba0567d6014a3693e415a
  • sha1: 05ebe99c87b89a7cac58bf45cd3aff200cc1fd8d
  • sha256: fcdbd1a148af91e2933d9a797def17d386a17006f629d5146020fe3b1b51ddd8

The release tarball is also available signed by Markus Raab using GnuPG from here or on GitHub

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by markus2330 over 6 years ago

Elektra - 0.8.26 Release

  • guid: 55950e64-fa4e-4eb9-9a3a-2c73d9cd6478
  • author: Markus Raab
  • pubDate: Tue, 26 Feb 2019 15:31:09 +0100
  • shortDesc: high-level API

We are proud to release Elektra 0.8.26 with the new high-level API.

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.

You can also read the news on our website

High-Level API

The new high-level API provides an easier way for applications to get started with Elektra.

To use Elektra in an application (including proper error handling) you now only need a few self-explanatory lines of code:

```c ElektraError * error = NULL; Elektra * elektra = elektraOpen ("/sw/org/myapp/#0/current", NULL, &error); if (elektra == NULL) { printf ("An error occurred: %s", elektraErrorDescription (error)); elektraErrorReset (&error); return -1; }

// Once you have an instance of Elektra you simply call one of the typed elektraGet* functions to read a value:

kdblongt mylong = elektraGetLong (elektra, "mylong"); printf ("got long " ELEKTRALONGF "\n", mylong); const char * mystring = elektraGetString (elektra, "mystring"); printf ("got string %s\n", mystring);

elektraClose (elektra); ```

To run the application, the configuration should be specified, e.g., for mylong:

sudo kdb setmeta /sw/org/myapp/#0/current/mylong type long sudo kdb setmeta /sw/org/myapp/#0/current/mylong default 5

In the getters/setters there is no need to convert types or to specify the base path /sw/org/myapp/#0/current, as the high-level API does that for you. The API supports the CORBA types already used by the plugins. The high-level API should also be used in combination with a specification (spec-mount). When used this way, the API is designed to be error and crash free while reading values. Writing values, can of course still produce errors.

Another advantage of the new API is, that it will be much easier to write bindings for other languages now, because only a few simple types and functions have to be mapped to provide the full functionality.

Take a look at the README for more information.

Because of the high-level API, we now have the new header files elektra.h and a folder elektra in Elektra's include directory. Furthermore, we install the library libelektra-highlevel.so and the pkgconfig file elektra-highlevel.pc for easier detection.

For an example on how to build an application using this API take a look at this.

A big thanks to Klemens Böswirth for making this possible. Also big thanks to Dominik Hofer, who did all the foundation work for this API.

Plugins

The following section lists news about the plugins we updated in this release.

Augeas

  • We changed the default Augeas directory prefix for the lenses directory on macOS to the one used by Homebrew: /usr/local. (René Schwaiger)

Network

  • The network plugin also supports port declarations to check if a port number is valid or if the port is available to use. (Michael Zronek)
  • We added a Markdown Shell Recorder test to the ReadMe of the plugin. (René Schwaiger)

YAMBi

  • The build system does not print a warning about a deprecated directive any more, if you build the plugin with Bison 3.3 or later. (René Schwaiger)
  • YAMBi now handles comments at the end of input properly. (René Schwaiger)

YanLR

  • We improved the error reporting capabilities of the plugin. It now stores all of the error message reported by ANTLR and also specifies the line and column number of syntax errors. We also visualize these error messages in a similar way as modern compilers like Clang or GCC. For example, for the following erroneous input:

yaml key: - element 1 - element 2 # Incorrect Indentation!

the plugin currently prints an error message that looks like this:

config.yaml:2:1: mismatched input '- ' expecting end of map - element 2 # Incorrect Indentation! ^^ config.yaml:2:37: extraneous input 'end of map' expecting end of document - element 2 # Incorrect Indentation! ^

. The inspiration for this feature was taken from the book “The Definitive ANTLR 4 Reference” by Terence Parr. (René Schwaiger)

  • Yan LR’s lexer now

    • handles comment at the end of a YAML document correctly,
    • stores a more human readable description in tokens (e.g. end of map instead of MAP END)

. (René Schwaiger)

Path

Enhanced the plugin to also check for concrete file or directory permissions such as rwx. For example, you can specify that a user can write to a certain directory or file which prevents applications of runtime failures once they try to access the given path (such as a log directory or file). Simply add check/path/user <user> and check/path/mode <modes> as specification (metadata) and be assured that you can safely set a path value to the key. A more detailed explanation can be found here (Michael Zronek)

YAwn

  • The plugin now handles comments at the end of a file properly. (René Schwaiger)
  • We improved the syntax error messages of the plugin. (René Schwaiger)
  • We fixed a memory leak that occurred, if a YAML file contained syntax errors. (René Schwaiger)

YAy PEG

  • The new plugin YAy PEG parses a subset of YAML using a parser based on PEGTL. (René Schwaiger)

Ruby

  • Added some basic unit tests (Bernhard Denner)

Misc

reported on FreeBSD. (René Schwaiger)

  • The resolver plugin and its tests now better support KDB_DB_SYSTEM and KDB_DB_SPEC paths using ~ to refer to a home directory. (Klemens Böswirth)
  • If KDB_DB_SYSTEM is set to a relative path, it is now treated as relative to CMAKE_INSTALL_PREFIX. This ensures that KDB_DB_SYSTEM actually points to the same location no matter the current working directory. (Klemens Böswirth)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

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 have two minor incompatible changes:

  • we now support larger array numbers (i.e. the larger numbers are not an error anymore)
  • elektraArrayValidateBaseNameString returns the offset to the first digit of the array index instead of 1

For details of the changes see below Core and Libease.

Core

  • All plugins in the KDB now get a handle to a global keyset via elektraPluginGetGlobalKeySet(), for communication between plugins. See Global KeySet Handle for details. (Mihael Pranjić)
  • elektraWriteArrayNumber now uses kdb_long_long_t for array indices to be compatible with the high level API. Similarly the value of ELEKTRA_MAX_ARRAY_SIZE was changed to match this. (Klemens Böswirth)

Libease

  • The function elektraArrayValidateBaseNameString now returns the offset to the first digit of the array index, if the given string represents an array element containing an index. This update enhances the behavior of the function. Now it not only tells you if a name represents a valid array element, but also the start position of the array index.

``c elektraArrayValidateBaseNameString ("#_10"); // ~~^ Returns2(instead of1`)

elektraArrayValidateBaseNameString ("#___1337"); // ~~~~^ Returns 4 (instead of 1) ```

If your program already used elektraArrayValidateBaseNameString and you check for a valid array element using the equality operator (== 1), then please use (>= 1) instead. For example, if you code that looks like this:

c if (elektraArrayValidateBaseNameString(baseName) == 1) …;

, please update your code to check for a valid array element name like this:

c if (elektraArrayValidateBaseNameString(baseName) >= 1) …;

. (René Schwaiger)

Libopts

  • This is a new library containing only the function elektraGetOpts. This function can be used to parse command line arguments and environment variables and add their values to keys in the proc namespace.

You can use opt, opt/long and env to specify a short, a long option and an environment variable. For more information take a look at the tutorial and the code documentation of elektraGetOpts. (Klemens Böswirth)

Tools

  • kdb spec-mount correctly includes type plugin to validate type. (Markus Raab)
  • kdb setmeta reports if it removed a metakey. (Markus Raab)
  • system/elektra/version now has metadata to indicate that it cannot be edited or removed. (Dominic Jäger)

Scripts

Documentation

  • We fixed various spelling mistakes. (René Schwaiger)
  • The documentation for elektraMetaArrayToKS was fixed. It now reflects the fact that the parent key is returned as well. (Klemens Böswirth)

Tests

  • The tests for the IO bindings and notification plugins now use increased timeout values so that the test suite fails less often on machines with high load. (René Schwaiger)
  • We update most of the Markdown Shell Recorder tests so they use an explicit namespace (like system or user). This has the advantage that the output of these tests does not change depending on the user that executes them. Before the update these tests used cascading keys. (René Schwaiger)
  • The Shell Recorder now also works correctly on FreeBSD. (René Schwaiger)
  • Fix memcheck target to detect memory problems again and enabled parallel testing to speed it up. (Mihael Pranjić)
  • Fix memleak in pluginprocess tests. (Mihael Pranjić)
  • The test check-env-dep does not require Bash anymore. (René Schwaiger)
  • We fixed an incorrect directive in the Markdown Shell Recorder test of the Type Checker plugin. (René Schwaiger)
  • We added a test that invokes the script fix-spelling to check the documentation for common spelling mistakes. (René Schwaiger)
  • We added a test that checks the formatting of Markdown files with prettier. (René Schwaiger)
  • The test testscr_check_formatting now prints instructions that show you how to fix formatting problems. (René Schwaiger)

Build

CMake

Misc

  • The plugin name is now provided as compiler definition ELEKTRA_PLUGIN_NAME via CMake. See #1042. (Peter Nirschl)
  • ELEKTRA_PLUGIN_FUNCTION does not require the module name as parameter any more, instead the ELEKTRA_PLUGIN_NAME compiler definition is being used. See #1042. (Peter Nirschl)
  • ELEKTRA_README, and ELEKTRA_PLUGIN_EXPORT do not require the module name as parameter any more, instead the ELEKTRA_PLUGIN_NAME compiler definition is being used. See #1042. (Peter Nirschl)
  • We now specify
    • version number,
    • project description, and
    • homepage URL in the CMake project command. (René Schwaiger)
  • We fixed the detection of Python for the Python 2 binding on macOS. (René Schwaiger)
  • You can now use the Ruby binding and plugin without any manual configuration, if you installed Ruby (version 2.5 or later) via Homebrew. (René Schwaiger)

Find Modules

  • The CMake find module FindAugeas.cmake does not print an error message anymore, if it is unable to locate Augeas in the pkg-config search path. (René Schwaiger)
  • The CMake find module FindLua.cmake does not print an error message anymore, if it is unable to locate a Lua executable. (René Schwaiger)
  • We added code that makes sure you can compile IO GLIB on macOS, even if pkg-config erroneously reports that GLIB requires linking to the library intl (part of GNU gettext). (René Schwaiger)
  • We added a CMake find module for GLib. The module makes sure you can compile and link IO GLib on macOS. (René Schwaiger)
  • The CMake find module FindLibOpenSSL.cmake does not require pkg-config anymore. The updated code also fixes some linker problems on macOS (and probably other operating systems too), where the build system is not able to link to OpenSSL using only the name of the OpenSSL libraries. (René Schwaiger)
  • We simplified the CMake find module FindLibgcrypt.cmake.The update fixes problems on macOS, where the build system excluded the plugin crypto_gcrypt, although Libgcrypt was installed on the system. (René Schwaiger)
  • We now use the official CMake find module for iconv. This update fixes linker problems with the iconv and filecheck plugin on FreeBSD 12. (René Schwaiger)
  • The CMake find module for Botan does not require pkg-config anymore. (René Schwaiger)
  • The CMake find module for libgit2 now also exports the version number of libgit2. (René Schwaiger)
  • We added a CMake find module for libuv and fixed a problem on macOS, where the build system was unable to locate the header file of libuv. (René Schwaiger)
  • We added a CMake find module for ZeroMQ to fix build problems on macOS. (René Schwaiger)

Docker

. (René Schwaiger)

Misc

  • We removed the configure script from the top-level directory. CMake is now popular enough so that this helper-script is not needed. (René Schwaiger)

Infrastructure

Cirrus

. Both of these build jobs use -Werror to make sure we do not introduce any code that produces compiler warnings. (René Schwaiger)

  • The new build job 🍎 Clang tests Elektra on macOS. (René Schwaiger)
  • We added the build job 🍎 Clang ASAN, which uses Clang with enabled AddressSanitizer to test Elektra on macOS. (René Schwaiger)
  • The new build job 🍎 FULL compiles and test Elektra using the CMake options BUILD_SHARED=OFF an BUILD_FULL=ON. (René Schwaiger)
  • We added 🍎 MMap, which tests Elektra using mmapstorage as default storage module. (René Schwaiger)
  • We install and uninstall Elektra in all of the macOS build jobs to make sure that ElektraUninstall.cmake removes all of the installed files. (René Schwaiger)

Jenkins

  • We added a badge displaying the current build status to the main ReadMe. (René Schwaiger)
  • The build job formatting-check now also checks the formatting of Shell scripts. (René Schwaiger)

Travis

  • We now test Elektra on Ubuntu Xenial Xerus. (René Schwaiger)
  • We removed the build jobs 🍏 Clang and 🍏 Check Shell in favor of the Cirrus build job 🍎 Clang. (René Schwaiger)
  • We removed the build jobs 🍏 Clang ASAN in favor of the Cirrus build job 🍎 Clang ASAN. (René Schwaiger)
  • We removed the build jobs 🍏 FULL in favor of the Cirrus build job 🍎 FULL. (René Schwaiger)
  • We removed the build jobs 🍏 MMap in favor of the Cirrus build job 🍎 MMap. (René Schwaiger)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date.

Outlook

We are currently working on following topics:

  • infallible high-level API: creating an API that guarantees you to return configuration values (Klemens Böswirth)
  • error handling (Michael Zronek)
  • elektrify LCDproc (Klemens Böswirth) and (Michael Zronek)
  • YAML as default storage (René Schwaiger)
  • misconfiguration tracker (Vanessa Kos)
  • global mmap cache: This feature will enable Elektra to return configuration without parsing configuration files or executing other plugins as long as the configuration files are not changed. (Mihael Pranjić)

and since recently:

  • automatic shell completion (Ulrike Schaefer)
  • plugin framework improvements (Vid Leskovar)
  • 3-way merge (Dominic Jäger)
  • reducing entry barriers for newcomers (Hani Torabi Makhsos)
  • bug fixing (Usama Morad) and (Kurt Micheli)

Statistics

In this release we created 986 commits in which 802 files were changed, with 21687 insertions(+) and 6912 deletions(-).

Following authors made this release possible:

  1 commit by Aybuke Ozdemir <aybuke.147@gmail.com>
  2 commits by Gabriel Rauter <rauter.gabriel@gmail.com>
  6 commits by Bernhard Denner <bernhard.denner@gmail.com>
  6 commits by Dominic Jäger <dominic.jaeger@gmail.com>
 25 commits by Peter Nirschl <peter.nirschl@gmail.com>
 32 commits by Mihael Pranjic <mpranj@limun.org>
 66 commits by Michael Zronek <michael.zronek@gmail.com>
112 commits by Markus Raab <elektra@markus-raab.org>
131 commits by Klemens Böswirth <k.boeswirth+git@gmail.com>
141 commits by Dominik Hofer <me@dominikhofer.com>
464 commits by René Schwaiger <sanssecours@me.com>

Join the Initiative!

We welcome new contributors! Read here about how to get started.

As first step, you could give us feedback about these release notes. Contact us via our issue tracker.

Get the Release!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.8.26.tar.gz
  • size: 6395865
  • md5sum: 4ef202b5d421cc497ef05221e5309ebc
  • sha1: 94f654764bcf49d0ebc7e636f444e24ca6cfeb19
  • sha256: 5806cd0b2b1075fe0d5a303649d0bd9365752053e86c684ab7c06e7f369155d3

The release tarball is also available signed by Markus Raab using GnuPG from here or on GitHub

Already built API-Docu can be found here or on GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via our issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by markus2330 almost 7 years ago

Elektra - 0.8.25 Release

We are proud to present Elektra 0.8.25.

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 news on our website

Metadata

  • guid: 472392e0-cc4f-4826-a0a9-2764d90c5f89
  • author: Markus Raab
  • pubDate: Sun, 18 Nov 2018 21:24:34 +0100
  • shortDesc: faster storage and lookup

Highlight

This release is dedicated to drastically improve the speed of Elektra. Two non-trivial features facilitate most of the improvement:

  • mmap storage for very fast retrieval of configuration
  • Hybrid Search Algorithm for ksLookup (...) for very fast access of configuration

mmap storage

We added a new, binary and fast storage plugin called mmapstorage. It leverages the mmap() syscall and supports full Elektra semantics. We provide two compile variants: mmapstorage and mmapstorage_crc. The mmapstorage_crc variant enables CRC32 checksums for critical data, while the mmapstorage variant omits the checksum for maximum performance.

We ran a synthetic benchmark with 257 iterations using 40k keys in a keyset, and compared the performance to the dump storage plugin.

Median write time in microseconds:

| Plugin | Time | | --- | --- | | dump | 71079 | | mmapstorage | 2964 | | mmapstorage_crc | 7644 |

Median read time in microseconds:

| Plugin | Time | | --- | --- | | dump | 82737 | | mmapstorage | 1145 | | mmapstorage_crc | 5744 |

In our benchmark, the mmapstorage plugin writes more than 23x faster, and reads more than 72x faster than the dump storage plugin.

For this release the plugin is marked as experimental, even though it is already used as default storage plugin in a build job on our build server.

Thanks to Mihael Pranjić for this improvement.

Hybrid Search Algorithm for ksLookup (...)

The hybrid search algorithm is now implemented, this concludes the extension of the ksLookup (...) search with the order preserving minimal perfect hash map (OPMPHM). The hybrid search combines the best properties of the binary search and the OPMPHM. The hybrid search decides dynamically which search algorithm to use.

Because of the automatic decision, usually nothing needs to be done by API users to take advantage of this improvement. Advanced API user, however, can overrule the hybrid search by passing KDB_O_OPMPHM or KDB_O_BINSEARCH to ksLookup (...). The constants are defined in kdbproposal.h. For low-memory systems the building of the hash map can be disabled altogether at build-time by disabling the CMake variable ENABLE_OPTIMIZATIONS (by default enabled now).

The implemented randomized OPMPHM algorithm is in 99.5% of the measured random cases optimal. However the randomization property of the algorithm leaves an uncertainty.

The results made with random cases had shown that the hybrid search is, except for small keyset sizes, almost always faster compared to the standalone binary search. The performance increase strongly depended on the measured hardware. In the random cases where the hybrid search is faster, on average ~8.53% to ~20.92% of time was saved. The implemented hybrid search works only above a keyset size of 599 to exclude the small keyset sizes.

Thanks to Kurt Micheli for this improvement.

Plugins

The following section lists news about the plugins we updated in this release.

Directory Value

We improved the performance of the directoryvalue plugin. (René Schwaiger) This plugin is used for configuration file formats that do not support that directories contain values, like it is the case in JSON. A program manipulating a 13 MB JSON file which first did not succeed within 10 hours is now finished in 44 seconds.

Process

There is a new, experimental plugin called process. This plugin utilizes the pluginprocess library in order to execute arbitrary other plugins in an own process, acting as a proxy itself. Therefore it is not required to explicitly change a plugin's implementation if it shall be executed in an own process. This plugin is not completely finished yet, as currently there is no way for it to mimic the proxied plugin's contract in Elektra. It can be used with simple plugins like dump however, check the limitations in the readme for more details. (Armin Wurzinger)

FSTab

The detection of the mntent functions now also works correctly, if you use the compiler switch -Werror. (René Schwaiger)

passwd

We fixed an issue with the passwd plugin not properly setting compile flags. This resolves a problem with undefined functions when building with musl. (Lukas Winkler)

gpgme

The experimental gpgme plugin was brought into existence to provide cryptographic functions using GnuGP via the libgpgme library. (Peter Nirschl)

network

The network plugin now also allows for non-numerical hosts (i.e. "localhost") to be set and tries to resolve it via DNS. (Michael Zronek)

YAMBi

This new plugin parses a subset of YAML using a parser generated by Bison. (René Schwaiger)

YAML CPP

The build system now disables the plugin automatically, if you use a GCC compiler (6.x or earlier) and enable the option ENABLE_ASAN. We updated the behavior, since otherwise the plugin will report memory leaks at runtime. (René Schwaiger)

Yan LR

A new plugin parsing YAML files using Yan LR.

  • The plugin does not modify the (original) parent key. As a consequence, setting values at the root of a mountpoint:

sh sudo kdb mount config.yaml user/tests/yambi yambi kdb set user/tests/yanlr 'Mount Point Value' kdb get user/tests/yanlr #> Mount Point Value

now works correctly. (René Schwaiger) - We now use C++ code to test the plugin. (René Schwaiger) - The CMake code of the plugin now also recognizes antlr as ANTLR executable, if antlr4 is not available. (René Schwaiger) - The build system now disables the unit test for the plugin, if you use GCC (6.x or earlier) to translate Elektra. We introduced this behavior, since the code generated by ANTLR (YAML.h) seems to contain a double free that causes a segmentation fault on systems that use the GNU C library. (René Schwaiger) - The build system now disables the plugin automatically, if you use a GCC compiler (6.x or earlier) and enable the option ENABLE_ASAN. (René Schwaiger)

YAwn

This new plugin parses a subset of YAML using the Earley Parser library YAEP. (René Schwaiger)

Reference

This new plugin can be used to validate that the value of a key is a reference to another key. (Klemens Böswirth)

Libraries

The text below summarizes updates to the C (and C++)-based libraries of Elektra.

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

This is the last release for which we have built Jessie packages:

    deb     [trusted=yes] https://debian-stable.libelektra.org/elektra-stable/ jessie main
    deb-src [trusted=yes] https://debian-stable.libelektra.org/elektra-stable/ jessie main

Obviously, we will continue to update the stretch package:

    deb     [trusted=yes] https://debian-stretch-repo.libelektra.org/ stretch main
    deb-src [trusted=yes] https://debian-stretch-repo.libelektra.org/ stretch main

Infos for Package Maintainers

Following plugins got added:

  • libelektra-gpgme.so
  • libelektra-mmapstorage_crc.so
  • libelektra-mmapstorage.so
  • libelektra-process.so
  • libelektra-reference.so
  • libelektra-yambi.so

A new library got added (should be packaged privately for now):

  • libelektra-globbing.so

Core

Optimize elektraKsFilter to not duplicate keys (Markus Raab)

Globbing

A new library which can be used to match keys against globbing patterns was introduced. (Klemens Böswirth)

The API is still experimental, so it should not be used externally for now.

Ease

libease provides the function elektraArrayValidateBaseNameString, which can be used to validate that a given string is an Elektra array name. (Klemens Böswirth)

Bindings

Bindings allow you to utilize Elektra using various programming languages. This section keeps you up to date with the multi-language support provided by Elektra.

Ruby

Do not use private Elektra headers for Ruby bindings as preparation for a Ruby libelektra gem. (Bernhard Denner)

Tools

  • Added benchmarks for storage plugins. The currently benchmarked plugins are dump and mmapstorage. (Mihael Pranjić)
  • Avoid raw pointers in KDB tools. (Markus Raab)
  • Improved error text of KDB tool cp. (Markus Raab)
  • Document hidden feature of KDB tool mount. (Markus Raab)
  • Add more tags to the KDB tools to be used with kdb find-tools. (Markus Raab)

Scripts

  • We now require clang-format 6.0 for formatting C and C++ code. (René Schwaiger)
  • The command reformat-source now displays information about the installed version of clang-format, if it is unable to locate a supported version of the tool. (René Schwaiger)
  • We now also check the POSIX compatibility of our scripts with shfmt. (René Schwaiger)
  • The new command [reformat-shfmt][https://master.libelektra.org/scripts/reformat-shfmt] reformats Shell scripts using the tool shfmt. (René Schwaiger)

Documentation

  • We fixed some minor spelling mistakes in the documentation. (René Schwaiger)
  • Improved the plugins documentation. (Michael Zronek)
  • The ReadMe now includes two badges that show the latest released version of Elektra and the status of the Travis build. (René Schwaiger)
  • Fixed documenation error on Ruby plugin Readme. (Bernhard Denner)
  • Go into more detail in BUILDSERVER.md. (Lukas Winkler)

Tests

  • Fix potential parallel execution of maven tests, which write to KDB. (Markus Raab)
  • The unit test for the dbus plugin does not leak memory anymore, if it fails on macOS. (Thomas Wahringer)
  • The tests testkdb_allplugins and testscr_check_kdb_internal_check do not test a plugin on an ASAN enabled build anymore, if you specify the status tag memleak in the plugin contract. (René Schwaiger)
  • The CFramework macro compare_key now also checks if the meta values of keys are equal. (René Schwaiger)
  • The test testscr_check_bashisms does not print warnings about skipped files anymore. (René Schwaiger)
  • We added a Markdown Shell Recorder test for the shell plugin . (René Schwaiger)
  • Added many storage plugin tests. Most tests use the keyset, key name and value APIs. Currently, the tests are only active for dump and mmapstorage. (Mihael Pranjić)
  • The test testcpp_contextual_basic now compiles without warnings, if we use Clang 7 as compiler. (René Schwaiger)
  • crypto, fcrypt and gpgme properly shut down the gpg-agent after the unit test is done. See #1973 . (Peter Nirschl)
  • minor refactoring of the unit tests for crypto, fcrypt, gpgme: moved shared code to separate module in order to avoid code duplication. (Peter Nirschl)
  • The CMake targets for plugin tests (testmod_[plugin]) now depend on the respective CMake targets for the plugins themselves (elektra-[plugin]). (Klemens Böswirth)
  • Fixed bug in CMake plugin tests, if only BUILD_FULL but not BUILD_SHARED is used. (Klemens Böswirth)
  • The test testscr_check_formatting now also checks the formatting of Shell code. (René Schwaiger)
  • We pumped version numbers in XML-test files. (Markus Raab)
  • We fixed a crash in the unit test of the JNA binding. (René Schwaiger)
  • The command kdb run_all now only prints the output of tests that failed. To print the full output of all test, please use the option -v. (René Schwaiger)
  • The Shell Recorder does not use the non-POSIX grep option --text any more. (René Schwaiger)
  • The test suite now uses Google Test 1.8.1. (René Schwaiger)

Build

CMake

  • We improved the detection of Python 2 and Python 3 in the CMake code of the Python bindings/plugins. (René Schwaiger)
  • We restructured the code of the CMake module we use to detect Haskell tools . (René Schwaiger)
  • Building the Haskell binding should now work again. (René Schwaiger)
  • The CMake configuration step now displays less debug messages about found libraries. (René Schwaiger)
  • Provide a wrapper around check_symbol_exists that handles issues with -Werror -Wpedantic. (Lukas Winkler)
  • The argument INCLUDE_SYSTEM_DIRECTORIES of the function add_plugin now supports multiple include directories. (René Schwaiger)
  • We reformatted all CMake source files with cmake-format 0.4.3. (René Schwaiger)
  • Generating coverage data (ENABLE_COVERAGE=ON) should now also work on macOS. (René Schwaiger)
  • You can use the new target run_checkshell to run all shell checks (testscr_check.*). (René Schwaiger)
  • The new target run_nocheckshell runs all tests except for shell checks. (René Schwaiger)
  • The target run_all now runs tests that do not modify the key database in parallel. (René Schwaiger)
  • Fix CMake inclusion logic for GLib/Gi (Markus Raab)

Docker

  • The Docker image for Debian stretch now contains all (optional) dependencies for Elektra. (René Schwaiger)
  • The docker images used by our build system are now available to download from our systems without authentication. Try it out and list available images via docker run --rm anoxis/registry-cli -r https://hub-public.libelektra.org. You can search for images using --images-like, for example: docker run --rm anoxis/registry-cli -r https://hub-public.libelektra.org --images-like alpine. Afterwards pull your desired image as you would do from any public registry, for example: docker pull hub-public.libelektra.org/build-elektra-alpine:201811-37597a34fed4988639cdaf4d6a2c54754d09918586f53389e4fde5fd3b3a7180. (Lukas Winkler)

Vagrant

  • Added Vagrantfile for Ubuntu artful 32-bit. (Mihael Pranjić)

Infrastructure

Jenkins

  • We enabled tests that write to the hard disk on the build job alpine. (René Schwaiger)
  • The build jobs now print less non-relevant output. (René Schwaiger)
  • Enable -Werror in debian-stable-full. (Lukas Winkler)
  • We added the compiler switch -Werror to the build jobs:
    • alpine,
    • debian-stable-full-i386,
    • debian-stable-full-mmap-asan,
    • debian-stable-full-mmap,
    • debian-stable-full-optimizations-off,
    • debian-stable-full-xdg,
    • debian-stable-minimal,
    • debian-stable-multiconf,
    • debian-unstable-clang-asan,
    • debian-unstable-full-clang,
    • debian-unstable-full,
    • ubuntu-xenial, and
    • debian-stable-asan. (René Schwaiger)
  • Build Artifacts for all PR's to detect issues before merging (Lukas Winkler)
  • Stricter removal of temporary docker images on docker nodes (Lukas Winkler)
  • Added jenkins build jobs debian-stable-full-mmap and debian-stable-full-mmap-asan with mmapstorage as the default storage. (Mihael Pranjić)
  • We added basic support for coverage analysis via Coveralls. (René Schwaiger)

Travis

  • Travis now also checks the code for memory leaks in the build job 🍏 Clang ASAN. (René Schwaiger)
  • The Travis build jobs 🍏 Clang ASAN and 🐧 GCC ASAN now only translates a minimal set of plugins, since we had various timeout problems with these jobs before. We explicitly excluded plugins, to make sure that the build jobs still test newly added plugins. (René Schwaiger)
  • Added travis build job 🍏 mmap on macOS with mmapstorage as the default storage. (Mihael Pranjić)
  • Travis now prints the CMake configuration for each build job. (René Schwaiger)
  • We now test Elektra using the latest version of Xcode (10.0). (René Schwaiger)
  • We added the build job 🍏 Check Shell, which only runs shell checks such as testscr_check_oclint. This update allows us to remove the shell checks from the jobs 🍏 MMap and 🍏 Clang, which sometimes hit the timeout limit for public repositories before. (René Schwaiger)
  • All Travis build jobs now use the compiler switch -Werror. (René Schwaiger)
  • The new job 🍏 FULL and the build job 🐧 FULL build Elektra using the CMake options BUILD_FULL=ON and BUILD_SHARED=OFF. (René Schwaiger)
  • The script stage of the build jobs print less non-relevant output. Usually the commands in this stage should now only print verbose output if a test fails. (René Schwaiger)

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date.

Outlook

We are currently working on following topics:

  • Global mmap cache: This feature will enable Elektra to return configuration without parsing configuration files or executing other plugins as long as the configuration files are not changed. (Mihael Pranjić)
  • Finish high-level API. (Klemens Böswirth)
  • Validation improvements. (Michael Zronek)
  • Improve YAML plugins. (René Schwaiger)

Statistics

Following authors made this release possible:

849 commits, 581 files changed, 18503 insertions(+), 3192 deletions(-)

We welcome new contributors!

Finished Thesis

Get It!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.8.25.tar.gz
  • size: 6233918
  • md5sum: d5614b2049fb8431a80842a4909b140e
  • sha1: c7dfb5fa87284d8f5ba4d4753e0e47a0e362c733
  • sha256: 37829256e102e967fe3d58613a036d9fb9b8f9658e20c23fa787eac0bfbb8a79

The release tarball is also available signed by Markus Raab using GnuPG from here or GitHub

Already built API-Docu can be found here or GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

If you also want to participate, or for any questions and comments please contact us via the issue tracker on GitHub.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by markus2330 over 7 years ago

Elektra - 0.8.24 release

0.8.24 Release

We are proud to release Elektra 0.8.24.

  • guid: 889b700d-9eac-4eff-9a3d-f6fb15c3d9da
  • author: Markus Raab
  • pubDate: Sat, 18 Aug 2018 18:13:40 +0200
  • shortDesc: Elektra Web, Notifications, Type System

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 news on our website

Highlights

  • Elektra Web
  • Notifications
  • KDE Workshop
  • Type System Prototype
  • Chef Cookbook

Elektra Web 1.6

The new release of Elektra Web features many UX improvements from the usability test!

Elektra Web 1.6 video

Try it out now on: http://webdemo.libelektra.org/

1.5 changelog:

  • search completely reworked - it does not act as a filter on already opened keys anymore, and instead searches the whole key database - feedback from the search was also greatly improved (pulsating while searching, glowing blue when done)
  • added "abort" buttons to dialogs to revert actions
  • added "create array" button to easily create arrays
  • removed confirmation dialog before deletion (undo can be used instead)
  • created a docker image: elektra/web
  • implemented auto-deployment of webdemo.libelektra.org
  • small fixes:
    • updated visibility levels
    • removed "done" button in main view
    • fixed issues with the opener click area
    • remove metakeys when they are set to the default value or empty/0
    • improved keyboard support
    • fixed many small issues (#2037)

1.6 changelog:

  • fixed bugs related to arrays (#2103)
  • improved performance of search for many results
  • added 404 page for invalid instance ids
  • implement drag & copy by holding the Ctrl or Alt key
  • add button to show error details
  • allow deleting all keys in a namespace

Thanks to Daniel Bugl.

Notifications

Elektra's notification feature which allows applications to keep persistent configuration settings in sync with the key database and other applications was greatly improved with this release:

More details can be found in this news. Check out the updated notification tutorial and notification examples (polling, async and reload.

KDE Workshop

At Akademy 2018 we had a successful Config Workshop.

We generally agreed that misconfiguration is important and the situation in FLOSS needs to improve. We discussed how Elektra can be used in KDE and came up with the idea that KConfig could be moved to a Elektra plugin. Then KConfig could be patched to use Elektra instead. This would lead to the situation that KDE users would have the same user experience with the advantages of Elektra, like:

  • Elektra Web and qt-gui to safely modify all settings
  • modification of settings via configuration management tools
  • switch to other configuration file formats (e.g., XML or YAML for plasma)
  • provide notification with main-loop integration
  • plugin system for LDAP support and similar features

For more information see the Slides

Type System Prototype

Elektra supports specifying the semantics of keys via metakeys in the spec namespace. An example is the metakey check/range which can be used to specify that a key only holds numbers in a given range. Another metakey is check/enum which only allows specific keywords to be the content of a key. Up to now these semantics are only being checked at runtime. Therefore a type system was developed to be able to check configuration specifications statically. As an example, it would detect when one accidentally adds both a range and an enum check if their possible contents are not compatible with each other.

The type system is available as a plugin that gets mounted along with a configuration specification into the spec namespace. Furthermore we include a set of type definitions for commonly used metakeys such as check/range, check/enum, check/validation, fallback or override.

For more details see the typechecker readme

Thanks to Armin Wurzinger.

Chef Cookbook

Next to the Puppet Resource Type we now also prepared a Chef Cookbook which allows us to use Elektra from within Chef.

For example, to set mount a configuration file, you can use:

kdbmount 'system/hosts' do file '/etc/hosts' plugins 'hosts' action :create end

And to add an hosts entry, you can use:

kdbset '/hosts/ipv4/showthatitworks' do namespace 'system' value '127.0.0.33' action :create end

Note that currently kdb is invoked and Elektra needs to be installed for managed systems.

Thanks to Michael Zronek and Vanessa Kos.

Plugins

CCode

  • We fixed various warnings in the source code reported by OCLint. (René Schwaiger)
  • The plugin now also encodes and decodes key names in addition to key values. (René Schwaiger)

CPP Template

sh scripts/copy-template -p pluginname

, where pluginname specifies the name of your new plugin. (René Schwaiger)

Crypto

  • The crypto plugin now uses Elektra's libinvoke and the base64 plugin in order to encode and decode Base64 strings. This improvement reduces code duplication between the two plugins. (Peter Nirschl)

CSVStorage

  • Changed behaviour of export to validate the structure of exported keys only. (Thomas Waser)

Directory Value

  • We rewrote the plugin using C++. (René Schwaiger)
  • Directory Value now also supports nested arrays. (René Schwaiger)
  • The plugin now also adds leafs for a key, if its value is null or the empty string. (René Schwaiger)

fcrypt

  • The fcrypt plugin will consider the environment variable TMPDIR in order to detect its temporary directory. See [#1973] (Peter Nirschl)

fstab

  • The fstab plugin now passes tests on musl builds. (Lukas Winkler)

Haskell

  • An issue when building Haskell plugins with a cached sandbox is fixed in case a Haskell library bundled with Elektra gets changed. (Armin Wurzinger)
  • The script that generates the list of haskell dependencies now also works on ghc8.0.1 and older cabal versions. Furthermore one can specify the build directory as a parameter if it is not located within the source directory. (Armin Wurzinger)

Interpreter Plugins

  • The plugins Ruby, Python and Jni can now also be mounted as global plugin.
  • Fix crashes in global Python plugin by using pluginprocess. Python plugin can now shutdown properly again. (Markus Raab and Armin Wurzinger)

JNI

  • We now disable the plugin for the BUILD_STATIC or BUILD_FULL build variants, since otherwise the plugin breaks the kdb tool. (René Schwaiger)
  • We disabled the internal check (testscr_check_kdb_internal_check) for the plugin, since it always fails. (René Schwaiger)

HexNumber

  • The plugin hexnumber has been added. It can be used to convert hexadecimal values into decimal when read, and back to hexadecimal when written. (Klemens Böswirth)

List

  • The list plugin now allows us to pass common configuration for all plugins by using keys below the "config/" setting. The updated plugin documentation contains more information and an example. (Thomas Wahringer)
  • The list plugin which is responsible for global mounting had a bug which prevented globally mounted plugins from being configurable. (Thomas Wahringer)

mINI

  • We fixed a memory leak in the mINI plugin by requiring the plugin ccode instead of the “provider” code. (René Schwaiger)
  • Removed unused header files. (René Schwaiger)

network

  • Fixed an error in network plugin that prevented it from working on non-glibc platforms. (Lukas Winkler)

Type

Regex Dispatcher

  • The plugin regexdispatcher has been added. It calculates regex representations for commonly used specification keywords to be used with the typechecker. Currently the keywords check/range, check/enum and default are supported. (Armin Wurzinger)

Typechecker

  • The plugin typechecker, used to validate configuration specifications for Elektra statically, has been improved under the hood. It now supports a more concise and efficient typechecking process including a greatly improved type inference scheme that should make generated specification files and thus generated errors to be easier to understand. An example of such error message is shown in the README. (Armin Wurzinger)

Tcl

  • The tcl plugin does not fail anymore, if its configuration file does not exist and you try to retrieve the plugin contract. (René Schwaiger)
  • The plugin now uses relative key names. This update addresses issue #51. (René Schwaiger)

YAJL

  • The YAJL Plugin now uses the internal logger functionality instead of printf statements. (René Schwaiger)
  • We fixed a problem with negative values reported by the UndefinedBehaviorSanitizer. (René Schwaiger)

YAML CPP

  • The plugin does not save empty intermediate keys anymore. The example below shows the old and the new behavior of the plugin:

```sh # Mount plugin kdb mount config.yaml /tests/yamlcpp yamlcpp # Store single key-value pair kdb set /tests/yamlcpp/level1/level2/level3 value

# Old behavior kdb ls /tests/yamlcpp #> user/tests/yamlcpp/level1 #> user/tests/yamlcpp/level1/level2 #> user/tests/yamlcpp/level1/level2/level3

# New behavior kdb ls /tests/yamlcpp #> user/tests/yamlcpp/level1/level2/level3 ``` . (René Schwaiger)

  • YAML CPP now requires at least yaml-cpp 0.6, since the current MSR test for the plugin triggers two bugs:

    • https://github.com/jbeder/yaml-cpp/issues/247
    • https://github.com/jbeder/yaml-cpp/issues/289

in earlier versions of the yaml-cpp library. (René Schwaiger)

  • The plugin does now support arrays containing empty fields. (René Schwaiger)
  • YAML CPP now also adds array meta data for arrays containing arrays. (René Schwaiger)
  • The plugin now also supports empty arrays:

sh kdb mount test.yaml user/tests/yamlcpp yamlcpp kdb setmeta user/tests/yamlcpp/array array '' kdb export user/tests/yamlcpp/array yamlcpp #> []

.

  • YAML CPP now handles null values containing meta data properly:

sh kdb mount test.yaml user/tests/yamlcpp yamlcpp kdb set user/tests/yamlcpp/null kdb setmeta user/tests/yamlcpp/null comment 'Null Key' kdb export user/tests/yamlcpp/null yamlcpp #> !<!elektra/meta> #> - ~ #> - comment: Null Key .

YAML Smith

  • YAML Smith is a plugin that converts Elektra’s KeySet data structure to a textual representation in the YAML serialization format. The plugin is currently in a very early stage of development. Please be advised, that it is quite likely that the plugin will produce incorrect or even invalid YAML data, especially if your KeySet contains special characters.

Yan LR

  • The experimental Yan LR plugin uses a parser, generated by ANTLR to read basic YAML data. The plugin only converts YAML data to Elektra’s KeySet data structure. If you want to write data in the YAML format please take a look at the YAML Smith plugin. (René Schwaiger)

ZeroMQ transport plugins

  • New notification transport plugins for ZeroMQ were added. The new "zeromqsend" and "zeromqrecv" plugins use ZMQ_PUB and ZMQ_SUB sockets to send and receive notifications. The plugins can be used instead or along with the "dbus" and "dbusrecv" transport plugins. Check out the plugin documentation for more information. (Thomas Wahringer)

Misc

. (René Schwaiger)

Libraries

General

  • Replaced strdup with elektraStrDup (for C99 compatibility). (Markus Raab)
  • You can now remove the basename of a key via the C++ API by calling key.delBaseName(). (René Schwaiger)
  • The function elektraArrayGetNextKey now uses NULL instead of the empty string as init value for the returned key. (René Schwaiger)

pluginprocess

  • The library pluginprocess that is used to execute plugins run inside own processes has been improved. This is useful as some plugins like haskell-based plugins or python can only be started once inside a single process, while libelektra may call a plugin several times. The library now uses an improved communication protocol that separates between pluginprocess-related data and keysets passed to plugins. This avoids any possible name clashes between keys used by a plugin and keys used by pluginprocess. The documentation of the plugin has been improved as well, some mistakes were corrected and it should be more clear how to store plugin data besides pluginprocess's data structure. Tests have been added to the library to ensure its correct functionality. (Armin Wurzinger)
  • Anonymous pipes are now used instead of named pipes for the communication as anonymous pipes get terminated by the OS in case a child process dies before writing back data to the parent. Currently the parent process will freeze otherwise attempting to read from the child. (Armin Wurzinger)

Bindings

  • A new I/O binding for ev has been added. It can be used to integrate the notification feature with applications based on ev main loops. (Thomas Wahringer)

Notifications

  • The notification API was extended. The API now supports more types: int, unsigned int, long, unsigned long, long long, unsinged long long, float and double. It also supports all of Elektra's kdb_*_t types defined in kdbtypes.h. Also contexts for callbacks were added and elektraNotificationRegisterCallbackSameOrBelow() allows for notifications for the registered key or below. (Thomas Wahringer)

Tools

  • The new tool kdb find lists keys of the database matching a certain regular expression. (Markus Raab)
  • You can now build the Qt-GUI using Qt 5.11. (René Schwaiger)

Scripts

  • The script check_formatting.sh now also checks the formatting of CMake code if you installed sponge and cmake-format. (René Schwaiger)
  • The script check_formatting.sh now no longer writes to stdout if clang-format5.0 can not be found. (Lukas Winkler)
  • The script check_bashisms.sh should now work correctly again, if the system uses the GNU version find. (René Schwaiger)
  • The script reformat-cmake now checks if cmake-format works before it reformats CMake files. Thank you to Klemens Böswirth for the detailed description of the problem. (René Schwaiger)
  • scripts/run_icheck now no longer leaves the base directory of the project when checking if the ABI changed. (Lukas Winkler)
  • The completion for fish now also suggest the info/ meta attributes of the file plugin. (René Schwaiger)

Copy Template

  • The script copy-template is now location independent. It will always create a new plugin in src/plugins. (René Schwaiger)
  • The command now also supports the new template for C++ based plugins. Please use the command line switch -p to create a new plugin based on cpptemplate.

Documentation

  • We improved the formatting of our compilation guide. (René Schwaiger)
  • We fixed various minor spelling mistakes in the documentation. (René Schwaiger)
  • The man pages for kdb change-resolver-symlink and kdb change-storage-symlink referenced the wrong command. (Lukas Winkler, René Schwaiger)
  • We added documentation for our build system in BUILDSERVER.md. (Lukas Winkler)
  • The documentation for kdb and kdb set now mentions the -- argument that stops processing of command line switches. This is useful for setting negative values among other things. (Klemens Böswirth)
  • We added a new tutorial about the jna binding. The tutorial shows how to use the java library to interact with kdb (Michael Zronek)
  • GitHub now detects the license of the repository correctly again. (René Schwaiger)
  • We added a tutorial describing Elektra’s array data type. (René Schwaiger)

Tests

(Markdown) Shell Recorder

  • We added new Markdown Shell Recorder tests for the
  • (Markdown) Shell Recorder tests now save test data below /tests (see issue #1887). (René Schwaiger)
  • The Markdown Shell Recorder checks kdb set commands to ensure we only add tests that store data below /tests. (René Schwaiger)
  • The Markdown Shell Recorder now supports indented code blocks. (René Schwaiger)
  • The Markdown Shell Recorder now also tests if a command prints nothing to stdout if you add the check #>. (René Schwaiger)
  • We fixed some problems in the Markdown Shell Recorder test of kdb ls. (René Schwaiger)
  • The Shell Recorder now does not interpret - in checks as option character any more. (René Schwaiger)
  • The add_plugin helper now respects ENABLE_KDB_TESTING when adding Markdown Shell Recorder tests. (Lukas Winkler)
  • The Markdown Shell Recorder test for kdb find now removes the configuration file at the end of the test. (René Schwaiger)
  • The Shell Recorder now properly unmounts any additional mountpoints created during a test. (René Schwaiger)
  • We removed the broken auto unmounting feature from the Markdown Shell Recorder. (René Schwaiger)
  • The Markdown Shell Recorder does not require a bash compatible shell anymore. (René Schwaiger)

General

  • Plugins added with the flag SHARED_ONLY no longer get tested in the script check_kdb_internal_check.sh if executed with kdb-full or kdb-static. (Armin Wurzinger)
  • Add compare_regex_to_line_files which allows to compare a file made of regex patterns to be compared with a text file line by line. (Lukas Winkler)
  • The OPMPHM has a new test case (Kurt Micheli)
  • Do not execute fcrypt and crypto unit tests if the gpg binary is not available. (Peter Nirschl)
  • Resolved an issue where tests did not cleanup properly after they ran. This was especially noticeable for gpg tests as the gpg-agents that were spawned did not get cleaned up afterwards. (Lukas Winkler)
  • We disabled the general plugin test (testkdb_allplugins) for the semlock plugin, since the test reported memory leaks on the latest version of Debian Unstable. (René Schwaiger)
  • The CFramework macro compare_keyset now supports the comparison of two empty key sets. (René Schwaiger)
  • The C++ version of the macro exit_if_fail now really exits the test progamm if the test fails. (René Schwaiger)
  • The C++ testing framework now supports the macro compare_keyset that checks if two key sets are equal. (René Schwaiger)

Build

As written in the previous release notes:

  • Debian Wheezy is not supported anymore.
  • Jessie (oldstable) with gcc 4.8.4 is now the oldest supported platform.

Another important change is:

  • We now import the current version of Google Test as external project at configuration time using DownloadProject. If you want to use a local installation of Google Test instead, please set the value of GTEST_ROOT to the path of you local copy of the Google Test framework. (René Schwaiger)
  • The cmake variable GTEST_ROOT now respects the environment variable GTEST_ROOT if it is set. (Lukas Winkler)

CMake

  • The build system no longer installs Haskell dependencies from hackage by itself, instead this has to be done beforehand like it is the case with all other dependencies. The main reason is that the build servers shouldn't compile the dependencies over and over again, only if something changes. See the README. (Armin Wurzinger)
  • Plugins can be specified to be only built for BUILD_SHARED builds, but to be excluded from any BUILD_FULL or BUILD_STATIC builds using the new optional argument ONLY_SHARED for our cmake macro add_plugin. This way BUILD_SHARED can be combined with the other options without excluding such plugins. The cmake messages about plugin inclusion have been updated to indicate this behavior. This behavior has been applied for the Haskell plugins- and bindings and JNI plugin as they currently don't support full or static builds. (Armin Wurzinger)
  • The build system does not install Google Test anymore if you install Elektra. (René Schwaiger)
  • We disabled the test testlib_notification on ASAN enabled builds, since Clang reports that the test leaks memory. (René Schwaiger)
  • Disable Markdown Shell Recorder test validation.md for ASAN builds. It leaks memory and thus fails the test during spec mount. (Lukas Winkler)
  • Haskell plugins and bindings are now correctly excluded when using BUILD_FULL or BUILD_STATIC as this is currently unsupported. Another issue when building Haskell plugins with a cached sandbox is fixed as well. (Armin Wurzinger)
  • Fix compilation with BUILD_TESTING=OFF when spec or list plugins are not selected.
  • Set coverage prefix to PROJECT_SOURCE_DIR, resulting in easier readable coverage reports. (Lukas Winkler)
  • The functions add_plugintest and add_plugin now also support adding a C++ test instead of a C test. (René Schwaiger)
  • The function add_plugintest now also supports setting environment variables for C/C++ based tests. (René Schwaiger)
  • The build system now automatically detects Homebrew’s OpenSSL version on macOS. (René Schwaiger)
  • We improved the automatic detection of Libgcrypt and OpenSSL. (René Schwaiger)
  • Resolved an issue where cmake did not properly set test feature macros to detect and use libc functionality. (Lukas Winkler)
  • Improve the detection of ftw.h, if the current build use the compiler switch -Werror. (René Schwaiger)
  • We now ignore warnings about

    • zero size arrays (Clang),
    • variadic macros (Clang, GCC),
    • conversions to non-pointer type (GCC), and
    • attribute warnings (GCC),

caused by code generated via SWIG in the Ruby binding and plugin. (René Schwaiger)

Docker

  • clang-5.0 is now used for clang tests by the build system (Lukas Winkler)
  • An additional build job on Ubuntu:xenial has been added (Lukas Winkler)
  • withDockerEnv Jenkinsfile helper now no longer provides stages automatically. (Lukas Winkler)
  • Google Test is installed in Docker images used by the build system. (Lukas Winkler)

Infrastructure

Jenkins

  • A build job checks if PRs modify the release notes. (Markus Raab)
  • Several improvements to the build system have been implemented (Lukas Winkler):
    • Better Docker image handling.
    • Abort of previously queued but unfinished runs on new commits.
    • Document how to locally replicate the Docker environment used for tests.
  • The Jenkins build server now also compiles and tests Elektra with enabled address sanitizer. (Lukas Winkler)
  • Add STATIC and FULL linked builds. (Lukas Winkler)
  • Ported GCC ASAN build job to new build system (René Schwaiger + Lukas Winkler)
  • Docker artifacts are now cleaned up in our daily build job. (Lukas Winkler)
  • clang tests have been ported to the new build system (Lukas Winkler et al)
  • icheck build server job has been ported to our new build system. (Lukas Winkler)
  • Port elektra-gcc-configure-debian-optimizations to new build system. (Lukas Winkler)
  • Port elektra-gcc-configure-mingw-w64 to new build system. (Lukas Winkler)
  • Port debian-multiconfig-gcc-stable to new build system. (Lukas Winkler)
  • Port elektra-ini-mergerequests to new build system. (Lukas Winkler)
  • Port elektra-gcc-configure-debian-nokdbtest to new build system. (Lukas Winkler)
  • Port elektra-gcc-configure-xdgto new build system. (Lukas Winkler)
  • Port elektra-gcc-i386 to new build system. (Lukas Winkler)
  • Port elektra-gcc-configure-debian-musl to new build system. (Lukas Winkler)
  • Docker Registry is cleaned up by our daily buildserver task. (Lukas Winkler)
  • Remove elektra-gcc-configure-debian-nokdbtest test. Instead we are now removing write permissions of Elektra's paths to detect if we write to the filesystem even though tests are not tagged as such. (Lukas Winkler)
  • Remove elektra-gcc-configure-debian-withspace test. We now test for compatibility of spaced build paths during normal tests. (Lukas Winkler)
  • Check for source formatting during early test stages. (Lukas Winkler)
  • Remove the amount of spawned tests via not running a full multiconfig setup for the PLUGINS=NODEP config. They did not provide any additional coverage. Instead we added a new test checking if PLUGINS=NODEP builds in an minimal Docker image. (Lukas Winkler)
  • Speed up coverage data upload. (Lukas Winkler)
  • Fix an issue where file archiving did not happen because of suppressed shell expansion (Lukas Winkler)
  • Setup mailing for jenkins (Lukas Winkler)
    • send mail to build@libelektra.org when master fails (Lukas Winkler)
    • parse change list into mail (Lukas Winkler)
    • do not send mails if pipeline run was aborted (Lukas Winkler)

Travis

  • Travis now uses the latest version of GCC and Clang to translate Elektra on Linux. (René Schwaiger)
  • Our Travis build job now
    • builds all (applicable) bindings by default again, and
    • checks the formatting of CMake code via cmake-format . (René Schwaiger)
  • Some cache issues on the Travis build job for cached haskell sandboxes have been resolved. (Armin Wurzinger)
  • Travis caches downloaded Homebrew packages to improve the reliability of macOS build jobs. (René Schwaiger)
  • Travis is now using Xcode 9.4.1 on macOS 10.13 for most macOS build jobs. (Mihael Pranjić)
  • We added a unique name to each build job, so you can see quickly which configuration caused problems. (René Schwaiger)
  • We now specify custom binding, plugin and tool configuration for jobs via the environment variables:

    • BINDINGS,
    • PLUGINS, and
    • TOOLS

. We also added environment variables for the build configuration options BUILD_FULL, COMMON_FLAGS, ENABLE_ASAN and the command used to test the build (TEST_COMMAND). (René Schwaiger) - The ASAN build jobs 🍏 Clang ASAN and 🐧 GCC ASAN now only build the kdb tool and the cpp binding. This update ensures, that we do not hit the job timeout for public repositories that often. (René Schwaiger) - We now use the latest version of Ruby (2.5.1) to build and test the Ruby binding/plugin. (René Schwaiger)

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

Following changes were made:

  • The C++ API was extended with delBaseName(). This does not affect ABI compatibility, also C++ programs compiled against 0.8.24 and using delBaseName() will work with Elektra 0.8.23 or older.
  • kdbtypes.h now comes with support for C99 types.
  • We added the private headerfiles kdbnotificationinternal.h, kdbioplugin.h. (Thomas Wahringer)
  • The I/O binding header files have been moved a new directory called kdbio. For example, instead of including elektra/kdbio_ev.h users of the binding now include elektra/kdbio/ev.h. (Thomas Wahringer)
  • The plugin directoryvalue has changed its behavior, see above.
  • The plugin list changed its configuration, see above.
  • The plugin yamlcpp now gets excluded with too old versions of yamlcpp (Debian Stretch is affected).

The new plugins are:

  • hexnumber
  • yamlsmith
  • zeromqrecv
  • zeromqsend

The new tool is: kdb-find

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date.

Outlook

We are currently working on following topics:

  • The hybrid search algorithm for the Key search ksLookup (...) is now in preparation. The preparation includes a new KeySet flag KS_FLAG_NAME_CHANGE, this flag will be used by the hybrid search. The hybrid search combines the best properties of the binary search and the OPMPHM. The hybrid search uses a modified branch predictor to predicts KeySet changes and decides if binary search or OPMPHM would be faster. (Kurt Micheli)

Statistics

Following persons made in total 1734 commits:

  1 commit  by Mihael Pranjic <mpranj@limun.org>
  2 commits by Thomas Waser <thomas.waser@libelektra.org>
  7 commits by Michael Zronek <michael.zronek@gmail.com>
 12 commits by Kurt Micheli <e1026558@student.tuwien.ac.at>
 17 commits by Peter Nirschl <peter.nirschl@gmail.com>
 21 commits by Klemens Böswirth <k.boeswirth+git@gmail.com>
197 commits by Markus Raab <elektra@markus-raab.org>
102 commits by Thomas Wahringer <thomas.wahringer@libelektra.org>
117 commits by Daniel Bugl <me@omnidan.net>
265 commits by Lukas Winkler <derwinlu+git@gmail.com>
249 commits by Armin Wurzinger <e1528532@student.tuwien.ac.at>
744 commits by René Schwaiger <sanssecours@me.com>

In total there were 792 files changed with 27677 insertions(+) and 39176 deletions(-).

Get It!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.8.24.tar.gz
  • size: 6130464
  • md5sum: 2e3def7b905f94e1f9f7fa0fe4743189
  • sha1: ff2a9b2d3a5e20a456e272a47fe9fd79ad410428
  • sha256: 454763dd00e95e774a907b26eb59b139cfc59e733692b3cfe37735486d6c4d1d

The release tarball is also available signed by Markus Raab using GnuPG from here or on GitHub

Already built API-Docu can be found online or GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

For any questions and comments, please contact the issue tracker on GitHub or Markus Raab by email using elektra@markus-raab.org.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by markus2330 over 7 years ago

Elektra - 0.8.23 release

  • guid: 9a9ab08b-9ca0-4242-b617-5a8b21ea42a0
  • author: Markus Raab
  • pubDate: Sun, 13 May 2018 08:57:15 +0200
  • shortDesc: Notification, Web UI, Build System

We are proud to release Elektra 0.8.23.

In 717 commits 11 authors changed 835 files with 31144 insertions(+), 21773 deletions(-).

What is Elektra?

Elektra serves as a universal and secure framework to access configuration settings in a specified, global, hierarchical key database. For more information, visit https://libelektra.org.

For a small demo see here:

asciicast

You can also read the news on our website

Highlights

  • Notification: New transport plugin
  • Web UI greatly improved
  • Overhaul of Build System and Daily Stretch Repository

Notification: New transport plugin

To keep persistent configuration settings in sync with the configuration settings of applications, notifications are needed. For notifications it is important that they do not block the execution of the applications. In Elektra we achieve this using transport plugins.

Elektra's notification feature has received its first transport plugin pair: D-Bus. Transport plugins provide a link between applications using Elektra. These plugins send and receive notifications when a key is modified within the key database. The existing dbus plugin has been modified to use an asynchronous I/O binding for sending messages, if available. The new dbusrecv plugin is responsible for receiving messages sent from the dbus plugin and other sources with the same message format.

For more details see the notification tutorial or the example applications.

Thanks to Thomas Wahringer.

Web UI greatly improved

The goal of the Web UI is to provide safe and unified access to all configuration settings of a system. Different to other UIs, it generates its interface according specifications as found in Elektra.

For example, if a configuration setting only has a number of choices, you get exactly these choices within the user interface.

To get outstanding usability, Web UI now provides:

  • undo functionality
  • visibility functionality to hide irrelevant configuration settings
  • built-in validation for many types of configuration settings
  • support for arrays
  • descriptions of configuration settings embedded in the user interface

Furthermore:

  • The Web-UI now is able to install itself via cmake.
  • The API was updated for elektrad and webd (former clusterd).

Read here to get started.

Note that new version of the Web UI requires Elektra 0.8.23 or later.

Thanks to Daniel Bugl.

Overhaul of Build System and Daily Stretch Repository

We started to overhaul our build system to improve build times and responsiveness. It focuses heavily on containerisation to improve hardware utilization.

If you are interested in #devops have a look at our Jenkinsfile.

Daily builds Debian packages for Stretch are available again in our stretch repository. Add it to your sources.list:

deb [trusted=yes] https://debian-stretch-repo.libelektra.org/ stretch main deb-src [trusted=yes] https://debian-stretch-repo.libelektra.org/ stretch main

Thanks to Lukas Winkler.

Other New Features

We added even more functionality, which could not make it to the highlights:

  • A new experimental I/O binding for glib has been added. It can be used to integrate the notification feature with applications based on glib.
  • The Order Preserving Minimal Perfect Hash Map (OPMPHM), used to speed up the lookups, got optimized and a benchmark was added, thanks to Kurt Micheli
  • We added a script that calculates the complexity of configuration settings based on their specification, thanks to Anton Hößl
  • kdb ls now has -0 option to allow key names with newlines (needed for Web UI)
  • The csvstorage now can treat selected columns to be part of the key. Error messages were improved. thanks to Thomas Waser

Other News

  • We added a tutorial about securing the integrity and confidentiality of configuration values, thanks to Peter Nirschl
  • Peter Nirschl finished his thesis (signature). It includes a benchmark of different cryptographic providers.
  • Markus Raab gave a talk at Linuxwochen Wien (in German). For similar talks in English, please refer to the FOSDEM talks.
  • We replaced the word "project" to "initiative" in the Code of Conduct (project has per definition an end date).

Documentation

We improved the documentation in the following ways:

  • FAQ was extended by Why do I need Elektra if I already use configuration management tools?
  • Documentation about the recommended environment for test runs were added
  • uniformly add . at end of short help
  • Logo for Doc Set was added and logo for favicon was updated, thanks to René Schwaiger
  • template of design decisions was updated to use the words problem (instead of issue) and rationale (instead of argument).
  • METADATA.ini:
    • added visibility (as used in Web UI)
    • added type (only check/type existed)
    • plenty of metadata is now used by Web UI
  • update docu for type plugin that check/type/min and check/type/max are deprecated
  • Fixed various spelling mistakes, thanks to René Schwaiger
  • Document limitations of resolver (kdbOpen fails if no home directory found) and json/yaml plugins (intermixing of array and objects not detected, which is possible in Elektra but impossible in JSON)
  • Required environment to run tests is documented.
  • A decision about deferred plugin calls has been made and implemented, thanks to Thomas Wahringer.

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 removed:

  • the not used error code 12 from kdb mv from docu

We changed:

  • kdb get, kdb mv and kdb cp now use error code 11 if keys are not found
  • cascading keys as arguments to kdb cp and kdb mv now fail instead of doing something unexpected, thanks to René Schwaiger for reporting

Shell scripts:

  • cp and mv no longer accept cascading keys.

Notes for Maintainer

These notes are of interest for people maintaining packages of Elektra:

  • Docu is updated that cmake3 is required. thanks to Lukas Winkler for reporting.
  • To run all tests successfully, the spec and list plugin is required. So if ENABLE_TESTING is checked, cmake checks the presence of a storage, a resolver, the list and the spec plugin, thanks to René Schwaiger
  • Tests no longer clear environment or reset locales. This fixes lua and dbus problems but might cause problems if TMPDIR is set, thanks to Lukas Winkler
  • This will be the last release supporting Debian Wheezy (LTS support will stop in May). Directly after the release, Jessie (oldstable) with gcc 4.8.4 will be the oldest supported platform.

We added:

  • the private headerfiles kdbnotificationinternal.h, kdbioplugin.h.
  • the headerfiles kdbio_glib.h and kdbio_uv.h
  • the plugin libelektra-dbusrecv.so
  • the scripts build-web, run-elektrad, and run-web
  • the test case testmod_dbusrecv
  • the constant ENABLE_ASAN in the constants plugin
  • several man pages such as: kdb-run-elektrad.1 and kdb-run-web.1

We removed:

  • Base64.pdf is not installed anymore
  • doxygen-generated man pages such as: doc_docker_jenkinsnode_README_md.3elektra, doc_docker_README_md.3elektra, and doc_vagrant_README_md.3elektra

Website

The website is generated from the repository, so all information about plugins, bindings and tools are always up to date. Furthermore, we changed:

  • Error page that is shown if no JavaScript is enabled now more clearly says that the Website only renders content from the repo and only contains free JavaScript.
  • The FAQ is now more visible (added to "getting started").
  • The Code of Conduct was added.

Notes for Elektra's Developers

These notes are of interest for people developing Elektra:

  • . run_dev_env is a script to be sourced from the build directory. It sets environment variables, so that Elektra from the build directory is used (instead of the installed one).
  • All current versions of Clang-Format (6.0+) and the outdated Clang-Format 5 will now produce exactly the same output for the whole codebase, thanks to René Schwaiger.
  • To make enums nicely formatting, make sure at least one member is documented.
  • You can now add a Markdown Shell Recorder test for a plugin via the CMake function add_plugin by adding TEST_README. Furthermore TEST_REQUIRED_PLUGINS allows us to specify which additional plugins are required, thanks to René Schwaiger
  • const was added to exceptions in catch blocks thanks to René Schwaiger
  • We now mention to read doc/DESIGN.md in the contributing guidelines.
  • The CMake functions

    • add_plugin
    • add_msr_test
    • add_msr_test_plugin, and the new
    • add_shell_recorder_test

    now allow you to specify a list of required plugins for Shell Recorder and Markdown Shell Recorder tests.

  • The Markdown Shell Recorder now compares the whole output of stderr with the text following the directive STDERR:, thanks to René Schwaiger

  • You can now leave the text following the directive STDERR: in a Markdown Shell Recorder test empty:

sh true # Print nothing to `stderr` # STDERR:

. The Markdown Shell Recorder will then check if the command printed nothing to the standard error output. - The Shell Recorder now also prints the content of the protocol file if a test was unsuccessful or you used the command switch -p, and always cleans up the protocol, thanks to René Schwaiger - We added an Markdown Shell Recorder test for the Constants plugin. - The Markdown Shell Recorder now prints the path of the test file. thanks to René Schwaiger - The Haskell binding now explicitly requires GHC installed with a minimum version of 8.0.0 during cmake thanks to René Schwaiger and Lukas Winkler - If any of the tests in make run_memcheck fail valgrind will now set an exit-code which will get picked up by make, thanks to Lukas Winkler - We introduced git reference repositories to save I/O on our build system, thanks to Lukas Winkler - Set LD_LIBRARY_PATH in all tests removing the need to specify it for running ctest, thanks to Lukas Winkler - Provide the RUN_SERIAL property to all tests that can not be run in parallel, thanks to Lukas Winkler - Speeding up your test runs via ctest -j is now possible, thanks to Lukas Winkler - We now disable the Xerces plugin if you use GCC with enabled ASAN to build Elektra. This update makes sure that you do not build the plugin with compilation settings that are known to cause problems. - Documentation and debugging capabilities of Markdown Shell Recorder were improved. - We added style guidelines for CMake code to doc/CODING.md.

Fixes

Many problems were resolved with the following fixes:

  • YAML CPP now also saves key values directly below a mountpoint correctly, thanks to René Schwaiger
  • If you use a minimal configuration (dump, resolver, list, and spec), all test of the test suite now finish successfully again, thanks to René Schwaiger
  • small refactoring in kdb-test
  • The Haskell plugin failed to build if the Haskell bindings were not included explicitly by name.
  • Fix invalid handling of keynames in the spec plugin.
  • The Shell Recorder counts the number of executed tests properly again.
  • CMake now fails if the required plugins list or spec (on non-MinGW platforms) are missing from the current build configuration.
  • The Lua, Python 2, Python, and Ruby plugins now require SWIG bindings for the corresponding programming language, thanks to René Schwaiger
  • The type checker now also honors type next to check/type
  • Fix various compiler warnings
  • The detection of Botan, Libgcrypt, LibGit2 and OpenSSL now also works properly, if we treat warnings as errors (compiler switch -Werror), thanks to René Schwaiger
  • The multifile plugin now passes the child config to the storage plugins too and also handles symlinks correctly, thanks to Thomas Waser

Workshop

Elektra Initiative are the people behind Elektra. Our goal is to build up expertise with configuration settings and improve the situation in the FLOSS landscape. To learn more about the needs of configuration-wise non-trivial FLOSS applications, we have workshops. After a successful workshop with the LCDproc's maintainer, the next Workshop will be with people from KDE.

We will use the opportunity of Akademy being in Vienna. We already got positive feedback from kconfig maintainers (David Faure and Aleix Pol).

If you are interested, you can sign up. We are looking forward to an informative, interactive and interesting workshop!

Outlook

We are currently working on following topics:

  • Klemens Böswirth: elektrifying LCDproc After some setbacks (the two original developers who wanted to work on LCDproc resigned because of job duties) LCDproc development restarted now successfully. The new plan is to have more intermediate stages. In particular the first integration will be a minimal invasive integration without high-level API.
  • Armin Wurzinger: type system for Elektra's specification language
  • Anton Hössl: Puppet
  • Daniel Bugl: Web UI
  • Hani Torabi Makhsos: reduce community entry barriers
  • Kurt Micheli: order preserving minimal perfect hash map
  • Lukas Winkler: continous integration
  • Mihael Pranjić: mmap plugin (i.e. avoiding reparsing of configuration files)
  • Peter Nirschl: integrity and confidentiality
  • René Schwaiger: parsing techniques
  • Thomas Wahringer: notification techniques
  • Thomas Waser: Linux distribution based on Elektra
  • Ulrike Schaefer: generate shell completion files from Elektra's specification
  • Vanessa Kos: misconfiguration bug database
  • We created a proof of concept for a Chef resource and an Ansible module successfully setting Elektra's keys. They are not yet published. If you are interested on this preliminary work, please contact us.

Get It!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.8.23.tar.gz
  • size: 5870069
  • md5sum: 0a065ed381a59b6213bd46fd3c82ba83
  • sha1: 0727b420ff721e654b0ba6ab1d0c78e5e2341d26
  • sha256: f1d3cd4888ba3ef47c1327cbddf21dff7be289f94217f12e5e93105273ca6c48

The release tarball is also available signed by Markus Raab using GnuPG from here or GitHub

Already built API-Docu can be found online or GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

For any questions and comments, please contact the issue tracker on GitHub or Markus Raab by email using elektra@markus-raab.org.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by markus2330 almost 8 years ago

Elektra - 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:

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:

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 executed old test cases against the latest Elektra version and all tests passed.

In kdbinvoke.h we changed the API so that elektraInvokeOpen and elektraInvokeClose can yield error messages.

We added:

  • the public headerfiles kdbnotification.h, kdbio.h, kdbiotest.h.
  • the private headerfiles kdbnotificationplugin.h, kdbioprivate.h.

Portability

  • Fix bash shebang of bash scripts, thanks to Jakub Jirutka
  • Remove unportable unneeded asm, thanks to Timo Teräs and Jakub Jirutka
  • Fixed syntax in shell recorder, thanks to René Schwaiger
  • Used mktemp in check_distribution.sh to allow parallel run of test cases, thanks to Armin Wurzinger.

Notes for Maintainer

These notes are of interest for people maintaining packages of Elektra:

  • dini is no longer experimental.
  • CMake: BINDINGS now behaves like PLUGINS By default now all MAINTAINED bindings except EXPERIMENTAL and DEPRECATED are included. For more details see /doc/COMPILE.md. To include both intercept bindings, you now need to write INTERCEPT, to only include getenv interception intercept_env. intercept in lower-case does not work anymore.

The following files are new:

  • Libs: libelektra-notification.so, libelektra-io.so, libelektra-io-uv.so, libelektra-pluginprocess.so
  • Headers: kdbgetenv.h, kdbio.h, kdbpluginprocess.h
  • Plugins: base64/Base64.pdf
  • Binaries: getenv, test_context, test_fork, test_getenv, test_ks_opmphm, test_opmphm
  • Other: elektra-io.pc

The following files were removed:

  • Tests: testmod_semlock

Notes for Elektra's Developers

These notes are of interest for people developing Elektra:

  • We now use clang-reformat-5.0 for formatting. Please upgrade your clang.
  • Build Agent ryzen v2 was added to speed up jenkins build all please, thanks to Armin Wurzinger.
  • Travis maintenance (Qt 5 and other problems), thanks to René Schwaiger.
  • BINDINGS was greatly improved and the CMake functions were simplified. Bindings now also have a README.md with meta data. A big thanks to Thomas Wahringer.
  • Decision: Logging with ELEKTRA_LOG is only for C/C++.
  • Including kdberrors.h in a C++ files now also works, if you do not add the statement

cpp using namespace ckdb;

before you import kdberrors.h. - The CMake code for Elektra’s Qt-GUI now detects the location of Qt 5 automatically if you installed Qt via Homebrew. - All Shell Recorder tests should not now correctly restore your old configuration after you execute them, thanks to René Schwaiger. - The Base64 plugin does not encode empty binary values in meta mode anymore. This update allows plugins such as YAML CPP to handle empty keys properly.

Fixes

Many problems were resolved with the following fixes:

  • kdb global-umount also removed other mountpoints
  • We fixed internal inconsistency in the CMake code of the Augeas plugin
  • We fixed the haskell bindings and plugins on Debian Stretch and added a new build server job to test that in the future.
  • Cleanup in list plugin, thanks to Thomas Wahringer
  • The Shell Recorder now exports and imports the root of a mountpoint instead of the mountpoint itself. This change makes sure that Shell Recorder test do not change the configuration directly below the specified mountpoint.

Get It!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.8.22.tar.gz
  • size: 5885118
  • md5sum: 5cbd9e33daf51f6f33791ff3f99342a6
  • sha1: 4954ff16cfe7dc69e45e6a748556262b8fb1a9fa
  • sha256: 962598315619d5dff3a575d742720f076dc4ba3702bd01609bfb7a6ddb5d759f

The release tarball is also available signed by me using GnuPG from here or GitHub

Already built API-Docu can be found online or GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

For any questions and comments, please contact the issue tracker on GitHub or me by email using elektra@markus-raab.org.

Permalink to this NEWS entry

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

Best regards, Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by markus2330 almost 8 years ago

Elektra - 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 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:

c 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 problems were resolved with the following fixes:

  • fix use of dbus_connection_unref(NULL) API thanks to Kai-Uwe Behrmann
  • Properly include headers for std::bind thanks to Nick Sarnie
  • qt-gui: assure active focus on appearance selection window thanks to Raffael Pancheri
  • René Schwaiger repaired the boolean plugin:
    • wrong metadata was used
    • plugin configuration was missing
    • documentation was missing
    • logging code was added
  • René Schwaiger repaired many problems different build agents had
  • kdb info -l does not open KDB anymore.
  • change-resolver-symlink and change-storage-symlink now correctly use @TARGET_PLUGIN_FOLDER@
  • date plugin will be removed on attempts to compile it with gcc 4.7, thanks to René Schwaiger
  • C plugin: storage/c metadata added
  • fix disabling documentation in CMake, thanks to Kurt Micheli
  • Simplify elektraArrayValidateName, thanks to René Schwaiger

Outlook

The Order Preserving Minimal Perfect Hash Map (OPMPHM) is ready to extend ksLookup. The implementation of the randomized Las Vegas hash map algorithm is in a final stage and the heuristic functions that ensure time and space optimality are backed up by benchmarks. Thanks to Kurt Micheli, the next release will include the OPMPHM!

Get It!

You can download the release from here or GitHub

The hashsums are:

  • name: elektra-0.8.21.tar.gz
  • size: 4712043
  • md5sum: d627a01a0249fde46e80042c848d4521
  • sha1: a7659a7bb1b2388d03cdf0084160de612e5c4511
  • sha256: 51892570f18d1667d0da4d0908a091e41b41c20db9835765677109a3d150cd26

The release tarball is also available signed by me using GnuPG from here or GitHub

Already built API-Docu can be found online or GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

For any questions and comments, please contact the issue tracker on GitHub or me by email using elektra@markus-raab.org.

Permalink to this NEWS entry

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

Best regards, Markus Raab for the Elektra Initiative

Scientific Software - Peer-reviewed - C
Published by markus2330 about 8 years ago

Elektra - 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 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, kdbinvoke.h

Notes for Maintainer

  • LICENSE.md now contains only the BSD 3-Clause License (without any additional non-license text)
  • AUTHORS renamed to AUTHORS.md
  • NEWS.md is now a generated file containing all news concatenated
  • CMake 2.8.8 is no longer supported, CMake 3.0 is now needed
  • fix macOS RPATH, remove old policies, thanks to René Schwaiger
  • new option BUILD_DOCSET to build DocSet, thanks to René Schwaiger
  • new option ENABLE_OPTIMIZATIONS for OPMPHM preparation work, thanks to Kurt Micheli For this release, please keep ENABLE_OPTIMIZATIONS turned off. Currently the flag increases memory usage, without being faster.
  • add TARGET_TOOL_DATA_FOLDER for installation of tool data (for rest-backend and rest-frontend)

The following files are new:

  • Libs: libelektra-utility.so ,libelektra4j-0.8.20.pom.xml
  • Plugins: libelektra-camel.so, libelektra-date.so, libelektra-file.so, libelektra-ipaddr.so, libelektra-mini.so, libelektra-multifile.so, libelektra-range.so, libelektra-xerces.so, libelektra-yamlcpp.so
  • Tools: backup, mount-list-all-files, mountpoint-info, restore, stash, update-snippet-repository
  • Tests: change-resolver-symlink, change-storage-symlink, check-env-dep, check_bashisms, check_doc, check_meta, testmod_camel, testmod_crypto_openssl, testmod_date, testmod_file, testmod_ipaddr, testmod_jni, testmod_mini, testmod_range, testmod_simpleini, testmod_xerces, testmod_yamlcpp, testtool_plugindatabase, test_utility

The following files were removed: testmod_curlget, testmod_dpkg, testmod_profile, testmod_shell, testmod_spec, test_opmphm_vheap, test_opmphm_vstack

The following files were renamed: libelektra-1.jarlibelektra4j-0.8.19.jar

In the Debian branch of the git repo, we now build upon the work of Pino Toscano. The branch allows building Debian packages of the release for Debian Stretch and Jessie.

Thanks to Pino Toscano for the high-quality packages.

Development

  • Added macros, thanks to René Schwaiger:
    • ELEKTRA_NOT_NULL is an assertion against null pointers
    • ELEKTRA_MALLOC_ERROR sets an error when allocation failed
    • ELEKTRA_STRINGIFY to quote a macro value
    • ELEKTRA_PLUGIN_STATUS_ERROR, ELEKTRA_PLUGIN_STATUS_SUCCESS, ELEKTRA_PLUGIN_STATUS_NO_UPDATE for return values of plugins.
  • ELEKTRA_STRINGIFY used throughout, thanks to René Schwaiger
  • use (void) instead of () (added -Wstrict-prototypes)
  • new positions for global plugins, thanks to Mihael Pranjic
  • Kurt Micheli added generateKeySet to randomly generate large key sets
  • add vagrant and docker support, thanks to Christoph Weber (@krit0n)
  • improve support for CLion, NetBeans and oclint
  • portability improvements for logger, thanks to René Schwaiger
  • metadata consistency check within source repo, thanks to Thomas Waser
  • ELEKTRA_PLUGIN_EXPORT accepts macro as argument
  • fallthroughs in switch statements are now marked with FALLTHROUGH
  • introduce print_result to unify test output, thanks to René Schwaiger
  • export validateKey as preparation for type plugin

Other

  • kdb: errors are more colorful, add infos to report issues, catch signals for kdb tools to print errors on crashes, use $EDITOR if sensible-editor and editor is not found. René Schwaiger fixed preposition and format of the messages.
  • added Spanish translation for qt-gui thanks to AdanGQ (@pixelead0)
  • augeas plugin: error messages improved, export genconf (for WebUI to list all lenses)
  • improvements for CentOS and Debian Packages, thanks to Sebastian Bachmann
  • Travis improvements, fixes, and many build variants added, thanks to Mihael Pranjic and René Schwaiger
  • ronn now always uses UTF-8 as encoded and is no longer required as essential dependency to get man pages, thanks to René Schwaiger
  • GitHub now recognizes that we have a BSD licence, thanks to René Schwaiger
  • uninstallation Script also uninstalls directories and Python files, thanks to René Schwaiger
  • Kurt Micheli created a benchmark tool to generate large KeySets
  • added/reformatted use cases, thanks to Daniel Bugl
  • Thomas Wahringer prepared for a new theme on the website
  • Arfon Smith updated meta data for Elektra's journal entry

Quality

  • fixed all remaining ASAN problems, thanks to René Schwaiger and Armin Wurzinger (some tests are excluded when compiled with ASAN)
  • fix many compilation warnings, thanks to René Schwaiger and Armin Wurzinger
  • fixed many potential out-of-bound errors, thanks to René Schwaiger
  • fixed warnings of Clang's static analyzers, thanks to René Schwaiger
  • fixed cppcheck warnings, thanks to Armin Wurzinger
  • fixed strict prototypes, thanks to Armin Wurzinger
  • fixed and use scan-build (clang)
  • fixed potential memory leaks on errors
  • added assertions
  • generate Java API tests with randoop which revealed bugs in jna bindings that were fixed, thanks to Armin Wurzinger
  • Numerous fixes in the shell recorder, which does regression tests on Elektra's tutorials and READMEs, thanks to René Schwaiger and Thomas Waser

Fixes

  • kdb file: never print errors, thanks to René Schwaiger
  • plugin mathcheck: fixed regex #1094, thanks to Thomas Waser
  • dbus: properly do unref and document how to integrate DBus, thanks to Kai-Uwe Behrmann
  • dbus accepts announce=once which is used for kdb mount-openicc It protects against message floods in large configuration files, thanks to Kai-Uwe Behrmann for reporting
  • plugin desktop: fix crash if DESKTOP_SESSION is missing
  • shell-recorder: many fixes and improvements, thanks to Thomas Waser and René Schwaiger
  • fix getopt positional parameters, thanks to Armin Wurzinger
  • resolver: avoid silent errors of fchown/fchmod
  • plugin fcrypt: fixes in file name handling to make leaks less likely (still needs tmpfs to be secure!), thanks to Peter Nirschl
  • plugin jni: fix segfaults on errors, plugin is nevertheless tagged as experimental due to other problems
  • plugin type: reject integers if garbage follows
  • kdb: fix memleak when listing plugins
  • many spelling fixes and fix typo in source of qt-gui: thanks to klemens (ka7)
  • dpkg, fix file leakage, thanks to Armin Wurzinger
  • plugin line: only skip parentKey if present
  • plugin resolver: avoid failure after commit for files that cannot be removed
  • plugin simpleini: handle more errors, make format parameter more robust thanks to Bernhard Denner
  • plugin crypto: fix compilation errors for openssl versions on Debian 9, thanks to Peter Nirschl
  • kdb mv: fail without keys also in recurse mode
  • fix bashism, thanks to Armin Wurzinger
  • qtgui: fix crash on unhandled exception on binary values, thanks to Raffael Pancheri

Outlook

We are currently working on following topics:

  • Migration of LCDproc, OpenIcc, machinekit, ... to Elektra.
  • A reimplementation of Elektra's core API in Rust (next to implementation in C).
  • A user interface which generates restricted input fields based on the specification.
  • YAML as configuration file format (next to INI, XML, JSON, TCL, ...).
  • An mmap persistent cache.
  • Improvements for the specification language.
  • New APIs to be directly used by applications.
  • An order-preserving minimal hash for O(1) lookup and iteration.
  • Mainloop migration for notifications (currently only DBus, to be extended to Redis, ZeroMq).
  • Improvements on the Website and snippet sharing to also handle misconfiguration.

Get It!

You can download the release from here or GitHub

The hashsums are: name: elektra-0.8.20.tar.gz size: 4740032 md5sum: 0e906f1a1677a8bfb31d144e1eaeb3cf sha1: 5e33c49ae6e3b890c9267288fb9f321289910eb5 sha256: e9cbc796e175685ccb6221f1dd5ea5c43832f545c40557c32b764ff5d567b312

The release tarball is also available signed by me using gpg from here or GitHub

Already built API-Docu can be found online or GitHub.

Stay tuned!

Subscribe to the RSS feed to always get the release notifications.

For any questions and comments, please contact the issue tracker on GitHub or me by email using elektra@markus-raab.org.

Permalink to this NEWS entry

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

Best regards, Markus

Scientific Software - Peer-reviewed - C
Published by markus2330 over 8 years ago

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

  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

Scientific Software - Peer-reviewed - C
Published by markus2330 about 9 years ago

Elektra - 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* 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 cryptobotan (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 `pluginvariants 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++) - Newinfos/status:readonly,writeonly,limited (Thanks to Marvin Mall) - The toolupdate-infos-statusordersinfos/statusand allows devs to easily add/rem entries. (Thanks to Kurt Micheli) - Automatic setting ofinfos/status:nodoc,nodep,unittest,memleak,configurable (Thanks to Kurt Micheli) - Improvecreatelibsymlink, addPLUGINargument 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 forENABLEDEBUG. (Thanks to Marvin Mall) - Updated [SECURITY document](http://tree.libelektra.org/doc/SECURITY.md) - Macro naming conventionELEKTRA, addedkdbmacros.h -ENABLEDEBUGalso works withclangandENABLEASAN` 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 installed, TARGET_DOCUMENTATION_TEXT_FOLDER was added for that purpose. The files are: - BIGPICTURE.md, GOALS.md, LICENSE.md, METADATA.ini, SECURITY.md, AUTHORS, CONTRACT.ini, NEWS.md, and WHY.md

Other new files are: - Plugins: libelektra-base64.so, libelektra-c.so, libelektra-fcrypt.so libelektra-required.so, libelektra-simplespeclang.so (only in EXPERIMENTAL, not added by default, but with ALL) - site_ruby/_kdb.so (ruby binding, only in ALL) - testcpp_keyio, testkdb_error, testmod_base64, testmod_fcrypt (test binaries in TARGET_TOOL_EXEC_FOLDER)

Changed files are: - libelektraintercept-env.so (renamed from libelektragetenv.so., but still available as symlink) - libelektraintercept-fs.so (renamed from libelektraintercept.so, but still available as symlink) - version upgrade: libelektratools.so.2

Portability

Elektra should work on every system that has cmake and a C/C++ compiler.

For this release we increased portability to better work with Mac OS X, CentOS 7, and OpenSuse 42. - Mac OS X: - Travis build server now also build qt-gui - Support for xcode8 added (xcode6 still supported) - fix lua != 5.2 issues (wrong output), update docu - remove hard dependency to pkg-config - remove hard dependency to version 3 of cmake (most parts still work with version 2) - make search for swig 2 visible - fix plugin names and mounting on OpenSuse 42.1

A big thanks to Kai-Uwe Behrmann, Mihael Pranjić and Sebastian Bachmann.

Fixed Issues

  • simpleini: use correct error number when open file fails
  • yajl: improve error message on non-utf8 text. (Thanks to Christoph Weber)
  • drop multiple / from ~ paths (Thanks to Thomas Waser)
  • fix failing testcases with ENABLE_DEBUG #988 (Thanks to Thomas Waser)
  • csvstorage: files in source are rewritten #987 (Thanks to Thomas Waser)
  • fix RTLD_NODELETE for OpenBSD (Thanks to Thomas Waser)
  • better handle adding/deleting of read-only (info) plugins.
  • fix behavior of multiple plugins setting errors (first error wins, later errors are transformed to warnings) (Thanks to Thomas Waser)
  • fix resolver logic for missing files
  • regex string in conditionals (Thanks to Thomas Waser)
  • use KDB environment variable in shell tests and fix counting of tests for kdb run_all.
  • output to stderr for elektrify-* scripts
  • make desktop plugin mountable
  • avoid cmake warnings in make uninstall (avoid @)
  • fix quoting in ini plugin (Thanks to Thomas Waser)
  • fix plugin names and mounting with plugin pre/postfixes (Thanks to Kai-Uwe Behrmann)
  • mount-openicc: rename to openicc.json (Thanks to Kai-Uwe Behrmann)

Get It!

You can download the release from here and also here on github - name: elektra-0.8.19.tar.gz - size: 2681639 - md5sum: 6669e765c834e259fb7570f126b85d7e - sha1: 82cefe4cea58d6e6b0a99ddbda24d1b57e98d93a - sha256: cc14f09539aa95623e884f28e8be7bd67c37550d25e08288108a54fd294fd2a8

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

Scientific Software - Peer-reviewed - C
Published by markus2330 about 9 years ago

Elektra - 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:

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-cryptobotan.so libelektra-cryptoopenssl.so libelektra-desktop.so libelektra-mozprefs.so libelektra-passwd.so
  • added tests testmodblockresolver testmodboolean testmodcryptobotan testmodcrypto gcrypt testmodcryptoopenssl testmodmozprefs testmodpasswd testopmphmvheap testopmphm_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

Scientific Software - Peer-reviewed - C
Published by markus2330 over 9 years ago

Elektra - 0.8.17 Release

http://doc.libelektra.org/news/e6153a39-c4bd-41c3-bc86-785d451eb6c5.html

Scientific Software - Peer-reviewed - C
Published by markus2330 over 9 years ago

Elektra - 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: 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-resolverfmhpu_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/toolexec: testcppcontextualupdate testkdbconflict testkeyname testmodcurlget testmoddpkg testmodjni testmodprofile testmodsemlock testmodshell testtoolmergingkdb

Following Plugins are excluded on specific platforms: - mathcheck on Intel compiler (reason: failing test cases) - simpleini on non-glibc systems (reason: not portable printf extension)

new symlinks:

  • /usr/lib/elektra4/libelektra-storage.so
  • /usr/lib/elektra4/libelektra-resolver.so

new releases

The first release of the libraries libelektratools-full, libelektratools and libelektragetenv. They now have SOVERSION 0.

Development

You do not need to format the source manually anymore. Make sure that you run scripts/reformat-source before creating a PR.

clang-tidy helps you to add blocks to have better maintainable code.

Felix Berlakovich improved the performance of the augeas plugin and also contributed a script to benchmark different host plugin. His thesis can be downloaded from here. It contains benchmarks and discussions about augeas.

The CMake function add_plugin was completely rewritten. Now you do not have to register your plugin at multiple points but instead information of README.md is parsed to correctly register the plugin to categories as stated by infos/status and infos/provides.

The code generator for errors also yields macros. This avoids usage of the IDs, which can be problematic if multiple pullrequests are prepared at once.

Compatibility

This might be the last release supporting wheezy, because it gets more and more time-intensive to find workarounds for the old compiler. The C++11 regex do not work at all.

Binary Compatibility Test

When you execute the testcases of 0.8.15 against Elektra 0.8.16 following testcases fail. None of them effect the API.

testsplitget testsplitset .. Internal restructuring testmodcrypto .. not included by default now testmodini .. section handling changed, line 178: nosectionkey contained no comment testmodrename .. internal API elektraKeyCreateNewName changed testmodresolver .. internal data structure now contains more members to remember uid and gid testmodtemplate .. not present by default testtoolbackend testtoolbackendbuilder testtoolbackendparser testtoolspecreader .. changes in KDB tool before release checkkdbinternalcheck .. experimental plugins are now excluded

Added API

in libease René Schwaiger added:

extern char const * elektraKeyGetRelativeName(Key const * cur, Key const * parentKey);

in libmeta Thomas Waser added (partly based on ideas/code from Felix Berlakovich):

extern void elektraMetaArrayAdd(Key *, char const *, char const *); extern KeySet * elektraMetaArrayToKS(Key *, char const *); extern char * elektraMetaArrayToString(Key *, char const *, char const *); extern int elektraSortTopology(KeySet *, Key * *);

Tools

Qt-gui

Felix Berlakovich updated the qt-gui so that it uses a newly written sync-method added in libtools.

Gabriel Rauter added a desktop file that uses the new svg logo from René Schwaiger.

Portability

  • Peter Nirschl fixed code in the resolver that uses EBADMSG which was not available in BSD.
  • Peter Nirschl improved detection of librt
  • Felix Berlakovich fixed searching of FindSystemd
  • MinGW64 resolver now handles conflicts correctly and does not ignore them anymore and now also is able to create empty files (but still not directories)

Mac OS X

A lot of effort was invested to all test cases also run on Mac OS X: - .template syntax - linking errors - fix regex in conditionals plugins

Thanks to René Schwaiger

Bugs

  • print null-environment correctly with kdb getenv
  • keyIs(Direct)Below didn't work with cascading keys
  • fix elektraKeyGetRelativeName (needed by ni) for cascading keys and move it to libease, thanks to René Schwaiger
  • make nickel tests show correct test name, thanks to René Schwaiger
  • glib: replace cursor_t with gssize so that GElektra-4.0.gir builds with gobject-introspection later than 1.47, thanks to Manuel Mausz
  • fixed out-of-bounds bug in timeofday plugin
  • elektraMetaArrayToKS correctly adds parent key, thanks to Thomas Waser
  • kdb-shell: Do not abort ksOutput on binary data.
  • some rework for global hooks, still not stable

Get It!

You can download the release from here and now also here on github - name: elektra-0.8.16.tar.gz - size: 2405443 - md5sum: ef0c138b4a4fda017aa8bb6f812671ce - sha1: c6a6f9c26addd5fcc274cea635de02ef680cfb1a - sha256: 3cf0624eb027e533192ca9d612618df3d38ec3674c9cd20474f04ff269fad77e - sha512: b225e61379907365a423ea75ec7138e5257bb78c526bb05a1ec21f66a52eb4bad9e6f1eb23209d700670b21b86166497b47c3bc46bc9d45f6d366cd544afc326

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 mail elektra@markus-raab.org.

Permalink to this NEWS entry

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

Best regards, Markus

Scientific Software - Peer-reviewed - C
Published by markus2330 almost 10 years ago

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

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 getting a fat core.

Thanks to Manuel Mausz for fixing many bugs related to the library split and also adapting all the bindings for it.

Benchmark

To show that the split does not make Elektra slower, Mihael Pranjić made a small benchmark. The real time of benchmarks/large and revision 634ad924109d3cf5d9f83c33aacfdd341b8de17a 1. kdb-static: Median :0.8800 2. kdb-full: Median :0.8700 3. kdb: Median :0.8700

So it seems that the split does not influence the time of running elektrified processes.

Times were measured with time(1) and the median is calculated for 21 runs of benchmarks/large. This was done using scripts/benchmark_libsplit.sh

Compatibility

As always, the ABI and API is fully forward-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 every program without errors (API).

We added keyGetNamespace which allows us to handle all namespaces in a switch and to iterate all namespaces. This is essential, when a new namespace is added, thus then the compiler can warn you about every part where the new namespace is not yet considered. We currently do not plan to add a new namespace, but better be safe than sorry.

The internal function keyCompare now also detects any meta-data change.

libtools was nearly rewritten. Even though it is mostly API compatible (you should not use the low-level Backend anymore but instead use the BackendBuilder), it is certainly not ABI compatible. If you have an undefined symbol: _ZN3kdb5tools7Backend9addPluginESsNS_6KeySetE you need to recompile your tool. Even the merging part has ABI incompatibility (different size of _ZTVN3kdb5tools7merging14NewKeyStrategyE). Unfortunately, we still cannot guarantee compatibility in libtools, further changes are planned (e.g. implementing mounting of lazy plugins).

The python(2) and lua interfaces changed, an additional argument (the plugin configuration) is passed to open.

The INI plugin was rewritten, so many options changed in incompatible ways.

The default format plugin (e.g. for import/export) is no longer hardcoded to be dump. Instead KDBDEFAULTSTORAGE will be used. To get KDBDEFAULTSTORAGE you can use the constants plugin:

kdb mount-info kdb get system/info/constants/cmake/KDB_DEFAULT_STORAGE

Thanks to Manuel Mausz plugins do no longer export any method other than elektraPluginSymbol. It now will fail if you directly linked against plugins and did not correctly use their public interface. Please use the module loading and access functions via the contract.

The CMake and Pkgconfig Files now only link against elektra-core and elektra-kdb. If you used some symbols not present in kdb.h, your application might not work anymore.

libelektra.so is still present for compatibility reasons. It should not be used for new applications. Some unimportant parts, however, moved to the "sugar" libraries. E.g. the symbol elektraKeyCutNamePart is no longer part of libelektra.so.

Bootstrapping

When you use kdbOpen in Elektra as first step it reads mountpoint configuration from /elektra. This step is the only hardcoded one, and all other places of the KDB's tree can be customized as desired via mounting.

The bootstrapping now changed, so that /elektra is not part of the default configuration default.ecf (or as configured with KDB_DB_FILE), but instead we use elektra.ecf (or as configured with KDB_DB_INIT). This behaviour solves the problem that default.ecf was read twice (and even differently, once for /elektra and once for /).

To be fully compatible with previous mountpoints, Elektra will still read mountpoints from default.ecf as long as elektra.ecf is not present.

To migrate the mountpoints to the new method, simply use:

kdb upgrade-bootstrap

which basically exports system/elektra/mountpoints, then does kdb rm -r system/elektra/mountpoints so that default.ecf will be without an mountpoint and thus the compatibility mode does not apply anymore. As last step it will import again what it exported before.

Details are here

Plugins

We already highlighted the new spec plugin, but also other plugins were improved at many places. Small other changes are: - Conditionals now also support assign/condition syntax, thanks to Thomas Waser - Lua and Python are not tagged experimental anymore. They now correctly add their configuration to the open-call. - The plugin yajl (the json parser and generator) now also accepts the type string and yields better warnings on wrong types. - Improved error message in the type plugin.

Larger changes were done in the following plugins:

INI

The INI plugin was rewritten and a huge effort was taken so that it fully-roundtrips and additionally preserves all comments and ordering. Currently, it is brand new. It is planned that it will replace dump in the future.

Currently is has some minor problems when used as KDBDEFAULTSTORAGE. You can avoid most problems by mounting a different file into root:

kdb mount root.ini /

Read here about the details.

A huge thanks to Thomas Waser.

Rename

Thanks to Thomas Waser rename is now fixed for cascading keys. Additionally, it does not change the sync status of the keys so that notification plugins work properly afterwards.

Crypto

The crypto plugin is a facility for securing sensitive Keys by symmetric encryption of the value. It acts as a filter plugin and it will only operate on Keys, which have the meta-key „crypto/encrypt“ set.

The key derivation is still work-in-progress, so the plugin does not work with kdb yet. A planned method for key derivation is to utilize the gpg-agent.

For now the plugin requires the following Keys within the plugin configuration in order to work properly: 1. /crypto/key - the cryptographic key (binary 256 bit long) 2. /crypto/iv - the initialization vector (binary 128 bit long)

Please note that this method of key input is for testing purposes only and should never be used in a productive environment!

Thanks to Peter Nirschl, especially the patience for also supporting different platforms where dependencies need to be handled differently.

KDB

A technical preview of a new tool was added: kdb editor allows you to edit any part of Elektra's configuration with any editor and any syntax. It uses 3-way merging and other stable technology, but it currently does not provides a way to abort editing. So you only should use it with care.

The tool kdb list now searches in the rpath for libraries and thus will also find plugins not present at compile time (using glob). Additionally, it sorts the plugins by infos/status score, which can also be printed with -v. The last plugins printed are the ones ranked highest.

When running as root, kdb will now use the system namespace when writing configuration to cascading key names.

Long paths are cumbersome to enter in the CLI. Thus one can define bookmarks now. Bookmarks are key-names that start with +. They are only recognized by the kdb tool or tools that explicitly have support for it. Applications should not depend on the presence of a bookmark. For example, if you set the bookmark kdb:

kdb set user/sw/elektra/kdb/#0/current/bookmarks kdb set user/sw/elektra/kdb/#0/current/bookmarks/kdb user/sw/elektra/kdb/#0/current

You are able to use:

kdb ls +kdb/bookmarks kdb set +kdb/format ini

The kdb tool got much more robust when the initial configuration is broken, no man page viewer is present or Elektra was installed wrongly.

The --help usage is unified and improved.

The new keyname naming conventions are now used for configuration of the kdb-tool itself: /sw/elektra/kdb/#0/%/ and /sw/elektra/kdb/#0/current/ are additionally read. The option -p/--profile is now supported for every command, it allows to fetch configuration from /sw/elektra/kdb/#0/<profile>/ instead of current. KDB is more robust when it cannot fetch its own configuration due to KDB errors.

Coding Guidelines

Thanks to Kurt Micheli the code guidelines are now properly documented. Thanks to René Schwaiger we also provide a style file for clang-format.

Furthermore we unified and fixed the source: - only use @ for doxygen commands - always use elektra* functions for allocation - added a file header for every file

C++11 migration

Since we now only use C++11, we applied clang-modernize which simplified many loops and replaced many 0 to nullptr. Additionally, we added override and default at many places.

We removed all places where we had ifdefs to use auto_ptr if no modern smart pointer is available.

Because of these changes there is no easy way to compile Elektra without C++11 support, except by avoiding the C++ parts all together.

The C++ KeySet now also supports a get to retrieve whole containers at once. By specializing KeySetTypeWrapper you can support your own containers. Currently only map<string, T> is supported (T is any type supported by Key::get).

If you haven't removed it from your flags already, there is no use anymore to set ENABLE_CXX11.

Documentation

The documentation was improved vastly. Most thanks to Kurt Micheli who did a lot of editing and fixed many places throughout the documentation Also thanks to Michael Zehender who added two paragraphs in the main README.md.

Keynames of applications should be called /sw/org/app/#0/current, where current is the default profile (non given). org and app is supposed to not contain / and be completely lowercase. Keynames are documented here. See also here. The main reason for long paths is the provided flexibility in the future (e.g. to use profiles and have a compatible path for new major versions of configuration). By using bookmarks, users should not be confronted by it too often. - many man pages were improved - many typos were fixed, thanks to Pino Toscano! - Fix documentation for kdb list, thanks to Christian Berrer - Compilation variants are explained better, thanks to Peter Nirschl for pointing out what was missing - document ronn as dependency, thanks to Michael Zehender - fix broken links, thanks to Daniel Bugl

Thanks to Kurt Micheli, developers are now warned during compilation on broken links in Markdown. The output format is the same as for gcc. Additionally, the markdown documentation of plugins now get a proper title in the pdf and html output of doxygen.

Qt-Gui 0.0.10

Raffael Pancheri again updated qt-gui with many nice improvements: - update existing nodes in case the config was changed outside the gui - safely update tree - add update signal to metadata - fix crash when closing the GUI - move Actions in separate file to make main.qml less clustered - plugins do not output messages at startup - BackendBuilder is now used, which automatically takes cares of the correct ordering of plugins - Qt 5.4 compatibility is still ensured - C++11 is now used in Qt-Gui, too

Packaging and Build System

Elektra 0.8.14 now in Debian with qt-gui, man pages, thanks to Pino Toscano read more here

Thanks to Gustavo Alvarez for updating and splitting the packages on Arch Linux!

Thanks to Harald Geyer, Elektra is now packaged for OpenWRT. We fixed a number of cross-compilation issues and now officially support building against musl libc, with one minor limitation: RPATH works differently on musl so you need to install all plugins directly in /usr/lib/ or set LDLIBRARYPATH. Report any bugs in Harald's OpenWRT packaging issue tracker. - export errors/symbols are now called elektra-export-symbols and elektra-export-symbols and can be installed using INSTALL_BUILD_TOOLS (by default off). This is needed for cross-compilation. Thanks to Harald Geyer for reporting. - some header files are renamed because they endlessly included themselves if the header files were found in wrong order. Thanks to Harald Geyer for reporting. - fixed compilation when built on more than 20 cores with >= -j15, thanks to Gustavo Alvarez for reporting and Manuel Mausz for analyzing - lua 5.1 now works too (except for iterators), thanks to Harald Geyer for reporting. thanks to Manuel Mausz for adding a new FindLua.cmake - pdf builds do not fail due to half written files, reported by René Schwaiger and fixed by Kurt Micheli

Read about other packages here.

Fixes and Improvements

  • 3 way merge now properly deals with binary data, thanks to Felix Berlakovich
  • getenv: fix wrapping on powerpc, thanks to Pino Toscano
  • markdownlinkconverter: fix char/int mismatch, thanks to Pino Toscano
  • wresolver: use KDBMAXPATHLENGTH instead of PATHMAX, thanks to Pino Toscano
  • Cleaning up #ifdefs that break statements, thanks to Romero Malaquias
  • Daniel Bugl tested the INI plugin
  • cmake listfilter was broken because of different behaviour in cmakeparse_arguments, thanks to Christian Berrer for reporting
  • g++5.3 is now supported
  • gtest does not link against pthread if not needed
  • testcases that are built with BUILD_SHARED also successfully work
  • kdb list works when libs are in same path as plugins, thanks to Harald Geyer for reporting
  • fix Mac OS issues, thanks to Peter Nirschl, René Schwaiger and Mihael Pranjic
  • fix resolver-baseflag docu, thanks to Harald Geyer for reporting
  • do not create wrong directories called ( and ) in source, thanks to René Schwaiger
  • fix cmake for systems where iconv is not part of libc, thanks to Michael Zehender and Peter Kümmel (for FindIconv.cmake)
  • fix segfault in libgetenv if root keys are present
  • lua: fix Key:tostring(), thanks to Manuel Mausz
  • add list of supported bindings, thanks to Manuel Mausz

Get It!

You can download the release from here and now also here on github - name: elektra-0.8.15.tar.gz - size: 2338297 - md5sum: 33ec1e5982fb7fbd8893bf7b579b80f0 - sha1: 6b1fdd5aa5aaad6ba377b4bb5ef437e0c85319ff - sha256: 6a406986cecb8d4a44485ced118ee803bc039b0824b72298e123b4dd47eb0b22 - sha512: 86a408dd546b33e3b437f92f415de7aee6a235189f9eab0762b3f44ab4c453ee369a53de10a9f5b0df1b446460b12c57c6b8b77c282648ec2a49f2328d9af13d

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 mail elektra@markus-raab.org.

Permalink to this NEWS entry

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

Best regards, Markus

Scientific Software - Peer-reviewed - C
Published by markus2330 about 10 years ago

Elektra - 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 or kdb 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

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 mail elektra@markus-raab.org.

Permalink to this NEWS entry

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

Btw. the whole release happened with elektrify-getenv enabled.

Best regards, Markus

Scientific Software - Peer-reviewed - C
Published by markus2330 over 10 years ago

Elektra - Elektra 0.8.13

Again we managed to release with many new features, many fixes and also other improvements.

Elektrify-getenv

getenv(3) is one of the most popular ways to retrieve configuration, even though it has many known problems: - no standard way to modify it - relogin (or restart of shell) necessary - names are flat (no hierarchical structure) - cannot be set for individual applications - different in at, cron and similar scripts

With elektrify-getenv we wrote a solution which solves most of the problems. We use the LDPRELOAD technique to _additionally retrieve values from Elektra, and not only the environment.

You simply can do:

bash kdb set user/env/override/HTTP_PROXY "http://my.proxy:8080"

This will set the HTTP_PROXY environment variable to http://my.proxy:8080. Configuration can be retrieved with kdb get:

bash kdb get user/env/override/HTTP_PROXY lynx # or start another www-browser with the newly set HTTP_PROXY

Or using the man pages:

kdb elektrify-getenv man man --elektra:MANWIDTH=40

Will use MANWIDTH 40 for this invocation of man man. This feature is handy, if an option is only available by environment, but not by command-line arguments, because sometimes environment variables are not trivial to set (e.g. in Makefiles).

Some more examples:

kdb set user/env/override/MANOPT -- "--regex -LC" kdb elektrify-getenv getenv MANOPT # to check if it is set as expected kdb getenv MANOPT # if /etc/ld.so.preload is active

So is this the final solution for configuration and manual elektrification of applications is not needed anymore?

The answer is: no and yes.

It is quite satisfactory for configuration that is inherently sharable (not different from one application to another) and needs the environment semantics, i.e. some subprocesses should have different configuration than others, e.g. in a specific terminal.

But it might not be a good solution for your own application, because libgetenv(3) implies many architectural decision, that other elektrified applications would decide differently, e.g.: - it uses global variables (getenv(3) has no handle) - it uses mutex for multi-threading safety - the API getenv(3) only returns char* and has no support for other data types

For more information see src/libgetenv/README.md

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.

Because keyUnescapedName and keyGetUnescapedNameSize is added in this release, it is not backward-compatible, i.e. programs compiled against 0.8.13, might not work with older 0.8 libraries.

The function keyUnescapedName provides access to an unescaped name, i.e. one where / and \\ are literal symbols and do not have any special meaning. NULL characters are used as path separators. This function makes it trivial and efficient to iterate over all path names, as already exploited in all bindings: - jna (java) - lua - python2 - python3

Other small changes/additions in bindings: - fix key constructor, thanks to Manuel Mausz - add copy and deepcopy in python (+examples,+testcases), thanks to Manuel Mausz - dup() in python3 returned wrong type (SWIG wrapper), thanks to Toscano Pino for reporting, thanks to Manuel Mausz for fixing it

Doxygen 1.8.8 is preferred and the configfile was updated to this version.

The symbols of nickel (for the ni plugin) do not longer leak from the Elektra library. As such, old versions of testmod_ni won't work with Elektra 0.8.13. A version-script is now in use to only export following symbols: - kdb* - key* - ks* - libelektra* for module loading system - elektra* for proposed and other functions (no ABI/API compatibility here!)

In this release, ENABLE_CXX11 was changed to ON by default.

Note that in the next release 0.8.14 there will be two changes: - According to issue #262, we plan to remove the option ENABLECXX11 and require the compiler to be C++11 compatible. If you have any system you are not able to build Elektra with -DENABLECXX11=ON (which is the default for 0.8.13) please report that immediately. - the python3 bindings will be renamed to python

By not having to care for pre-C++11 compilers, we hope to attract more developers. The core part is still in C99 so that Elektra can be used on systems where libc++ is not available. Many new plugins are still written in C99, also with the purpose of not depending on C++.

Python Plugins

A technical preview of python3 and python2 plugins has been added.

With them its possible to write any plugin with python scripts.

Note, they are a technical preview. They might have severe bugs and the API might change in the future. Nevertheless, it is already possible to, e.g. develop storage plugins with it.

They are not included in ALL plugins. To use it, you have to specify it:

-PLUGINS="ALL;python;python2"

Thanks to Manuel Mausz for to this work on the plugins and the patience in all the last minute fixes!

Qt-gui 0.0.8

The GUI was improved and the most annoying bugs are fixed: - only reload and write config files if something has changed - use merging in a way that only a conflict free merge will be written, thanks to Felix Berlakovich - made sure keys can only be renamed if the new name/value/metadata is different from the existing ones - fixed 1) and 2) of #233 - fixed #235 - fixed qml warning when deleting key - fixed qml typerror when accepting an edit

A big thanks to Raffael Pancheri!

KDB Tool

The commandline tool kdb also got some improvements. Most noteworthy is that kdb get -v now gives a complete trace for every key that was tried. This is very handy if you have a complex specification with many fallback and override links.

It also shows default values and warnings in the case of context-oriented features.

Furthermore: - Add -v for setmeta - Copy will warn when it won't overwrite another key (behaviour did not change) - improve help text, thanks to Ian Donnelly

Documentation Initiative

As Michael Haberler from machinekit pointed out it was certainly not easy for someone to get started with Elektra. With the documentation initiative we are going to change that. - The discussion in github issues should clarify many things - We start writing man pages in ronn-format(7), thanks to Ian Donnelly for current work - Kurt Micheli is woring on improved doxygen docu + pdf generation - Daniel Bugl already restructed the main page - Daniel Bugl also improved formatting - doc: use @retval more, thanks to Pino Toscano - doxygen: fix template to use @ and not \\. - SVG logo is preferred, thanks to Daniel Bugl - doc: use @retval more, thanks to Pino Toscano - many typo fixes, thanks to Pino Toscano - fix broken links, thanks to Manuel Mausz, Daniel Bugl and Michael Haberler

Any further help is very welcome! This call is especially addressed to beginners in Elektra because they obviously know best which documentation is lacking and what they would need.

Portability

kdb-full and kdb-static work fine now for Windows 64bit, thanks to Manuel Mausz. The wresolver is now more relaxed with unset environment.

All issues for Mac OS X were resolved. With the exception of elektrify-getenv everything should work now, thanks to Mihael Pranjic: - fix mktemp - testscripts - recursive mutex simplification - clearenv ifdef

and thanks to Daniel Bugl: - RPATH fixed, so that kdb works

furthermore: - fix __FUNCTION__ to __func__ (C99), thanks to Pino Toscano - avoid compilation error when JNIVERSION18 is missing - fix (twice, because of an accidental revert) the TARGETCMAKE_FOLDER, thanks to Pino Toscano

Thanks to Manuel Mausz for to testing and improving portability!

Packaging and Build System

  • 0.8.12 packaged+migrated to testing, thanks to Pino Toscano
  • fix build with external gtest, thanks to Pino Toscano
  • switch from FindElektra.cmake to ElektraConfig.cmake, thanks to Pino Toscano
  • use cmake_parse_arguments instead of parse_arguments, thanks to Manuel Mausz

Further Fixes

  • Key::release() will also work when Key holds a null-pointer
  • Key::getName() avoids std::string exception
  • support for copy module was introduced, thanks to Manuel Mausz
  • be more POSIX compatible in shell scripts (type to command -v and avoid echo -e) thanks to Pino Toscano
  • fix vararg type for KEY_FLAGS, thanks to Pino Toscano
  • fix crash of example, thanks to Pino Toscano
  • add proper licence file for Modules (COPYING-CMAKE-SCRIPTS), thanks to Pino Toscano
  • fix XDG resolver issue when no given path in XDGCONFIGDIRS is valid
  • make dbus example work again
  • fix compiler warnings for gcc and clang
  • fix valgrind suppressions
  • Installation of GI binding is fixed, thanks to Dāvis
  • make uninstall is fixed and docu improved

Notes

There are some misconceptions about Elektra and semi structured data (like XML, JSON). Elektra is a key/value storage, that internally represents everything with key and values. Even though, Elektra can use XML and JSON files elegantly, there are limitations what XML and JSON can represent. XML, e.g., cannot have holes within its structure, while this is obviously easily possible with key/value. And JSON, e.g., cannot have non-array entries within an array. This is a more general issue of that configuration files in general are constrained in what they are able to express. The solution to this problem is validation, i.e. keys that does not fit in the underlying format are rejected. Note there is no issue the other way round: special characteristics of configuration files can always be captured in Elektra's metadata.

Get It!

You can download the release from here and now also here on github - name: elektra-0.8.13.tar.gz - size: 2141758 - md5sum: 6e7640338f440e67aba91bd64b64f613 - sha1: ca58524d78e5d39a540a4db83ad527354524db5e - sha256: f5c672ef9f7826023a577ca8643d0dcf20c3ad85720f36e39f98fe61ffe74637

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 mail elektra@markus-raab.org.

Permalink to this NEWS entry

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

Scientific Software - Peer-reviewed - C
Published by markus2330 over 10 years ago