Libelektra Versions Save

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

v0.10.0

11 months ago
  • 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:

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

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

0.9.14

1 year ago
  • 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:

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,

0.9.13

1 year ago
  • 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:

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

0.9.12

1 year ago
  • 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:

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

0.9.11

1 year ago
  • 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:

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:

  • opening (garage) doors via a novel PIN entry method: you can press and release buttons in any sequence
  • switching on entry lights
  • ringing doorbells
  • detection of fire
  • 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

0.9.10

1 year ago
  • 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:

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

0.9.9

2 years ago
  • 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:

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

0.9.8

2 years ago
  • 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:

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

0.9.7

2 years ago
  • 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:

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 [email protected])
  • 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

0.9.6

2 years ago
  • 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<Key>´
      • KeySet::lookup* now returns Optional<Key>
      • Key::getMeta now returns Optional<Key>
      • Example:
        // checking whether the key has been found BEFORE API change
        Key found = ks.lookup("/some/key");
        if (found != null) {
          // process found key
        }
        
        // 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