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.
This is by far the largest release in Elektra's history. In 2813 commits, 19 authors changed 1714 files with 92462 insertions(+) and 21532 deletions(-). The highlights are:
Unfortunately this release was delayed. The reason for the delay is that our community server (build server, web site,...) was compromised and we needed to reinstall everything from scratch.
We took advantage of the situation, and reinstalled everything properly managed by puppet-libelektra. With puppet-libelektra, you can directly set keys, specifications (validations), and even mount new configuration files from within Puppet.
Our community server is now completely managed by libelektra.
Thanks to Bernhard Denner, for rescuing us from the difficult situation, especially for the sprint shortly before the release.
As already already announced in December 2016 we completely reimplemented our website. Now all our websites are available via https. This release is the first one that includes the source code of the website and its snippet sharing functionality.
The backend for this snippet sharing website uses Elektra itself: both for its configuration and for the configuration snippets.
Thanks again to Marvin Mall for the awesome website.
The Ruby binding, created by Bernhard Denner, was greatly improved and now includes libtools bindings. It is the first binding that goes beyond Elektra's main API. Bernhard Denner also added many examples that demonstrate how you can take advantage of the Ruby bindings.
Armin Wurzinger created a new binding for the functional language Haskell. He also added support for Haskell plugins. Due to generic CMake and C Code, plugins can be written exclusively in Haskell, without any glue code. Several Haskell examples already exist. The Haskell support is currently experimental.
René Schwaiger added completion support for Fish
in this release. We also extended our support for other shells: The new
tool kdb complete
suggests how to complete an Elektra path. It considers
mountpoints and also takes bookmarks into account. Thanks to Armin
Wurzinger for creating this useful utility. Our Zsh and fish completions
already take advantage of kdb complete
. Thanks to Sebastian Bachmann
for taking the time to update the zsh
completions.
See plugin overview to get an overview of the ever-growing number of plugins.
The yamlcpp plugin and camel plugin add first support for YAML.
The mini plugin is yet another minimal INI plugin.
Thanks to René Schwaiger.
The date plugin supports validation of dates according to three standards:
RFC2822
ISO8601
POSIX
The multifile plugin
allows us to integrate many configuration files via globbing with
a single mount command. It supports .d
configuration directories
as often used today.
The file plugin interprets the content of a file as configuration value.
The ipaddr plugin
adds support for IP address validation on systems that do not
support getaddrinfo
.
Thanks to Thomas Waser for creating these useful plugins.
The xerces plugin supplants the xmltool plugin and allows us to use XML files not following a specific schemata. Attributes are mapped to Elektra's metadata, multiple keys with the same names are mapped to arrays.
Thanks to Armin Wurzinger.
The documentation was greatly improved within this release.
We added even more functionality, which could not make it to the highlights:
kdb rmmeta
, thanks to Bernhard Dennergpg/key
was renamed to encrypt/key
sign/key
fcrypt/textmode
to 0
)fcrypt/tmpdir
allows you to specify the output directory of gpg
restore
.kdb ls
(-mM
), thanks to Armin Wurzinger.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).
We added explicit
to some C++ constructors in libtools and internally moved
some typedefs. ModulesPluginDatabase now has protected members (instead
of private). This might break code in special cases, but should not affect binary
compatibility. As always we tested for binary compatibility.
This time we had to revert some changes to keep libelektra-tools
ABI compatible.
Furthermore:
kdbglobal.h
, kdbinvoke.h
These notes are of interest for people maintaining packages of Elektra:
RPATH
, remove old policies, thanks to René SchwaigerBUILD_DOCSET
to build DocSet, thanks to René SchwaigerENABLE_OPTIMIZATIONS
for OPMPHM
preparation work,
thanks to Kurt Micheli
For this release, please keep ENABLE_OPTIMIZATIONS
turned off.
Currently the flag increases memory usage, without being faster.TARGET_TOOL_DATA_FOLDER
for installation of tool dataThe following files are new:
libelektra-utility.so
,libelektra4j-0.8.20.pom.xml
,
libelektra-invoke
(needed by plugins: curlget, gitresolver, dini, blockresolver, multifile)libelektra-camel.so
, libelektra-date.so
,
libelektra-file.so
, libelektra-ipaddr.so
, libelektra-mini.so
,
libelektra-multifile.so
, libelektra-range.so
, libelektra-xerces.so
,
libelektra-yamlcpp.so
backup
, mount-list-all-files
, mountpoint-info
, restore
,
stash
, update-snippet-repository
change-resolver-symlink
, change-storage-symlink
,
check-env-dep
, check_bashisms
, check_doc
, check_meta
,
testmod_camel
, testmod_crypto_openssl
, testmod_date
,
testmod_file
, testmod_ipaddr
, testmod_jni
, testmod_mini
,
testmod_range
, testmod_simpleini
, testmod_xerces
, testmod_yamlcpp
,
testtool_plugindatabase
, test_utility
The following files were removed: testmod_curlget
, testmod_dpkg
,
testmod_profile
, testmod_shell
, testmod_spec
, test_opmphm_vheap
,
test_opmphm_vstack
The following files were renamed:
libelektra-1.jar
→ libelektra4j-0.8.19.jar
In the Debian branch of the git repo, we now build upon the work of Pino Toscano. The branch allows building Debian packages of the release for Debian Stretch and Jessie.
Thanks to Pino Toscano for the high-quality packages.
These notes are of interest for people developing Elektra:
ELEKTRA_NOT_NULL
is an assertion against null pointersELEKTRA_MALLOC_ERROR
sets an error when allocation failedELEKTRA_STRINGIFY
to quote a macro valueELEKTRA_PLUGIN_STATUS_ERROR
, ELEKTRA_PLUGIN_STATUS_SUCCESS
,
ELEKTRA_PLUGIN_STATUS_NO_UPDATE
for return values of plugins.ELEKTRA_STRINGIFY
used throughout, thanks to René Schwaiger(void)
instead of ()
(added -Wstrict-prototypes
)generateKeySet
to randomly generate large key setsoclint
ELEKTRA_PLUGIN_EXPORT
accepts macro as argumentFALLTHROUGH
print_result
to unify test output, thanks to René SchwaigervalidateKey
as preparation for type pluginVarious other changes happened in the code repository:
kdb
tools to print errors on crashes,
use $EDITOR
if sensible-editor
and editor
is not found.
René Schwaiger fixed preposition and format of the messages.ronn
now always uses UTF-8 as encoded and is no longer required
as essential dependency to get man pages, thanks to René SchwaigerIn this release we had a focus on quality improvements:
Many problems were resolved with the following fixes:
kdb file
: never print errors, thanks to René Schwaigerkdb mount-openicc
It protects against message floods in large configuration files,
thanks to Kai-Uwe Behrmann for reportingDESKTOP_SESSION
is missingkdb
: fix memleak when listing pluginskdb mv
: fail without keys also in recurse modeWe are currently working on following topics:
You can download the release from here or GitHub
The hashsums are:
The release tarball is also available signed by me using gpg from here or 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 me by email using elektra@markus-raab.org.
For more information, see https://libelektra.org
Best regards, Markus