Skip to content

Releases: ElektraInitiative/libelektra

0.10.0 Release

23 May 19:04
Compare
Choose a tag to compare
  • 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

Jenki...

Read more

0.9.14 Release

16 Mar 19:13
Compare
Choose a tag to compare
  • 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 Release

16 Mar 19:10
Compare
Choose a tag to compare
0.9.13 Release Pre-release
Pre-release
  • guid: e8fd116d-12ab-4281-aaf3-b6441056dd63
  • author: Mihael Pranjić
  • pubDate: Tue, 14 Mar 2023 10:05:11 +0100
  • shortDesc: Bugfix, Ubuntu Packages

We are proud to release Elektra 0.9.13.

What is Elektra?

Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.

You can also read the news on our website.

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

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 Release

03 Mar 13:05
Compare
Choose a tag to compare
  • 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

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. _(@dtd...
Read more

0.9.11 Release

05 Oct 10:06
Compare
Choose a tag to compare
  • 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

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 Release

12 Jul 11:35
Compare
Choose a tag to compare
  • 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

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

Python

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

CPP

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

webd

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

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 S...
Read more

0.9.9 Release

10 Mar 17:27
Compare
Choose a tag to compare
  • 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

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 er...
Read more

0.9.8 Release

04 Oct 07:02
Compare
Choose a tag to compare
  • 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 stand...
Read more

0.9.7 Release

10 Jul 20:12
Compare
Choose a tag to compare
  • 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 aaron.abebe@gmail.com)
  • Change GPG keyserver for receiving the apt key from keys.gnupg.net to keyserver.ubuntu.com (Robert Sowula)
  • The manpages now use the date of the last change recorded in git. (Klemens Böswirth)

Tests

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

Packaging

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

Build

Docker

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

Infrastructure

Jenkins

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

Outlook

We are currently working on following topics:

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

Statistics

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

Join the Initiative!

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

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

Get the Release!

You can download the release from here
or GitHub

The hashsums are:

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

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

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

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

Stay tuned!

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

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

Permalink to this NEWS entry

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

Best regards,
Elektra Initiative

0.9.6 Release

07 Jun 15:34
0.9.6
Compare
Choose a tag to compare
  • 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

Libraries

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

Core

Bindings

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

SWIG

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

JNA

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