Releases: ElektraInitiative/libelektra
0.10.0 Release
- guid: e0a2b6f4-b18d-47d8-b642-e27907255666
- author: Tomislav Makar
- pubDate: Tue, 23 May 2023 13:33:52 +0200
- shortDesc: New Changetracking API, New spec plugin, Go into repo
We are proud to release Elektra 0.10.0.
What is Elektra?
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra.
This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
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 internalKeySet
cursor, was replaced with a custom context struct. (@kodebach)
toml
- The
flex
lexer andbison
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
andcommit
functions to satisfykdb 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 callsopenlog
before everysyslog
to avoid the use of a global variable. (@kodebach) - Fix memleak in kdb.c, #4925 (@hannes99)
loader
- Adapt target rename with
-plugin-
indl.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()
andKDBException#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
forKeySet
(Michael Tucek @tucek) - Enabled
ReferenceCleaner
(Michael Tucek @tucek)
go-elektra
- Move
go-elektra
binding from repository into bindings folder oflibelektra
(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 matchgithub.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...
0.9.14 Release
- guid: 9e1e0790-e7ae-4947-9906-2c176a4f8dd2
- author: Mihael Pranjić
- pubDate: Thu, 16 Mar 2023 14:43:04 +0100
- shortDesc: Bugfix Release
We are proud to release Elektra 0.9.14.
What is Elektra?
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra.
This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
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
andcommit
functions to satisfykdb plugin-check
(@kodebach) - Use new
elektraPluginGetPhase()
instead of counting executions (@kodebach)
tracer
- Use separate symbols for
set
andcommit
functions to satisfykdb 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.
For more information, see https://libelektra.org.
Best regards,
0.9.13 Release
- guid: e8fd116d-12ab-4281-aaf3-b6441056dd63
- author: Mihael Pranjić
- pubDate: Tue, 14 Mar 2023 10:05:11 +0100
- shortDesc: Bugfix, Ubuntu Packages
We are proud to release Elektra 0.9.13.
What is Elektra?
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra.
This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
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
gopts
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
toplacements
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.
For more information, see https://libelektra.org.
Best regards,
Elektra Initiative
0.9.12 Release
- guid: F2193578-1773-43A9-85CA-79EA8CE48D7B
- author: Mihael Pranjić
- pubDate: Fri, 03 Mar 2023 08:07:28 +0100
- shortDesc: New Backend Logic, Copy-on-Write, FLOSS Course
We are proud to release Elektra 0.9.12.
What is Elektra?
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra.
This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
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 bykdb 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 manipulateKey
s andKeySet
s, but it does not use thekdb
CLI tool, or theKDB
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 defaultdump
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:
- Run
kdb export system:/elektra/mountpoints dump
to get a copy of your mountpoints config indump
format- Write this data to a file and run the migration script on the file.
- 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
- 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.- Now upgrade your Elektra installation.
- 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. _(@dtd...
0.9.11 Release
- guid: 1390D163-9CEC-493D-839D-3930B9FFB6C4
- author: Mihael Pranjić
- pubDate: Wed, 05 Oct 2022 08:14:35 +0200
- shortDesc: New Backend System, Opensesame Application, FLOSS Course
We are proud to release Elektra 0.9.11.
What is Elektra?
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our Docker image elektra/elektra.
This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
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 newkeyGetNextPart
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.
For more information, see https://libelektra.org.
Best regards,
Elektra Initiative
0.9.10 Release
- guid: CC66FD33-7491-4BFA-975A-36FAB67D45D6
- author: Mihael Pranjić
- pubDate: Sat, 09 Jul 2022 09:40:18 +0200
- shortDesc: Kotlin Binding, Remove Internal Iterators
We are proud to release Elektra 0.9.10.
What is Elektra?
Elektra serves as a universal and secure framework to access
configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra.
This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
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 ofKeySet
s (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
, andksTail
functions for internal iteration ofKeyset
s and Metadata ofKey
s (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
inrb_funcall
withQnil
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 thego
-bindings without internal iterators forKeyset
s 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
andCommand-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 briefkdb
introduction. (@Milangs)
Outlook
We are currently working on following topics:
0.9.9 Release
- guid: 3177C958-9473-41BA-9918-A56A18CF20E8
- author: Mihael Pranjić
- pubDate: Thu, 10 Mar 2022 07:40:35 +0100
- shortDesc: Bug Fixes, Java Plugins, Elektra 1.0 Decisions
We are proud to release Elektra 0.9.9.
What is Elektra?
Elektra serves as a universal and secure framework to access
configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra.
This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
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)
fromsrc/libs/elektra/keytest.c
tosrc/plugins/specload/specload.c
and integrate functionality of keyCompare (const Key _ key1, const Key _ key2)
intoisChangeAllowed (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
dump
- The exported functions
serialise
andunserialise
have been renamed toserialize
andunserialize
. (Klemens Böswirth @kodebach) - New exported functions
int fserialize(KeySet * ks, FILE * file, Key * errorKey)
andint funserialize(KeySet * ks, FILE * file, Key * errorKey)
have been added.
These are wrappers aroundserialize
andunserialize
that allow calling from C with a standardFILE *
. (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
Core
KeySet
now also has a reference counter likeKey
. The new functionsksIncRef
andksDecRef
behave like their counterpartskeyIncRef
andkeyDecRef
.
ksDel
also behaves likekeyDel
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 forKeySet
now useuint16_t
to reduce memory usage.Key
previously usedsize_t
. (Klemens Böswirth) - Reorder
Key
andKeySet
struct members to aviod padding and make space for a newuint16_t
member, reserved for future use. (Mihael Pranjić @mpranj) - Improve
keyReplacePrefix
by using newkeyCopy
function instead of manually copying the name of theKey
(@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
andELEKTRA_WARNING_*_NAME
constants have been removed from the public API. UseELEKTRA_ERROR_*
andELEKTRA_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...
0.9.8 Release
- guid: 0CB8C139-730C-4CCD-9FB4-0C7C4AA4DBF2
- author: Mihael Pranjić
- pubDate: Mon, 04 Oct 2021 00:02:45 +0200
- shortDesc: Redshift Elektrified, HL API & Java Binding Improvements
We are proud to release Elektra 0.9.8.
What is Elektra?
Elektra serves as a universal and secure framework to access
configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra.
This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
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 theTools
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 metakeytype
as fallback, ifcheck/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 otherpostgetstorage
plugins, so that validation can happen duringkdbGet
as well.
This is especially relevant in combination withgopts
. (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 thetomltype
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. UseksSearch
instead.
(Michael Tucek)
Core
- Remove obsolete
ksNeedSync
function. (Mihael Pranjić) - Replace various occurences of
sprintf
bysnprintf
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
mount
ed andspec-mount
ed. (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
toKey::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 argumentparentKey
- Updated javadoc for
- Introduced
KeySet::remove(Key)
andKeySet::remove(String)
- Removed
KeySet::lookup(Key, int)
andKeySet::lookup(String, int)
as well as accompanying flag definitionsKeySet::KDB_O_NONE
,KeySet::KDB_O_DEL
andKeySet::KDB_O_POP
. Please useKeySet::lookup(Key)
andKeySet::lookup(String)
instead. Instead ofKeySet::KDB_O_DEL
, please consider usingKey::release
. The proper replacement forKeySet::KDB_O_POP
isKeySet::remove(Key)
orKeySet::remove(String)
. - Native library proxy interface
Elektra
is now package private (previously was public). - Added example Java plugin
whitelist
(see here) - Changed
Key nextMeta()
toOptional<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()
andKey::setBinary(byte[])
- Renamed
KeyBinaryTypeNotSupportedException
toKeyStringValueException
- Introduced
KeyBinaryValueException
- Improved
Key
test coverage
- Introduced
- Fixed example project in
examples/external/java/read-keys-example
- now works with a stand...
0.9.7 Release
- guid: 39F907DA-8B5B-4984-9D19-33BAB7B71B3D
- author: Mihael Pranjić
- pubDate: Fri, 09 Jul 2021 10:19:29 +0200
- shortDesc: FUSE Tool, TOML Improvements, ElektraSettings GSettings Bindings
We are proud to release Elektra 0.9.7.
What is Elektra?
Elektra serves as a universal and secure framework to access
configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra.
This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
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.
- 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
andio_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.
For more information, see https://libelektra.org.
Best regards,
Elektra Initiative
0.9.6 Release
- guid: ad3d9308-4019-46dc-9de0-b3b82de5302a
- author: Mihael Pranjić
- pubDate: Mon, 07 Jun 2021 09:48:41 +0200
- shortDesc: Java Fixes, Documentation Updates, GCC 11 and Clang 12 Compatibility
We are proud to release Elektra 0.9.6.
What is Elektra?
Elektra serves as a universal and secure framework to access
configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
You can also read the news on our website
You can try out the latest Elektra release using our docker image elektra/elektra.
This is the quickest way to get started with Elektra without compiling and other obstacles, simply run
docker run -it elektra/elektra
.
Highlights
- Java fixes: JNI plugin fixed and JNA bindings improved
- Fedora 34 and Debian Bullseye packages added
- Documentation Improvements & Cleanups
- GCC 11 and Clang 12 compatibility
JNI plugin fixed
The JNI plugin was encountering a double free on open. This has been fixed in conjunction with an update to JNA binding release mechanism. The previously disabled JNI test have been fixed and enabled.
For how to write plugins, please refer to java-plugins.md as well as the JNI plugin and JNA binding documentation.
Note that it is currently not possible to mount plugins written in Java (see #3881).
Plugins
The following section lists news about the plugins we updated in this release.
JNI
- Fixed double free issues and re-enabled tests
- Updated documentation
- Increased minimum required JDK version to 9
(Michael Tucek)
Special thanks to (Klemens Böswirth), (Mihael Pranjić) and (Robert Sowula) for helping with the problem analysis!
Dbus, Dbusrecv and Zeromqsend
- Internal changes to ensure compatibility with the new
elektraNotificationContract
. (Klemens Böswirth)
Xerces
- Store length of an array in metakey array according to array decision. (Robert Sowula)
YAML Smith and Yan LR
- Removed plugins. (René Schwaiger)
ni
- Silence Clang 12 warnings about suspicious string literal concatenation. (Mihael Pranjić)
Lua
- Removed outdated information from docs (@a-kraschitzer)
Libraries
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
Core
- Remove keyCompareBy(Name)?Owner (@a-kraschitzer)
Bindings
Bindings allow you to utilize Elektra using various programming languages. This section keeps
you up to date with the multi-language support provided by Elektra.
SWIG
- Remove
-Wno-shift-overflow warnings
option from SWIG bindings compile flags. (Mihael Pranjić) - Suppress SWIG/Ruby bindings warning about
operator != ignored
. (Mihael Pranjić)
JNA
- Gradle wrapper and docker images upgraded to 7.0.2
- Minumum Gradle version decreased to 6.0
- Upgraded JNA dependency from 4.5.2 to 5.8.0
- Increased minimum required JDK version to 11
- Updated Java binding API documentation
- Migrated native resource clean-up from
finalize()
toCleaner
- Please revisit the documentation for
Key::release
andKeySet::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.
- Please revisit the documentation for
- 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
toKey.NewArgumentTag
- Changed return types from
int
toboolean
or enabled a fluent interface where appropriate - Renamed
Key::*Integer
toKey::*Int
- Renamed
KeyInvalidNameException
toKeyNameException
- Renamed
KeyTypeMismatchException
toKeyBinaryTypeNotSupportedException
- Introduced
Key::get*AndRelease
convenience methods - Introduced
Key::createNameless
- Introduced
KeyReleasedException
being thrown when a releasedKey
is being accessed - Introduced
KeyMetaException
- Removed unused
KeyTypeConversionException
- Removed
Key::needsSync
- Removed
Key::isNull
KeyReleasedException
is now being thrown when a released (= previouslyisNull
)Key
is being accessedKey
s with no backing native key pointer cannot be created anymore
- Extracted exceptions from
- Updated
KeySet
API introducing the following changes:- Changed return type enabling a fluent interface where appropriate
- Renamed
KeySet::head
toKeySet::first
- Renamed
KeySet::tail
toKeySet::last
- Introduced
KeySetReleasedException
being thrown when a releasedKeySet
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 returnsOptional<Key>
Key::getMeta
now returnsOptional<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 closedKDB
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
- Introduced
- 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
tovoid *
and update the documentation. (Mihael Pranjić) - There have been a few bugfixes for elektrad. (Klemens Böswirth)
- Update
lodash
andhosted-git-info
dependencies ofwebd
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 theFILTER_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...