Thu, 10 Mar 2022 00:00:00 GMT

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 man page for kdb mount-java.

1.0 Decisions

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

Plugins

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

filecheck

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

mmapstorage

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

csvstorage

Add array metakey to the parentKey of imported Keys (@muskater) (@4ydan) (@lawli3t)

specload

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

uname

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

quickdump

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

dump

The exported functions serialize and unserialize 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 subproject 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 subproject 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 add 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)

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/spelling.sed and fix errors in documentation (by running the scripts/dev/fix-spelling script) (Florian Lindner @flo91)

Added some improvements to the core API documentation (@muskater)

Update and improve the CLion tutorial (doc/tutorials/contributing-clion.md), add screenshots (@flo91)

Improve documentation for storage plugins (@lawli3t)

Add list of sources mentioning or linking to Elektra (@JakobWonisch)

Linked to the installation instruction of the webui in its README file and added references to Docker in the get-started-guide. (@muskater) (@lawli3t) (Aydan Ghazani @4ydan)

Added screenshots and a quick walk through in the Qt-GUI README. (@muskater) (@lawli3t) (Aydan Ghazani @4ydan)

Improve example for kdb-restore man page and fix typos (@JakobWonisch)

Fix some typos in the "Getting Started" page (Ivaylo Ivanov)

Add screenshots with hints to CLion PR tutorial (@JakobWonisch)

Fix typo in elektra-backends man page (@JakobWonisch)

Expanded the webside guide for easier understanding and linked to cmake.org. (Philipp Nirnberger @nirnberger)

Fix small error in CLion tutorial: CMake options would create a directory named ~ in home directory (Maximilian Irlinger @atmaxinger)

Tests

Cleanup tests/linkchecker.whitelist and fix off-by-1 bug of the counter in the scripts/link-checker script (increase counter before printf) (Florian Lindner @flo91)

Add tests for the intercept/env binding (Ivaylo Ivanov)

add and improve checks in scripts/sed (Florian Lindner @flo91)

Change the cpp Key-class (key.hpp) to check the return values of the called c-functions and throw exceptions if values that indicate an error are returned + add tests that check for this exceptions (Florian Lindner @flo91)

Added more test cases for the keyCopy function (@muskater)

Add exception tests for key C++ bindings (Ivaylo Ivanov)

Added a shell script and a task that checks whether the filenames of newly added files are compliant with the convention. It is executed by the cirrus CI as well as the Jenkins CI (@muskater)

Add a new shellrecoder test to doc/tutorials/merge.md (Florian Lindner @flo91)

Added the possibility to enable all the shell recorder test cases for all plugins and fixed some plugin README files in process (@muskater)

Convert example in doc/help/kdb-test.md to shell recorder test (@JakobWonisch)

Packaging

Add initial flatpak package. See scripts/flatpak/README.md and scripts/flatpak/org.libelektra.kdb.yamlfor more info (Ivaylo Ivanov)

Remove hard coded SWIG 3.0 paths. (Mihael Pranjić @mpranj)

Build

CMake

Marked certain variables as advanced and separate user-modifiable and unaccessible variables. (Vaibhav Ganesh @flackojr)

Docker

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

Infrastructure

Jenkins

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

Website

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

Update npm dependencies, add forked and update angular-marked module. (Mihael Pranjić @mpranj)

Remove links to Travis CI and replace them with GitHub Actions (with badge). (Mihael Pranjić @mpranj)

Other

Make Elektra reuse reuse compliant (Ivaylo Ivanov)

Outlook

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

Ansible-Elektra (Lukas Hartl)

Recording Configuration (Maximilian Irlinger)

Furthermore, we are still working on following topics:

1.0 API (Stefan Hanreich) and (Klemens Böswirth)

Improve Java Development Experience (Michael Tucek)

KDB access using FUSE (Alexander Firbas)

Shell completion (Ulrike Schäfer)

Elektrify KDE and GNOME (Mihael Pranjić)

Statistics

We closed 90 issues for this release.

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

Thanks to all authors for making this release possible!

Join the Initiative!

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

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

Get the Release!

You can download the release from here or GitHub

The hashsums are:

name: elektra-0.9.9.tar.gz

size: 8878567

md5sum: f5109eb0c96fb4164a5437bdebc3bf79

sha1: a08df79301d56dd8f3711efa1b78b5a4d003d42f

sha256: 834da360170daa632bbb46dd2e819271327dce1c51be1d7bb2ec22311ded54cb

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

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

Already built API documentation 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.