Skip to content

Releases: ElektraInitiative/libelektra

0.9.10 Release

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 Stöckl @Eiskasten)
  • Mounting SQL databases (Florian Lindner @flo91)
  • Recording Configuration (Maximilian Irlinger)
  • Ansible-Elektra (Lukas Hartl)
  • Improving Build Server Infrastructure (Lukas Hartl) and (Maximilian Irlinger)
  • Improve Java Development Experience (Michael Tucek)
  • KDB access using FUSE (Alexander Firbas)
  • Shell completion (Ulrike Schäfer)
  • Rewriting tools in C (Florian Lindner @flo91), (Maximilian Irlinger) and (Richard Stöckl @Eiskasten).

Statistics

We closed 51 issues for this release.

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

Thanks to all authors for making this release possible!

Join the Initiative!

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

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

Get the Release!

You can download the release from here
or GitHub

The hashsums are:

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

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

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

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

Stay tuned!

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

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

Permalink to this NEWS entry

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

Best regards,
Elektra Initiative

0.9.9 Release

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 errors in documentation
    (by running the scripts/dev/fix-spelling script) (Florian Lindner @flo91)
  • Added some improvements to the core api documentation (@muskater)
  • Update and improve the CLion tutorial (doc/tutorials/contributing-clion.md), add screenshots (@flo91)
  • Improve documentation for storage plugins (@lawli3t)
  • Add list of sources mentioning or linking to Elektra (@JakobWonisch)
  • Linked to the installation instruction of the webui in its README file. (@muskater) (@lawli3t) (Aydan Ghazani @4ydan)
  • Linked to the installation instruction of the webui in its README file and added references to Docker in the get-startde-guide. (@muskater) (@lawli3t) (Aydan Ghazani @4ydan)
  • Linked to the installation instruction of the webui in its README file and added references to Docker in the get-started-guide. (@muskater) (@lawli3t) (Aydan Ghazani @4ydan)
  • Added screenshots and a quick walk through in the Qt-GUI README. (@muskater) (@lawli3t) (Aydan Ghazani @4ydan)
  • Improve example for kdb-restore man page and fix typos (@JakobWonisch)
  • Improve example for kdb-restore man page and fix typos (@JakobWonisch)
  • Fix some typos in the "Getting Started" page (Ivaylo Ivanov)
  • Added some improvements to the core api documentation (@muskater)
  • Add screenshots with hints to CLion PR tutorial (@JakobWonisch)
  • Fix typo in elektra-backends man page (@JakobWonisch)
  • Expanded the webside guid for easier understanding and linked to cmake.org. (Philipp Nirnberger @Nirnberger)
  • Expanded the webside guide for easier understanding and linked to cmake.org. (Philipp Nirnberger @Nirnberger)
  • Fix small error in CLion tutorial: CMake options would create a directory named ~ in home directory (Maximilian Irlinger @atmaxinger)

Tests

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

Packaging

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

Build

CMake

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

Docker

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

Infrastructure

Jenkins

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

Website

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

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

Other

  • Make Elektra reuse reuse compliant (Ivaylo Ivanov)

Outlook

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

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

Furthermore, we are still working on following topics:

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

Statistics

We closed 90 issues for this release.

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

Thanks to all authors for making this release possible!

Join the Initiative!

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

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

Get the Release!

You can download the release from here
or GitHub

The hashsums are:

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

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

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

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

Stay tuned!

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

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

Permalink to this NEWS entry

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

Best regards,
Elektra Initiative

0.9.8 Release

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 standard installation of Elektra
    • updated code to work with current Java binding
  • KeySetReleasedException and KeyReleasedException have been replaced by the native IllegalStateException
  • Introduced abstraction ReadableKey to better reflect the limitations of meta data keys via a type hierarchy. Meta data keys are now returned as ReadableKeys:
    • Key extends ReadableKey
    • Key class is now final
    • Changed Key Key::nextMeta() to Optional<ReadableKey> Key::nextMeta(), no longer throwing NoSuchElementException for non-exceptional behavior
    • Changed Key Key::currentMeta() to ReadableKey Key::currentMeta()
    • Changed Optional<Key> Key::getMeta(String) to Optional<ReadableKey> Key::getMeta(String)
    • Meta data keys can no longer be manually released
    • Removed Key::incRef, Key::decRef and Key::getRef
    • ReadableKey/Key now implements Comparable<ReadableKey>
      • int Key::cmp(Key) has been renamed to int Key::compareTo(Key)
      • ReadableKey now implements equals and hashCode in line with the contract for int Key::compareTo(Key)
    • ReadableKey/Key no longer implements Iterable<String> for iterating over the parts of a key's name - use Iterator<String> ReadableKey::keyNameIterator () instead
    • Key now implements Iterable<Key> to iterate over a key's meta data ReadableKeys
    • Fixed API method typo: Renamed ReadableKey::isDirectBelow/Key::isDirectBelow to isDirectlyBelow
  • KeyNameIterator and KeySetIterator are now package private
  • KeySetAppendException has been renamed to KeySetException and now conveys general KeySet related exceptional states
  • KeySet now implements SortedSet<Key> (see Java API). Previously KeySet was only implementing Iterator<Key>. Now a native key set can be used via its KeySet representation wherever one of the following Java Collection Framework interfaces is supported:
    • Iterable
    • Collection
    • Set
    • SortedSet

(Michael Tucek)

GLib

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

Tools

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

KDB

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

Scripts

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

Documentation

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

Tests

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

Packaging

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

Build

CMake

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

Docker

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

Restyled

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

Infrastructure

Jenkins

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

Cirrus

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

GitHub Actions

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

Website

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

  • Update npm dependencies. (Mihael Pranjić)

Outlook

We are currently working on following topics:

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

Statistics

We closed 59 issues for this release.

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

Thanks to all authors for making this release possible!

Join the Initiative!

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

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

Get the Release!

You can download the release from here
or GitHub

The hashsums are:

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

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

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

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

Stay tuned!

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

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

Permalink to this NEWS entry

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

Best regards,
Elektra Initiative

0.9.7 Release

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

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ć)
  • Update all Restyled formatters to current versions. (Mihael Pranjić)

Packaging

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

Build

CMake

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

Docker

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

Infrastructure

Cirrus

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

GitHub Actions

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

Jenkins

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

Travis

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

Website

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

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

Outlook

We are currently working on following topics:

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

Statistics

We closed 39 issues for this release.

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

Thanks to all authors for making this release possible!

Join the Initiative!

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

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

Get the Release!

You can download the release from here
or GitHub

The hashsums are:

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

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

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

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

Stay tuned!

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

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

Permalink to this NEWS entry

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

Best regards,
Elektra Initiative

0.9.5 Release

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

We are proud to release Elektra 0.9.5.

What is Elektra?

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

You can also read the news on our website

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

Highlights

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

kdbOpen Contracts

The signature of kdbOpen has been changed from

KDB *  kdbOpen (Key * errorKey);

to

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

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

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

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

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

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

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

Plugins

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

Cache

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

internalnotification

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

Dbus & Dbusrecv

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

YAML Smith & Yan LR

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

Zeromqsend & Zeromqrecv

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

Libraries

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

Compatibility

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

Core

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

Io

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

Notification

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

Bindings

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

JNA

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

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

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

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

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

  • Renamed KeyException specializations: KeyInvalidNameException, KeyTypeConversionException, KeyTypeMismatchException

  • Migration from Maven to Gradle (Michael Tucek)

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

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

Outlook

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

Python & Lua

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

Tools

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

Examples

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

Documentation

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

Tests

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

Packaging

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

Build

CMake

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

Docker

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

Infrastructure

Cirrus

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

GitHub Actions

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

Jenkins

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

Website

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

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

Outlook

We are currently working on following topics:

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

Statistics

We closed 20 issues for this release.

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

Thanks to all authors for making this release possible!

Join the Initiative!

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

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

Get the Release!

You can download the release from here
or GitHub

The hashsums are:

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

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

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

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

Stay tuned!

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

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

Permalink to this NEWS entry

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

Best regards,
Elektra Initiative

0.9.4 Release

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

We are proud to release Elektra 0.9.4.

What is Elektra?

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

You can also read the news on our website

Highlights

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

Important Breaking Changes

  • The structure of key names has been changed. see below (Klemens Böswirth)

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

Important Changes to Key Names

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Mountpoint upgrade

The change to key names breaks existing mountpoint configurations.

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

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

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

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

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

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

Please report any problems.

You have been warned. Manually backup important data first.

For the migration you can use the following commands:

#! /usr/bin/env sh
kdb export system:/elektra/mountpoints ni > mountpoints.ini
sed -E 's~((^\[?|/mountpoint = )(user|system))((\\\\)?/)~\1:\4~g' mountpoints.ini > mountpoints_corrected.ini
kdb mv -r system:/elektra/mountpoints system:/elektra/mountpoints-backup
kdb import system:/elektra/mountpoints ni < mountpoints_corrected.ini

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

Debian and Fedora Packaging with CPack

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

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

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

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

Short Installation Guide

DEB packages
  1. First, you need to obtain the repository key:
sudo apt-key adv --keyserver keys.gnupg.net --recv-keys F26BBE02F3C315A19BF1F791A9A25CC1CC83E839
  1. Add deb https://debs.libelektra.org/<DISTRIBUTION> <DISTRIBUTION> main into /etc/apt/sources.list
    where <DISTRIBUTION> is the codename of your distributions e.g. focal, bionic or buster.
apt-get install libelektra5-all
RPM packages

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

To get all packaged plugins, bindings and tools install:

dnf install libelektra5-all

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

Version Bump

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

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

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

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

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

Plugins

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

jni

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

mINI

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

Quickdump

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

Simple INI

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

YAML CPP

Yan LR

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

Libraries

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

Compatibility

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

Core

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

Proposal

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

Bindings

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

Lua

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

JNA

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

C++

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

Ruby

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

Tools

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

Scripts

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

Documentation

Tests

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

Build

CMake

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

Docker

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

Infrastructure

Cirrus

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

GitHub Actions

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

Jenkins

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

Travis

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

Website

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

Outlook

We are currently working on following topics:

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

Statistics

We closed 21 issues for this release.

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

Thanks to all authors for making this release possible!

Join the Initiative!

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

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

Get the Release!

You can download the release from here
or GitHub

The hashsums are:

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

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

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

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

Stay tuned!

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

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

Permalink to this NEWS entry

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

Best regards,
Elektra Initiative

0.9.3 Release

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

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

What is Elektra?

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

You can also read the news on our website

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

TOML

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

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

A huge thanks to Jakob Fischer for this amazing work!

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

Plugins

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

xmltool

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

TOML

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

dump

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

Compatibility

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

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

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

Errors

  • Improved error messages. (Markus Raab)

Bindings

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

JNA

  • Made examples work again. (Markus Raab)

Scripts

  • Fix googletest framework path in debian configure script. (Mihael Pranjić)

  • The fish completion script does not fail any more, if you try to complete a simple
    command that expects a namespace. For example, completing

    kdb ls ‸

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

  • The formatting scripts using prettier now use npx, which is included in npm
    v5.2.0 or newer. This allows us to specify an exact version of prettier to use. (Klemens Böswirth)

  • The reformat-shell script now accepts the alias shfmt2, in case shfmt v3 is needed for another project. (Klemens Böswirth)

  • The config for restyled.io now specifies the image to use for each formatter. This clearly reflects the version used for
    formatting. (Klemens Böswirth)

  • Add a release script to automate the release process. (Robert Sowula)

Documentation

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

Tests

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

Build

CMake

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

Docker

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

Infrastructure

Cirrus

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

Jenkins

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

Travis

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

Website

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

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

Decisions

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

If you are interested in the discussions, please
subscribe.

Outlook

We are currently working on following topics:

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

Statistics

We closed 15 issues for this release.

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

Thanks to all authors for making this release possible!

Join the Initiative!

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

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

Get the Release!

You can download the release from here
or GitHub

The hashsums are:

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

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

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

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

Stay tuned!

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

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

Permalink to this NEWS entry

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

Best regards,
Elektra Initiative

0.9.2 Release

0.9.2
32dd4f6
Compare
Choose a tag to compare
  • guid: ea79f59e-f471-4658-a11b-1371802814c2
  • author: Mihael Pranjic
  • pubDate: Tue, 26 May 2020 19:33:30 +0200
  • shortDesc: KDE and GNOME Integration, elektrad in Go

We are proud to release Elektra 0.9.2.

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

What is Elektra?

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

You can also read the news on our website

Highlights

  • KDE integration
  • GNOME Integration
  • elektrad rewritten in Go

KDE Integration

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

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

GNOME Integration

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

elektrad rewritten in Go

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

Try out Elektra

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

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

Plugins

We removed the maintained status of the following plugins:

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

New maintainers are very much welcomed!

Augeas

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

CCode

Crypto

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

Directory Value

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

Fcrypt

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

KConfig

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

SWIG

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

SWIG/python

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

SWIG/python2

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

Tcl

YAMBi

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

YAML CPP

  • The plugin now always prints a newline at the end of the YAML output. (René Schwaiger)

  • The plugin does not interpret a key set such as

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

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

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

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

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

Yan LR

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

GOpts

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

Cache

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

Libraries

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

Compatibility

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

Opts

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

Bindings

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

python2

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

Rust

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

Tools

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

Scripts

  • The fish completion script now recognizes the new names of subcommands (e.g. meta-set instead of setmeta ) introduced with Elektra 0.9.1. (René Schwaiger)

  • The script reformat-cmake now reformats the code with cmake-format 0.6.3. (René Schwaiger)

  • The scripts

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

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

Documentation

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

Tests

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

Build

Compilation

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

    • augeas,
    • base64, and
    • blockresolver

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

Support

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

CMake

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

Docker

Infrastructure

Cirrus

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

Jenkins

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

Restyled

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

Travis

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

Issue Tracker

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

Website

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

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

Outlook

We are currently working on following topics:

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

Statistics

We closed 40 issues for this release.

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

Thanks to all authors for making this release possible!

Finished Thesis

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

Join the Initiative!

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

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

Get the Release!

You can download the release from here
or GitHub

The hashsums are:

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

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

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

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

Stay tuned!

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

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

Permalink to this NEWS entry

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

Best regards,
Elektra Initiative

0.9.1 Release

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

We are proud to release Elektra 0.9.1.

What is Elektra?

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

You can also read the news on our website

Highlights

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

Code Generation

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

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

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

Further Highlights

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

Plugins

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

General

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

Camel

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

plugins. (René Schwaiger)

GOpts

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

KConfig

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

Mmapstorage

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

Noresolver

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

Path

Spec

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

Specload

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

Tcl

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

Type

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

Yajl

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

YAwn

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

YAy PEG

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

Libraries

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

Compatibility

We introduced several incompatible changes:

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

We changed the following symbols:

  • ELEKTRA_PLUGIN_COMMIT
  • elektraKeyToString
  • elektraKeyToBoolean
  • elektraKeyToChar
  • elektraKeyToOctet
  • elektraKeyToShort
  • elektraKeyToUnsignedShort
  • elektraKeyToLong
  • elektraKeyToUnsignedLong
  • elektraKeyToLongLong
  • elektraKeyToUnsignedLongLong
  • elektraKeyToFloat
  • elektraKeyToDouble
  • elektraKeyToLongDouble
  • elektraBooleanToString
  • elektraCharToString
  • elektraOctetToString
  • elektraShortToString
  • elektraUnsignedShortToString
  • elektraLongToString
  • elektraUnsignedLongToString
  • elektraLongLongToString
  • elektraUnsignedLongLongToString
  • elektraFloatToString
  • elektraDoubleToString
  • elektraLongDoubleToString
  • kdb_octet_t
  • kdb_boolean_t
  • kdb_short_t
  • kdb_long_t
  • kdb_long_long_t
  • kdb_unsigned_short_t
  • kdb_unsigned_long_t
  • kdb_unsigned_long_long_t
  • kdb_char_t
  • kdb_float_t
  • kdb_double_t
  • kdb_long_double_t

Core

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

Opts

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

Proposal

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

Bindings

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

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

Java

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

Rust

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

Tools

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

Scripts

  • We structured the scripts. (Markus Raab)

  • Removed the scripts

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

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

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

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

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

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

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

  • We renamed

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

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

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

Documentation

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

Tests

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

Build

CMake

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

Compilation

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

Docker

Vagrant

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

Other

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

Infrastructure

Cirrus

  • The 🔗 Check build job now merges PRs before checking links. (Klemens Böswirth)

  • We enabled logging in the build job 🍎 Clang. This update makes sure that Elektra’s logging code compiles without warnings on macOS. (René Schwaiger)

  • All macOS build jobs now use Xcode 11.1 instead of Xcode 10.1. (René Schwaiger)

  • We removed all non-POSIX shell code from the Cirrus configuration file. (René Schwaiger)

  • The macOS build jobs now use Ruby 2.6. (René Schwaiger)

  • We do not call ninja directly anymore. Instead we use cmake --build. This has the advantage that we do not have to care about the Generator used by CMake. (René Schwaiger)

  • We added the build job 😈 ASAN, which builds and executes Elektra on FreeBSD with enabled AddressSanitizer. (René Schwaiger)

  • We now store common commands in one place at the top of the configuration file. This makes it easier to selectively disable certain build jobs. (René Schwaiger)

  • The new job 📚 Check checks

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

Jenkins

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

Restyled

Travis

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

Website

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

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

Outlook

We are currently working on following topics:

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

Statistics

We closed 75 issues for this release.

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

Thanks to all authors for making this release possible!

Finished Thesis

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

Join the Initiative!

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

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

Get the Release!

You can download the release from here
or GitHub

The hashsums are:

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

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

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

Stay tuned!

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

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

Permalink to this NEWS entry

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

Best regards,
Elektra Initiative