0.9.9 Release
- guid: 3177C958-9473-41BA-9918-A56A18CF20E8
- author: Mihael Pranjić
- pubDate: Thu, 10 Mar 2022 07:40:35 +0100
- shortDesc: Bug Fixes, Java Plugins, Elektra 1.0 Decisions
We are proud to release Elektra 0.9.9.
What is Elektra?
Elektra serves as a universal and secure framework to access
configuration settings in a global, hierarchical key database.
For more information, visit https://libelektra.org.
You can also read the news on our website.
You can try out the latest Elektra release using our docker image elektra/elektra.
This is the quickest way to get started with Elektra without compiling and other obstacles, simply run:
docker pull elektra/elektra
docker run -it elektra/elektra
Highlights
- Bug fixing in FLOSS course
- Java plugins
- 1.0 decisions
Bug Fixing in FLOSS Course
As you will read in this release notes, a massive amount of bugs were fixed within this release.
Many of them were resolved from students participating in a
university course about FLOSS
This demonstrates that homework of students can be very useful and in public service.
In the upcoming term there will be a course about
configuration management
in which Elektra will also be used and improved upon.
Java Plugins
The version of the process
plugin, makes it much easier to implement plugins in Java.
You can now call an implementation org.libelektra.Plugin
via process
and the org.libelektra.process.PluginProcess
class.
To mount Java plugins the new helper script kdb mount-java
can be used.
For more information take a look at the updated tutorial
and the new man page for kdb mount-java
.
1.0 Decisions
With this release we greatly updated our decisions for the 1.0 release.
This brings us one big step closer to 1.0.
Plugins
The following section lists news about the plugins we updated in this release.
filecheck
- Removed unused variable that threw an error in filecheck.c. (Vaibhav Ganesh @flackojr)
mmapstorage
- Removed unused variable that threw an error in mmapstorage.c. (Vaibhav Ganesh @flackojr)
csvstorage
- Add
array
metakey to the parentKey of imported Keys (@muskater) (@4ydan) (@lawli3t)
specload
- Change and move
keyCompareMeta (const Key * k1, const Key * k2)
from src/libs/elektra/keytest.c
to src/plugins/specload/specload.c
and integrate functionality of keyCompare (const Key _ key1, const Key _ key2)
into isChangeAllowed (Key * oldKey, Key * newKey)
, because that is the only place where it was used. (@flo91)
uname
- Minor improvement of source code readability in uname.c (@lawli3t)
quickdump
- Fixed an issue with type-limits on ARM32 (see issue #4217). (Klemens Böswirth @kodebach)
dump
- The exported functions
serialize
and unserialize
have been renamed to serialize
and unserialize
. (Klemens Böswirth @kodebach)
- New exported functions
int fserialize(KeySet * ks, FILE * file, Key * errorKey)
and int funserialize(KeySet * ks, FILE * file, Key * errorKey)
have been added.
These are wrappers around serialize
and unserialize
that allow calling from C with a standard FILE *
. (Klemens Böswirth @kodebach)
process
- The plugin was completely rewritten. The new version is incompatible with the old version.
The new plugin that uses a simple protocol to allow an external application to act as a plugin.
This can for example be used to write plugins in Java without going through JNI. (Klemens Böswirth @kodebach)
Libraries
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
Compatibility
- Remove the deprecated flags
KEY_NAME
and KEY_COMMENT
(closes issue #3152) (Florian Lindner @flo91)
Core
KeySet
now also has a reference counter like Key
. The new functions ksIncRef
and ksDecRef
behave like their counterparts keyIncRef
and keyDecRef
.
ksDel
also behaves like keyDel
in regard to reference counting, i.e. it does nothing unless the reference count is 0.
The reference counting is very useful for bindings (especially with automatic garbage collection). (Klemens Böswirth)
- Clarified that our reference counting mechanism is more related to a shared lock than to the concept of shared ownership. (Klemens Böswirth)
- Both the reference count for
Key
and for KeySet
now use uint16_t
to reduce memory usage. Key
previously used size_t
. (Klemens Böswirth)
- Reorder
Key
and KeySet
struct members to aviod padding and make space for a new uint16_t
member, reserved for future use. (Mihael Pranjić @mpranj)
- Improve
keyReplacePrefix
by using new keyCopy
function instead of manually copying the name of the Key
(@lawli3t)
- Added else error to core for elektraGetCheckUpdateNeeded (Aydan Ghazani @4ydan)
- Include NULL terminators in hashing to avoid collisions (@lawli3t)
- Fix check for valid namespace in keyname creation (@JakobWonisch)
- Fix
keyCopyMeta
not deleting non existant keys in destination (see #3981) (@JakobWonisch)
- The
ELEKTRA_ERROR_*_NAME
and ELEKTRA_WARNING_*_NAME
constants have been removed from the public API. Use ELEKTRA_ERROR_*
and ELEKTRA_WARNING_*
instead. (Klemens Böswirth @kodebach)
- Fixed a bug that prevented the creation of cascading keys whose name contains a colon (
:
). (Klemens Böswirth @kodebach)
Bindings
Bindings allow you to utilize Elektra using various programming languages. This section keeps
you up-to-date with the multi-language support provided by Elektra.
Java binding
- Integrated the
HelloElektra
example as Gradle subproject to allow it to directly depend on the current binding (Michael Tucek)
- Extend
HelloElektra
example with cutpoint and value setting example (@JakobWonisch)
- Updated Gradle to 7.4. (Mihael Pranjić @mpranj)
- Added integration with the new
process
plugin. (Klemens Böswirth @kodebach)
- Integrated the
HelloElektra
example as gradle subproject to allow it to directly depend on the current binding (Michael Tucek)
- Add
LinkChecker
Java Plugin. (@aaronabebe)
FUSE Binding
- Added check for existence of accessed path before opening new file descriptor (@lawli3t)
Python Binding
- Added examples for append, extend and remove keysets in python. (@4ydan)
- Implement
kdb validate <key>
, collect warnings and errors while kdb.get() and kdb.set(), see #3674 (@flo91), (@JakobWonisch)
- Remove names from kdb mount (@JakobWonisch)
- Add
kdb mount-java
helper script for mounting Java plugins (Klemens Böswirth @kodebach)
Scripts
- Updated
reformat-c
script to use clang-format version 13. (Mihael Pranjić @mpranj)
- Fix bug where the PATH environment variable would get overwritten in some of the Docker images. Reduce image size (Ivaylo Ivanov)
- Allow JSON to be also written as json. (@muskater)
Documentation
- Integrate missing pages to website (Ivaylo Ivanov)
- Improved compilation documentation (Ivaylo Ivanov)
- Fix Links in README.md and add small clarifications. (Markus Raab)
- Remove previous authors. (Markus Raab)
- Add pre/postconditions and invariants to module keytest (@lawli3t)
- Updated the news template. (Mihael Pranjić @mpranj)
- Update and improve tutorial and in-code comments for high-level API (Tobias Schubert @qwepoizt)
- Improve documentation of opts library (Tobias Schubert @qwepoizt)
- Update tutorial "High-level API (with code-generation)" to reflect change of
loadConfiguration()
's signature in release 0.9.5 (Tobias Schubert @qwepoizt)
- Add pre/postconditions and invariants to module keyvalue (@lawli3t)
- Update and improve inline documentation of
kdb gen
. (Tobias Schubert @qwepoizt)
- Fix broken links. (Robert Sowula)
- Emphasize that
type
is required when the HL API is used. (Tobias Schubert @qwepoizt)
- Add debugging tutorial. (Tobias Schubert @qwepoizt)
- Improve wording and formatting of DESIGN.md (@lawli3t)
- Correct various typing-, spelling- and grammar-errors in the .md-files in the directory doc and its subdirectories. (Florian Lindner @flo91)
- Make version description in key names man page consistent (@JakobWonisch)
- Fix typo in elektra-backends man page (@JakobWonisch)
- Fix readability in bootstrapping man page (JakobWonisch)
- Explained in the docker test tutorial how to run the container with podman instead of docker. (@muskater)
- Add a new example on how to use keyCopy. (@muskater)
- Fix small error in the "Get Started" guide: the build and test command used a wrong directory and would not work if they were copy and pasted. (@muskater)
- Added verification to the "Arrays" tutorial (Ivaylo Ivanov)
- Remove deprecated
type=int
from .ini
files (Ivaylo Ivanov)
- Added verification to the "Validation" tutorial (Ivaylo Ivanov)
- Fix some typos in the "Getting Started" page (Ivaylo Ivanov)
- Added debian buster tutorial to python bindings tutorial (@4ydan)
- Made the debian tutorial a bit more precise and removed sudo command (@4ydan)
- Fixed some typos in the "namespaces.md" documentation (@muskater)
- Fix an error and some overmatching problems in scripts/spelling.sed and fix errors in documentation
(by running the scripts/dev/fix-spelling script) (Florian Lindner @flo91)
- Added some improvements to the core API documentation (@muskater)
- Update and improve the CLion tutorial (doc/tutorials/contributing-clion.md), add screenshots (@flo91)
- Improve documentation for storage plugins (@lawli3t)
- Add list of sources mentioning or linking to Elektra (@JakobWonisch)
- Linked to the installation instruction of the webui in its README file and added references to Docker in the get-started-guide. (@muskater) (@lawli3t) (Aydan Ghazani @4ydan)
- Added screenshots and a quick walk through in the Qt-GUI README. (@muskater) (@lawli3t) (Aydan Ghazani @4ydan)
- Improve example for kdb-restore man page and fix typos (@JakobWonisch)
- Fix some typos in the "Getting Started" page (Ivaylo Ivanov)
- Add screenshots with hints to CLion PR tutorial (@JakobWonisch)
- Fix typo in elektra-backends man page (@JakobWonisch)
- Expanded the webside guide for easier understanding and linked to cmake.org. (Philipp Nirnberger @nirnberger)
- Fix small error in CLion tutorial: CMake options would create a directory named
~
in home directory (Maximilian Irlinger @atmaxinger)
Tests
- Cleanup tests/linkchecker.whitelist and fix off-by-1 bug of the counter in the scripts/link-checker script (increase counter before printf) (Florian Lindner @flo91)
- Add tests for the intercept/env binding (Ivaylo Ivanov)
- add and improve checks in scripts/sed (Florian Lindner @flo91)
- Change the cpp Key-class (key.hpp) to check the return values of the called c-functions
and throw exceptions if values that indicate an error are returned + add tests that
check for this exceptions (Florian Lindner @flo91)
- Added more test cases for the keyCopy function (@muskater)
- Add exception tests for key C++ bindings (Ivaylo Ivanov)
- Added a shell script and a task that checks whether the filenames of newly added files are compliant with the convention. It is executed by the cirrus CI as well as the Jenkins CI (@muskater)
- Add a new shellrecoder test to
doc/tutorials/merge.md
(Florian Lindner @flo91)
- Added the possibility to enable all the shell recorder test cases for all plugins and fixed some plugin README files in process (@muskater)
- Convert example in doc/help/kdb-test.md to shell recorder test (@JakobWonisch)
Packaging
- Add initial flatpak package. See
scripts/flatpak/README.md
and scripts/flatpak/org.libelektra.kdb.yaml
for more info (Ivaylo Ivanov)
- Remove hard coded SWIG 3.0 paths. (Mihael Pranjić @mpranj)
Build
CMake
- Marked certain variables as advanced and separate user-modifiable and unaccessible variables. (Vaibhav Ganesh @flackojr)
Docker
- Add Fedora 35 images. (Mihael Pranjić @mpranj)
Infrastructure
Jenkins
- Replace Fedora 33 builds with Fedora 34, and Fedora 34 builds with Fedora 35. (Mihael Pranjić @mpranj)
Website
The website is generated from the repository, so all information about
plugins, bindings and tools are always up-to-date. Furthermore, we changed:
- Update npm dependencies, add forked and update angular-marked module. (Mihael Pranjić @mpranj)
- Remove links to Travis CI and replace them with GitHub Actions (with badge). (Mihael Pranjić @mpranj)
Other
- Make Elektra reuse reuse compliant (Ivaylo Ivanov)
Outlook
We are working on following new topics since the last release:
- Ansible-Elektra (Lukas Hartl)
- Recording Configuration (Maximilian Irlinger)
Furthermore, we are still working on following topics:
- 1.0 API (Stefan Hanreich) and (Klemens Böswirth)
- Improve Java Development Experience (Michael Tucek)
- KDB access using FUSE (Alexander Firbas)
- Shell completion (Ulrike Schäfer)
- Elektrify KDE and GNOME (Mihael Pranjić)
Statistics
We closed 90 issues for this release.
About 29 authors changed 491 files with 17997 insertions(+) and 6089 deletions(-) in 648 commits.
Thanks to all authors for making this release possible!
Join the Initiative!
We welcome new contributors!
Read here about how to get started.
As first step, you could give us feedback about these release notes.
Contact us via our issue tracker.
Get the Release!
You can download the release from here
or GitHub
The hashsums are:
- name: elektra-0.9.9.tar.gz
- size: 8878567
- md5sum: f5109eb0c96fb4164a5437bdebc3bf79
- sha1: a08df79301d56dd8f3711efa1b78b5a4d003d42f
- sha256: 834da360170daa632bbb46dd2e819271327dce1c51be1d7bb2ec22311ded54cb
The release tarball is also available signed using GnuPG from
here or on
GitHub
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
Already built API documentation can be found here
or on GitHub.
Stay tuned!
Subscribe to the
RSS feed
to always get the release notifications.
If you also want to participate, or for any questions and comments
please contact us via our issue tracker on GitHub.
Permalink to this NEWS entry
For more information, see https://libelektra.org.
Best regards,
Elektra Initiative