We are proud to release Elektra 0.8.24.
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.
For a small demo see here:
You can also read the news on our website
The new release of Elektra Web features many UX improvements from the usability test!
Try it out now on: http://webdemo.libelektra.org/
search completely reworked - it does not act as a filter on already opened keys anymore, and instead searches the whole key database - feedback from the search was also greatly improved (pulsating while searching, glowing blue when done)
added "abort" buttons to dialogs to revert actions
added "create array" button to easily create arrays
removed confirmation dialog before deletion (undo can be used instead)
created a docker image: elektra/web
implemented auto-deployment of webdemo.libelektra.org
small fixes:
Thanks to Daniel Bugl.
Elektra's notification feature which allows applications to keep persistent configuration settings in sync with the key database and other applications was greatly improved with this release:
More details can be found in this news. Check out the updated notification tutorial and notification examples (polling, async and reload.
At Akademy 2018 we had a successful Config Workshop.
We generally agreed that misconfiguration is important and the situation in FLOSS needs to improve. We discussed how Elektra can be used in KDE and came up with the idea that KConfig could be moved to a Elektra plugin. Then KConfig could be patched to use Elektra instead. This would lead to the situation that KDE users would have the same user experience with the advantages of Elektra, like:
For more information see the Slides
Elektra supports specifying the semantics of keys via metakeys in the spec
namespace. An example is the metakey check/range
which can be used to specify
that a key only holds numbers in a given range. Another metakey is check/enum
which only allows specific keywords to be the content of a key. Up to now these
semantics are only being checked at runtime. Therefore a type system was developed to
be able to check configuration specifications statically. As an example, it
would detect when one accidentally adds both a range and an enum check if their
possible contents are not compatible with each other.
The type system is available as a plugin that gets mounted along with a
configuration specification into the spec namespace. Furthermore we include a
set of type definitions for commonly used metakeys such as check/range
,
check/enum
, check/validation
, fallback
or override
.
For more details see the typechecker readme
Thanks to Armin Wurzinger.
Next to the Puppet Resource Type we now also prepared a Chef Cookbook which allows us to use Elektra from within Chef.
For example, to set mount a configuration file, you can use:
kdbmount 'system/hosts' do
file '/etc/hosts'
plugins 'hosts'
action :create
end
And to add an hosts entry, you can use:
kdbset '/hosts/ipv4/showthatitworks' do
namespace 'system'
value '127.0.0.33'
action :create
end
Note that currently
kdb
is invoked and Elektra needs to be installed for managed systems.
Thanks to Michael Zronek and Vanessa Kos.
We added a new template for C++ based plugins. To create a plugin based on this template, please use the command
scripts/copy-template -p pluginname
, where pluginname
specifies the name of your new plugin. (René Schwaiger)
crypto
plugin now uses Elektra's libinvoke
and the base64
plugin in order to encode and decode Base64 strings. This improvement reduces code duplication between the two plugins. (Peter Nirschl)fcrypt
plugin will consider the environment variable TMPDIR
in order to detect its temporary directory. See [#1973] (Peter Nirschl)fstab
plugin now passes tests on musl builds. (Lukas Winkler)BUILD_STATIC
or BUILD_FULL
build variants, since otherwise the plugin breaks the kdb
tool.
(René Schwaiger)testscr_check_kdb_internal_check
) for the plugin, since it always fails. (René Schwaiger)list
plugin now allows us to pass
common configuration for all plugins by using keys below the "config/" setting.
The updated plugin documentation contains more information and an example. (Thomas Wahringer)list
plugin which is responsible
for global mounting had a bug which prevented globally mounted plugins from
being configurable. (Thomas Wahringer)ccode
instead of the “provider” code
. (René Schwaiger)check/range
,
check/enum
and default
are supported. (Armin Wurzinger)tcl
plugin does not fail anymore, if its configuration file does not exist and you try to
retrieve the plugin contract. (René Schwaiger)printf
statements.
(René Schwaiger)The plugin does not save empty intermediate keys anymore. The example below shows the old and the new behavior of the plugin:
# Mount plugin
kdb mount config.yaml /tests/yamlcpp yamlcpp
# Store single key-value pair
kdb set /tests/yamlcpp/level1/level2/level3 value
# Old behavior
kdb ls /tests/yamlcpp
#> user/tests/yamlcpp/level1
#> user/tests/yamlcpp/level1/level2
#> user/tests/yamlcpp/level1/level2/level3
# New behavior
kdb ls /tests/yamlcpp
#> user/tests/yamlcpp/level1/level2/level3
. (René Schwaiger)
YAML CPP now requires at least yaml-cpp 0.6
, since the current
MSR test for the plugin triggers two bugs:
in earlier versions of the yaml-cpp library. (René Schwaiger)
The plugin does now support arrays containing empty fields. (René Schwaiger)
YAML CPP now also adds array
metadata for arrays containing arrays. (René Schwaiger)
The plugin now also supports empty arrays:
kdb mount test.yaml user/tests/yamlcpp yamlcpp
kdb setmeta user/tests/yamlcpp/array array ''
kdb export user/tests/yamlcpp/array yamlcpp
#> []
.
YAML CPP now handles null values containing metadata properly:
kdb mount test.yaml user/tests/yamlcpp yamlcpp
kdb set user/tests/yamlcpp/null
kdb setmeta user/tests/yamlcpp/null comment 'Null Key'
kdb export user/tests/yamlcpp/null yamlcpp
#> !<!elektra/meta>
#> - ~
#> - comment: Null Key
.
KeySet
data structure to a textual
representation in the YAML serialization format. The plugin is currently in a very early stage of development. Please be advised,
that it is quite likely that the plugin will produce incorrect or even invalid YAML data, especially if your KeySet
contains special
characters.KeySet
data structure. If you want to write data in the YAML
format please take a look at the YAML Smith plugin. (René Schwaiger)ZMQ_PUB
and ZMQ_SUB
sockets to send and receive notifications.
The plugins can be used instead or along with the
"dbus" and
"dbusrecv" transport plugins.
Check out the
plugin documentation for more
information. (Thomas Wahringer)The logging plugins "syslog", "journald" and "logchange" now have a new option called "get" which can be enabled to log which configuration settings are loaded by applications. The new option can be used for logging application behavior when using notifications. (Thomas Wahringer)
Do not exclude simpleini
silently on non-glibc systems but output a message
like for other plugins (Markus Raab)
We updated the infos/status
clause of the following plugins:
boolean
,constants
,csvstorage
,hexnumber
,internalnotification
,ruby
,simpleini
,uname
, andxerces
. (René Schwaiger)
strdup
with elektraStrDup
(for C99 compatibility). (Markus Raab)key.delBaseName()
. (René Schwaiger)elektraArrayGetNextKey
now uses NULL
instead of the empty string as init value for the returned key. (René Schwaiger)pluginprocess
that is used to
execute plugins run inside own processes has been improved. This is useful as some plugins like
Haskell-based plugins or python
can only be started once
inside a single process, while libelektra may call a plugin several times. The library now uses an
improved communication protocol that separates between pluginprocess-related data and keysets
passed to plugins. This avoids any possible name clashes between keys used by a plugin and keys
used by pluginprocess.
The documentation of the plugin has been improved as well, some mistakes were corrected and it
should be more clear how to store plugin data besides pluginprocess's data structure.
Tests have been added to the library to ensure its correct functionality. (Armin Wurzinger)int
, unsigned int
,
long
, unsigned long
, long long
, unsinged long long
, float
and double
.
It also supports all of Elektra's kdb_*_t
types defined in kdbtypes.h
.
Also contexts for callbacks were added and
elektraNotificationRegisterCallbackSameOrBelow()
allows for notifications
for the registered key or below. (Thomas Wahringer)kdb find
lists keys of the database matching a certain regular expression. (Markus Raab)5.11
. (René Schwaiger)check_formatting.sh
now also checks the formatting of CMake
code if you installed sponge
and cmake-format
. (René Schwaiger)check_formatting.sh
now no longer writes to stdout if clang-format5.0
can not be found. (Lukas Winkler)check_bashisms.sh
should now work correctly again, if the
system uses the GNU version find
. (René Schwaiger)reformat-cmake
now checks if cmake-format
works before it reformats CMake files. Thank you to Klemens Böswirth for the detailed description of the problem. (René Schwaiger)scripts/build/run_icheck
now no longer leaves the base directory of the project
when checking if the ABI changed. (Lukas Winkler)info/
meta attributes of the
file plugin. (René Schwaiger)copy-template
is now location independent. It will always create a
new plugin in src/plugins
. (René Schwaiger)-p
to create a new plugin based on cpptemplate
.kdb change-resolver-symlink
and
kdb change-storage-symlink
referenced the wrong command.
(Lukas Winkler, René Schwaiger)kdb
and kdb set
now mentions the --
argument that stops processing of command line switches. This is useful
for setting negative values among other things. (Klemens Böswirth)/tests
(see issue #1887). (René Schwaiger)kdb set
commands to ensure we only add tests that store data below /tests
. (René Schwaiger)stdout
if you add the check #>
. (René Schwaiger)kdb ls
. (René Schwaiger)-
in checks as option character any more. (René Schwaiger)add_plugin
helper now respects ENABLE_KDB_TESTING
when adding
Markdown Shell Recorder tests. (Lukas Winkler)kdb find
now removes the configuration file
at the end of the test. (René Schwaiger)bash
compatible shell anymore. (René Schwaiger)SHARED_ONLY
no longer get tested in the script check_kdb_internal_check.sh
if executed with kdb-full or kdb-static. (Armin Wurzinger)compare_regex_to_line_files
which allows to compare a file made of
regex patterns to be compared with a text file line by line.
(Lukas Winkler)fcrypt
and crypto
unit tests if the gpg
binary is not available. (Peter Nirschl)gpg
tests as the gpg-agents
that were
spawned did not get cleaned up afterwards. (Lukas Winkler)testkdb_allplugins
) for the semlock
plugin, since the
test reported memory leaks on the latest version of Debian Unstable. (René Schwaiger)compare_keyset
now supports the comparison of two empty key sets. (René Schwaiger)exit_if_fail
now really exits the test progamm if the test fails. (René Schwaiger)compare_keyset
that checks if two key sets are equal. (René Schwaiger)As written in the previous release notes:
Another important change is:
GTEST_ROOT
to the path of you local copy of the
Google Test framework. (René Schwaiger)GTEST_ROOT
now respects the environment variable
GTEST_ROOT
if it is set. (Lukas Winkler)The build system no longer installs Haskell dependencies from hackage by itself, instead this has to be done beforehand like it is the case with all other dependencies. The main reason is that the build servers shouldn't compile the dependencies over and over again, only if something changes. (Armin Wurzinger)
Plugins can be specified to be only built for BUILD_SHARED
builds, but to be excluded
from any BUILD_FULL
or BUILD_STATIC
builds using the new optional argument ONLY_SHARED
for our CMake macro add_plugin
. This way BUILD_SHARED
can be combined with the other
options without excluding such plugins. The CMake messages about plugin inclusion have
been updated to indicate this behavior. This behavior has been applied for the Haskell
plugins- and bindings and JNI plugin as they currently don't support full or static builds.
(Armin Wurzinger)
The build system does not install Google Test anymore if you install Elektra. (René Schwaiger)
We disabled the test testlib_notification
on ASAN enabled builds, since Clang reports that the test leaks memory. (René Schwaiger)
Disable Markdown Shell Recorder test validation.md
for ASAN builds.
It leaks memory and thus fails the test during spec mount. (Lukas Winkler)
Haskell plugins and bindings are now correctly excluded when using BUILD_FULL
or BUILD_STATIC
as this is currently unsupported. Another issue when building Haskell plugins with a cached sandbox
is fixed as well. (Armin Wurzinger)
Fix compilation with BUILD_TESTING=OFF
when spec
or list
plugins are not selected.
Set coverage prefix to PROJECT_SOURCE_DIR
, resulting in easier readable
coverage reports. (Lukas Winkler)
The functions add_plugintest
and add_plugin
now also support adding a C++ test instead of a C test. (René Schwaiger)
The function add_plugintest
now also supports setting environment variables for C/C++ based tests. (René Schwaiger)
The build system now automatically detects Homebrew’s OpenSSL version on macOS. (René Schwaiger)
We improved the automatic detection of Libgcrypt and OpenSSL. (René Schwaiger)
Resolved an issue where CMake did not properly set test feature macros to detect and use libc functionality. (Lukas Winkler)
Improve the detection of ftw.h
, if the current build use the compiler switch -Werror
. (René Schwaiger)
We now ignore warnings about
caused by code generated via SWIG in the Ruby binding and plugin. (René Schwaiger)
clang-5.0
is now used for clang tests by the build system (Lukas Winkler)withDockerEnv
Jenkinsfile helper now no longer provides stages automatically. (Lukas Winkler)STATIC
and FULL
linked builds. (Lukas Winkler)clang
tests have been ported to the new build system (Lukas Winkler et al)icheck
build server job has been ported to our new build system. (Lukas Winkler)elektra-gcc-configure-debian-optimizations
to new build system. (Lukas Winkler)elektra-gcc-configure-mingw-w64
to new build system. (Lukas Winkler)debian-multiconfig-gcc-stable
to new build system. (Lukas Winkler)elektra-ini-mergerequests
to new build system. (Lukas Winkler)elektra-gcc-configure-debian-nokdbtest
to new build system. (Lukas Winkler)elektra-gcc-configure-xdg
to new build system. (Lukas Winkler)elektra-gcc-i386
to new build system. (Lukas Winkler)elektra-gcc-configure-debian-musl
to new build system. (Lukas Winkler)elektra-gcc-configure-debian-nokdbtest
test. Instead we are now
removing write permissions of Elektra's paths to detect if we write to the
filesystem even though tests are not tagged as such. (Lukas Winkler)elektra-gcc-configure-debian-withspace
test. We now test for
compatibility of spaced build paths during normal tests. (Lukas Winkler)PLUGINS=NODEP
config. They did not provide any additional coverage.
Instead we added a new test checking if PLUGINS=NODEP
builds in an minimal
Docker image. (Lukas Winkler)master
fails (Lukas Winkler)Travis now uses the latest version of GCC and Clang to translate Elektra on Linux. (René Schwaiger)
Our Travis build job now
cmake-format
. (René Schwaiger)Some cache issues on the Travis build job for cached Haskell sandboxes have been resolved. (Armin Wurzinger)
Travis caches downloaded Homebrew packages to improve the reliability of macOS build jobs. (René Schwaiger)
Travis is now using Xcode 9.4.1 on macOS 10.13 for most macOS build jobs. (Mihael Pranjić)
We added a unique name to each build job, so you can see quickly which configuration caused problems. (René Schwaiger)
We now specify custom binding, plugin and tool configuration for jobs via the environment variables:
BINDINGS
,PLUGINS
, andTOOLS
. We also added environment variables for the build configuration options BUILD_FULL
, COMMON_FLAGS
, ENABLE_ASAN
and the command
used to test the build (TEST_COMMAND
). (René Schwaiger)
The ASAN build jobs 🍏 Clang ASAN
and 🐧 GCC ASAN
now only build the kdb
tool and the cpp
binding. This update ensures, that we
do not hit the job timeout for public repositories that often.
(René Schwaiger)
We now use the latest version of Ruby (2.5.1
) to build and test the Ruby binding/plugin. (René Schwaiger)
As always, the ABI and API of kdb.h is fully compatible, i.e. programs compiled against an older 0.8 version of Elektra will continue to work (ABI) and you will be able to recompile programs without errors (API).
Following changes were made:
delBaseName()
.
This does not affect ABI compatibility, also C++ programs compiled against 0.8.24 and using delBaseName()
will work with Elektra 0.8.23 or older.kdbtypes.h
now comes with support for C99 types.kdbnotificationinternal.h
, kdbioplugin.h
. (Thomas Wahringer)kdbio
.
For example, instead of including elektra/kdbio_ev.h
users of the binding now include elektra/kdbio/ev.h
. (Thomas Wahringer)The new plugins are:
The new tool is: kdb-find
The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date.
We are currently working on following topics:
ksLookup (...)
is now in preparation.
The preparation includes a new KeySet flag KS_FLAG_NAME_CHANGE
, this flag will be used by the hybrid search.
The hybrid search combines the best properties of the binary search and the OPMPHM.
The hybrid search uses a modified branch predictor to predicts KeySet changes and decides if binary search or OPMPHM would be faster. (Kurt Micheli)Following persons made in total 1734 commits:
Commits | Author |
---|---|
1 | Mihael Pranjic mpranj@limun.org |
2 | Thomas Waser thomas.waser@libelektra.org |
7 | Michael Zronek michael.zronek@gmail.com |
12 | Kurt Micheli e1026558@student.tuwien.ac.at |
17 | Peter Nirschl peter.nirschl@gmail.com |
21 | Klemens Böswirth k.boeswirth+git@gmail.com |
197 | Markus Raab elektra@markus-raab.org |
102 | Thomas Wahringer thomas.wahringer@libelektra.org |
117 | Daniel Bugl me@omnidan.net |
265 | Lukas Winkler derwinlu+git@gmail.com |
249 | Armin Wurzinger e1528532@student.tuwien.ac.at |
744 | René Schwaiger sanssecours@me.com |
In total there were 792 files changed with 27677 insertions(+) and 39176 deletions(-).
You can download the release from here or GitHub
The hashsums are:
The release tarball is also available signed by Markus Raab using GnuPG from here or on GitHub
Already built API documentation can be found online or GitHub.
Subscribe to the RSS feed to always get the release notifications.
For any questions and comments, please contact the issue tracker on GitHub or Markus Raab by email using elektra@markus-raab.org.
For more information, see https://libelektra.org
Best regards, Elektra Initiative