Tue, 26 May 2020 00:00:00 GMT

0.9.2 Release

guid: ea79f59e-f471-4658-a11b-1371802814c2

author: Mihael Pranjić

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

The Markdown Shell Recorder test of the plugin does not require Bash any more. (René Schwaiger)

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 metakey 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

The Markdown Shell Recorder test of the plugin now correctly requires the xmltool plugin. (René Schwaiger)

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 metakey 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

reformat-c, and

reformat-java

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

We updated some of the software in the Dockerfile for Debian sid. (René Schwaiger)

Building the documentation Dockerfile for Debian Stretch works again. (René Schwaiger)

Use Python 3, SWIG 4.0 and Ruby 2.5 in the Dockerfile for Debian sid. (Mihael Pranjić)

Disable python binding on debian-unstable-full-clang due to upstream issue. (Mihael Pranjić)

Use current ruby-dev on Debian sid image as Ruby 2.5 has been dropped. (Mihael Pranjić)

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 documentation can be found here or on GitHub.

Stay tuned!

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

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