Recent Releases of Elektra
Elektra - 0.10.0 Release
- guid: e0a2b6f4-b18d-47d8-b642-e27907255666
- author: Tomislav Makar
- pubDate: Tue, 23 May 2023 13:33:52 +0200
- shortDesc: New Changetracking API, New spec plugin, Go into repo
We are proud to release Elektra 0.10.0.
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:
sh
docker pull elektra/elektra
docker run -it elektra/elektra
Highlights
- New Changetracking API
- New spec plugin
- Go into repo
New Changetracking API
We've created a new KeySet diffing and changetracking API for both internal and external use. Several plugins already had their own implementations to detect changes made to the key database. Every implementation did something different and results varied. With this new release every plugin now uses the same shared implementation, with identical results!
To try the amazing new API yourself, take a look at the tutorial.
Elektra's internal code now also uses this new API to detect which backends to execute. This can lead to better performance in I/O bound cases, where previously certain keys would have been detected as changed when they weren't.
We ran some memory benchmarks and found a slightly increased memory usage on a stock instance of Elektra. If you're using many plugins that do changetracking, the overhead will decrease.
| Number of Keys | Old Implementation (bytes) | New Implementation (bytes) | Memory Increase (%) | | -------------: | -------------------------: | -------------------------: | ------------------: | | 50 | 225792 bytes | 229580 bytes | 1,68 % | | 500 | 383180 bytes | 411238 bytes | 7,32 % | | 5000 | 1992294 bytes | 2306867 bytes | 15,79 % | | 50000 | 18245222 bytes | 21181235 bytes | 16,09 % | | 500000 | 178782208 bytes | 207827763 bytes | 16,25 % |
Apart from memory benchmark, we also ran some performance benchmarks. As the benchmark is heavily I/O bound, the biggest bottleneck is the I/O performance of the system. We could not reliably detect a real, reliably reproducible performance impact measured in seconds. Alternatively, we have measured executed instructions. There seems to be about 10 % overhead, but we don't expect it to be noticeable in real-world workloads.
| Number of Keys | Old Implementation (Instructions) | New Implementation (Instructions) | Performance Overhead (%) | | -------------: | --------------------------------: | --------------------------------: | -----------------------: | | 50 | 18910449 | 19583227 | 3,56 % | | 500 | 63001911 | 68948096 | 9,44 % | | 5000 | 526801917 | 586344210 | 11,30 % | | 50000 | 5730261920 | 6340292587 | 10,65 % | | 500000 | 104614374974 | 110702166761 | 5,82 % |
New spec plugin
The spec plugin was rewritten to use the standardized error handling in Elektra.
It is now strictly defined that the spec plugin throws a warning on kdbGet and on any other call an error.
Default values are now created in the default namespace.
The instantiated array specifications are now also created in the default namespace.
Keys with a require metakey and no default metakey do throw an error now.
Known limitations:
#and_keys do not work on MINGW- No defaults for
_globbing character
For more information see Spec Plugin.
Go into repo
The go binding is now inside of libelektra repository.
It is now also included into our build pipeline.
For more information on how to use it see go readme.
NOTE: On information how to publish new versions of
go-elektrato go packages see go-publishing.
Plugins
The following text lists news about the plugins we updated in this release.
General
- Updated target name of shared object files according to #3486
spec
- Rewrite spec plugin, fix bugs and use correct error handling (Tomislav Makar @tmakar)
- Remove info metakey from spec plugin (Tomislav Makar @tmakar)
counter
- Move
staticvariables into functions to avoid global variables (@kodebach)
logchange
- Utilize new changetracking API (Maximilian Irlinger @atmaxinger)
- Add Maximilian Irlinger as maintainer (Maximilian Irlinger @atmaxinger)
yajl
- The
itKsglobal variable workaround, which was used to replace the now removed internalKeySetcursor, was replaced with a custom context struct. (@kodebach)
toml
- The
flexlexer andbisonparser are now fully reentrant and therefore thread-safe. (@kodebach)
multifile
- Remove multifile plugin as it is unmaintained and conflicts with the new backend architecture (Maximilian Irlinger @atmaxinger)
c
- Add Florian Lindner as maintainer (Florian Lindner @flo91)
- Use separate symbols for
setandcommitfunctions to satisfykdb plugin-check(@kodebach) - Use new
elektraPluginGetPhase()instead of counting executions (@kodebach)
mmapstorage
Note: The plugin is currently disabled, because it is not yet compatible with the COW data structures.
TODO: remove above note, when COW support is added.
- The magic data structures are now fully compile-time constants. The magic number to detect endianness is generated in CMake instead of at runtime. (@kodebach)
syslog
- Convert to hook plugin (Maximilian Irlinger @atmaxinger)
- Utilize new changetracking API (Maximilian Irlinger @atmaxinger)
lineendings
- Add Florian Lindner as maintainer (Florian Lindner @flo91)
length
- Add Florian Lindner as maintainer (Florian Lindner @flo91)
missing
- Add Florian Lindner as maintainer (Florian Lindner @flo91)
unit
- Add Florian Lindner as maintainer (Florian Lindner @flo91)
dbus
- Utilize new changetracking API (Maximilian Irlinger @atmaxinger)
- Add Maximilian Irlinger as maintainer (Maximilian Irlinger @atmaxinger)
internalnotifications
- Utilize new changetracking API (Maximilian Irlinger @atmaxinger)
- Add Maximilian Irlinger as maintainer (Maximilian Irlinger @atmaxinger)
Libraries
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
Compatibility
Core
- The
sysloglogging code now callsopenlogbefore everysyslogto avoid the use of a global variable. (@kodebach) - Fix memleak in kdb.c, #4925 (@hannes99)
loader
- Adapt target rename with
-plugin-indl.c(Tomislav Makar @tmakar)
go
- Golang is now included to build
go binding(Tomislav Makar @tmakar) - From now on we use tags which are prefixed with
vso go package versioning works (Tomislav Makar @tmakar)
kdb
- Add new changetracking API (Maximilian Irlinger @atmaxinger)
- Fix unwanted removal of subkeys when using mv (Hannes Laimer @hannes99)
- Fix inconsistent return values in code, tests and man pages (Hannes Laimer @hannes99)
- Remove
smountalias (Hannes Laimer @hannes99)
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
- Updated Java binding related dependencies. (Michael Tucek @tucek)
- Updated
KDBExceptionto only access error key at construction time. (Michael Tucek @tucek) - Removed public naive resource release API. To migrate just remove calls to the affected methods
Key#release(),KeySet#release()andKDBException#releaseErrorKey()(Michael Tucek @tucek) - Enabled strict javadoc checking for Gradle build (Michael Tucek @tucek)
- add merging based on elektraMerge (Maximilian Irlinger @atmaxinger)
- Added support for
ksIncRefforKeySet(Michael Tucek @tucek) - Enabled
ReferenceCleaner(Michael Tucek @tucek)
go-elektra
- Move
go-elektrabinding from repository into bindings folder oflibelektra(Tomislav Makar @tmakar) - Change module for
go-elektra(Tomislav Makar @tmakar) - Rename
go-elektramodule (Tomislav Makar @tmakar) - Adapt README for
go-elektraand change module name to matchgithub.com(Tomislav Makar @tmakar)
Tools
elektrad
- Implemented new request to add multiple metakeys for one key (Tomislav Makar @tmakar)
- Adding bulk creation request for configuration keys (Tomislav Makar @tmakar)
webd
- Implemented new request to add multiple metakeys for one key (Tomislav Makar @tmakar)
- Adding bulk creation request for configuration keys (Tomislav Makar @tmakar)
Scripts
Jenkins
- Use only v prefix for tags not in real version (Tomislav Makar @tmakar)
Release
- Exclude v prefix from
populate-release-notes.shscript (Tomislav Makar @tmakar) - Handle tag prefix
vcorrectly inrelease.sh(Tomislav Makar @tmakar) - Check for
vprefix inmake-source-packagescript andJenkinsfile.release(Tomislav Makar @tmakar) - Use correct tags for
git-release-statsscript (Tomislav Makar @tmakar)
Documentation
- Adapt and remove outdated docs https://issues.libelektra.org/4882 (Tomislav Makar @tmakar)
- Added missing dependencies in COMPILE.md for APT-based systems (Michael Tucek @tucek)
- Add
defaultnamespace to namespaces documentation (Tomislav Makar @tmakar) - Added Tomislav Makar to
AUTHORS.md(Tomislav Makar @tmakar) - Added Florian Lindner to
AUTHORS.md(Florian Lindner @flo91) - .github rework (Markus Raab)
- Added
hooktoplacementscontract in CONTRACT.ini (Tomislav Makar @tmakar) - Added
hookinformation to hooks.md - Added Hannes Laimer to
AUTHORS.md(Hannes Laimer @hannes99) - Add README to tools/kdb (Hannes Laimer @hannes99)
- Fixed shell-recorder test in
install-webui.md(Tomislav Makar @tmakar) - Add new shell-recorder test in
install-webui.mdfor newly implemented request for adding multiple metakeys for one key (Tomislav Makar @tmakar) - Small fixes in decisions. (Markus Raab)
- Remove wikipedia from release todos in RELEASE.md (Tomislav Makar @tmakar)
- Update AUTHORS.md info (@kodebach)
- Add Stefan Hanreich to AUTHORS.md (Stefan Hanreich @lawli3t)
Use Cases
- Add specification use case for array-specification (Tomislav Makar @tmakar)
- Add specification use case for underline-specification (Tomislav Makar @tmakar)
- Add specification use case for simple-specification (Tomislav Makar @tmakar)
- Add specification use case for enum-specification (Tomislav Makar @tmakar)
- Add complete specification for
dockerdconfiguration file (daemon.json) (Tomislav Makar @tmakar)
Decisions
- Decide and implement decision process (Markus Raab)
- Decided future library split (@kodebach)
- Decided decision process (Markus Raab)
- Draft for man pages (Markus Raab)
- Add decision for change tracking (Maximilian Irlinger @atmaxinger)
- Create decision for allowed and prohibited operation seqences (Maximilian Irlinger @atmaxinger)
- Add decisions about location of headers and use of
#includein the repo (@kodebach) - Add decision about metadata semantics (@kodebach)
- Many small fixes to adapt to documentation guidelines and new decision process. (Markus Raab)
- Add decision for read-only keynames (Maximilian Irlinger @atmaxinger)
- Revive keyname decision (@kodebach)
- Add decision for copy-on-write and provide implementation suggestions. (Maximilian Irlinger @atmaxinger)
- Added explanation on why we wanted to migrate from Maven to Gradle for Java-related build facilities. (Michael Tucek @tucek)
Tutorials
- Add basic tutorial about changetracking (Maximilian Irlinger @atmaxinger)
Man Pages
Tests
- Add shell test to verify correct behavior for https://github.com/ElektraInitiative/libelektra/issues/4061 (Tomislav Makar @tmakar)
- Add link to
linkchecker.whitelist(Tomislav Makar @tmakar)
Build
Docker
- CentOS 8 Stream: manually install
config-managerDNF plugin. (Maximilian Irlinger @atmaxinger)
Infrastructure
Cirrus
- Rename deprecated
d-bustodbusinmacOS.ymland.cirrus.ymlIssue-#4900 (Tomislav Makar @tmakar) - Push FreeBSD 12.3 to 12.4 since 12.3 is end of life. (Richard Stöckl @eiskasten)
GitHub Actions
Website
The website is generated from the repository, so all information about plugins, bindings and tools are always up-to-date. Furthermore, we changed:
Miscellaneous
- Many global variables that where used as constants have been made fully
const(@kodebach)
Outlook
We are currently working on following topics:
- Rewriting tools in C (@hannes99)
- 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 (Maximilian Irlinger)
- Configure Olimex Base Images (Maximilian Irlinger)
- Improving Build Server Infrastructure (Lukas Hartl)
- Improve Java Development Experience (Michael Tucek)
Statistics
About 9 authors changed 309 files with 10024 insertions(+) and 4025 deletions(-) in 402 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
The hashsums are:
- name: elektra-0.10.0.tar.gz
- size: 9230228
- md5sum: 39ac04c8a0b07061bea781fd73cb13aa
- sha1: 846dcfa22410403b575a4d4d87970aa4841aafdd
- sha256: cb56e40b37c42e1e235cf9e76c9250024f912cbb61cca1a2888f9305f5228dcd
The release tarball is also available signed using GnuPG from
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
Already built API documentation can be found
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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by tmakar over 2 years ago
Elektra - 0.9.14 Release
- guid: 9e1e0790-e7ae-4947-9906-2c176a4f8dd2
- author: Mihael Pranjić
- pubDate: Thu, 16 Mar 2023 14:43:04 +0100
- shortDesc: Bugfix Release
We are proud to release Elektra 0.9.14.
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:
sh
docker pull elektra/elektra
docker run -it elektra/elektra
Highlights
- The main purpose of this bugfix release is to fix regressions (#4859) introduced in Elektra 0.9.12 and 0.9.13.
- Please refer to the Elektra 0.9.12 release notes for a complete list of changes. Due to breaking changes since 0.9.11 we highly recommend to read the upgrade instructions.
Plugins
The following text lists news about the plugins we updated in this release.
timeofday
- Use separate symbols for
setandcommitfunctions to satisfykdb plugin-check(@kodebach) - Use new
elektraPluginGetPhase()instead of counting executions (@kodebach)
tracer
- Use separate symbols for
setandcommitfunctions to satisfykdb plugin-check(@kodebach)
Tests
- Enable more
kdb plugin-checktests (@kodebach)
Build
Docker
- Fix conflicting Java versions in CentOS Stream 8 image (@kodebach)
Outlook
We are currently working on following topics:
- 1.0 API (Klemens Böswirth @kodebach) and (Stefan Hanreich)
- Session recording and better Ansible integration (Maximilian Irlinger @atmaxinger)
- Change tracking (Maximilian Irlinger @atmaxinger)
- Rewriting tools in C (@hannes99)
- 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) and (Maximilian Irlinger)
- Configure Olimex Base Images (Maximilian Irlinger)
- Improving Build Server Infrastructure (Lukas Hartl) and (Maximilian Irlinger)
- Improve Java Development Experience (Michael Tucek)
Statistics
We closed 2 issues for this release.
About 4 authors changed 22 files with 299 insertions(+) and 139 deletions(-) in 14 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
The hashsums are:
- name: elektra-0.9.14.tar.gz
- size: 9299478
- md5sum: eb0f1d2e5d93bbae122999b5a27be343
- sha1: 8d7a44ae6b4d53c52ab4219f955d6010f87682c8
- sha256: e4632bb6baa78f6a68c312469e41fd1ef07406571749e32f2645b1858d01a58d
The release tarball is also available signed using GnuPG from
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
Already built API documentation can be found
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.
For more information, see https://libelektra.org.
Best regards,
Scientific Software - Peer-reviewed
- C
Published by mpranj almost 3 years ago
Elektra - 0.9.13 Release
- guid: e8fd116d-12ab-4281-aaf3-b6441056dd63
- author: Mihael Pranjić
- pubDate: Tue, 14 Mar 2023 10:05:11 +0100
- shortDesc: Bugfix, Ubuntu Packages
We are proud to release Elektra 0.9.13.
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:
sh
docker pull elektra/elektra
docker run -it elektra/elektra
Highlights
- The main purpose of this bugfix release is to fix a regression (#4859) introduced in Elektra 0.9.12.
- We added fresh Ubuntu Jammy Jellyfish (22.04 LTS) and Kinetic Kudu (22.10) packages.
- Please refer to the Elektra 0.9.12 release notes for a complete list of changes. Due to breaking changes since 0.9.11 we highly recommend to read the upgrade instructions.
Plugins
The following text lists news about the plugins we updated in this release.
spec
- Add hook placement to spec plugin in README (Tomislav Makar @tmakar)
gopts
- Add hook placement to gopts plugin in README (Tomislav Makar @tmakar)
internalnotifications
- Add Maximilian Irlinger as maintainer (Maximilian Irlinger @atmaxinger)
logchange
- Add Maximilian Irlinger as maintainer (Maximilian Irlinger @atmaxinger)
dbus
- Add Maximilian Irlinger as maintainer (Maximilian Irlinger @atmaxinger)
Libraries
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
tools
- Check for hook placement on
plugin-check(Tomislav Makar @tmakar)
merge
- Add Maximilian Irlinger as maintainer (Maximilian Irilnger @atmaxinger)
Documentation
- .github rework (Markus Raab)
- Added
hooktoplacementscontract in CONTRACT.ini (Tomislav Makar @tmakar) - Added
hookinformation to hooks.md - Add correct error code in hosts readme (Tomislav Makar)
Build
CMake
- Add
infos/maintainerin plugins. (Maximilian Irlinger @atmaxinger)
Docker
- Add Ubuntu Jammy Jellyfish (22.04 LTS) images. (Mihael Pranjić @mpranj)
- Add Ubuntu Kinetic Kudu (22.10) images. (Mihael Pranjić @mpranj)
Infrastructure
Jenkins
- Add Ubuntu Jammy Jellyfish (22.04 LTS) builds and drop Bionic builds. (Mihael Pranjić @mpranj)
- Add Ubuntu Kinetic Kudu (22.10) builds. (Mihael Pranjić @mpranj)
Outlook
We are currently working on following topics:
- 1.0 API (Klemens Böswirth @kodebach) and (Stefan Hanreich)
- Session recording and better Ansible integration (Maximilian Irlinger @atmaxinger)
- Change tracking (Maximilian Irlinger @atmaxinger)
- Rewriting tools in C (@hannes99)
- 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) and (Maximilian Irlinger)
- Configure Olimex Base Images (Maximilian Irlinger)
- Improving Build Server Infrastructure (Lukas Hartl) and (Maximilian Irlinger)
- Improve Java Development Experience (Michael Tucek)
Statistics
We closed 5 issues for this release.
About 7 authors changed 35 files with 1186 insertions(+) and 534 deletions(-) in 48 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
The hashsums are:
- name: elektra-0.9.13.tar.gz
- size: 9297899
- md5sum: 871eaaad39bc834ceb7fb42cb8de66f0
- sha1: 68984021d08500693d692c2cb61eb3409fe75226
- sha256: 9b7512d493c284afcca9875d093081c85c4cfe4926dea193202fbdc5fe89b468
The release tarball is also available signed using GnuPG from
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
Already built API documentation can be found
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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj almost 3 years ago
Elektra - 0.9.12 Release
- guid: F2193578-1773-43A9-85CA-79EA8CE48D7B
- author: Mihael Pranjić
- pubDate: Fri, 03 Mar 2023 08:07:28 +0100
- shortDesc: New Backend Logic, Copy-on-Write, FLOSS Course
We are proud to release Elektra 0.9.12.
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:
sh
docker pull elektra/elektra
docker run -it elektra/elektra
Highlights
- New Backend
- Copy-on-Write
- FLOSS
New Backend
The entire logic for backends has been rewritten, to allow for more flexibility und an unlimited number of plugins.
Instead of calling plugins directly, libelektra-kdb now only calls so-called backend plugins and special hook plugins.
There is a contract between libelektra-kdb and the backend plugins.
All backend plugins must adhere to this contract.
To achieve this goal, most backend plugins will call other plugins (like libelektra-kdb did previously).
The logic previously implemented in libelektra-kdb was moved to the new default backend plugin backend.
It works like the old system, but now also allows an unlimited number of plugins in positions where that makes sense.
For example, you can have unlimited postgetstorage plugins, but only a single getresolver.
There have also been slight changes to kdbGet and kdbSet.
Please read their API docs to find out, if you rely on any behavior that has been altered.
You can also read the new low-level docs to find out all the intricate details.
The structure of system:/elektra/mountpoints changed as well.
Take a look at the new docs, if you need to know details.
Updating config
The mountpoint configuration format contains breaking changes and a manual upgrade process is needed. Follow these steps to upgrade the old mountpoint configuration to the new format:
Warning: BACK UP YOUR CONFIG FILES BEFORE UPDATING! We recommend making a backup of the file printed by
kdb file system:/elektra/mountpointsbefore updating your installation. In the unlikely case that the migration script fails, you can still use the information from the backup to manually recreate your mountpoints.
To update your existing system:/elektra/mountpoints data you can use the migration script.
Note: To run the script you must have Elektra, Python (>= 3.7) and the Python binding installed. The script uses the Python binding to manipulate
Keys andKeySets, but it does not use thekdbCLI tool, or theKDBAPI. It is safe to run this script before, or after you update your Elektra installation.
By default, the script loads the file /etc/kdb/elektra.ecf.
If you changed where system:/elektra/mountpoints is stored, you can provide an alternative path:
./migrate-mountpoints.py /path/to/your/mountpoints/config.file
Note: Because the script does not use the
KDBAPI it only works, if the mountpoints config file uses the defaultdumpformat.If your mountpoints config file is not using the
dumpformat, you may still be able to use the migration script. However, in that case, you will have to use the script before updating your Elektra installation:
- Run
kdb export system:/elektra/mountpoints dumpto get a copy of your mountpoints config indumpformat- Write this data to a file and run the migration script on the file.
- To get the data back in your original format you can use
sh ./migrate-mountpoints.py /path/to/file/from/step2 | kdb convert dump your-format > /path/to/converted/file
- Run
kdb file system:/elektra/mountpointsto find out where your mountpoint config is stored. Make sure to back up this file, before upgrading your installation.- Now upgrade your Elektra installation.
- Copy the file
/path/to/converted/filefrom step 3 to the location you got in step 4.
The script will read the old mountpoint configuration from the given file.
It will convert the configuration and print the new version to stdout.
You can inspect the output to make sure, everything is in order. When you are ready to commit the changes, you can manually edit the config file, or use:
./migrate-mountpoints.py --output=/etc/kdb/elektra.ecf /etc/kdb/elektra.ecf
Individual changes
- Implement hooks. (Maximilian Irlinger @atmaxinger)
- Removed old global plugins code. (Maximilian Irlinger @atmaxinger)
- New backend logic, based on PR #2969 by @vLesk. (@kodebach)
- Add script to migrate
system:/elektra/mountpointsto new format. (@kodebach)
Copy-on-Write
Thanks to (Maximilian Irlinger @atmaxinger) our Key and KeySet datastructures are now fully copy-on-write!
This means noticeably reduced memory usage for cases where keys and keysets are copied and/or duplicated!
We ran some very promising benchmarks, each were performed with 400,000 keys.
All benchmarks were executed using valgrind --tool=massif --time-unit=B --max-snapshots=200 --threshold=0.1.
| Benchmark | Old Implementation | Copy-on-Write | Size Reduction | Remarks |
| :------------- | -----------------: | ------------: | -------------: | :------------------------- |
| createkeys.c | 5.3 MiB | 6.5 MiB | -22 % | |
| deepdup.c | 10.5 MiB | 8.2 MiB | 22 % | |
| large.c | 18.9 MiB | 15.3 MiB | 19 % | |
| kdb.c | 23.5 MiB | 17.8 MiB | 24 % | |
| kdbget.c | 11.0 MiB | 8.8 MiB | 20 % | |
| kdbmodify.c | 11.0 MiB | 8.8 MiB | 20 % | Same results as kdbget.c |
First, it should be noted that a single key, without counting payload, is about 50% larger with the copy-on-write implementation.
This explains why the createkeys.c benchmark yields a negative reduction result.
This benchmark only allocates keys, so not much improvement can be expected there.
Still, as other stuff also uses heap memory, the overall memory consumption only increased by 22%, which is far less than 50%.
All other benchmarks saw meaningful reductions of heap memory used.
One interesting observation is that kdbget.c and kdbmodify.c used exactly the same memory.
This can most likely be explained by internal caching within the memory allocator of glibc.
We also performed runtime tests on the same benchmarks using perf stat --repeat 13 to ensure no major performance regressions occur.
| Benchmark | Old Implementation | Deviation | Copy-on-Write | Deviation | Runtime Increase |
| :------------- | -----------------: | --------: | ------------: | --------: | ---------------: |
| createkeys.c | 0.209572 s | 0.36 % | 0.21987 s | 0.77 % | 4.9 % |
| deepdup.c | 0.23025 s | 0.47 % | 0.231804 s | 0.32 % | 0.6 % |
| large.c | 1.14038 s | 0.21 % | 1.14837 s | 0.21 % | 0.7 % |
| kdb.c | 1.9270 s | 2.63 % | 1.93354 s | 0.17 % | 0.3 % |
| kdbget.c | 0.145663 s | 0.17 % | 0.15763 s | 0.70 % | 8.2 % |
| kdbmodify.c | 0.146506 s | 0.19 % | 0.156347 s | 0.15 % | 6.7 % |
Overall, the runtime performance hit is less than 10%.
The more a program does, the less the additional overhead of the copy-on-write algorithms matter.
One interesting detail is that keyCopy and keyDup have become quite a bit faster.
This can be seen by comparing the differences between createkeys.c and deepdup.c.
The differences are 21 ms for the old implementation and 12 ms for the copy-on-write implementation.
FLOSS
A Free/Libre and Open Source Software (FLOSS) Initiative couldn't survive with many small contributions fixing annoying problems. This release also contains all contributions done via one term of the FLOSS course. The success was tremendous, as shown in the rest of the release notes.
A big thanks to the students for their contributions!
Plugins
The following text lists news about the plugins we updated in this release.
yajl
- Fix an issue where trying to set invalid meta-keys won't show an error. (Juri Schreib @Bujuhu)
list
- Removed the outdated
listplugin. (Maximilian Irlinger @atmaxinger) (Was only needed for global plugins, which are now replaced by hooks.)
logchange
- Made logchange a notification-send hook plugin. (Maximilian Irlinger @atmaxinger)
toml
- Fix bug, where meta-keys that cannot be inserted don't report an error. (@Bujuhu)
uname
- Add error handling if uname call fails. (Richard Stöckl @Eiskasten)
quickdump
- elektraQuickdumpSet: don't fclose if stdout. (@hannes99)
blockresolver
- Add encoding test for blockresolver read. (@dtdirect)
- Refactor and restructure blockresolver. (@dtdirect)
desktop
- Add a unit test. (Richard Stöckl @Eiskasten)
mini
- Fix a bug where writing meta-keys will fail silently. (Juri Schreib @Bujuhu)
mmapstorage
- Remove code duplication in the data block calculation. (Richard Stöckl @Eiskasten)
network
- Add a retry mechanism. (Richard Stöckl @Eiskasten)
xfconf
- Add xfconf storage plugin with the ability to read and write to xfconf channels. (Richard Stöckl @Eiskasten)
- Make xfconf valgrind suppressions more flexible to lib updates. (Mihael Pranjić @mpranj)
date
- Fix an issue with validationg RFC 822 date-times. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Improve Code Coverage. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
csvstorage
- Fix a bug where writing unkown meta-keys will fail silently. (Juri Schreib @Bujuhu)
Libraries
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
Compatibility
- Global plugins do not work anymore, use hooks instead.
Core
- The Key and KeySet datastructures are now fully copy-on-write. (Maximilian Irlinger @atmaxinger)
keyCopynow only allocates additional memory ifKEY_CP_METAorKEY_CP_ALLis used. (Maximilian Irlinger @atmaxinger)- Check for circular links (overrides). (@0x6178656c)
io
- Check file flags for
elektraIoFdSetFlags: file flags must be exactly one of: read only, write only or read write. (Richard Stöckl @Eiskasten)
Merge
- Add methods
elektraMergeGetConflictingKeysandelektraMergeIsKeyConflictingto check which keys were causing a merge conflict. (Maximilian Irlinger @atmaxinger)
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.
intercept/env
- Remove fallback code. (Markus Raab)
- Command-line functionality is broken due to new-backend differences.
intercept/fs
- Use
KDB_MAX_PATH_LENGTHfor better portability. (Markus Raab)
jna
- Documentation: Improved build instructions. (@Bujuhu)
- Add validation on get for whitelist plugin. (@Bujuhu)
- Upgrade Gradle to 8.0.1. (Mihael Pranjić @mpranj)
rust
- Fix "feature
resolveris required" error. (Markus Raab)
elixir
- Initial release of the Elixir binding. (@0x6178656c)
- Mark tests as
memleak. (@0x6178656c)
Tools
kdb
- Removed
global-mountandglobal-umountcommands. (Maximilian Irlinger @atmaxinger) - Fixed SIGSEGV when using
kdb findwithout argument. (Christian Jonak-Moechel @joni1993)
elektrad
- Removed leftover package-lock.json file. (stefnotch)
Scripts
- Added automatic spelling corrections for changeset. (Maximilian Irlinger @atmaxinger)
- Introduce shebang-conventions. (@0x6178656c)
- Apply auto-fixes from shellcheck. (@0x6178656c)
- Use prettier 2.8.4. (Mihael Pranjić @mpranj)
- Add scripts to enable and disable pre-commit hooks. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Only let http links pass the check if whitelisted. (Richard Stöckl @Eiskasten)
- Link Checker: Add documentation for the usage and how it behaves. (Richard Stöckl @Eiskasten)
- Sed: Add spelling correction for "key-value storage". (@Bujuhu)
- Fix/extends some shell recorder tests. (@Joni1993)
- Use clang-format v15. (Mihael Pranjić @mpranj)
- Fix warning parsing in shell recorder. (@Joni1993)
- Replaced
egrepbygrep -E. (@0x6178656c and @janldeboer) - Add audit-dependencies script to check for vulnerabilities for npm depndencies. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
Documentation
- Restructured contrib/api. (Markus Raab).
- Improve page on compilation. (@0x6178656c)
- Improve page for bindings. (@0x6178656c)
- Improve page for getting started. (@stefnotch)
- Remove version number from docker README and replace it with latest. (@Joni1993)
- Fix grammar for
elektra-granularity.md. (@dtdirect) - Rephrase sections in
doc/dev/error-\*. (@dtdirect) - Improve Git.md. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Unify spelling of man pages. (@stefnotch) (@janldeboer)
- Extend consistency check
check_doc.shto work for contrib, dev and tutorials. (@Joni1993) - Fix internal links. (@0x6178656c)
- Update AUR Link from
elektratolibelektrapackage. (@Bujuhu) - Update example Ansible playbook in VISION.md. (@Bujuhu)
- Harmonize spelling of Git. (@Joni1993)
- Update packaging instructions for Fedora. (@0x6178656c)
- Improve use of gender. (@0x6178656c)
- Fix some minor mistakes in CONTRIBUTING.md. (@Joni1993)
- Fix various spelling errors. (@Joni1993)
- Denoted package names & global variable names in INSTALL.md as
Code. (@janldeboer) - Improve readability of doc/tutorials/highlevel.md. (@deoknats861)
- Improve reference to Podman documentation. (@0x6178656c)
- Unify spelling. (@Joni1993)
- Fix typo in dev/hooks.md. (@dtdirect)
- Remove unused images from doc/images. (@dtdirect)
- Fixed Coverage Badge Link. (@janldeboer)
- Improve CONTRIBUTING doc. (Juri Schreib @Bujuhu) and (Nikola Prvulovic @Dynamichost96)
- Update Doxyfile with Doxygen 1.9.4. (@0x6178656c)
- Add project logo to Doxygen in Doxyfile. (@dtdirect)
- Add mermaid.js to the project using doxygen-mermaid. (@dtdirect)
- Create diagrams in mermaid.js to use in doxygen. (@dtdirect)
- Create README for Doxygen and Mermaid JS. (@dtdirect)
- Tutorial: Add automatic validation to Docker tutorial (Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Add mention of audit-dependencies script in doc/todo/RELEASE.md. (@Bujuhu)
- Move note in GETSTARTED.md. (@Joni1993)
- Use
codeblocks to prevent Markdown from falsy rendering LaTeX. (@stefnotch), (@janldeboer) - Fix broken links in use cases for KDB after files were renamed. (Florian Lindner @flo91)
- Replace http links with https. (Richard Stöckl @Eiskasten)
- Enhance notifications.md in doc/tutorial. (@dtdirect)
- Add tutorial how to suppress memleaks in plugins from dependencies. (Richard Stöckl @Eiskasten)
- Write about history to make plans of Elektra's adoption more clear. (Markus Raab)
Use Cases
- Improve use cases Template. (@kodebach and Markus Raab)
- Use cases for KDB. (@kodebach)
- Use cases for
libelektra-core. (@kodebach)
Decisions
- Decide and implement decision process. (Markus Raab)
- Decided future library split. (@kodebach)
- Decided decision process. (Markus Raab)
- Draft for man pages. (Markus Raab)
- Add decision for change tracking. (Maximilian Irlinger @atmaxinger)
- Create decision for allowed and prohibited operation seqences. (Maximilian Irlinger @atmaxinger)
- Add decisions about location of headers and use of
#includein the repo. (@kodebach) - Add decision about metadata semantics. (@kodebach)
- Many small fixes to adapt to documentation guidelines and new decision process. (Markus Raab)
- Add decision for read-only keynames. (Maximilian Irlinger @atmaxinger)
- Revive keyname decision. (@kodebach)
- Add decisions for constructor functions and builder functions. (@kodebach)
- Add decision for copy-on-write and provide implementation suggestions. (Maximilian Irlinger @atmaxinger)
- Update internal cache. (Markus Raab) (@kodebach)
- Create transformations. (Maximilian Irlinger @atmaxinger)
- Replace TOC-style README.md with folders and generate HTML for website. (@kodebach)
- Restructured decisions directories based on new agreed-upon steps. (Maximilian Irlinger @atmaxinger)
- Decision for types of
KeySets. (@kodebach) - Added Documentation Guidelines. (Markus Raab)
- Add links and formatting to documents affected by PR#4492 (Document Guidelines) and rephrase some parts. (Florian Lindner @flo91)
- Decisions for changes to
keyIsBelowand newkeyGetNextPartfunctions. (@kodebach) - Apply fix spelling to more files. (Markus Raab)
Tutorials
- Add tutorial for manual installation from the AUR on Arch Linux. (@Bujuhu)
- Add Markdown shell recorder validation to install.webui.md. (@deoknats861)
- Fix the outdated array tutorial. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Reinstate mounting tutorial. (@Bujuhu)
- Make namespaces tutorial verifiable. (@0x6178656c)
- Move Podman-related information to a dedicated page. (@0x6178656c)
Man Pages
- Update man page (patch) as suggested by the CI to fix CI error on master. (Florian Lindner @flo91)
- Added links to the website & webui after further reading. (Philipp Nirnberger @nirnberger)
- Upgrade
ronn-ngto 0.10.1.pre3. (Mihael Pranjić @mpranj)
Tests
- Fix an Issue where scripts/dev/fix-spelling does not work, if a resolved path contains whitespaces. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Rename scripts/sed to scripts/spelling.sed. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Add
memleaklabel totest_getenv. (@0x6178656c) - Add test using shellcheck. (@0x6178656c)
- Remove
--rerun-failedfromrun_*scripts. (@kodebach) - Fix paths for icheck test. (Mihael Pranjić @mpranj)
Shell Recorder
- Add check if file exists. (@0x6178656c)
Packaging
- Add missing new
backendplugin to components of libelektra package. (Mihael Pranjić @mpranj)
Build
CMake
- Fix warning for CMP0115. (0x6178656c)
- Change Doxygen configuration for LaTeX. (0x6178656c)
- Fix developer warning for package DISCOUNT. (Dennis Toth @dtdirect)
- Pass
--stacktraceto gradle for the JNA builds. (Maximilian Irlinger @atmaxinger) - Adapt npm build flags to remove reproducability issues. (Juri Schreib @Bujuhu) (Nikola Prvulovic @Dynamichost96)
- Fix creation of shell recorder tests. (@0x6178656c)
Docker
- Update packagename
libpcrec++-devtolibpcrecpp0v5in Debian Sid. (Richard Stöckl @Eiskasten) - Add shellcheck to Debian containers. (@0x6178656c)
- Use
openjdk-17-jdkin Debian Sid. (Maximilian Irlinger @atmaxinger) - Add Fedora 37 images. (Mihael Pranjić @mpranj)
- Update Debian Sid image to use repository Python modules instead of installing with
pip3due to upstream debian changes. (Mihael Pranjić @mpranj) - Debian Bullsye: use clang 13. (Mihael Pranjić @mpranj)
- Update Alpine Linux to 3.17.2. (Mihael Pranjić @mpranj)
Gradle
- Use Gradle 7.5.1. (Mihael Pranjić @mpranj)
- Update
java-library.gradleto usearchiveClassifier(Maximilian Irlinger @atmaxinger)
Infrastructure
Jenkins
- Add Fedora 37 builds, drop Fedora 35 builds. (Mihael Pranjić @mpranj)
- Run more tests also on Master. (Markus Raab)
- Move doc to main build stage. (Markus Raab)
- Disable parallel test runs. (Maximilian Irlinger @atmaxinger)
- Upgrade Jenkins node container to Debian bullseye. (@0x6178656c)
- Undo previous change that added automatic
ctest --rerun-failedto Jenkins CI. (@kodebach)
Cirrus
- Use Fedora 37. (Mihael Pranjić @mpranj)
- Fix
macos_instancereference, upgrade to macOS Ventura (by default), use Python 3.11 and Ruby 3.x. (Mihael Pranjić @mpranj) - Automatically rerun
testmod_dbus*tests on macOS. (@kodebach) - Fix dbus not starting on macOS. (Maximilian Irlinger @atmaxinger)
GitHub Actions
- Add auto-cancellation-running action. (Tomislav Makar @tmakar)
- Automatically rerun
testmod_dbus*tests on macOS. (@kodebach) - Fix dbus not starting on macOS. (Maximilian Irlinger @atmaxinger)
- Change stale issue/PR checking to GitHub action. (@0x6178656c)
- Update configuration of stale issue/PR action. (@0x6178656c)
- Upgrade actions to recent versions and remove deprecated ruby-setup action. (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:
- Fix broken
/pythongenlink on homepage. (@stefnotch) - Fix redirect logic to not cause loops. (@stefnotch)
- Remove duplicated link to
TESTING.mdfile. (@stefnotch), (@janldeboer) - Restructure parts of the links on the website. (@stefnotch), (@janldeboer)
- Removed broken links to packages for Linux distributions. (@Dynamichost96)
- Update npm packages. (Mihael Pranjić @mpranj)
- Change URLs to say man-page with a dash. (@stefnotch) (@janldeboer)
Outlook
We are currently working on following topics:
- 1.0 API (Klemens Böswirth @kodebach) and (Stefan Hanreich)
- Session recording and better Ansible integration (Maximilian Irlinger @atmaxinger)
- Change tracking (Maximilian Irlinger @atmaxinger)
- Rewriting tools in C (@hannes99)
- 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) and (Maximilian Irlinger)
- Configure Olimex Base Images (Maximilian Irlinger)
- Improving Build Server Infrastructure (Lukas Hartl) and (Maximilian Irlinger)
- Improve Java Development Experience (Michael Tucek)
Statistics
We closed about 150 issues for this release.
About 28 authors changed 960 files with 29400 insertions(+) and 20927 deletions(-) in 1421 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
The hashsums are:
- name: elektra-0.9.12.tar.gz
- size: 9297913
- md5sum: a6de9401709283b69ec211681f2a7757
- sha1: cb4e282d1346fda771de7510663652555f8e6c7d
- sha256: 38238ba4a5318f999dc3045da06467abf529344dc46ad3fdf42bdca0155e149c
The release tarball is also available signed using GnuPG from
The following GPG Key was used to sign this release: 12CC44541E1B8AD9B66AFAD55262E7353324914A
Already built API documentation can be found
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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj almost 3 years ago
Elektra - 0.9.11 Release
- guid: 1390D163-9CEC-493D-839D-3930B9FFB6C4
- author: Mihael Pranjić
- pubDate: Wed, 05 Oct 2022 08:14:35 +0200
- shortDesc: New Backend System, Opensesame Application, FLOSS Course
We are proud to release Elektra 0.9.11.
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:
sh
docker pull elektra/elektra
docker run -it elektra/elektra
Highlights
- Preparing new-backend merge
- Olimex
- Improving Elektra in FLOSS course
Preparing new-backend merge
In a separated branch we rewrote the whole backend system. With this new backend system, backends are now also plugins, allowing backends also to be non-file-based, e.g., using databases. The main purpose of this release is to give a last stable release before master gets disrupted with a huge change set. The next release is not to be expected in this year.
A huge thanks to (Klemens Böswirth @kodebach), (Maximilian Irlinger @atmaxinger) for the many changes in the branch. Thanks to (Richard Stöckl @Eiskasten) for testing.
Olimex
Elektra is used for server, desktop and embedded. With this release, we strengthen our embedded mainstay, specifically in open source hardware OSHW. We developed a major application running on OSHW Olimex boards. The application is called opensesame. It is heavily relying on Elektra and ansible-libelektra.
In the initial release opensesame already allows:
- [x] opening (garage) doors via a novel PIN entry method: you can press and release buttons in any sequence
- [x] switching on entry lights
- [x] ringing doorbells
- [x] detection of fire
- [x] report events to Nextcloud chats (English and German)
To give a smoother experience when running such an application we will develop Ansible scripts to customize the Olimex base images. They will allow changing the language, time zone, static network configuration etc.
Olimex likes this idea and will send us an A20 board. A big thanks to Olimex.
Improving Elektra in FLOSS course
Also in the upcoming term Elektra will be object of study how FLOSS initiatives work. Students will make improvements in Elektra as part of their homework, teamwork and, if chosen, also for their project. Alternatively, they can also improve other self-chosen FLOSS initiatives.
Plugins
The following text list news about the plugins we updated in this release.
- fix unused-but-set-variable warnings. (Markus Raab)
csvstorage
- Remove superfluous if-conditions that lead to a build error on Debian Unstable (Maximilian Irlinger @atmaxinger)
specload
- fail if either the spec or parentKey parameter of elektraSpecloadSendSpec is NULL (@hannes99)
Libraries
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
- fix unused-but-set-variable warnings. (Markus Raab)
opts
- opts: fix possible 'free(): invalid pointer' error and add test for it (@hannes99)
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.
Python
- add merging based on elektraMerge (Maximilian Irlinger @atmaxinger)
Rust
- start again to publish on crates.io, used by opensesame (Markus Raab)
Documentation
- Added Documentation Guidelines (Markus Raab)
- Decisions for changes to
keyIsBelowand newkeyGetNextPartfunctions (@kodebach) - Apply fix spelling to more files. (Markus Raab)
Tutorials
- opts: use arg/help instead of arg/name (@hannes99)
Man Pages
- Update FAQ. (Markus Raab)
Tests
- Use GoogleTest framework v1.12.1. (Mihael Pranjić @mpranj)
Build
CMake
- Fix build with newer libgit2 versions (Fabian Vogt)
- We now require at least CMake
3.12(released in July 2018). (Maximilian Irlinger @atmaxinger)
Docker
- Bump Alpine Linux to 3.16.0. (Mihael Pranjić @mpranj)
- The Docker image for building the documentation is now based on Debian Bullseye. (Maximilian Irlinger @atmaxinger)
- Add Fedora 36 images. (Mihael Pranjić @mpranj)
Infrastructure
Jenkins
- We no longer build and test on Ubuntu Xenial and Debian Stretch due to outdated CMake versions (Maximilian Irlinger @atmaxinger)
- Add Fedora 36 builds, remove Fedora 34 builds. (Mihael Pranjić @mpranj)
Cirrus
- Update FreeBSD images to 13.1 and 12.3 and update packages before builds. (Mihael Pranjić @mpranj)
- Bump Fedora builds to Fedora 36. (Mihael Pranjić @mpranj)
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:
- 1.0 API (Klemens Böswirth @kodebach) and (Stefan Hanreich)
- 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) and (Maximilian Irlinger)
- Configure Olimex Base Images (Maximilian Irlinger)
- Improving Build Server Infrastructure (Lukas Hartl) and (Maximilian Irlinger)
- Improve Java Development Experience (Michael Tucek)
- Rewriting tools in C (@hannes99)
Statistics
We closed 17 issues for this release.
About 11 authors changed 156 files with 4020 insertions(+) and 3298 deletions(-) in 134 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
The hashsums are:
- name: elektra-0.9.11.tar.gz
- size: 9149900
- md5sum: 227094a7760f8faece1a7b8386d01fce
- sha1: a0d2f0d39c8360f67da96585993223b7f9cdebe6
- sha256: 3509adf83efdf08fa0dc5d51396772addff7d8fc82299c18b146fa4406eecff5
The release tarball is also available signed using GnuPG from
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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj over 3 years ago
Elektra - 0.9.10 Release
- 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:
sh
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
directoryvalueto use external iteration ofKeySets (Florian Lindner @flo91)
Python
- Added
.pop(),.cut(),.head()and.tail()examples to keySet example (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard) - Added a new DNS plugin fully written in Python (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)
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
strptimeon 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, andksTailfunctions for internal iteration ofKeysets and Metadata ofKeys (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
NULLinrb_funcallwithQnilto 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
- Removed mentions of VERBOSE (@mandoway)
Python
- Deleted occurrences of removed property key.fullname (@mandoway)
CPP
- Removed mentions of VERBOSE (@mandoway)
Tools
elektrad
- improve logging in
elektrad(Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard) - Update
elektradto use last version of thego-bindings without internal iterators forKeysets and Metadata (Florian Lindner @flo91)
webui
- fix issues from namespace-overhaul (Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)
- apply non-breaking updates to packages (Leonard Guelmino @leothetryhard, Lukas Hartl @lukashartl)
webd
- fix path building for requests to
elektrad(Lukas Hartl @lukashartl, Leonard Guelmino @leothetryhard)
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 LookupsandCommand-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
- The tutorial for Contributing from Windows has been updated. (@kodebach)
- The tutorial for CLion now contains a section for setting up the WSL compiler (@mandoway)
- Rephrased sentence in code-generator.md to enhance readability (@Gratla)
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
.gitattributesfile 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 Startedpage by adding a briefkdbintroduction. (@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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj over 3 years ago
Elektra - 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:
sh
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
- Add
arraymeta key to the parentKey of imported Keys (@muskater) (@4ydan) (@lawli3t)
specload
- Change and move
keyCompareMeta (const Key * k1, const Key * k2)fromsrc/libs/elektra/keytest.ctosrc/plugins/specload/specload.cand integrate functionality of keyCompare (const Key _ key1, const Key _ key2) intoisChangeAllowed (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
serialiseandunserialisehave been renamed toserializeandunserialize. (Klemens Böswirth @kodebach) - New exported functions
int fserialize(KeySet * ks, FILE * file, Key * errorKey)andint funserialize(KeySet * ks, FILE * file, Key * errorKey)have been added. These are wrappers aroundserializeandunserializethat allow calling from C with a standardFILE *. (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_NAMEandKEY_COMMENT(closes issue #3152) (Florian Lindner @flo91)
Core
KeySetnow also has a reference counter likeKey. The new functionsksIncRefandksDecRefbehave like their counterpartskeyIncRefandkeyDecRef.ksDelalso behaves likekeyDelin 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
Keyand forKeySetnow useuint16_tto reduce memory usage.Keypreviously usedsize_t. (Klemens Böswirth) - Reorder
KeyandKeySetstruct members to aviod padding and make space for a newuint16_tmember, reserved for future use. (Mihael Pranjić @mpranj) - Improve
keyReplacePrefixby using newkeyCopyfunction instead of manually copying the name of theKey(@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
keyCopyMetanot deleting non existant keys in destination (see #3981) (@JakobWonisch) - The
ELEKTRA_ERROR_*_NAMEandELEKTRA_WARNING_*_NAMEconstants have been removed from the public API. UseELEKTRA_ERROR_*andELEKTRA_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
HelloElektraexample as Gradle sub-project to allow it to directly depend on the current binding (Michael Tucek) - Extend
HelloElektraexample with cutpoint and value setting example (@JakobWonisch) - Updated Gradle to 7.4. (Mihael Pranjić @mpranj)
- Added integration with the new
processplugin. (Klemens Böswirth @kodebach) - Integrated the
HelloElektraexample as gradle sub-project to allow it to directly depend on the current binding (Michael Tucek) - Add
LinkCheckerJava 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-javahelper script for mounting Java plugins (Klemens Böswirth @kodebach)
Scripts
- Updated
reformat-cscript 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
typeis 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=intfrom.inifiles (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.mdandscripts/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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj almost 4 years ago
Elektra - 0.9.8 Release
- 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:
sh
docker pull elektra/elektra
docker run -it elektra/elektra
Highlights
kdbnow prohibits write operations on cascading keys that miss a corresponding existing key. See the details in theToolssection 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
*.cand*.hfiles 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
goptsplugin now includes deeply nested options and arguments in the generated help message. (Tobias Schubert @qwepoizt) - Errors from
goptsare now correctly reported. (Klemens Böswirth) - Fix wrong variable names in
gopts_win32.h. (Tobias Schubert @qwepoizt)
range
- The
rangeplugin now uses metakeytypeas fallback, ifcheck/typeis not specified. (Tobias Schubert @qwepoizt) - The
rangenow treats all validation problems as warnings during kdbGet(). (Tobias Schubert @qwepoizt)
spec
- The
specplugin now runs before otherpostgetstorageplugins, so that validation can happen duringkdbGetas well. This is especially relevant in combination withgopts. (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_COMMITexport. (Tobias Schubert @qwepoizt)
TOML
- Improvements to the parser, comment handling and especially quoting of strings. (Klemens Böswirth)
- The
tomlplugin now supports all four kinds of strings via thetomltypemetadata. 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/#/spacemetakey 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
ksSearchInternalis now static. UseksSearchinstead.
(Michael Tucek)
Core
- Remove obsolete
ksNeedSyncfunction. (Mihael Pranjić) - Replace various occurences of
sprintfbysnprintfand 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 andspec-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::createNamelesstoKey::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 argumentparentKey
- Updated javadoc for
- Introduced
KeySet::remove(Key)andKeySet::remove(String) - Removed
KeySet::lookup(Key, int)andKeySet::lookup(String, int)as well as accompanying flag definitionsKeySet::KDB_O_NONE,KeySet::KDB_O_DELandKeySet::KDB_O_POP. Please useKeySet::lookup(Key)andKeySet::lookup(String)instead. Instead ofKeySet::KDB_O_DEL, please consider usingKey::release. The proper replacement forKeySet::KDB_O_POPisKeySet::remove(Key)orKeySet::remove(String). - Native library proxy interface
Elektrais now package private (previously was public). - Added example Java plugin
whitelist(see here) - Changed
Key nextMeta()toOptional<Key> nextMeta ()no longer throwing NoSuchElementException for non-exceptional behavior - Native library proxy interface
Elektrais now package private (previously was public) - Added example Java plugin
whitelist - Added support of binary valued keys:
- Introduced
Key::getBinary()andKey::setBinary(byte[]) - Renamed
KeyBinaryTypeNotSupportedExceptiontoKeyStringValueException - Introduced
KeyBinaryValueException - Improved
Keytest coverage
- Introduced
- 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
KeySetReleasedExceptionandKeyReleasedExceptionhave been replaced by the nativeIllegalStateException- Introduced abstraction
ReadableKeyto better reflect the limitations of meta data keys via a type hierarchy. Meta data keys are now returned asReadableKeys:KeyextendsReadableKeyKeyclass is now final- Changed
Key Key::nextMeta()toOptional<ReadableKey> Key::nextMeta(), no longer throwing NoSuchElementException for non-exceptional behavior - Changed
Key Key::currentMeta()toReadableKey Key::currentMeta() - Changed
Optional<Key> Key::getMeta(String)toOptional<ReadableKey> Key::getMeta(String) - Meta data keys can no longer be manually released
- Removed
Key::incRef,Key::decRefandKey::getRef ReadableKey/Keynow implementsComparable<ReadableKey>int Key::cmp(Key)has been renamed toint Key::compareTo(Key)ReadableKeynow implementsequalsandhashCodein line with the contract forint Key::compareTo(Key)ReadableKey/Keyno longer implementsIterable<String>for iterating over the parts of a key's name - useIterator<String> ReadableKey::keyNameIterator ()insteadKeynow implementsIterable<Key>to iterate over a key's meta dataReadableKeys- Fixed API method typo: Renamed
ReadableKey::isDirectBelow/Key::isDirectBelowtoisDirectlyBelow
KeyNameIteratorandKeySetIteratorare now package privateKeySetAppendExceptionhas been renamed toKeySetExceptionand now conveys generalKeySetrelated exceptional statesKeySetnow implementsSortedSet<Key>(see Java API). PreviouslyKeySetwas only implementingIterator<Key>. Now a native key set can be used via itsKeySetrepresentation wherever one of the following Java Collection Framework interfaces is supported:IterableCollectionSetSortedSet
(Michael Tucek)
GLib
- Compile
glibbinding with-Wno-pedanticfor 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: forkdb set,spec:forkdb 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/--namespaceoption in all kdb subcommands (Alexander Firbas) - Implement new name part getter commands
kdb namespace,kdb basenameandkdb 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_cryptoon 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 buildcommands. (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
tmpfsin 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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj over 4 years ago
Elektra - 0.9.7 Release
- 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:
sh
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.
- 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
tomlplugin 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
typemetakey 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*AndReleaseconvenience 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
dbuschange 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_glibandio_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.
For more information, see https://libelektra.org.
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj over 4 years ago
Elektra - 0.9.6 Release
- 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
- Removed outdated information from docs (@a-kraschitzer)
Libraries
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
Core
- Remove keyCompareBy(Name)?Owner (@a-kraschitzer)
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 warningsoption 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()toCleaner- Please revisit the documentation for
Key::releaseandKeySet::releasefor 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.
- Please revisit the documentation for
- 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
KeyAPI introducing the following changes:- Extracted exceptions from
Keyclass - Fixed
Key::getCurrentMeta - Moved
Elektra.KeyNewArgumentFlagstoKey.NewArgumentTag - Changed return types from
inttobooleanor enabled a fluent interface where appropriate - Renamed
Key::*IntegertoKey::*Int - Renamed
KeyInvalidNameExceptiontoKeyNameException - Renamed
KeyTypeMismatchExceptiontoKeyBinaryTypeNotSupportedException - Introduced
Key::get*AndReleaseconvenience methods - Introduced
Key::createNameless - Introduced
KeyReleasedExceptionbeing thrown when a releasedKeyis being accessed - Introduced
KeyMetaException - Removed unused
KeyTypeConversionException - Removed
Key::needsSync - Removed
Key::isNull KeyReleasedExceptionis now being thrown when a released (= previouslyisNull)Keyis being accessedKeys with no backing native key pointer cannot be created anymore
- Extracted exceptions from
- Updated
KeySetAPI introducing the following changes:- Changed return type enabling a fluent interface where appropriate
- Renamed
KeySet::headtoKeySet::first - Renamed
KeySet::tailtoKeySet::last - Introduced
KeySetReleasedExceptionbeing thrown when a releasedKeySetis 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 returnsOptional<Key>Key::getMetanow returnsOptional<Key>- Example:
java // checking whether the key has been found BEFORE API change Key found = ks.lookup("/some/key"); if (found != null) { // process found key }java // checking whether the key has been found AFTER API change ks.lookup("/some/key").ifPresent(k -> // process found key );
- Updated
KDBAPI introducing the following changes:- Introduced
KDBClosedExceptionbeing thrown when a closedKDBsession 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
- Introduced
- Updated tests accordingly
(Michael Tucek)
Tools
- Remove
kdb setfunctionality that creates a null key. (Robert Sowula) - Rename elektraStrnDup to elektraMemDup (@a-kraschitzer)
- Update specmount error message (@a-kraschitzer)
- Update
elektraMemDuptovoid *and update the documentation. (Mihael Pranjić) - There have been a few bugfixes for elektrad. (Klemens Böswirth)
- Update
lodashandhosted-git-infodependencies ofwebddue 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
shfmtv3.2.4 to reformat shell scripts. (Mihael Pranjić) - Use
cmake-formatv0.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/Doxyfileto Doxygen 1.9.1 and fix a syntax error with theFILTER_PATTERNSdirective. (Mihael Pranjić)
Tests
- Fix failing
testshell_markdown_tutorial_cryptoon 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_TESTINGis disabled. (Robert Sowula) - Remove unused
FindCppCMS.cmakeCMake module and unusedBoostvariables. (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.pre1in Docker images. (Mihael Pranjić) - Remove unused Debian Buster
docimage. (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
jniplugin and fixJAVA_HOMEdetection. (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.jsdue 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
lodashdependency 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.
For more information, see https://libelektra.org
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj over 4 years ago
Elektra - 0.9.5 Release
- 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
c
KDB * kdbOpen (Key * errorKey);
to
c
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:
c
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
cacheplugin now only caches the parts of the global keyset that are belowsystem:/elektra/cacheor belowsystem:/elektra/cached. The part belowsystem:/elektra/cacheis meant for internal data of thecache, so you should put data belowsystem:/elektra/cached, if you want it to be cached. (Klemens Böswirth)
internalnotification
- Fix use of
kdb_long_double_ton 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
yamlsmithandyanlr. (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
keyCopyandkeyDupnow take an additional flag. See below.kdbEnsurewas removed and integrated intokdbOpen, which now takes an additionalKeySet * contractparameter. See above
Core
- The
keyCopyandkeyDupfunctions have been changed. They now take aflagsargument which specifies which parts of theKeyshould be copied. The API also changed slightly. Most importantlyNULLvalues are handled differently. For example,keyDup (NULL, KEY_CP_ALL)returns a key similar to whatkeyNew ("/", KEY_END)produces, whereas previouslykeyDup (NULL)returnedNULl. (Klemens Böswirth) - We added
keyReplacePrefix, a function that allows you to easily move a key from one parent to another. (Klemens Böswirth) kdbEnsurewas removed and replaced by similar functionality added tokdbOpen. see above (Klemens Böswirth)KEY_ENDis now defined as(void *) 0instead of0. This allows us to markkeyNewwith the GCC attribute__attribute__ ((sentinel)), which causes a compiler warning, ifkeyNewcalls don't useKEY_ENDas their last argument. (Klemens Böswirth)
Io
elektraSetIoBindinghas been removed. UseelektraIoContractinstead. (Klemens Böswirth)
Notification
elektraNotificationOpenhas been removed. UseelektraNotificationContractinstead.elektraNotificationClosehas also been removed. There is no replacement, cleanup now happens automatially duringkdbClose. (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
KeySetis due to being dropped, the following methods have been removed:Elektra::ksNextElektra::ksCurrentElektra::ksGetCursorElektra::ksSetCursorKeySet::nextKeySet::currentKeySet::rewindKeySet::getCursorKeySet::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
KeyExceptionspecializations:KeyInvalidNameException,KeyTypeConversionException,KeyTypeMismatchExceptionMigration 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: updateini,y18nandellipticdependencies. (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
dbusservice before running tests and findDBUS_LAUNCHD_SESSION_BUS_SOCKETmanually (as workaround). (Mihael Pranjić) - Use macOS Big Sur images. (Mihael Pranjić)
GitHub Actions
- Fix issues with
dbusand java paths, excludejni. (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
inidependency. (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.
For more information, see https://libelektra.org
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj almost 5 years ago
Elektra - 0.9.4 Release
- 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
warningsmetadata array has been changed. see below (Klemens Böswirth) - We removed the
iniplugin (superseded by the TOML plugin), thenullplugin (superseded by the base64 plugin) and thetclplugin (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 ofsystem/elektra/versionyou have to usesystem:/elektra/version.The second big change is to array elements. From now on
keyNew ("/array/#10", KEY_END)will create aKeywith 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 functionskeyGetMetaandkeySetMetaautomatically add this namespace to preserve compatibility. However, if you use the recently introducedkeyMetaor 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 thespecplugin).
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
keyInactivehas been removed. The concept of inactive keys no longer exists, use comment/# instead.ElektraNamespaceis the new C++enum classfor the Elektra's namespaces. You should prefer it to usingKEY_NS_SYSTEMet al. directly, if you use C++.keyGetFullNameet 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:
- Every key below (and including)
system:/elektra/mountpoints/<MOUNTPOINT>uses an old key names as<MOUNTPOINT>, if the mountpoint was created withkdb mount. - The value of all keys matching
system:/elektra/mountpoints/*/mountpointmust 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:
```sh
! /usr/bin/env sh
kdb export system:/elektra/mountpoints ni > mountpoints.ini sed -E 's~((^[?|/mountpoint = )(user|system))((\\)?/)~\1:\4~g' mountpoints.ini > mountpointscorrected.ini kdb mv -r system:/elektra/mountpoints system:/elektra/mountpoints-backup kdb import system:/elektra/mountpoints ni < mountpointscorrected.ini ```
Note: The original
system:/elektra/mountpointsdata will be moved tosystem:/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
- First, you need to obtain the repository key:
sh
sudo apt-key adv --keyserver keys.gnupg.net --recv-keys F26BBE02F3C315A19BF1F791A9A25CC1CC83E839
- Add
deb https://debs.libelektra.org/<DISTRIBUTION> <DISTRIBUTION> maininto/etc/apt/sources.listwhere<DISTRIBUTION>is the codename of your distributions e.g.focal,bionicorbuster.
sh
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:
sh
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
jniplugin is closed. (Mihael Pranjić)
mINI
- We changed the
providesclause 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
- We fixed an use after free bug in the plugin. (René Schwaiger)
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) forsystem:/elektra, if the bootstrap backendKDB_DB_INIT(elektra.ecf) isn't found). If you still rely on this feature, either usekdb upgrade-bootstrapbefore upgrading, or manually extractsystem:/elektraintoelektra.ecf. - There was an update to how warnings are generated.
For users this means that the
warningsmetadata now forms a proper array. Specifically, the first 100 warnings are stored below to the meta keyswarnings/#0,warnings/#1, ...,warnings/#9,warnings/#_10, ...,warnings/#_99. After that, warnings will wrap around, so the 101st warning will be stored aswarnings/#0, 102nd aswarnings/#1etc.
Core
kdbSetnow properly handles, if the givenparentKeyisNULLor has read-only name, value or metadata. (Klemens Böswirth)
Proposal
- Removed
elektraKeyGetMetaKeySetand movedkeySetStringFto 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
__ipairswas deprecated. (Manuel Mausz)
JNA
- Fixed allocation not correctly conveyed on key set initialization (Michael Tucek)
C++
ElektraNamespaceis the new C++enum classfor the Elektra's namespaces. You should prefer it to usingKEY_NS_SYSTEMet al. directly, if you use C++. The arrayELEKTRA_NAMESPACEScan be used to iterate over all namespaces. (Klemens Böswirth)
Ruby
- Enable
__declspecattributes for Ruby 3.0. (Mihael Pranjić)
Tools
- The kdb cmd-line tool outputs better error messages on wrong names like
useroruser:asuser:/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-stringin check-env-dep. (René Schwaiger)
Documentation
- Finalize 1.0 decisions. (Markus Raab)
- Update API design document (Markus Raab and Stefan Hanreich)
- Update release instructions (Robert Sowula)
- Changed API documentation terms [current, latest] to [latest, master]. The API documentation of the latest release is now available at https://doc.libelektra.org/api/latest/html/ and of the current git master at https://doc.libelektra.org/api/master/html/. (Robert Sowula)
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_NODELETEon dlopen() when theENABLE_ASANCMake 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.
For more information, see https://libelektra.org
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj about 5 years ago
Elektra - 0.9.3 Release
- 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
nullplugin dependency of the plugin. (Jakob Fischer) - The
typemetakey is now set for numbers on reading. (Jakob Fischer)
dump
- The
dumpplugin 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
dumpfiles can now be imported into a different mountpoint. (Klemens Böswirth) dumpno longer writes unnecessary zero-bytes into files. This means that as long as all key-values are human-readable, so is thedumpoutput. This makesdumpusable 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 brokendumpfiles. 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_trenamed to elektraKeyFlags. (Markus Raab)option_trenamed to elektraLockFlags and elektraLookupFlags. (Markus Raab)cursor_trenamed 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
sh
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 innpmv5.2.0 or newer. This allows us to specify an exact version of prettier to use. (Klemens Böswirth) - The
reformat-shellscript now accepts the aliasshfmt2, in caseshfmtv3 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 oftexlive-fonts-extra) andstmaryrd(part oftexlive-scienceortexlive-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_storagefunction. (Lukas Kilian) - We now ensure that the
check_importandcheck_exporttests run for at least one plugin. (Lukas Kilian)
Build
CMake
make uninstallalso uninstalls symlinks. (Markus Raab)external-links.txtandextra_install_manifest.txtare cleaned up at cmake runs. (Markus Raab)- Increased CTest timeout for
testscr_check_kdb_internal_suitedue 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-devfrom 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.jsonto 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.
For more information, see https://libelektra.org
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj over 5 years ago
Elektra - 0.9.2 Release
- guid: ea79f59e-f471-4658-a11b-1371802814c2
- author: Mihael Pranjic
- pubDate: Tue, 26 May 2020 19:33:30 +0200
- shortDesc: KDE and GNOME Integration,
elektradin 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
elektradrewritten 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-agentfailed. (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
renamefails. 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_footofoo. (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
xmltoolplugin. (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 meta key array. (René Schwaiger)
YAML CPP now always sets and requires the metakey
typewith the valuebooleanfor 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)
- you enabled the logger (
Yan LR
- The CMake code of the plugin does not print error messages produced by the tool
lddany 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
argvgiven by the/offsetconfig key. If/offsetis set,goptswill ignore a number of arguments at the start ofargv. This can be used in e.g. python scripts to ignore the interpreter arguments. (Klemens Böswirth) goptsnow also writes help message into the keyproc/elektra/gopts/help/messagein addition to settingproc/elektra/gopts/help = 1. This is especially useful in non-C/C++ environments. (Klemens Böswirth)goptsis also affected by the changes and improvements to theoptslibrary outlined below.
Cache
- Respect
XDG_CACHE_HOMEwhen 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_MICROtosystem/elektra/version/constants/KDB_VERSION_PATCHto be compatible with Semantic Versioning 2.0.0. (Markus Raab)
Opts
- The library function
elektraGetOptsnow supports sub-commands. Sub-commands are best explained by looking at an application that uses them, likegit. For exampleaddis a sub-command ingit add, and interprets-pdifferently fromgit:git -p addisgit --paginate add, butgit add -pisgit add --patch.elektraGetOptsnow 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 thegoptsplugin. (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=remainingmetadata (because theiropt/helpmay 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
elektraandelektra-systo crates.io. (Philipp Gackstatter)
Tools
- Update
kdb cachetool 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-setinstead ofsetmeta) introduced with Elektra0.9.1. (René Schwaiger) - The script reformat-cmake now reformats the code with
cmake-format0.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
shfmt3, 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
webtool. (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.10to 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_PATHis not being set globally to contain the build directory any longer. (Peter Nirschl)- Rewrite gpg-agent shutdown logic to use
forkandexecvinstead ofsystem. (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, andblockresolver
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_testandadd_msr_test_plugindo 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-clangdue 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-asananddebian-unstable-full-clangnow use Clang 9 to compile Elektra. (René Schwaiger) - Added the
Jenkins.monthlyin 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.lockfile. (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.
For more information, see https://libelektra.org
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj over 5 years ago
Elektra - 0.9.1 Release
- 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
kconfigwas added which can read KDE's kconfig ini files. Additionally we are working on a fork of KDE'sKConfigconfiguration 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 namenameOfPluginCheckConfiginstead. (René Schwaiger) - We improved the error messages in
crypto,fcrypt, andgpgmeplugins. (Peter Nirschl) - We now correctly handle return codes (error codes) of
execvin the GPG module. (Peter Nirschl) - We improved the documentation of
ksAppendKeyregarding ownership of keys. (Raphael Gruber) - We removed the experimental status of the following plugins:
goptsspecload. (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
argvfrom the system, was added. (Klemens Böswirth) - A function to detect help mode, without invoking
elektraGetOptswas added. It simply checks, whether--helpis one of the string inargv. (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
- The Markdown Shell Recorder test of the plugin now also works, if you execute it as root user. (René Schwaiger)
Spec
- There is now the config key
missing/logthat allows logging of all missingrequired keys. (Klemens Böswirth) specnow 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_SPECinstead of the current working directory. (Klemens Böswirth) - Changes to
defaultortypemetadata are no longer supported, since they are not safe in every case. (Klemens Böswirth) - The plugin no longer has the
experimentalstatus. (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
typeplugin. For example, settingon,enableortrueall map to JSONs nativetruevalue. 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-lelektrato-lelektra-core -lelektra-kdbor whatever parts of Elektra your application uses. (Markus Raab) - The conversion functions
elektraKeyTo*andelektra*ToStringare now part of theelektra-easelibrary instead of theelektra-highlevellibrary. This should not cause any breaking changes sinceelektra-highlevelalready depends onelektra-ease. In addition the headerelektra/conversion.his kept for compatibility. (Klemens Böswirth) - Fixes in documentation that might disallow some code operating in grey areas before. (Markus Raab)
- We removed
keyRelandkeyRel2since it can be easily replaced by other existing functions. (Philipp Gackstatter)
We changed the following symbols:
- ELEKTRAPLUGINCOMMIT
- 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
- kdboctett
- kdbbooleant
- kdbshortt
- kdblongt
- kdblonglong_t
- kdbunsignedshort_t
- kdbunsignedlong_t
- kdbunsignedlonglongt
- kdbchart
- kdbfloatt
- kdbdoublet
- kdblongdouble_t
Core
- A new plugin function,
kdbCommit, was implemented. The function is carried out in thecommitphase ofkdbSetand separates the commit functionality from thekdbSet()function. (Vid Leskovar) kdbconfig.his no longer included in the installed headers. This is because it could cause conflicts with otherconfig.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.hdirectly without generation of thespecificationfile because of drastically reduced error code count (Michael Zronek) keyIsDirectBelowwas renamed tokeyIsDirectlyBelow. (Philipp Gackstatter)keyMetawas added to provide access to a key's underlying KeySet that holds its metadata keys. (Philipp Gackstatter)- Removed the obsolete
ksLookupByStringandksLookupByBinary, as well as deprecatedKDB_O_*options. (Philipp Gackstatter) - Added
keyLockandkeyIsLocked. (Manuel Mausz) - Removed
keyVInit. (Manuel Mausz)
Opts
- The option
-his 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:elektraKsToMemArraywas moved tokdbease.h,elektraLookupOptionswas moved tokdbprivate.h,keySetStringFwas moved tokdbinternal.h,- Removed
ksPrevandelektraKsPrev, - Removed
elektraRenameKeysand replaced it withksRenameKeys. (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_atcursortogelektra_keyset_at. (Manuel Mausz) - gsettings: adapt iterator. (Manuel Mausz)
- SWIG: Add
KeyNotFoundExceptionexception. (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,...])andKeySet.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-syscrate which contains raw bindings to libelektra for Rust. (Philipp Gackstatter) - Add the
elektracrate which contains safe wrapper methods for the raw bindings. The crate contains bindings for the low-level API, which means that the data typesKeyandKeySetcan 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 intoStringKeyandBinaryKey, to prevent type mismatches at compile time. With the binding forKDB, one can take advantage of the elektra ecosystem from Rust. See the Readme for more. (Philipp Gackstatter) - Rewrote the
KDBErrorto 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 tokdb, now supports:to separate paths.kdb list-toolsandrun_envwere improved to take advantage of this. (Markus Raab)- Checks for
kdbCommithave been added to kdb plugin-check. (Vid Leskovar) - Added PID file config setting for kdb-run-rest-frontend (Markus Raab)
- Added
kdb meta-showcommand which prints out all metadata along with its values for a given key. (Michael Zronek) - Removed
kdb vsetas it does not properly put meta-data to the spec namespace. (Michael Zronek) - Renamed kdb plugin commands following a hierarchical structure.
kdb infois nowkdb plugin-info,kdb checkis nowkdb plugin-checkandkdb listis nowkdb plugin-list. We also removed the obsoletekdb fstab. (Philipp Gackstatter) - Renamed kdb meta commands:
kdb getmetais nowkdb meta-getkdb lsmetais nowkdb meta-lskdb showmetais nowkdb meta-showkdb rmmetais nowkdb meta-rmkdb setmetais nowkdb meta-set(Philipp Gackstatter)
- Fix test tool
gen-gpg-testkeyby giving a narrower GPG key description. Fixes mismatches with existing GPG keys that contain "elektra.org" as e-mail address. (Peter Nirschl) kdb list-commandsandkdb plugins-listnow sort their output in an alphabetical order (Anton Hößl)kdb plugin-listdoes now mention in the helptext that with option-vthe output is sorted by the plugin status (Anton Hößl)kdb import,kdb exportandkdb editornow search the plugin database for suitig plugins so it's now possible to runkdb export /hello jsoninstead of having to specify the plugin for the desired format directly. (Anton Hößl)getandmount: Remove dependency onkdbprivate.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/zshandexample-xorg. (Markus Raab)
Renamed
scripts/run_dev_envtoscripts/dev/run_env. (Markus Raab)The script
draw-all-pluginsnow also works properly, if the repository path contains space characters. (René Schwaiger)The script
link-checkernow 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 intests/linkchecker.whitelistwill 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-formattingnow lives inscripts/dev/pre-commit-check-formatting. (Klemens Böswirth)The new script
reformat-javascriptformats the JavaScript code of the repository using the toolprettier. (René Schwaiger)We renamed
- the script
reformat-sourcetoreformat-c, and - the script
reformat-shfmttoreformat-shell. (René Schwaiger)
- the script
The script cmake-format now requires
cmake-format0.6. (René Schwaiger)The new script
reformat-javaformats the Java code in the repository usingclang-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
makeorgccto 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 testdetects 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_zeromqsendfrom the commandkdb 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.his now generated directly via a CMakeconfigure_filecall. (Klemens Böswirth)- The variable
ELEKTRA_STAT_ST_SIZE_Fnow contains the correct format specifier for thest_sizemember of thestatstruct 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
conditionalsandyamlcppplugin 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
- Added Dockerfile for Ubuntu Bionic (Djordje Bulatovic)
- We removed all Haskell packages from the Dockerfiles in the folder scripts/docker. (René Schwaiger)
- We added a basic Dockerfile for Arch Linux. (René Schwaiger)
- We updated the Dockerfile for Alpine Linux. (René Schwaiger)
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-formatis used. (Klemens Böswirth, René Schwaiger) - Improved various error messages and synchronized documentations. (Michael Zronek)
- Improved
rangeplugin 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
🔗 Checkbuild 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.1instead of Xcode10.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
ninjadirectly anymore. Instead we usecmake --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
📚 Checkchecks- 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
🐧 Fedorabuilds 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
masterbranch anymore. (René Schwaiger) - Updated xUnit plugin in Jenkinsfile. (Djordje Bulatovic)
Restyled
Travis
- The build job
🍏 GCCnow uses the Travis Homebrew addon to install dependencies. (René Schwaiger) - We now build and test Elektra on Ubuntu
18.04(Bionic Beaver) instead of Ubuntu16.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.
For more information, see https://libelektra.org
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by mpranj about 6 years ago
Elektra - 0.9.0 Release
- guid: e8c753c0-74af-410b-9f66-77c3ce194717
- author: Markus Raab
- pubDate: Tue, 06 Aug 2019 12:09:02 +0200
- shortDesc: Cache, Command-line Options, Error Codes
What is Elektra?
Elektra serves as a universal and secure framework to access configuration settings in a global, hierarchical key database.
You can also read this document on our website.
We wrote a new article describing our vision from configuration management perspective.
For more information, visit https://libelektra.org.
0.9.*
We are proud to present our largest release so far. It is the first release of the 0.9.* version series, which goal is it:
- To prepare Elektra for version 1.0.0, which includes incompatible changes like new error codes (which are already part of this release, hence 0.9.0). When 0.9.* is mature enough, we will call it 1.0.0.
- To make Elektra future-proof so that during 1.*. most of Elektra's functionality can be kept stable
- To cleanup Elektra, including removal of compatibility layers and research prototypes.
Business Plans
To get away from a purely research-oriented approach to a mature foundation, we also need paid employees to fix problems.
We plan to introduce following ways of income:
- donations
- paid support/feature requests
- consultancy
If you are interested in any of these, please contact us via business@libelektra.org
The 0.8.* version series will be maintained on paid requests. If you have maintenance requests and want 0.8.27 to be released, please contact us via business@libelektra.org
Please note, that Elektra will definitely stay 100% free software (BSD licensed). We do not plan to make any part proprietary. We only introduce a way for paid customers to get desired features or help more quickly.
Highlights
- Cache
- Command-line Options
- Error Codes
Cache
Cache is a new global caching plugin. It uses mmapstorage as its storage backend and lazily stores the whole configuration from previous configuration accesses.
With large or many configuration files, the cache brings amazing performance improvements: Let us say, you have 649 INI configuration files mounted with the multifile resolver, completely specified (which means that the specification must be copied to all the configuration settings). Before the cache, retrieving the whole configuration would take 6 or even 13 seconds. With the cache, the whole operation now takes less than 0.5 seconds after the first access.
This is an important step towards the goal of Elektra to integrate all configuration files present on a system.
Limitations:
- Mountpoints that are not connected with files, currently cannot be cached.
- The cache currently does not work together with other global plugins.
By default, the cache will automatically enable itself once the cache plugin is installed.
The cache can be found in ~/.cache/elektra.
We also added tools for enabling, disabling and clearing the cache (kdb cache {enable,disable,default,clear}).
A big thanks to (Mihael Pranjić) for the excellent work.
Command-line Options
Gopts is a new plugin that integrates support for command-line options to applications:
- The gopts plugin retrieves the values of
argc,argvandenvpneeded forelektraGetOptsand then makes the call. It is intended to be used as a global plugin, so that command-line options are automatically parsed whenkdbGetis called. (Klemens Böswirth) - The plugin works under WIN32 (via
GetCommandLineWandGetEnvironmentString), MACOSX (`NSGetArgc,NSGetArgv) and any system that either has asysctl(3)function that acceptsKERNPROC_ARGS(e.g. FreeBSD) or whenprocfsis mounted and either/proc/selfor/proc/curproc` refers to the current process. If you need support for any other systems, feel free to add an implementation.
This means, that using the plugin, you do not need to call elektraGetOpts yourself anymore.
kdbEnsure is a new function in elektra-kdb. It can be used to ensure that a KDB instance meets certain clauses specified in a
contract. In principle this a very powerful tool that may be used for a lot of things.
All changes made by kdbEnsure are purely within the KDB handle passed to the function.
For example, kdbEnsure can be used, to ensure the availability of command-line options for your application.
Limitations:
kdbEnsureonly works, if thelistplugin is mounted in all appropriate global positions.kdbEnsuredoes not take care of dependencies between plugins.- Mounting of non-global plugins is not supported.
A big thanks to (Klemens Böswirth) for the excellent work.
Error Codes
With this release, we changed our messy error code system into a more structured and clean way. Similar to SQLStates we changed to structure of our error codes and migrated them. Have a look into the new codes. This allows us to easily extend the specification without breaking existing codes and to avoid risking duplicated errors as we had before. (Michael Zronek)
We were able to reduce the former 214 to now only 9 error codes.
For background information read:
A big thanks to (Michael Zronek) for the excellent work.
Plugins
The following section lists news about the plugins we updated in this release. In total, we added 9 plugins and removed 2 plugins.
Type (New Version)
The type plugin was completely rewritten in C. The old version is now called cpptype. (Klemens Böswirth)
The new type plugin also provides the functionality of the enum and the boolean plugin. These plugins are now considered obsolete and
you should use type instead.
A few notes on compatibility:
- the new
typedoes not support the full feature set ofenumandboolean, but it supports the features we consider useful. - the new
typedoesn't supportFSTypeandempty. These have been deprecated for a long time and there are good alternatives available. - the new
typesupportsenum,wcharandwstringas types, whereas the oldcpptypewould throw an error for these. In most cases this won't be a problem, but you should be aware of this breaking change. - the new
typedoes not supportcheck/type/minandcheck/type/max, please use therangeplugin instead.
To switch from enum to the new type, you have to add either check/type=enum or type=enum. Without a check/type or type metakey,
the type plugin will ignore the key. We now also support converting enum values to and from integer values (see
README).
To switch from boolean to the new type, you don't have to do anything, if you used the default config. If you used a custom configuration
please take a look at the README.
Base64
- We fixed some warnings about implicit type conversions reported by UBSan in the base64 plugin. (René Schwaiger)
Crypto and Fcrypt
- Empty GPG key IDs in the plugin configuration are being ignored by the crypto plugin and the fcrypt plugin. Adding empty GPG key IDs would lead to an error when
gpgis being invoked. (Peter Nirschl) - Apply Base64 encoding to the master password, which is stored within the plugin configuration. This fixes a problem that occurs if ini is used as default storage (see 2591). (Peter Nirschl)
- Fix compilation without deprecated OpenSSL APIs. Initialization and deinitialization is not needed anymore. (Rosen Penev)
CSVStorage
- Support DOS newlines for the csvstorage plugin. (Vlad - Ioan Balan)
Filecheck
- We fixed some warnings about implicit type conversions reported by UBSan. (René Schwaiger)
INI
- Fixed INI plugin when only the root key needs to be written. (Mihael Pranjić)
- Plugin writes to INI files without spaces around '=' anymore. Reading is still possible with and without spaces. (Oleksandr Shabelnyk)
Macaddr
- Added a plugin to handle MAC addresses.
kdbGetconverts a MAC address into a decimal 64-bit integer (with the most significant 16 bits always set to 0), if the format is supported.kdbSetrestores the converted values back to there original form. (Thomas Bretterbauer)
mINI
- We fixed compiler warnings reported by GCC 9 in the unit test code of the plugin. (René Schwaiger)
Mmapstorage
- mmapstorage is now able to persist the Global KeySet, which is used by the
cacheplugin. (Mihael Pranjić) - Fixed support for
kdb importandkdb export. (Mihael Pranjić)
Multifile
- Fixed segmentation fault in
kdbError()function. (Mihael Pranjić) - Added Global Keyset handle to storage plugin. (Mihael Pranjić)
- Fixed use of wrong resolver handle in the
kdbError()function. (Mihael Pranjić)
Quickdump
- quickdump is a new storage plugin. It implements a more concise form of the dump format, which is also quicker too read. Contrary to dump, quickdump only stores keynames relative to the parent key. This allows easy relocation of configurations. (Klemens Böswirth)
- quickdump now also uses an variable length integer encoding to further reduce file size. (Klemens Böswirth)
Reference
- Fixed missing Metadata in README and METADATA.ini. (Michael Zronek)
- Update README.md web tool to show, how to test REST API on localhost. (Dmytro Moiseiuk)
RGBColor
- New plugin to validate hex formatted colors (e.g. #fff or #abcd) and normalize them to rgba (4294967295 (= 0xffffffff) and 2864434397 (= 0xaabbccdd) respectively). It also has support for named colors according to the extended color keywords from CSS3. (Philipp Gackstatter)
Semlock
Removed due to:
- constant pain
- never worked properly
- poor design
- no time in future to maintain (Kurt Micheli)
Spec
- The spec plugin was partly rewritten to better support specifications for arrays. This includes some breaking changes concerning the less used (and also less functional) parts of the plugin. To find out more about these changes take a look at the README. It now better reflects the actually implemented behaviour. (Klemens Böswirth)
Specload
- The specload plugin is a special storage plugin. Instead of using a storage file it calls an external application to request its specification. For the transfer it relies on the quickdump plugin. (Klemens Böswirth)
- Currently changing the specification is only allowed in a very limited way. However, in future the plugin should allow overriding a specification in all cases where this can be done safely. NOTE: While the plugin technically allows some modifications, because of a problem with the resolver this cannot be used right now (see limitations).
- We also export
elektraSpecloadSendSpecto abstract over thequickdumpdependency. (Klemens Böswirth)
Syslog
- We fixed an incorrect format specifier in a call to the
syslogfunction. (René Schwaiger)
Unit
- New plugin to validate units of memory and normalize them into bytes. E.g. 20 KB (normalized to 20000 Byte). (Marcel Hauri)
YAJL
The YAJL plugin which parses JSON files:
- now allows setting a value to the mountpoint. This is represented as a top level value in JSON if no other key is present. (Philipp Gackstatter)
- no longer lists empty parent keys with
kdb ls. (Philipp Gackstatter) - signifies arrays with the metakey array according to the array decision. (Philipp Gackstatter)
- no longer produces additional
___dirdataentries for empty array keys. See also issue #2477. (Philipp Gackstatter)
YAMBi
- YAMBi is now able detect multiple syntax errors in a file. (René Schwaiger)
- The error message now includes more information about the location of syntax errors. For example, for the incorrect YAML input
config.yaml:
yaml
key 1: - element 1
- element 2
key 2: scalar
- element 3
, the plugin prints an error message that includes the following text:
config.yaml:2:2: syntax error, unexpected start of sequence, expecting end of map or key
- element 2
^
config.yaml:4:8: syntax error, unexpected start of sequence, expecting end of map or key
- element 3
^
. (René Schwaiger)
- YAMBi now supports Elektra’s boolean data type. (René Schwaiger)
- The plugin now handles YAML key-value pairs without a value at the end of a file correctly. (René Schwaiger)
- The plugin now converts YAML key-value pairs with empty value to null/empty keys. (René Schwaiger)
- YAMBi now converts empty files to a key set containing an empty version of the parent key. (René Schwaiger)
YAML CPP
- The plugin now handles keys that are part of a map, but use a basename ending with array syntax correctly. For example, in a key set that contains keys with the following names:
user/array/#0
user/array/#1
user/map/#0
user/map/key
user/map/#1
, user/array/#0 and user/array/#1 represent array elements, while user/map/#0, and user/map/#1 do not, since the key set also contains the key user/map/key. The following Markdown Shell Recorder snippet shows the new behavior of the plugin:
sh
kdb mount config.yaml user yamlcpp
kdb set user/array/#0 one
kdb set user/array/#1 two
kdb set user/map/#0 three
kdb set user/map/key four
kdb set user/map/#1 five
kdb file user | xargs cat
#> array:
#> - one
#> - two
#> map:
#> "#0": three
#> "#1": five
#> key: four
. (René Schwaiger)
- YAML CPP now handles the conversion from and to Elektra’s boolean type properly. (René Schwaiger)
The plugin converts “sparse” key sets properly. For example, for the key set that contains only the key:
user/parent/#1/#2/map/#0with the valuearr
and uses user/parent as parent key, YAML CPP stores the following YAML data:
yaml
- ~
- - ~
- ~
- map:
- arr
. (René Schwaiger)
- YAML CPP now supports mixed data (nested lists & sequences) better. For example, the plugin now correctly converts the YAML data
yaml
root:
- element: one
- element: two
to the key set that contains the following keys:
user/tests/yaml/root
user/tests/yaml/root/#0/element
user/tests/yaml/root/#1/element
.
YAML Smith
- YAML Smith now converts keys that shares a common prefix correctly. For example, the last command in the script:
sh
kdb mount config.yaml user/tests/yaml yaml
kdb set user/tests/yaml/common/one/#0 value
kdb set user/tests/yaml/common/two/#0 first
kdb set user/tests/yaml/common/two/#1 second
kdb export user/tests/yaml yamlsmith
now prints the following YAML data:
yaml
common:
one:
- "value"
two:
- "first"
- "second"
. (René Schwaiger)
- The plugin now converts Elektra’s boolean values (
0,1) back to YAML’s boolean values (true,false). (René Schwaiger)
Yan LR
- The build system now disables the plugin, if you installed a version of ANTLR 4 that does not support ANTLR’s C++ runtime (like ANTLR
4.5.xor earlier). (René Schwaiger) - We fixed an ambiguity in the YAML grammar. (René Schwaiger)
- The build system now regenerates the modified parsing code, every time we update the grammar file. (René Schwaiger)
- The plugin now reports the location of syntax errors correctly. (René Schwaiger)
- The lexer for the plugin now emits start tokens for maps at the correct location inside the token stream. This update fixes a problem, where the plugin sometimes reported incorrect error messages for the first syntax error in a YAML file. (René Schwaiger)
- The plugin now stores the end position of map start tokens correctly. Before this update the plugin would sometimes not show the markers (
^) that point to the error positions inside the input. (René Schwaiger) - Yan LR now supports Elektra’s boolean data type. (René Schwaiger)
- The plugin now handles YAML key-value pairs that contain no value at the end of a file correctly. (René Schwaiger)
- The plugin now converts YAML key-value pairs with empty value to null/empty keys. (René Schwaiger)
- The plugin converts “empty” YAML files to a key set that contains an empty version of the parent key. (René Schwaiger)
YAwn
- YAwn is now able to print error messages for multiple syntax errors. (René Schwaiger)
- We also improved the error messages of YAwn, which now also contain the input that caused a syntax error. For example, for the input
yaml
key: value
- element
the plugin prints an error message that contains the following text:
config.yaml:2:3: Syntax error on input “start of sequence”
- element
^
. (René Schwaiger)
- The plugin now supports Elektra’s boolean data type. (René Schwaiger)
- YAwn handles YAML key-value pairs that contain no value at the end of a file correctly. (René Schwaiger)
- The plugin now converts YAML key-value pairs with empty value to null/empty keys. (René Schwaiger)
- YAwn now stores empty files as a key set containing an empty parent key. (René Schwaiger)
YAy PEG
- YAy PEG now also supports PEGTL 2.8. (René Schwaiger)
- The plugin now includes the input that could not be parsed in error messages. (René Schwaiger)
- We improved the error messages for certain errors slightly. For example, the error message for the input
yaml
"double quoted
now includes the following text
1:14: Missing closing double quote or incorrect value inside flow scalar
"double quoted
^
. (René Schwaiger)
- YAy PEG now supports compact mappings:
yaml
- key1: value1
key2: value2
and compact sequences:
yaml
- - element1
- element2
correctly. (René Schwaiger)
- The plugin now supports Elektra’s boolean data type. (René Schwaiger)
- YAy PEG now converts YAML key-value pairs with empty value to null/empty keys. (René Schwaiger)
- The plugin now translates an empty file to a key set that contains a single empty parent key. (René Schwaiger)
Libraries
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
Compatibility
We introduced several incompatible changes:
- different error codes are returned
- INI and YAJL plugins might write different files with the same KeySets
We changed following symbols:
- elektraIsReferenceRedundant
- elektraResolveReference
- elektraPluginFindGlobal
- kdbEnsure
Core
kdbGetnow calls global postgetstorage plugins with the parent key passed tokdbGet, instead of a random mountpoint. (Klemens Böswirth)- Fixed a double cleanup error (segmentation fault) when mounting global plugins. (Mihael Pranjić)
- Logging in Elektra was changed with this release. If Elektra is compiled with
ENABLE_LOGGERenabled, we now log warnings and errors to stderr and everything except debug messages to syslog. IfENABLE_DEBUGis also enabled, debug messages are logged to syslog as well. Previously you had to make some manual changes to the code, to see most of the logging messages. (Klemens Böswirth) - The logger does not truncate the file name incorrectly anymore, if
__FILE__contains a relative (instead of an absolute) filepath. (René Schwaiger) - Disabled any plugin execution when we have a cache hit or no update from backends. The old behaviour can be enabled for testing using
ENABLE_DEBUGand adding the"debugGlobalPositions"meta key to the parentKey of the kdbGet invocation. (Mihael Pranjić) - Removed
ingroupfrom error messages to reduce verbosity. (Michael Zronek) - Fixed minor problem when
kdb_long_double_tis not available (e.g. mips32). (Matthias Schoepfer) - Only add benchmarks if
BUILD_TESTis set in cmake. (Matthias Schoepfer) - We fixed some warnings about implicit conversion to
unsigned intreported by UBSan. (René Schwaiger)
Ease
- The functions for reference resolving used in the reference plugin have been extracted into libease. This lets other parts of Elektra easily use references and ensures a consistent syntax for them. (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 is now not experimental anymore. (Markus Raab)
- gsettings is not default anymore when installed. (Markus Raab)
- Add fix for creating the Key and KeySet objects in the HelloElektra.java file. (Dmytro Moiseiuk)
- We fixed a warning about a deprecated default constructor in the C++ binding reported by GCC 9.0. (René Schwaiger)
Tools
kdb get -vnow displays if the resulting value is a default-value defined by the metadata of the key. (Thomas Bretterbauer)kdb cpnow succeeds if the target-keys already have the same values as the source-keys. (Thomas Bretterbauer)web-uidoes not show empty namespace anymore (Josef Wechselauer)kdb importdoes not fail anymore if executed more than once with the same target in the spec-namespace. (Thomas Bretterbauer)kdb mountavoid adding sync if sync is already provided. (Markus Raab)kdb list-toolsnow supportsKDB_EXEC_PATHenvironment variables that contain spaces. (René Schwaiger)gen-gpg-testkeyis added to the default tools list (see #2668).(Peter Nirschl)kdb getenvnow executed correctly from within tests (Markus Raab)kdb-bash-completionnow works on Mac (see #2836). (Eduardo Santana)kdb rmsupports--without-elektraand returns 11 on key not found. (Markus Raab)
Code generation
kdb gen is now no longer an external tool implemented via python, but rather a first class command of the kdb tool. For now it only
supports code generation for use with the highlevel API. Try it by running kdb gen elektra <parentKey> <outputName>, where <parentKey>
is the parent key of the specification to use and <outputName> is some prefix for the output files. If you don't have your specification
mounted, use kdb gen -F <plugin>:<file> elektra <parentKey> <outputName> to load it from <file> using plugin <plugin>.
. (Klemens Böswirth)
Scripts
- The
reformat-sourcescript now also formatstests/shell/include_common.sh.in. Additionally it ensures that the file is 1000 lines long, so that line numbers of files using it are easier to read. (Klemens Böswirth) - The clang-format wrapper script now also checks the supported maximum version of Clang-Format. (René Schwaiger)
- The script
reformat-shfmtnow also reformats shell support files (*.in) in thescriptsfolder. (René Schwaiger) - The
reformat-*scripts now allow you to specify a list of files that should be formatted. Only files actual suitable for the reformat script, will reformat. So e.g. callingreformat-cmake src/include/kdbprivate.hdoesn't change any files. (Klemens Böswirth) - The script
scripts/reformat-allis a new convenience script that calls all otherreformat-*scripts. (Klemens Böswirth) - The script
scripts/pre-commit-check-formattingcan be used as a pre-commit hook, to ensure files are formatted before committing. (Klemens Böswirth) - The link checker now prints broken links to the standard error output. (René Schwaiger)
We added a script, called
benchmark-yamlthat compares the run-time of the YAML plugins:
for a certain input file with hyperfine. (René Schwaiger)
- Added
kdb resetandkdb reset-elektra, fixedkdb stash. (Markus Raab)
Benchmarks
- The benchmarking tool
benchmark_plugingetsetnow also supports only executing thegetmethod for the specified plugin. For example, to convert the data stored in the filebenchmarks/data/yaypeg.test.inwith the YAy PEG plugin to a key set you can now use the following command:
sh
benchmark_plugingetset benchmarks/data user yaypeg get
. (René Schwaiger)
Documentation
Style
- The documentation now uses fenced code blocks to improved the syntax highlighting of code snippets. (René Schwaiger)
- We added recommendations about the style of Markdown headers to our coding guidelines. (René Schwaiger)
- We now use title case for most headings in the documentation. (René Schwaiger)
We added instructions on how to reformat code with
- Clang-Format,
- cmake format,
- Prettier, and
- shfmt
to the coding guidelines. (René Schwaiger)
Tutorials
- We added a basic tutorial that tells you how to write a (well behaved) storage plugin. (René Schwaiger)
- Improved the
checkconfsection in the plugin tutorial. (Peter Nirschl) - We added a tutorial on how to benchmark the execution time of plugins using
benchmark_plugingetsetand hyperfine. (René Schwaiger) The new profiling tutorial describes how to determine the execution time of code using
. (René Schwaiger)
- For beginners we added a tutorial that guides them through the process of contributing to libelektra. (Thomas Bretterbauer)
- Added a section on
elektraPluginGetGlobalKeySetin the plugin tutorial. (Vid Leskovar) - Added a step-by-step tutorial for beginners to run all tests with Docker. (Oleksandr Shabelnyk)
- Extend/improve Java bindings related documentation in tutorial and readme. (Oleksandr Shabelnyk)
- Added a step-by-step tutorial for running reformatting scripts with Docker. (Oleksandr Shabelnyk)
- Covered Resolving Missing *.so Library Error in tutorial. (Oleksandr Shabelnyk)
- Added a basic tutorial on How-To: Write a Java Plugin (Dmytro Moiseiuk) and (Miruna Orsa)
Spelling Fixes
- Write Elektra with capital letter in cascading tutorial. (Vlad - Ioan Balan)
- Add typo fix to the hello-elektra tutorial. (Dmytro Moiseiuk)
- Add typo fix to the Java kdb tutorial. (Dominik Hofmann)
- Fixed capitalization of the initial letter in Readme. (Miruna Orsa)
- Improved readability in README. (Philipp Gackstatter)
- We fixed some spelling mistakes in the documentation. (René Schwaiger)
- Fix typo in root README.md and 'build-in' => 'built-in' in several places (Raphael Gruber)
- Fixed typos in
cassandra.ini(arampaa)
Other
- The Markdown Link Converter now uses the style
filename:line:0
instead of
filename|line col 0|
to show the location data for broken links. This is also the same style that Clang and GCC use when they display location information for compiler errors. This update has the advantage, that certain tools such as TextMate are able to convert the location data, providing additional features, such as clickable links to the error source. (René Schwaiger)
- The Markdown Link Converter uses the index
1for the first line number instead of0. This update fixes an off-by-one-error, when the user tries to use the error location data printed by the tool in a text editor. (René Schwaiger) - We added a badge for LGTM to the main ReadMe file. (René Schwaiger)
- Added LCDproc and Cassandra specification examples. These examples provide a good guideline for writing specifications for configurations. (Michael Zronek)
- Drastically improved the error message format. For more information look here. (Michael Zronek)
- Added a guideline for writing consistent and good error messages. For more information look here. (Michael Zronek)
- Every
kdbcommand now acceptsvanddas option to show more information in case of warnings or errors. (Michael Zronek) - Improved qt-gui error popup to conform with the new error message format. (Raffael Pancheri)
- We fixed the format specifiers in the “Hello, Elektra” example. (René Schwaiger)
- Expanded the Python Tutorial to cover installation under Alpine Linux. (Philipp Gackstatter)
- We wrote a tutorial which is intended to help newcomers contributing to libelektra. (Thomas Bretterbauer)
- We fixed various broken links in the documentation. (René Schwaiger)
- Fix finding of jni.h library. (Dmytro Moiseiuk)
- Added license for asciinema. (Anastasia @nastiaulian)
- We incorporated
kdb-introductioninto the man page forkdb(Markus Raab)
Tests
- We now test the Directory Value Plugin with additional test data. (René Schwaiger)
The variables:
SPEC_FOLDERSYSTEM_FOLDERUSER_FOLDER
in the inclusion file for shell test were set incorrectly, if the repository path contained space characters. (René Schwaiger)
- The CFramework now also compares the names of meta keys. (René Schwaiger)
- The release notes check does not report an illegal number anymore, if the release notes were not updated at all. (René Schwaiger)
- We added a test for the keyhelper-class which checks if rebasePath calculates the new path for cascading target-keys correctly. (Thomas Bretterbauer)
- Enable MSR for the crypto and fcrypt tutorial (#1981).(Peter Nirschl)
- We fixed the Markdown Shell Recorder test for the command
kdb get. (René Schwaiger) The tests
now also works correctly, if the user and system directory file paths contain space characters. (René Schwaiger)
Source Code Checks
The formatting instructions printed by
check_formattingnow also work correctly, if- the
diffoutput does not start with the test number added by CTest, and - you use a non-POSIX shell such as
fish
- the
. (René Schwaiger)
- We reformatted the CMake source code with cmake format
0.5.4and also check the style of CMake code with this new version of the tool. (René Schwaiger) - We now check the source code of the repository with LGTM. (René Schwaiger)
We fixed various warnings about
- missing or duplicated include guards,
- undefined behavior,
- incorrect format specifiers,
- unnecessary statements,
- short names for global variables, and
- empty
if-statements
reported by LGTM. (René Schwaiger)
Build
CMake
- We now disable the option
INSTALL_SYSTEM_FILESby default. This change makes it possible to install Elektra using Homebrew on Linux without any changes to Elektra’s Linuxbrew formula. (René Schwaiger) Add-DINSTALL_SYSTEM_FILES=ONfor previous behavior. - The build system now rebuilds the JNA binding with Maven, if you change any of the Java source files of the binding. (René Schwaiger)
testshell_markdown_tutorial_cryptois not compiled and executed ifgen-gpg-testkeyis not part of TOOLS. (Peter Nirschl)- Plugin tests are now only added, if
BUILD_TESTING=ON. (Klemens Böswirth) - The symbol list for the static version is now exported directly from a CMake function. (Klemens Böswirth)
- Building Elektra with enabled
io_glibbinding does not require libuv anymore. (René Schwaiger)
Docker
Alpine Linux
- Our Docker image for Alpine Linux now uses the base image for Alpine Linux 3.9. (René Schwaiger)
- We added PEGTL to the Alpine Docker image. (René Schwaiger)
Debian
- We now use the default JDK on Debian sid, since the package
openjdk-8-jdkis not available in the official unstable repositories anymore. (René Schwaiger) We added
to the image for Debian sid. (René Schwaiger)
- We now offer images for the latest stable version of Debian codenamed “buster”. (René Schwaiger)
Ubuntu
- We added a Dockerfile for Ubuntu Disco Dingo. (René Schwaiger)
Other Updates
The Docker images for
- Debian stretch, and
- Debian sid,
now include the Python YAML library recommended by cmake format. (René Schwaiger)
Vagrant
- The Vagrant file for Ubuntu Artful Aardvark now installs the Python YAML library recommended by cmake format. (René Schwaiger)
Infrastructure
Cirrus
- We added the build job
🔗 Check, which checks the documentation for broken links. (René Schwaiger)
Jenkins
We disabled the tests:
testmod_crypto_botan,testmod_crypto_openssl,testmod_dbus,testmod_dbusrecv,testmod_fcrypt,testmod_gpgme, andtestmod_zeromqsend
, since they are known to fail in high load scenarios. (René Schwaiger)
- We added deprecated plugins to the tests. (Markus Raab)
- We increased the automatic timeout for jobs that show no activity from 5 to 10 minutes. (René Schwaiger)
- We improved the exclusion patterns for the Coveralls coverage analysis. (René Schwaiger)
- We now again build the API docu of master and we now also build the API docu of PRs. (Markus Raab)
- We added buster build jobs. (Markus Raab)
Restyled
- We added a configuration file for Restyled. Currently Restyled monitors changes to Shell code in pull requests and fixes code that does not fit the coding guideline, by adding additional formatting commit to PRs. (René Schwaiger)
Travis
- We removed the build job for the Haskell binding and Haskell plugin. For more information, please take a look here. (Klemens Böswirth)
- We always use GCC 9 for the build job
🍏 GCC. This update makes sure that the build job succeeds, even if Homebrew adds a new major version of the compiler. (René Schwaiger) - We simplified our Travis configuration file, removing various unnecessary and unused code. In this process we also got rid of the caching directives, we previously used to speed up the Haskell build job
🍏 Haskell. (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:
- Our entry for Elektra has been approved in the Free Software Directory: https://directory.fsf.org/wiki/Elektra
- Added github build status badges to website (hesirui)
- We updated part of a test for the snippet converter. (René Schwaiger)
- Fixed anchor links on the website (hesirui)
- Added Docsearch in top-bar of website (hesirui)
Outlook
We are currently working on following topics:
- Go bindings and improved Web-UI (Raphael Gruber)
- semantic 3-way merging (Dominic Jaeger)
- improved error handling (Michael Zronek)
- Rust bindings (Philipp Gackstatter)
- elektrify LCDproc (Klemens Böswirth) and (Jakob Fischer)
- configuration upgrades (Lukas Kilian)
- default storage (René Schwaiger) and (Jakob Fischer)
- shell completion (Ulrike Schäfer)
- improved developer experience (Hani Torabi)
- Ansible bindings (Thomas Waser)
- misconfiguration tracker (Vanessa Kos)
- plugin interface improvements (Vid Leskovar)
Statistics
About 40 authors changed 1278 files with 49409 insertions(+) and 13883 deletions(-) in 2025 commits.
We closed 114 issues for this release.
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: /home/markus/elektra-0.9.0.tar.gz
- size: 7390149
- md5sum: 5cf9935515aba0567d6014a3693e415a
- sha1: 05ebe99c87b89a7cac58bf45cd3aff200cc1fd8d
- sha256: fcdbd1a148af91e2933d9a797def17d386a17006f629d5146020fe3b1b51ddd8
The release tarball is also available signed by Markus Raab 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.
For more information, see https://libelektra.org
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by markus2330 over 6 years ago
Elektra - 0.8.26 Release
- guid: 55950e64-fa4e-4eb9-9a3a-2c73d9cd6478
- author: Markus Raab
- pubDate: Tue, 26 Feb 2019 15:31:09 +0100
- shortDesc: high-level API
We are proud to release Elektra 0.8.26 with the new high-level API.
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
High-Level API
The new high-level API provides an easier way for applications to get started with Elektra.
To use Elektra in an application (including proper error handling) you now only need a few self-explanatory lines of code:
```c ElektraError * error = NULL; Elektra * elektra = elektraOpen ("/sw/org/myapp/#0/current", NULL, &error); if (elektra == NULL) { printf ("An error occurred: %s", elektraErrorDescription (error)); elektraErrorReset (&error); return -1; }
// Once you have an instance of Elektra you simply call one of the typed elektraGet* functions to read a value:
kdblongt mylong = elektraGetLong (elektra, "mylong"); printf ("got long " ELEKTRALONGF "\n", mylong); const char * mystring = elektraGetString (elektra, "mystring"); printf ("got string %s\n", mystring);
elektraClose (elektra); ```
To run the application, the configuration should be specified, e.g., for mylong:
sudo kdb setmeta /sw/org/myapp/#0/current/mylong type long
sudo kdb setmeta /sw/org/myapp/#0/current/mylong default 5
In the getters/setters there is no need to convert types or to specify the base path
/sw/org/myapp/#0/current, as the high-level API does that for you.
The API supports the CORBA types already used by the plugins.
The high-level API should also be used in combination with a specification (spec-mount).
When used this way, the API is designed to be error and crash free while reading values.
Writing values, can of course still produce errors.
Another advantage of the new API is, that it will be much easier to write bindings for other languages now, because only a few simple types and functions have to be mapped to provide the full functionality.
Take a look at the README for more information.
Because of the high-level API, we now have the new header files elektra.h and a folder elektra in Elektra's include directory.
Furthermore, we install the library libelektra-highlevel.so and the pkgconfig file elektra-highlevel.pc for easier detection.
For an example on how to build an application using this API take a look at this.
A big thanks to Klemens Böswirth for making this possible. Also big thanks to Dominik Hofer, who did all the foundation work for this API.
Plugins
The following section lists news about the plugins we updated in this release.
Augeas
- We changed the default Augeas directory prefix for the lenses directory on macOS to the one used by
Homebrew:
/usr/local. (René Schwaiger)
Network
- The
networkplugin also supports port declarations to check if a port number is valid or if the port is available to use. (Michael Zronek) - We added a Markdown Shell Recorder test to the ReadMe of the plugin. (René Schwaiger)
YAMBi
- The build system does not print a warning about a deprecated directive any more, if you build the plugin with Bison
3.3or later. (René Schwaiger) - YAMBi now handles comments at the end of input properly. (René Schwaiger)
YanLR
- We improved the error reporting capabilities of the plugin. It now stores all of the error message reported by ANTLR and also specifies the line and column number of syntax errors. We also visualize these error messages in a similar way as modern compilers like Clang or GCC. For example, for the following erroneous input:
yaml
key: - element 1
- element 2 # Incorrect Indentation!
the plugin currently prints an error message that looks like this:
config.yaml:2:1: mismatched input '- ' expecting end of map
- element 2 # Incorrect Indentation!
^^
config.yaml:2:37: extraneous input 'end of map' expecting end of document
- element 2 # Incorrect Indentation!
^
. The inspiration for this feature was taken from the book “The Definitive ANTLR 4 Reference” by Terence Parr. (René Schwaiger)
Yan LR’s lexer now
- handles comment at the end of a YAML document correctly,
- stores a more human readable description in tokens (e.g.
end of mapinstead ofMAP END)
. (René Schwaiger)
Path
Enhanced the plugin to also check for concrete file or directory permissions such as rwx.
For example, you can specify that a user can write to a certain directory or file which prevents applications of runtime failures
once they try to access the given path (such as a log directory or file).
Simply add check/path/user <user> and check/path/mode <modes> as specification (metadata)
and be assured that you can safely set a path value to the key. A more detailed explanation can be found
here (Michael Zronek)
YAwn
- The plugin now handles comments at the end of a file properly. (René Schwaiger)
- We improved the syntax error messages of the plugin. (René Schwaiger)
- We fixed a memory leak that occurred, if a YAML file contained syntax errors. (René Schwaiger)
YAy PEG
Ruby
- Added some basic unit tests (Bernhard Denner)
Misc
reported on FreeBSD. (René Schwaiger)
- The
resolverplugin and its tests now better supportKDB_DB_SYSTEMandKDB_DB_SPECpaths using~to refer to a home directory. (Klemens Böswirth) - If
KDB_DB_SYSTEMis set to a relative path, it is now treated as relative toCMAKE_INSTALL_PREFIX. This ensures thatKDB_DB_SYSTEMactually points to the same location no matter the current working directory. (Klemens Böswirth)
Libraries
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
Compatibility
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 have two minor incompatible changes:
- we now support larger array numbers (i.e. the larger numbers are not an error anymore)
elektraArrayValidateBaseNameStringreturns the offset to the first digit of the array index instead of1
For details of the changes see below Core and Libease.
Core
- All plugins in the KDB now get a handle to a global keyset via
elektraPluginGetGlobalKeySet(), for communication between plugins. See Global KeySet Handle for details. (Mihael Pranjić) elektraWriteArrayNumbernow useskdb_long_long_tfor array indices to be compatible with the high level API. Similarly the value ofELEKTRA_MAX_ARRAY_SIZEwas changed to match this. (Klemens Böswirth)
Libease
- The function
elektraArrayValidateBaseNameStringnow returns the offset to the first digit of the array index, if the given string represents an array element containing an index. This update enhances the behavior of the function. Now it not only tells you if a name represents a valid array element, but also the start position of the array index.
``c
elektraArrayValidateBaseNameString ("#_10");
// ~~^ Returns2(instead of1`)
elektraArrayValidateBaseNameString ("#___1337");
// ~~~~^ Returns 4 (instead of 1)
```
If your program already used elektraArrayValidateBaseNameString and you check for a valid array element using the equality operator
(== 1), then please use (>= 1) instead. For example, if you code that looks like this:
c
if (elektraArrayValidateBaseNameString(baseName) == 1) …;
, please update your code to check for a valid array element name like this:
c
if (elektraArrayValidateBaseNameString(baseName) >= 1) …;
. (René Schwaiger)
Libopts
- This is a new library containing only the function
elektraGetOpts. This function can be used to parse command line arguments and environment variables and add their values to keys in the proc namespace.
You can use opt, opt/long and env to specify a short, a long option and an environment variable. For more information take
a look at the tutorial and the code documentation of elektraGetOpts. (Klemens Böswirth)
Tools
kdb spec-mountcorrectly includes type plugin to validatetype. (Markus Raab)kdb setmetareports if it removed a metakey. (Markus Raab)system/elektra/versionnow has metadata to indicate that it cannot be edited or removed. (Dominic Jäger)
Scripts
- The script
reformat-sourcenow also handles filenames containing spaces correctly. (René Schwaiger) - The script
reformat-markdownformats Markdown files in the repository withprettier. (René Schwaiger) - The scripts
reformat-source,reformat-cmake,reformat-shfmtandreformat-markdowndon't format files that are ignored by git anymore. (Klemens Böswirth)
Documentation
- We fixed various spelling mistakes. (René Schwaiger)
- The documentation for
elektraMetaArrayToKSwas fixed. It now reflects the fact that the parent key is returned as well. (Klemens Böswirth)
Tests
- The tests for the IO bindings and notification plugins now use increased timeout values so that the test suite fails less often on machines with high load. (René Schwaiger)
- We update most of the Markdown Shell Recorder tests so they use an explicit namespace (like
systemoruser). This has the advantage that the output of these tests does not change depending on the user that executes them. Before the update these tests used cascading keys. (René Schwaiger) - The Shell Recorder now also works correctly on FreeBSD. (René Schwaiger)
- Fix memcheck target to detect memory problems again and enabled parallel testing to speed it up. (Mihael Pranjić)
- Fix memleak in pluginprocess tests. (Mihael Pranjić)
- The test
check-env-depdoes not require Bash anymore. (René Schwaiger) - We fixed an incorrect directive in the Markdown Shell Recorder test of the Type Checker plugin. (René Schwaiger)
- We added a test that invokes the script
fix-spellingto check the documentation for common spelling mistakes. (René Schwaiger) - We added a test that checks the formatting of Markdown files with
prettier. (René Schwaiger) - The test
testscr_check_formattingnow prints instructions that show you how to fix formatting problems. (René Schwaiger)
Build
CMake
Misc
- The plugin name is now provided as compiler definition
ELEKTRA_PLUGIN_NAMEvia CMake. See #1042. (Peter Nirschl) ELEKTRA_PLUGIN_FUNCTIONdoes not require the module name as parameter any more, instead theELEKTRA_PLUGIN_NAMEcompiler definition is being used. See #1042. (Peter Nirschl)ELEKTRA_README, andELEKTRA_PLUGIN_EXPORTdo not require the module name as parameter any more, instead theELEKTRA_PLUGIN_NAMEcompiler definition is being used. See #1042. (Peter Nirschl)- We now specify
- version number,
- project description, and
- homepage URL
in the CMake
projectcommand. (René Schwaiger)
- We fixed the detection of Python for the Python 2 binding on macOS. (René Schwaiger)
- You can now use the Ruby binding and plugin without any manual configuration, if you installed Ruby (version
2.5or later) via Homebrew. (René Schwaiger)
Find Modules
- The CMake find module
FindAugeas.cmakedoes not print an error message anymore, if it is unable to locate Augeas in thepkg-configsearch path. (René Schwaiger) - The CMake find module
FindLua.cmakedoes not print an error message anymore, if it is unable to locate a Lua executable. (René Schwaiger) - We added code that makes sure you can compile IO GLIB on macOS, even if
pkg-configerroneously reports that GLIB requires linking to the libraryintl(part of GNU gettext). (René Schwaiger) - We added a CMake find module for GLib. The module makes sure you can compile and link IO GLib on macOS. (René Schwaiger)
- The CMake find module
FindLibOpenSSL.cmakedoes not requirepkg-configanymore. The updated code also fixes some linker problems on macOS (and probably other operating systems too), where the build system is not able to link to OpenSSL using only the name of the OpenSSL libraries. (René Schwaiger) - We simplified the CMake find module
FindLibgcrypt.cmake.The update fixes problems on macOS, where the build system excluded the plugincrypto_gcrypt, although Libgcrypt was installed on the system. (René Schwaiger) - We now use the official CMake find module for
iconv. This update fixes linker problems with theiconvandfilecheckplugin on FreeBSD 12. (René Schwaiger) - The CMake find module for Botan does not require
pkg-configanymore. (René Schwaiger) - The CMake find module for libgit2 now also exports the version number of libgit2. (René Schwaiger)
- We added a CMake find module for libuv and fixed a problem on macOS, where the build system was unable to locate the header file of libuv. (René Schwaiger)
- We added a CMake find module for ZeroMQ to fix build problems on macOS. (René Schwaiger)
Docker
We added
- ANTLR,
- ANTLR’s C++ runtime,
- Ninja, and
shfmt, to the Dockerfile for Debian sid
. (René Schwaiger)
Misc
- We removed the
configurescript from the top-level directory. CMake is now popular enough so that this helper-script is not needed. (René Schwaiger)
Infrastructure
Cirrus
We now use Cirrus CI to build and test Elektra on
. Both of these build jobs use -Werror to make sure we do not introduce any code that produces compiler warnings. (René Schwaiger)
- The new build job
🍎 Clangtests Elektra on macOS. (René Schwaiger) - We added the build job
🍎 Clang ASAN, which uses Clang with enabled AddressSanitizer to test Elektra on macOS. (René Schwaiger) - The new build job
🍎 FULLcompiles and test Elektra using the CMake optionsBUILD_SHARED=OFFanBUILD_FULL=ON. (René Schwaiger) - We added
🍎 MMap, which tests Elektra usingmmapstorageas default storage module. (René Schwaiger) - We install and uninstall Elektra in all of the macOS build jobs to make sure that
ElektraUninstall.cmakeremoves all of the installed files. (René Schwaiger)
Jenkins
- We added a badge displaying the current build status to the main ReadMe. (René Schwaiger)
- The build job
formatting-checknow also checks the formatting of Shell scripts. (René Schwaiger)
Travis
- We now test Elektra on Ubuntu Xenial Xerus. (René Schwaiger)
- We removed the build jobs
🍏 Clangand🍏 Check Shellin favor of the Cirrus build job🍎 Clang. (René Schwaiger) - We removed the build jobs
🍏 Clang ASANin favor of the Cirrus build job🍎 Clang ASAN. (René Schwaiger) - We removed the build jobs
🍏 FULLin favor of the Cirrus build job🍎 FULL. (René Schwaiger) - We removed the build jobs
🍏 MMapin favor of the Cirrus build job🍎 MMap. (René Schwaiger)
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:
- infallible high-level API: creating an API that guarantees you to return configuration values (Klemens Böswirth)
- error handling (Michael Zronek)
- elektrify LCDproc (Klemens Böswirth) and (Michael Zronek)
- YAML as default storage (René Schwaiger)
- misconfiguration tracker (Vanessa Kos)
- global mmap cache: This feature will enable Elektra to return configuration without parsing configuration files or executing other plugins as long as the configuration files are not changed. (Mihael Pranjić)
and since recently:
- automatic shell completion (Ulrike Schaefer)
- plugin framework improvements (Vid Leskovar)
- 3-way merge (Dominic Jäger)
- reducing entry barriers for newcomers (Hani Torabi Makhsos)
- bug fixing (Usama Morad) and (Kurt Micheli)
Statistics
In this release we created 986 commits in which 802 files were changed, with 21687 insertions(+) and 6912 deletions(-).
Following authors made this release possible:
1 commit by Aybuke Ozdemir <aybuke.147@gmail.com>
2 commits by Gabriel Rauter <rauter.gabriel@gmail.com>
6 commits by Bernhard Denner <bernhard.denner@gmail.com>
6 commits by Dominic Jäger <dominic.jaeger@gmail.com>
25 commits by Peter Nirschl <peter.nirschl@gmail.com>
32 commits by Mihael Pranjic <mpranj@limun.org>
66 commits by Michael Zronek <michael.zronek@gmail.com>
112 commits by Markus Raab <elektra@markus-raab.org>
131 commits by Klemens Böswirth <k.boeswirth+git@gmail.com>
141 commits by Dominik Hofer <me@dominikhofer.com>
464 commits by René Schwaiger <sanssecours@me.com>
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.8.26.tar.gz
- size: 6395865
- md5sum: 4ef202b5d421cc497ef05221e5309ebc
- sha1: 94f654764bcf49d0ebc7e636f444e24ca6cfeb19
- sha256: 5806cd0b2b1075fe0d5a303649d0bd9365752053e86c684ab7c06e7f369155d3
The release tarball is also available signed by Markus Raab 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.
For more information, see https://libelektra.org
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by markus2330 almost 7 years ago
Elektra - 0.8.25 Release
We are proud to present Elektra 0.8.25.
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.
For a small demo see here:
You can also read the news on our website
Metadata
- guid: 472392e0-cc4f-4826-a0a9-2764d90c5f89
- author: Markus Raab
- pubDate: Sun, 18 Nov 2018 21:24:34 +0100
- shortDesc: faster storage and lookup
Highlight
This release is dedicated to drastically improve the speed of Elektra. Two non-trivial features facilitate most of the improvement:
- mmap storage for very fast retrieval of configuration
- Hybrid Search Algorithm for
ksLookup (...)for very fast access of configuration
mmap storage
We added a new, binary and fast storage plugin called mmapstorage.
It leverages the mmap() syscall and supports full Elektra semantics.
We provide two compile variants: mmapstorage and mmapstorage_crc.
The mmapstorage_crc variant enables CRC32 checksums for critical data,
while the mmapstorage variant omits the checksum for maximum performance.
We ran a synthetic benchmark with 257 iterations using 40k keys in a keyset,
and compared the performance to the dump storage plugin.
Median write time in microseconds:
| Plugin | Time |
| --- | --- |
| dump | 71079 |
| mmapstorage | 2964 |
| mmapstorage_crc | 7644 |
Median read time in microseconds:
| Plugin | Time |
| --- | --- |
| dump | 82737 |
| mmapstorage | 1145 |
| mmapstorage_crc | 5744 |
In our benchmark, the mmapstorage plugin writes more than 23x faster,
and reads more than 72x faster than the dump storage plugin.
For this release the plugin is marked as experimental, even though it is already used as default storage plugin in a build job on our build server.
Thanks to Mihael Pranjić for this improvement.
Hybrid Search Algorithm for ksLookup (...)
The hybrid search algorithm is now implemented, this concludes the extension of the ksLookup (...) search with the
order preserving minimal perfect hash map (OPMPHM).
The hybrid search combines the best properties of the binary search and the OPMPHM.
The hybrid search decides dynamically which search algorithm to use.
Because of the automatic decision, usually nothing needs to be done by API users to take advantage of this improvement.
Advanced API user, however, can overrule the hybrid search by passing KDB_O_OPMPHM or KDB_O_BINSEARCH to ksLookup (...).
The constants are defined in kdbproposal.h.
For low-memory systems the building of the hash map can be disabled altogether at build-time by disabling the CMake variable ENABLE_OPTIMIZATIONS (by default enabled now).
The implemented randomized OPMPHM algorithm is in 99.5% of the measured random cases optimal. However the randomization property of the algorithm leaves an uncertainty.
The results made with random cases had shown that the hybrid search is, except for small keyset sizes, almost always faster
compared to the standalone binary search. The performance increase strongly depended on the measured hardware. In the random cases
where the hybrid search is faster, on average ~8.53% to ~20.92% of time was saved.
The implemented hybrid search works only above a keyset size of 599 to exclude the small keyset sizes.
Thanks to Kurt Micheli for this improvement.
Plugins
The following section lists news about the plugins we updated in this release.
Directory Value
We improved the performance of the directoryvalue plugin. (René Schwaiger) This plugin is used for configuration file formats that do not support that directories contain values, like it is the case in JSON. A program manipulating a 13 MB JSON file which first did not succeed within 10 hours is now finished in 44 seconds.
Process
There is a new, experimental plugin called process.
This plugin utilizes the pluginprocess library in order to execute arbitrary other
plugins in an own process, acting as a proxy itself. Therefore it is not required
to explicitly change a plugin's implementation if it shall be executed in an own
process. This plugin is not completely finished yet, as currently there is no way
for it to mimic the proxied plugin's contract in Elektra. It can be used with simple
plugins like dump however, check the limitations in the readme for more details. (Armin Wurzinger)
FSTab
The detection of the mntent functions now also works correctly, if you use the compiler switch -Werror. (René Schwaiger)
passwd
We fixed an issue with the passwd plugin not properly setting compile flags. This resolves a problem with undefined functions when building with musl. (Lukas Winkler)
gpgme
The experimental gpgme plugin was brought into existence to provide cryptographic functions using GnuGP via the libgpgme library. (Peter Nirschl)
network
The network plugin now also allows for non-numerical hosts (i.e. "localhost") to be set and tries to resolve it via DNS. (Michael Zronek)
YAMBi
This new plugin parses a subset of YAML using a parser generated by Bison. (René Schwaiger)
YAML CPP
The build system now disables the plugin automatically, if you use a GCC compiler (6.x or earlier) and enable the option ENABLE_ASAN.
We updated the behavior, since otherwise the plugin will report memory leaks at runtime. (René Schwaiger)
Yan LR
A new plugin parsing YAML files using Yan LR.
- The plugin does not modify the (original) parent key. As a consequence, setting values at the root of a mountpoint:
sh
sudo kdb mount config.yaml user/tests/yambi yambi
kdb set user/tests/yanlr 'Mount Point Value'
kdb get user/tests/yanlr
#> Mount Point Value
now works correctly. (René Schwaiger)
- We now use C++ code to test the plugin. (René Schwaiger)
- The CMake code of the plugin now also recognizes antlr as ANTLR executable, if antlr4 is not available. (René Schwaiger)
- The build system now disables the unit test for the plugin, if you use GCC (6.x or earlier) to translate Elektra. We introduced this
behavior, since the code generated by ANTLR (YAML.h) seems to contain a double free that causes a segmentation fault on systems that
use the GNU C library. (René Schwaiger)
- The build system now disables the plugin automatically, if you use a GCC compiler (6.x or earlier) and enable the option ENABLE_ASAN.
(René Schwaiger)
YAwn
This new plugin parses a subset of YAML using the Earley Parser library YAEP. (René Schwaiger)
Reference
This new plugin can be used to validate that the value of a key is a reference to another key. (Klemens Böswirth)
Libraries
The text below summarizes updates to the C (and C++)-based libraries of Elektra.
Compatibility
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).
This is the last release for which we have built Jessie packages:
deb [trusted=yes] https://debian-stable.libelektra.org/elektra-stable/ jessie main
deb-src [trusted=yes] https://debian-stable.libelektra.org/elektra-stable/ jessie main
Obviously, we will continue to update the stretch package:
deb [trusted=yes] https://debian-stretch-repo.libelektra.org/ stretch main
deb-src [trusted=yes] https://debian-stretch-repo.libelektra.org/ stretch main
Infos for Package Maintainers
Following plugins got added:
- libelektra-gpgme.so
- libelektra-mmapstorage_crc.so
- libelektra-mmapstorage.so
- libelektra-process.so
- libelektra-reference.so
- libelektra-yambi.so
A new library got added (should be packaged privately for now):
- libelektra-globbing.so
Core
Optimize elektraKsFilter to not duplicate keys (Markus Raab)
Globbing
A new library which can be used to match keys against globbing patterns was introduced. (Klemens Böswirth)
The API is still experimental, so it should not be used externally for now.
Ease
libease provides the function elektraArrayValidateBaseNameString, which can be used to validate that a
given string is an Elektra array name. (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.
Ruby
Do not use private Elektra headers for Ruby bindings as preparation for a Ruby libelektra gem. (Bernhard Denner)
Tools
- Added benchmarks for storage plugins. The currently benchmarked plugins are
dumpandmmapstorage. (Mihael Pranjić) - Avoid raw pointers in KDB tools. (Markus Raab)
- Improved error text of KDB tool
cp. (Markus Raab) - Document hidden feature of KDB tool
mount. (Markus Raab) - Add more tags to the KDB tools to be used with
kdb find-tools. (Markus Raab)
Scripts
- We now require
clang-format6.0 for formatting C and C++ code. (René Schwaiger) - The command
reformat-sourcenow displays information about the installed version ofclang-format, if it is unable to locate a supported version of the tool. (René Schwaiger) - We now also check the POSIX compatibility of our scripts with
shfmt. (René Schwaiger) - The new command [
reformat-shfmt][https://master.libelektra.org/scripts/reformat-shfmt] reformats Shell scripts using the toolshfmt. (René Schwaiger)
Documentation
- We fixed some minor spelling mistakes in the documentation. (René Schwaiger)
- Improved the plugins documentation. (Michael Zronek)
- The ReadMe now includes two badges that show the latest released version of Elektra and the status of the Travis build. (René Schwaiger)
- Fixed documenation error on Ruby plugin Readme. (Bernhard Denner)
- Go into more detail in BUILDSERVER.md. (Lukas Winkler)
Tests
- Fix potential parallel execution of maven tests, which write to KDB. (Markus Raab)
- The unit test for the
dbusplugin does not leak memory anymore, if it fails on macOS. (Thomas Wahringer) - The tests
testkdb_allpluginsandtestscr_check_kdb_internal_checkdo not test a plugin on an ASAN enabled build anymore, if you specify the status tagmemleakin the plugin contract. (René Schwaiger) - The CFramework macro
compare_keynow also checks if the meta values of keys are equal. (René Schwaiger) - The test
testscr_check_bashismsdoes not print warnings about skipped files anymore. (René Schwaiger) - We added a Markdown Shell Recorder test for the
shellplugin . (René Schwaiger) - Added many storage plugin tests. Most tests use the keyset, key name and value APIs.
Currently, the tests are only active for
dumpandmmapstorage. (Mihael Pranjić) - The test
testcpp_contextual_basicnow compiles without warnings, if we use Clang 7 as compiler. (René Schwaiger) - crypto, fcrypt and gpgme properly shut down the gpg-agent after the unit test is done. See #1973 . (Peter Nirschl)
- minor refactoring of the unit tests for crypto, fcrypt, gpgme: moved shared code to separate module in order to avoid code duplication. (Peter Nirschl)
- The CMake targets for plugin tests (
testmod_[plugin]) now depend on the respective CMake targets for the plugins themselves (elektra-[plugin]). (Klemens Böswirth) - Fixed bug in CMake plugin tests, if only
BUILD_FULLbut notBUILD_SHAREDis used. (Klemens Böswirth) - The test
testscr_check_formattingnow also checks the formatting of Shell code. (René Schwaiger) - We pumped version numbers in XML-test files. (Markus Raab)
- We fixed a crash in the unit test of the JNA binding. (René Schwaiger)
- The command
kdb run_allnow only prints the output of tests that failed. To print the full output of all test, please use the option-v. (René Schwaiger) - The Shell Recorder does not use the non-POSIX grep option
--textany more. (René Schwaiger) - The test suite now uses Google Test
1.8.1. (René Schwaiger)
Build
CMake
- We improved the detection of Python 2 and Python 3 in the CMake code of the Python bindings/plugins. (René Schwaiger)
- We restructured the code of the CMake module we use to detect Haskell tools . (René Schwaiger)
- Building the Haskell binding should now work again. (René Schwaiger)
- The CMake configuration step now displays less debug messages about found libraries. (René Schwaiger)
- Provide a wrapper around
check_symbol_existsthat handles issues with-Werror -Wpedantic. (Lukas Winkler) - The argument
INCLUDE_SYSTEM_DIRECTORIESof the functionadd_pluginnow supports multiple include directories. (René Schwaiger) - We reformatted all CMake source files with cmake-format 0.4.3. (René Schwaiger)
- Generating coverage data (
ENABLE_COVERAGE=ON) should now also work on macOS. (René Schwaiger) - You can use the new target
run_checkshellto run all shell checks (testscr_check.*). (René Schwaiger) - The new target
run_nocheckshellruns all tests except for shell checks. (René Schwaiger) - The target
run_allnow runs tests that do not modify the key database in parallel. (René Schwaiger) - Fix CMake inclusion logic for GLib/Gi (Markus Raab)
Docker
- The Docker image for Debian stretch now contains all (optional) dependencies for Elektra. (René Schwaiger)
- The docker images used by our build system are now available to download from
our systems without authentication.
Try it out and list available images via
docker run --rm anoxis/registry-cli -r https://hub-public.libelektra.org. You can search for images using--images-like, for example:docker run --rm anoxis/registry-cli -r https://hub-public.libelektra.org --images-like alpine. Afterwards pull your desired image as you would do from any public registry, for example:docker pull hub-public.libelektra.org/build-elektra-alpine:201811-37597a34fed4988639cdaf4d6a2c54754d09918586f53389e4fde5fd3b3a7180. (Lukas Winkler)
Vagrant
- Added Vagrantfile for Ubuntu artful 32-bit. (Mihael Pranjić)
Infrastructure
Jenkins
- We enabled tests that write to the hard disk on the build job
alpine. (René Schwaiger) - The build jobs now print less non-relevant output. (René Schwaiger)
- Enable
-Werrorindebian-stable-full. (Lukas Winkler) - We added the compiler switch
-Werrorto the build jobs:alpine,debian-stable-full-i386,debian-stable-full-mmap-asan,debian-stable-full-mmap,debian-stable-full-optimizations-off,debian-stable-full-xdg,debian-stable-minimal,debian-stable-multiconf,debian-unstable-clang-asan,debian-unstable-full-clang,debian-unstable-full,ubuntu-xenial, anddebian-stable-asan. (René Schwaiger)
- Build Artifacts for all PR's to detect issues before merging (Lukas Winkler)
- Stricter removal of temporary docker images on docker nodes (Lukas Winkler)
- Added jenkins build jobs
debian-stable-full-mmapanddebian-stable-full-mmap-asanwithmmapstorageas the default storage. (Mihael Pranjić) - We added basic support for coverage analysis via Coveralls. (René Schwaiger)
Travis
- Travis now also checks the code for memory leaks in the build job
🍏 Clang ASAN. (René Schwaiger) - The Travis build jobs
🍏 Clang ASANand🐧 GCC ASANnow only translates a minimal set of plugins, since we had various timeout problems with these jobs before. We explicitly excluded plugins, to make sure that the build jobs still test newly added plugins. (René Schwaiger) - Added travis build job
🍏 mmapon macOS withmmapstorageas the default storage. (Mihael Pranjić) - Travis now prints the CMake configuration for each build job. (René Schwaiger)
- We now test Elektra using the latest version of Xcode (
10.0). (René Schwaiger) - We added the build job
🍏 Check Shell, which only runs shell checks such astestscr_check_oclint. This update allows us to remove the shell checks from the jobs🍏 MMapand🍏 Clang, which sometimes hit the timeout limit for public repositories before. (René Schwaiger) - All Travis build jobs now use the compiler switch
-Werror. (René Schwaiger) - The new job
🍏 FULLand the build job🐧 FULLbuild Elektra using the CMake optionsBUILD_FULL=ONandBUILD_SHARED=OFF. (René Schwaiger) - The
scriptstage of the build jobs print less non-relevant output. Usually the commands in this stage should now only print verbose output if a test fails. (René Schwaiger)
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:
- Global mmap cache: This feature will enable Elektra to return configuration without parsing configuration files or executing other plugins as long as the configuration files are not changed. (Mihael Pranjić)
- Finish high-level API. (Klemens Böswirth)
- Validation improvements. (Michael Zronek)
- Improve YAML plugins. (René Schwaiger)
Statistics
Following authors made this release possible:
- 1 commit: Thomas Wahringer thomas.wahringer@libelektra.org
- 2 commits: Bernhard Denner bernhard.denner@gmail.com
- 7 commits: Kurt Micheli e1026558@student.tuwien.ac.at
- 12 commits: Michael Zronek michael.zronek@gmail.com
- 33 commits: Lukas Winkler derwinlu+git@gmail.com
- 28 commits: Klemens Böswirth k.boeswirth+git@gmail.com
- 30 commits: Armin Wurzinger e1528532@student.tuwien.ac.at
- 38 commits: Peter Nirschl peter.nirschl@gmail.com
- 100 commits: Markus Raab markus@libelektra.org
- 180 commits: Mihael Pranjic mpranj@limun.org
- 418 commits: René Schwaiger sanssecours@me.com
849 commits, 581 files changed, 18503 insertions(+), 3192 deletions(-)
We welcome new contributors!
Finished Thesis
Get It!
You can download the release from here or GitHub
The hashsums are:
- name: elektra-0.8.25.tar.gz
- size: 6233918
- md5sum: d5614b2049fb8431a80842a4909b140e
- sha1: c7dfb5fa87284d8f5ba4d4753e0e47a0e362c733
- sha256: 37829256e102e967fe3d58613a036d9fb9b8f9658e20c23fa787eac0bfbb8a79
The release tarball is also available signed by Markus Raab using GnuPG from here or GitHub
Already built API-Docu can be found here or 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 the issue tracker on GitHub.
For more information, see https://libelektra.org
Best regards, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by markus2330 over 7 years ago
Elektra - 0.8.24 release
0.8.24 Release
We are proud to release Elektra 0.8.24.
- guid: 889b700d-9eac-4eff-9a3d-f6fb15c3d9da
- author: Markus Raab
- pubDate: Sat, 18 Aug 2018 18:13:40 +0200
- shortDesc: Elektra Web, Notifications, Type System
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.
For a small demo see here:
You can also read the news on our website
Highlights
- Elektra Web
- Notifications
- KDE Workshop
- Type System Prototype
- Chef Cookbook
Elektra Web 1.6
The new release of Elektra Web features many UX improvements from the usability test!
Try it out now on: http://webdemo.libelektra.org/
1.5 changelog:
- 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:
- updated visibility levels
- removed "done" button in main view
- fixed issues with the opener click area
- remove metakeys when they are set to the default value or empty/0
- improved keyboard support
- fixed many small issues (#2037)
1.6 changelog:
- fixed bugs related to arrays (#2103)
- improved performance of search for many results
- added 404 page for invalid instance ids
- implement drag & copy by holding the Ctrl or Alt key
- add button to show error details
- allow deleting all keys in a namespace
Thanks to Daniel Bugl.
Notifications
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:
- The notification API now supports more types and has improved support for callbacks.
- With the addition of the zeromqsend and zeromqrecv plugins together with the hub-zeromq tool we have an alternative to the D-Bus transport plugins (dbus and dbusrecv).
- The new asynchronous I/O binding for ev is the third I/O binding - so notifications can be used in applications using glib, uv or ev. If your application uses a different library please check out the "How to create your own I/O binding" section in the notification tutorial.
- Notifications can be used to reload KDB after Elektra's configuration (e.g. mountpoints or globally mounted plugins) has changed. We added a how-to to the notification tutorial that explains the required steps and the "notificationReload" example with the complete code.
More details can be found in this news. Check out the updated notification tutorial and notification examples (polling, async and reload.
KDE Workshop
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:
- Elektra Web and qt-gui to safely modify all settings
- modification of settings via configuration management tools
- switch to other configuration file formats (e.g., XML or YAML for plasma)
- provide notification with main-loop integration
- plugin system for LDAP support and similar features
For more information see the Slides
Type System Prototype
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.
Chef Cookbook
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
kdbis invoked and Elektra needs to be installed for managed systems.
Thanks to Michael Zronek and Vanessa Kos.
Plugins
CCode
- We fixed various warnings in the source code reported by OCLint. (René Schwaiger)
- The plugin now also encodes and decodes key names in addition to key values. (René Schwaiger)
CPP Template
- We added a new template for C++ based plugins. To create a plugin based on this template, please use the command
sh
scripts/copy-template -p pluginname
, where pluginname specifies the name of your new plugin. (René Schwaiger)
Crypto
- The
cryptoplugin now uses Elektra'slibinvokeand thebase64plugin in order to encode and decode Base64 strings. This improvement reduces code duplication between the two plugins. (Peter Nirschl)
CSVStorage
- Changed behaviour of export to validate the structure of exported keys only. (Thomas Waser)
Directory Value
- We rewrote the plugin using C++. (René Schwaiger)
- Directory Value now also supports nested arrays. (René Schwaiger)
- The plugin now also adds leafs for a key, if its value is null or the empty string. (René Schwaiger)
fcrypt
- The
fcryptplugin will consider the environment variableTMPDIRin order to detect its temporary directory. See [#1973] (Peter Nirschl)
fstab
- The
fstabplugin now passes tests on musl builds. (Lukas Winkler)
Haskell
- An issue when building Haskell plugins with a cached sandbox is fixed in case a Haskell library bundled with Elektra gets changed. (Armin Wurzinger)
- The script that generates the list of haskell dependencies now also works on ghc8.0.1 and older cabal versions. Furthermore one can specify the build directory as a parameter if it is not located within the source directory. (Armin Wurzinger)
Interpreter Plugins
- The plugins Ruby, Python and Jni can now also be mounted as global plugin.
- Fix crashes in global Python plugin by using pluginprocess. Python plugin can now shutdown properly again. (Markus Raab and Armin Wurzinger)
JNI
- We now disable the plugin for the
BUILD_STATICorBUILD_FULLbuild variants, since otherwise the plugin breaks thekdbtool. (René Schwaiger) - We disabled the internal check (
testscr_check_kdb_internal_check) for the plugin, since it always fails. (René Schwaiger)
HexNumber
- The plugin hexnumber has been added. It can be used to convert hexadecimal values into decimal when read, and back to hexadecimal when written. (Klemens Böswirth)
List
- The
listplugin 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) - The
listplugin which is responsible for global mounting had a bug which prevented globally mounted plugins from being configurable. (Thomas Wahringer)
mINI
- We fixed a memory leak in the mINI plugin by requiring the plugin
ccodeinstead of the “provider”code. (René Schwaiger) - Removed unused header files. (René Schwaiger)
network
- Fixed an error in network plugin that prevented it from working on non-glibc platforms. (Lukas Winkler)
Type
- We extended the Markdown Shell Recorder example inside the README of the plugin. (René Schwaiger)
Regex Dispatcher
- The plugin regexdispatcher has been added.
It calculates regex representations for commonly used specification keywords to be used with the
typechecker. Currently the keywords
check/range,check/enumanddefaultare supported. (Armin Wurzinger)
Typechecker
- The plugin typechecker, used to validate configuration specifications for Elektra statically, has been improved under the hood. It now supports a more concise and efficient typechecking process including a greatly improved type inference scheme that should make generated specification files and thus generated errors to be easier to understand. An example of such error message is shown in the README. (Armin Wurzinger)
Tcl
- The
tclplugin does not fail anymore, if its configuration file does not exist and you try to retrieve the plugin contract. (René Schwaiger) - The plugin now uses relative key names. This update addresses issue #51. (René Schwaiger)
YAJL
- The YAJL Plugin now uses the internal logger functionality instead of
printfstatements. (René Schwaiger) - We fixed a problem with negative values reported by the UndefinedBehaviorSanitizer. (René Schwaiger)
YAML CPP
- The plugin does not save empty intermediate keys anymore. The example below shows the old and the new behavior of the plugin:
```sh # 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:- https://github.com/jbeder/yaml-cpp/issues/247
- https://github.com/jbeder/yaml-cpp/issues/289
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
arraymeta data for arrays containing arrays. (René Schwaiger) - The plugin now also supports empty arrays:
sh
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 meta data properly:
sh
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
.
YAML Smith
- YAML Smith is a plugin that converts Elektra’s
KeySetdata 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 yourKeySetcontains special characters.
Yan LR
- The experimental Yan LR plugin uses a parser, generated by ANTLR to read
basic YAML data. The plugin only converts YAML data to Elektra’s
KeySetdata structure. If you want to write data in the YAML format please take a look at the YAML Smith plugin. (René Schwaiger)
ZeroMQ transport plugins
- New notification transport plugins for ZeroMQ were added.
The new "zeromqsend" and "zeromqrecv" plugins use
ZMQ_PUBandZMQ_SUBsockets 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)
Misc
- 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
simpleinisilently on non-glibc systems but output a message like for other plugins (Markus Raab) We updated the
infos/statusclause of the following plugins:boolean,constants,csvstorage,hexnumber,internalnotification,ruby,simpleini,uname, andxerces
. (René Schwaiger)
Libraries
General
- Replaced
strdupwithelektraStrDup(for C99 compatibility). (Markus Raab) - You can now remove the basename of a key via the C++ API by calling
key.delBaseName(). (René Schwaiger) - The function
elektraArrayGetNextKeynow usesNULLinstead of the empty string as init value for the returned key. (René Schwaiger)
pluginprocess
- The library
pluginprocessthat is used to execute plugins run inside own processes has been improved. This is useful as some plugins like haskell-based plugins orpythoncan 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) - Anonymous pipes are now used instead of named pipes for the communication as anonymous pipes get terminated by the OS in case a child process dies before writing back data to the parent. Currently the parent process will freeze otherwise attempting to read from the child. (Armin Wurzinger)
Bindings
- A new I/O binding for ev has been added. It can be used to integrate the notification feature with applications based on ev main loops. (Thomas Wahringer)
Notifications
- The
notification API
was extended.
The API now supports more types:
int,unsigned int,long,unsigned long,long long,unsinged long long,floatanddouble. It also supports all of Elektra'skdb_*_ttypes defined inkdbtypes.h. Also contexts for callbacks were added andelektraNotificationRegisterCallbackSameOrBelow()allows for notifications for the registered key or below. (Thomas Wahringer)
Tools
- The new tool
kdb findlists keys of the database matching a certain regular expression. (Markus Raab) - You can now build the Qt-GUI using Qt
5.11. (René Schwaiger)
Scripts
- The script
check_formatting.shnow also checks the formatting of CMake code if you installedspongeandcmake-format. (René Schwaiger) - The script
check_formatting.shnow no longer writes to stdout if clang-format5.0 can not be found. (Lukas Winkler) - The script
check_bashisms.shshould now work correctly again, if the system uses the GNU versionfind. (René Schwaiger) - The script
reformat-cmakenow checks ifcmake-formatworks before it reformats CMake files. Thank you to Klemens Böswirth for the detailed description of the problem. (René Schwaiger) scripts/run_ichecknow no longer leaves the base directory of the project when checking if the ABI changed. (Lukas Winkler)- The completion for fish now also suggest the
info/meta attributes of the file plugin. (René Schwaiger)
Copy Template
- The script
copy-templateis now location independent. It will always create a new plugin insrc/plugins. (René Schwaiger) - The command now also supports the new template for C++ based plugins. Please use the
command line switch
-pto create a new plugin based oncpptemplate.
Documentation
- We improved the formatting of our compilation guide. (René Schwaiger)
- We fixed various minor spelling mistakes in the documentation. (René Schwaiger)
- The man pages for
kdb change-resolver-symlinkandkdb change-storage-symlinkreferenced the wrong command. (Lukas Winkler, René Schwaiger) - We added documentation for our build system in BUILDSERVER.md. (Lukas Winkler)
- The documentation for
kdbandkdb setnow mentions the--argument that stops processing of command line switches. This is useful for setting negative values among other things. (Klemens Böswirth) - We added a new tutorial about the jna binding. The tutorial shows how to use the java library to interact with kdb (Michael Zronek)
- GitHub now detects the license of the repository correctly again. (René Schwaiger)
- We added a tutorial describing Elektra’s array data type. (René Schwaiger)
Tests
(Markdown) Shell Recorder
- We added new Markdown Shell Recorder tests for the
- (Markdown) Shell Recorder tests now save test data below
/tests(see issue #1887). (René Schwaiger) - The Markdown Shell Recorder checks
kdb setcommands to ensure we only add tests that store data below/tests. (René Schwaiger) - The Markdown Shell Recorder now supports indented code blocks. (René Schwaiger)
- The Markdown Shell Recorder now also tests if a command prints nothing to
stdoutif you add the check#>. (René Schwaiger) - We fixed some problems in the Markdown Shell Recorder test
of
kdb ls. (René Schwaiger) - The Shell Recorder now does not interpret
-in checks as option character any more. (René Schwaiger) - The
add_pluginhelper now respectsENABLE_KDB_TESTINGwhen adding Markdown Shell Recorder tests. (Lukas Winkler) - The Markdown Shell Recorder test for
kdb findnow removes the configuration file at the end of the test. (René Schwaiger) - The Shell Recorder now properly unmounts any additional mountpoints created during a test. (René Schwaiger)
- We removed the broken auto unmounting feature from the Markdown Shell Recorder. (René Schwaiger)
- The Markdown Shell Recorder does not require a
bashcompatible shell anymore. (René Schwaiger)
General
- Plugins added with the flag
SHARED_ONLYno longer get tested in the scriptcheck_kdb_internal_check.shif executed with kdb-full or kdb-static. (Armin Wurzinger) - Add
compare_regex_to_line_fileswhich allows to compare a file made of regex patterns to be compared with a text file line by line. (Lukas Winkler) - The OPMPHM has a new test case (Kurt Micheli)
- Do not execute
fcryptandcryptounit tests if thegpgbinary is not available. (Peter Nirschl) - Resolved an issue where tests did not cleanup properly after they ran.
This was especially noticeable for
gpgtests as thegpg-agentsthat were spawned did not get cleaned up afterwards. (Lukas Winkler) - We disabled the general plugin test (
testkdb_allplugins) for thesemlockplugin, since the test reported memory leaks on the latest version of Debian Unstable. (René Schwaiger) - The CFramework macro
compare_keysetnow supports the comparison of two empty key sets. (René Schwaiger) - The C++ version of the macro
exit_if_failnow really exits the test progamm if the test fails. (René Schwaiger) - The C++ testing framework now supports the macro
compare_keysetthat checks if two key sets are equal. (René Schwaiger)
Build
As written in the previous release notes:
- Debian Wheezy is not supported anymore.
- Jessie (oldstable) with gcc 4.8.4 is now the oldest supported platform.
Another important change is:
- We now import the current version of Google Test as external project at configuration time using
DownloadProject. If you want to use a local installation of
Google Test instead, please set the value of
GTEST_ROOTto the path of you local copy of the Google Test framework. (René Schwaiger) - The cmake variable
GTEST_ROOTnow respects the environment variableGTEST_ROOTif it is set. (Lukas Winkler)
CMake
- 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. See the README. (Armin Wurzinger)
- Plugins can be specified to be only built for
BUILD_SHAREDbuilds, but to be excluded from anyBUILD_FULLorBUILD_STATICbuilds using the new optional argumentONLY_SHAREDfor our cmake macroadd_plugin. This wayBUILD_SHAREDcan 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_notificationon ASAN enabled builds, since Clang reports that the test leaks memory. (René Schwaiger) - Disable Markdown Shell Recorder test
validation.mdfor 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_FULLorBUILD_STATICas 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=OFFwhenspecorlistplugins are not selected. - Set coverage prefix to
PROJECT_SOURCE_DIR, resulting in easier readable coverage reports. (Lukas Winkler) - The functions
add_plugintestandadd_pluginnow also support adding a C++ test instead of a C test. (René Schwaiger) - The function
add_plugintestnow 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
- zero size arrays (Clang),
- variadic macros (Clang, GCC),
- conversions to non-pointer type (GCC), and
- attribute warnings (GCC),
caused by code generated via SWIG in the Ruby binding and plugin. (René Schwaiger)
Docker
clang-5.0is now used for clang tests by the build system (Lukas Winkler)- An additional build job on Ubuntu:xenial has been added (Lukas Winkler)
withDockerEnvJenkinsfile helper now no longer provides stages automatically. (Lukas Winkler)- Google Test is installed in Docker images used by the build system. (Lukas Winkler)
Infrastructure
Jenkins
- A build job checks if PRs modify the release notes. (Markus Raab)
- Several improvements to the build system have been implemented (Lukas Winkler):
- Better Docker image handling.
- Abort of previously queued but unfinished runs on new commits.
- Document how to locally replicate the Docker environment used for tests.
- The Jenkins build server now also compiles and tests Elektra with enabled address sanitizer. (Lukas Winkler)
- Add
STATICandFULLlinked builds. (Lukas Winkler) - Ported GCC ASAN build job to new build system (René Schwaiger + Lukas Winkler)
- Docker artifacts are now cleaned up in our daily build job. (Lukas Winkler)
clangtests have been ported to the new build system (Lukas Winkler et al)icheckbuild server job has been ported to our new build system. (Lukas Winkler)- Port
elektra-gcc-configure-debian-optimizationsto new build system. (Lukas Winkler) - Port
elektra-gcc-configure-mingw-w64to new build system. (Lukas Winkler) - Port
debian-multiconfig-gcc-stableto new build system. (Lukas Winkler) - Port
elektra-ini-mergerequeststo new build system. (Lukas Winkler) - Port
elektra-gcc-configure-debian-nokdbtestto new build system. (Lukas Winkler) - Port
elektra-gcc-configure-xdgto new build system. (Lukas Winkler) - Port
elektra-gcc-i386to new build system. (Lukas Winkler) - Port
elektra-gcc-configure-debian-muslto new build system. (Lukas Winkler) - Docker Registry is cleaned up by our daily buildserver task. (Lukas Winkler)
- Remove
elektra-gcc-configure-debian-nokdbtesttest. 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) - Remove
elektra-gcc-configure-debian-withspacetest. We now test for compatibility of spaced build paths during normal tests. (Lukas Winkler) - Check for source formatting during early test stages. (Lukas Winkler)
- Remove the amount of spawned tests via not running a full multiconfig setup for
the
PLUGINS=NODEPconfig. They did not provide any additional coverage. Instead we added a new test checking ifPLUGINS=NODEPbuilds in an minimal Docker image. (Lukas Winkler) - Speed up coverage data upload. (Lukas Winkler)
- Fix an issue where file archiving did not happen because of suppressed shell expansion (Lukas Winkler)
- Setup mailing for jenkins (Lukas Winkler)
- send mail to build@libelektra.org when
masterfails (Lukas Winkler) - parse change list into mail (Lukas Winkler)
- do not send mails if pipeline run was aborted (Lukas Winkler)
- send mail to build@libelektra.org when
Travis
- Travis now uses the latest version of GCC and Clang to translate Elektra on Linux. (René Schwaiger)
- Our Travis build job now
- builds all (applicable) bindings by default again, and
- checks the formatting of CMake code via
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)
Compatibility
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:
- The C++ API was extended with
delBaseName(). This does not affect ABI compatibility, also C++ programs compiled against 0.8.24 and usingdelBaseName()will work with Elektra 0.8.23 or older. kdbtypes.hnow comes with support for C99 types.- We added the private headerfiles
kdbnotificationinternal.h,kdbioplugin.h. (Thomas Wahringer) - The I/O binding header files have been moved a new directory called
kdbio. For example, instead of includingelektra/kdbio_ev.husers of the binding now includeelektra/kdbio/ev.h. (Thomas Wahringer) - The plugin directoryvalue has changed its behavior, see above.
- The plugin list changed its configuration, see above.
- The plugin yamlcpp now gets excluded with too old versions of yamlcpp (Debian Stretch is affected).
The new plugins are:
- hexnumber
- yamlsmith
- zeromqrecv
- zeromqsend
The new tool is: kdb-find
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:
- The hybrid search algorithm for the Key search
ksLookup (...)is now in preparation. The preparation includes a new KeySet flagKS_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)
Statistics
Following persons made in total 1734 commits:
1 commit by Mihael Pranjic <mpranj@limun.org>
2 commits by Thomas Waser <thomas.waser@libelektra.org>
7 commits by Michael Zronek <michael.zronek@gmail.com>
12 commits by Kurt Micheli <e1026558@student.tuwien.ac.at>
17 commits by Peter Nirschl <peter.nirschl@gmail.com>
21 commits by Klemens Böswirth <k.boeswirth+git@gmail.com>
197 commits by Markus Raab <elektra@markus-raab.org>
102 commits by Thomas Wahringer <thomas.wahringer@libelektra.org>
117 commits by Daniel Bugl <me@omnidan.net>
265 commits by Lukas Winkler <derwinlu+git@gmail.com>
249 commits by Armin Wurzinger <e1528532@student.tuwien.ac.at>
744 commits by René Schwaiger <sanssecours@me.com>
In total there were 792 files changed with 27677 insertions(+) and 39176 deletions(-).
Get It!
You can download the release from here or GitHub
The hashsums are:
- name: elektra-0.8.24.tar.gz
- size: 6130464
- md5sum: 2e3def7b905f94e1f9f7fa0fe4743189
- sha1: ff2a9b2d3a5e20a456e272a47fe9fd79ad410428
- sha256: 454763dd00e95e774a907b26eb59b139cfc59e733692b3cfe37735486d6c4d1d
The release tarball is also available signed by Markus Raab using GnuPG from here or on GitHub
Already built API-Docu can be found online or GitHub.
Stay tuned!
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
Scientific Software - Peer-reviewed
- C
Published by markus2330 over 7 years ago
Elektra - 0.8.23 release
- guid: 9a9ab08b-9ca0-4242-b617-5a8b21ea42a0
- author: Markus Raab
- pubDate: Sun, 13 May 2018 08:57:15 +0200
- shortDesc: Notification, Web UI, Build System
We are proud to release Elektra 0.8.23.
In 717 commits 11 authors changed 835 files with 31144 insertions(+), 21773 deletions(-).
What is Elektra?
Elektra serves as a universal and secure framework to access configuration settings in a specified, 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
Highlights
- Notification: New transport plugin
- Web UI greatly improved
- Overhaul of Build System and Daily Stretch Repository
Notification: New transport plugin
To keep persistent configuration settings in sync with the configuration settings of applications, notifications are needed. For notifications it is important that they do not block the execution of the applications. In Elektra we achieve this using transport plugins.
Elektra's notification feature has received its first transport plugin pair:
D-Bus.
Transport plugins provide a link between applications using Elektra.
These plugins send and receive notifications when a key is modified within the
key database.
The existing dbus plugin has been modified to use an asynchronous I/O binding
for sending messages, if available.
The new dbusrecv plugin is responsible for receiving messages sent from the
dbus plugin and other sources with the same
message format.
For more details see the notification tutorial or the example applications.
Thanks to Thomas Wahringer.
Web UI greatly improved
The goal of the Web UI is to provide safe and unified access to all configuration settings of a system. Different to other UIs, it generates its interface according specifications as found in Elektra.
For example, if a configuration setting only has a number of choices, you get exactly these choices within the user interface.
To get outstanding usability, Web UI now provides:
- undo functionality
- visibility functionality to hide irrelevant configuration settings
- built-in validation for many types of configuration settings
- support for arrays
- descriptions of configuration settings embedded in the user interface
Furthermore:
- The Web-UI now is able to install itself via cmake.
- The API was updated for elektrad and webd (former clusterd).
Note that new version of the Web UI requires Elektra 0.8.23 or later.
Thanks to Daniel Bugl.
Overhaul of Build System and Daily Stretch Repository
We started to overhaul our build system to improve build times and responsiveness. It focuses heavily on containerisation to improve hardware utilization.
If you are interested in #devops have a look at our
Jenkinsfile.
Daily builds Debian packages for Stretch are available again in our
stretch repository.
Add it to your sources.list:
deb [trusted=yes] https://debian-stretch-repo.libelektra.org/ stretch main
deb-src [trusted=yes] https://debian-stretch-repo.libelektra.org/ stretch main
Thanks to Lukas Winkler.
Other New Features
We added even more functionality, which could not make it to the highlights:
- A new experimental I/O binding for glib has been added. It can be used to integrate the notification feature with applications based on glib.
- The Order Preserving Minimal Perfect Hash Map (OPMPHM), used to speed up the lookups, got optimized and a benchmark was added, thanks to Kurt Micheli
- We added a script that calculates the complexity of configuration settings based on their specification, thanks to Anton Hößl
kdb lsnow has-0option to allow key names with newlines (needed for Web UI)- The csvstorage now can treat selected columns to be part of the key. Error messages were improved. thanks to Thomas Waser
Other News
- We added a tutorial about securing the integrity and confidentiality of configuration values, thanks to Peter Nirschl
- Peter Nirschl finished his thesis (signature). It includes a benchmark of different cryptographic providers.
- Markus Raab gave a talk at Linuxwochen Wien (in German). For similar talks in English, please refer to the FOSDEM talks.
- We replaced the word "project" to "initiative" in the Code of Conduct (project has per definition an end date).
Documentation
We improved the documentation in the following ways:
- FAQ was extended by Why do I need Elektra if I already use configuration management tools?
- Documentation about the recommended environment for test runs were added
- uniformly add
.at end of short help - Logo for Doc Set was added and logo for favicon was updated, thanks to René Schwaiger
- template of design decisions was updated to use the words problem (instead of issue) and rationale (instead of argument).
- METADATA.ini:
- added visibility (as used in Web UI)
- added type (only check/type existed)
- plenty of metadata is now used by Web UI
- update docu for type plugin that
check/type/minandcheck/type/maxare deprecated - Fixed various spelling mistakes, thanks to René Schwaiger
- Document limitations of resolver (kdbOpen fails if no home directory found) and json/yaml plugins (intermixing of array and objects not detected, which is possible in Elektra but impossible in JSON)
- Required environment to run tests is documented.
- A decision about deferred plugin calls has been made and implemented, thanks to Thomas Wahringer.
Compatibility
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 removed:
- the not used error code
12fromkdb mvfrom docu
We changed:
kdb get,kdb mvandkdb cpnow use error code11if keys are not found- cascading keys as arguments to
kdb cpandkdb mvnow fail instead of doing something unexpected, thanks to René Schwaiger for reporting
Shell scripts:
- cp and mv no longer accept cascading keys.
Notes for Maintainer
These notes are of interest for people maintaining packages of Elektra:
- Docu is updated that cmake3 is required. thanks to Lukas Winkler for reporting.
- To run all tests successfully, the
specandlistplugin is required. So ifENABLE_TESTINGis checked, cmake checks the presence of a storage, a resolver, the list and the spec plugin, thanks to René Schwaiger - Tests no longer clear environment or reset locales. This fixes lua and dbus problems but might cause problems if TMPDIR is set, thanks to Lukas Winkler
- This will be the last release supporting Debian Wheezy (LTS support will stop in May). Directly after the release, Jessie (oldstable) with gcc 4.8.4 will be the oldest supported platform.
We added:
- the private headerfiles
kdbnotificationinternal.h,kdbioplugin.h. - the headerfiles
kdbio_glib.handkdbio_uv.h - the plugin
libelektra-dbusrecv.so - the scripts
build-web,run-elektrad, andrun-web - the test case
testmod_dbusrecv - the constant
ENABLE_ASANin the constants plugin - several man pages such as:
kdb-run-elektrad.1andkdb-run-web.1
We removed:
Base64.pdfis not installed anymore- doxygen-generated man pages such as:
doc_docker_jenkinsnode_README_md.3elektra,doc_docker_README_md.3elektra, anddoc_vagrant_README_md.3elektra
Website
The website is generated from the repository, so all information about plugins, bindings and tools are always up to date. Furthermore, we changed:
- Error page that is shown if no JavaScript is enabled now more clearly says that the Website only renders content from the repo and only contains free JavaScript.
- The FAQ is now more visible (added to "getting started").
- The Code of Conduct was added.
Notes for Elektra's Developers
These notes are of interest for people developing Elektra:
. run_dev_envis a script to be sourced from the build directory. It sets environment variables, so that Elektra from the build directory is used (instead of the installed one).- All current versions of Clang-Format (6.0+) and the outdated Clang-Format 5 will now produce exactly the same output for the whole codebase, thanks to René Schwaiger.
- To make enums nicely formatting, make sure at least one member is documented.
- You can now add a Markdown Shell Recorder test for a plugin
via the CMake function
add_pluginby addingTEST_README. FurthermoreTEST_REQUIRED_PLUGINSallows us to specify which additional plugins are required, thanks to René Schwaiger constwas added to exceptions in catch blocks thanks to René Schwaiger- We now mention to read doc/DESIGN.md in the contributing guidelines.
The CMake functions
add_pluginadd_msr_testadd_msr_test_plugin, and the newadd_shell_recorder_test
now allow you to specify a list of required plugins for Shell Recorder and Markdown Shell Recorder tests.
The Markdown Shell Recorder now compares the whole output of
stderrwith the text following the directiveSTDERR:, thanks to René SchwaigerYou can now leave the text following the directive
STDERR:in a Markdown Shell Recorder test empty:
sh
true # Print nothing to `stderr`
# STDERR:
. The Markdown Shell Recorder will then check if the command printed nothing to the standard error output.
- The Shell Recorder now also prints the content of the protocol file if a test was unsuccessful or you used the command switch -p,
and always cleans up the protocol,
thanks to René Schwaiger
- We added an Markdown Shell Recorder test for the Constants plugin.
- The Markdown Shell Recorder now prints the path of the test file.
thanks to René Schwaiger
- The Haskell binding now explicitly requires GHC installed with a minimum version of 8.0.0 during cmake
thanks to René Schwaiger and Lukas Winkler
- If any of the tests in make run_memcheck fail valgrind will now set an exit-code which will get picked up by make,
thanks to Lukas Winkler
- We introduced git reference repositories to save I/O on our build system,
thanks to Lukas Winkler
- Set LD_LIBRARY_PATH in all tests removing the need to specify it for running ctest,
thanks to Lukas Winkler
- Provide the RUN_SERIAL property to all tests that can not be run in parallel,
thanks to Lukas Winkler
- Speeding up your test runs via ctest -j is now possible,
thanks to Lukas Winkler
- We now disable the Xerces plugin if you use GCC with enabled ASAN to build Elektra. This update
makes sure that you do not build the plugin with compilation settings that are known to
cause problems.
- Documentation and debugging capabilities of Markdown Shell Recorder were improved.
- We added style guidelines for CMake code to
doc/CODING.md.
Fixes
Many problems were resolved with the following fixes:
- YAML CPP now also saves key values directly below a mountpoint correctly, thanks to René Schwaiger
- If you use a minimal configuration (
dump,resolver, list, and spec), all test of the test suite now finish successfully again, thanks to René Schwaiger - small refactoring in
kdb-test - The Haskell plugin failed to build if the Haskell bindings were not included explicitly by name.
- Fix invalid handling of keynames in the spec plugin.
- The Shell Recorder counts the number of executed tests properly again.
- CMake now fails if the required plugins list or spec (on non-MinGW platforms) are missing from the current build configuration.
- The Lua, Python 2, Python, and Ruby plugins now require SWIG bindings for the corresponding programming language, thanks to René Schwaiger
- The type checker now also honors
typenext tocheck/type - Fix various compiler warnings
- The detection of Botan, Libgcrypt, LibGit2 and OpenSSL now also works properly, if we treat warnings as errors (compiler switch
-Werror), thanks to René Schwaiger - The multifile plugin now passes the child config to the storage plugins too and also handles symlinks correctly, thanks to Thomas Waser
Workshop
Elektra Initiative are the people behind Elektra. Our goal is to build up expertise with configuration settings and improve the situation in the FLOSS landscape. To learn more about the needs of configuration-wise non-trivial FLOSS applications, we have workshops. After a successful workshop with the LCDproc's maintainer, the next Workshop will be with people from KDE.
We will use the opportunity of Akademy being in Vienna. We already got positive feedback from kconfig maintainers (David Faure and Aleix Pol).
If you are interested, you can sign up. We are looking forward to an informative, interactive and interesting workshop!
Outlook
We are currently working on following topics:
- Klemens Böswirth: elektrifying LCDproc After some setbacks (the two original developers who wanted to work on LCDproc resigned because of job duties) LCDproc development restarted now successfully. The new plan is to have more intermediate stages. In particular the first integration will be a minimal invasive integration without high-level API.
- Armin Wurzinger: type system for Elektra's specification language
- Anton Hössl: Puppet
- Daniel Bugl: Web UI
- Hani Torabi Makhsos: reduce community entry barriers
- Kurt Micheli: order preserving minimal perfect hash map
- Lukas Winkler: continous integration
- Mihael Pranjić: mmap plugin (i.e. avoiding reparsing of configuration files)
- Peter Nirschl: integrity and confidentiality
- René Schwaiger: parsing techniques
- Thomas Wahringer: notification techniques
- Thomas Waser: Linux distribution based on Elektra
- Ulrike Schaefer: generate shell completion files from Elektra's specification
- Vanessa Kos: misconfiguration bug database
- We created a proof of concept for a Chef resource and an Ansible module successfully setting Elektra's keys. They are not yet published. If you are interested on this preliminary work, please contact us.
Get It!
You can download the release from here or GitHub
The hashsums are:
- name: elektra-0.8.23.tar.gz
- size: 5870069
- md5sum: 0a065ed381a59b6213bd46fd3c82ba83
- sha1: 0727b420ff721e654b0ba6ab1d0c78e5e2341d26
- sha256: f1d3cd4888ba3ef47c1327cbddf21dff7be289f94217f12e5e93105273ca6c48
The release tarball is also available signed by Markus Raab using GnuPG from here or GitHub
Already built API-Docu can be found online or GitHub.
Stay tuned!
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
Scientific Software - Peer-reviewed
- C
Published by markus2330 almost 8 years ago
Elektra - 0.8.22 Release
You can also read the news on our website
- guid: 4884a54f-996a-4564-a138-38a70166fed7
- author: Markus Raab
- pubDate: Tue, 27 Feb 2018 19:35:58 +0100
- shortDesc: Logo, INI, Lookup
We are proud to release Elektra 0.8.22! In 429 commits, 8 authors changed 548 files with 60369 insertions(+), 6783 deletions(-).
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.
For a small demo see here:
You can also read the FOSDEM interview and watch the FOSDEM main talk given recently.
Elektra is now an official part of Homebrew and Alpine Linux.
Highlights
- New Logo and Website Theme
- INI plugin greatly improved
- Notifications API and Bindings for Asynchronous I/O
- Plugin Processes
- Lookup with the Order Preserving Minimal Perfect Hash Map
New Logo and Website Theme
We are proud to present our new logo. It has a new shape and cooler colors.
Thanks to Philipp Frei!
We also gave the website a new look. It has the colors from the logo and new fonts (Lato and Libre Franklin) that improve readability and add to a unique look. The restructured start page contributes to the new look as well.
We also updated asciinema-player to 2.6.0.
Thanks to Thomas Wahringer.
We also fixed security issues in the Website due to an old version of jquery, thanks to Marvin Mall.
Thanks to Bernhard Denner for keeping our infrastructure running.
INI plugin greatly improved
diniis no longer experimental anymore and adds the binary plugin.- We added a crash test for the INI plugin that feeds the plugin with problematic input data we determined using AFL
- We fixed various small bugs that could potentially cause the INI plugin to crash and fixes the problems as reported by AFL
- The INI plugin now converts a section to a normal key-value pair if you store a value inside it. This has the advantage that you will not lose data unexpectedly anymore.
- The INI plugin should now read most key-value pairs containing delimiter characters (
=) properly.
Thanks to René Schwaiger!
Nevertheless, we did not switch to INI as default format. This has some reasons:
- In many workflows,
dumpis the better choice: e.g. withkdb editoryou can edit any parts of Elektra with any format (e.g. INI) more safely. (With the INI plugin in some of these situations meta data is wrongly shown.) - The code base of INI is not fully tested and partly not well understood.
- We plan to switch to a newly written parser (most likely YAML) and want to avoid that users have two migrations.
The migration from
dumpis easier (especially compared with INI) because thedumpformat is recognisable without ambiguity. (Thus the INI file parses nearly any file, it is hard to detect that a file is not INI)
But for those who want to switch, the migration will be smooth:
The dini plugin makes sure that old dump files are still being read.
Only when writing out configuration files, configuration files are converted to INI.
To change to INI during compilation, simply use:
-DKDB_DEFAULT_STORAGE=dini
Or simply switch for your installation with:
sudo kdb change-default-storage dini
You can also mount INI (or dini) as root:
sudo kdb mount default.ini / dini
Notification API and Bindings for Asynchronous I/O
This release contains an experimental implementation of Elektra's notification feature. This feature enables applications to get updates when configuration is changed at run-time. For more details see the preview tutorial at doc/tutorials/notifications.md
The
Notification API
is implemented by a new library called elektra-notification.
To use the library you need the new internalnotification plugin.
Since the plugin is experimental it needs to be enabled when building Elektra
from source (e.g. by passing
-DPLUGINS="ALL;-EXPERIMENTAL;internalnotification" to cmake).
New bindings for asynchronous I/O called "I/O bindings" also have been added. These bindings allow Elektra's plugins and other parts to perform asynchronous operations. I/O bindings are opt-in for application developers. New features of Elektra that take advantage of I/O bindings will have fallbacks where viable. These fallbacks will use synchronous I/O thus keeping the status quo.
This release includes an experimental I/O binding for uv. The interface for I/O bindings is currently experimental and might change in the future.
Elektra's notification feature is not complete yet. So called "transport plugins" will be responsible for sending and receiving notifications using different protocols or libraries (like ZeroMQ or D-Bus). These plugins will make use of the new I/O bindings. We plan to introduce the first transport plugins with the next release of Elektra.
Plugin Processes
A new library called pluginprocess
has been added. This library contains functions that aid in executing plugins in
a separate process. This child process is forked from Elektra's main process
each time such plugin is used and gets closed again afterwards. It uses a simple
communication protocol based on a KeySet that gets serialized through a pipe via
the dump plugin to orchestrate the processes.
Such a behavior is useful for plugins which cause memory leaks to be isolated in an own process. Furthermore this is useful for runtimes or libraries that cannot be reinitialized in the same process after they have been used.
Lookup with the Order Preserving Minimal Perfect Hash Map
The ksLookup (...) has a new search algorithm, that acts as an alternative to the
binary search. The Order Preserving Minimal Perfect Hash Map (OPMPHM) is a non-dynamic,
randomized hash map and is very effective for mostly static configurations.
The OPMPHM can be enabled for a search by passing the in kdbproposal.h
defined option KDB_O_OPMPHM to the lookup.
Be aware that if the KeySet changes often using the OPMPHM might not be a good
idea, read more about the OPMPHM.
When you are not sure if the OPMPHM will speed up you searches, wait for the next release, that one will include a hybrid search algorithm that combines the best properties of both search algorithms.
To disable OPMPHM (e.g. on systems with tight memory constraints), you can pass
-DENABLE_OPTIMIZATIONS=OFF
Other New Features
We added even more functionality, which could not make it to the highlights:
- The Web UI was greatly improved, thanks to Daniel Bugl The version of clusterd was increased from 1.0.0 to 1.1.0.
- Elektra is now part of the official Homebrew repository. We still provide a tap, if you want to install Elektra together with plugins or bindings that require additional libraries.
- The building and linking of the haskell bindings and haskell plugins has been greatly improved.
- The invoke library can now report errors upon opening/closing a plugin, thanks to Armin Wurzinger.
- The YAML CPP plugin does not require Boost anymore, if you installed yaml-cpp 0.6.
- Improved colored output in
kdbtool. - We added two build jobs: docker and haskell. Thanks to Bernhard Denner and Armin Wurzinger.
- YAML CPP does not write binary data to a config file, if you forget to load the Base64 plugin.
- YAML CPP now encodes empty binary keys as NULL values (
~), and also adds the meta keybinaryfor such values automatically.
Documentation
We improved the documentation in the following ways:
- We have documented how you can setup a build node for Jenkins using a Docker container We also provide an example Dockerfile based on Debian Stretch for that purpose, thanks to Armin Wurzinger.
- Document how
rlwrapmight be used forkdb shell. - Fixed docu in
hostsplugin. - Greatly improved the license documentation
in
debian/copyrightin thedebianbranch, thanks to Thomas Wahringer. - Various fixes in doc/METADATA.ini
Compatibility
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 executed old test cases against the latest Elektra version and all tests passed.
In kdbinvoke.h we changed the API so that elektraInvokeOpen
and elektraInvokeClose can yield error messages.
We added:
- the public headerfiles
kdbnotification.h,kdbio.h,kdbiotest.h. - the private headerfiles
kdbnotificationplugin.h,kdbioprivate.h.
Portability
- Fix bash shebang of bash scripts, thanks to Jakub Jirutka
- Remove unportable unneeded asm, thanks to Timo Teräs and Jakub Jirutka
- Fixed syntax in shell recorder, thanks to René Schwaiger
- Used
mktempincheck_distribution.shto allow parallel run of test cases, thanks to Armin Wurzinger.
Notes for Maintainer
These notes are of interest for people maintaining packages of Elektra:
diniis no longer experimental.- CMake:
BINDINGSnow behaves likePLUGINSBy default now all MAINTAINED bindings except EXPERIMENTAL and DEPRECATED are included. For more details see /doc/COMPILE.md. To include both intercept bindings, you now need to writeINTERCEPT, to only include getenv interceptionintercept_env.interceptin lower-case does not work anymore.
The following files are new:
- Libs:
libelektra-notification.so,libelektra-io.so,libelektra-io-uv.so,libelektra-pluginprocess.so - Headers:
kdbgetenv.h,kdbio.h,kdbpluginprocess.h - Plugins:
base64/Base64.pdf - Binaries:
getenv,test_context,test_fork,test_getenv,test_ks_opmphm,test_opmphm - Other:
elektra-io.pc
The following files were removed:
- Tests:
testmod_semlock
Notes for Elektra's Developers
These notes are of interest for people developing Elektra:
- We now use
clang-reformat-5.0for formatting. Please upgrade your clang. - Build Agent
ryzen v2was added to speed upjenkins build all please, thanks to Armin Wurzinger. - Travis maintenance (Qt 5 and other problems), thanks to René Schwaiger.
BINDINGSwas greatly improved and the CMake functions were simplified. Bindings now also have aREADME.mdwith meta data. A big thanks to Thomas Wahringer.- Decision: Logging with
ELEKTRA_LOGis only for C/C++. - Including
kdberrors.hin a C++ files now also works, if you do not add the statement
cpp
using namespace ckdb;
before you import kdberrors.h.
- The CMake code for Elektra’s Qt-GUI now detects the location of Qt 5 automatically if you
installed Qt via Homebrew.
- All Shell Recorder tests should not now correctly restore your old configuration after you execute them,
thanks to René Schwaiger.
- The Base64 plugin does not encode empty binary values in meta mode anymore. This update allows plugins such as YAML CPP to handle empty keys properly.
Fixes
Many problems were resolved with the following fixes:
kdb global-umountalso removed other mountpoints- We fixed internal inconsistency in the CMake code of the Augeas plugin
- We fixed the haskell bindings and plugins on Debian Stretch and added a new build server job to test that in the future.
- Cleanup in list plugin, thanks to Thomas Wahringer
- The Shell Recorder now exports and imports the root of a mountpoint instead of the mountpoint itself. This change makes sure that Shell Recorder test do not change the configuration directly below the specified mountpoint.
Get It!
You can download the release from here or GitHub
The hashsums are:
- name: elektra-0.8.22.tar.gz
- size: 5885118
- md5sum: 5cbd9e33daf51f6f33791ff3f99342a6
- sha1: 4954ff16cfe7dc69e45e6a748556262b8fb1a9fa
- sha256: 962598315619d5dff3a575d742720f076dc4ba3702bd01609bfb7a6ddb5d759f
The release tarball is also available signed by me using GnuPG from here or GitHub
Already built API-Docu can be found online or GitHub.
Stay tuned!
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, Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by markus2330 almost 8 years ago
Elektra - Release 0.8.21
0.8.21 Release
We are proud to release Elektra 0.8.21.
- guid: 7f5de1b1-6086-47a6-9922-cac08c898ae7
- author: Markus Raab
- pubDate: Fri, 22 Dec 2017 09:24:02 +0100
- shortDesc:
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.
The news can be read rendered at our web server.
Highlights
In this release 8 authors created 307 commits and we changed 217 files (5227 insertions, 1914 deletions). The highlights of the release are:
- Fosdem Talk about Elektra was accepted
- CC-licensed book about Elektra published
- Maturing of plugins
- Elektra with encryption
- Preparation for switch to INI as default storage
Fosdem Talk about Elektra in Main Track
We are happy to announce that there will be a talk about Elektra in one of the main tracks of Fosdem 2018:
- Title: Configuration Revolution
- Subtitle: Why it Needed 13 Years and How it Will be Done
- Day: Saturday 2018-02-03
- Start time: 15:00:00
- Duration: 50 min
- Room: K.1.105 (La Fontaine)
And a second talk in the Config Management DevRoom:
- Title: Breaking with conventional Configuration File Editing
- Subtitle: Puppet with a Key/Value API in a User Study
- Day: Sunday 2018-02-04
- Start time: 30:00
- Duration: 25min
- Room: UA2.114 (Baudoux)
See you in Brussels at 3 and 4 February 2018!
I will also be present in the Config Management Camp directly after Fosdem in Gent.
CC-licenced Book About Vision of Elektra Published
I am proud to release a book with the title "Context-aware Configuration" describing:
- the last 13 years of Elektra (focus on last 4 years with the questionnaire survey and code analysis),
- the current state of Elektra, and
- the long-term goals of Elektra (context-aware configuration).
The Fosdem talk will cover some highlights from the book.
A huge thanks to everyone involved in the questionnaire survey, without you we would not have been able to collect all the information that led to the requirements for Elektra.
The LaTeX sources are available here and the compiled book can be downloaded from here.
Maturing of Plugins
- The new Directory Value plugin supports storage plugins such as YAJL and YAML CPP . It adds extra leaf values for directories (keys with children) that store the data of their parents. This way plugins that normally are only able to store values in leaf keys are able to support arbitrary key sets.
- The YAML CPP plugin reads and writes YAML data using yaml-cpp. The plugin supports arrays, binary data and metadata.
- The Camel plugin stores data as simplified YAML flow lists containing double quoted keys and values. For proper YAML support please use the YAML CPP instead.
- The mINI plugin reads and writes simple property list, separated by equal (
=) signs. - The xerces plugin allows Elektra to read and write XML data. The plugin uses Xerces-C++ for this task. It supports both arrays and metadata.
- The boolean plugin normalizes boolean values such as
0,1,trueandfalse. - The crypto plugin and fcrypt plugin are described below.
Elektra With Encryption
The plugins fcrypt and crypto are now considered stable. They are no longer tagged as experimental.
While crypto encrypts individual values within configuration files, fcrypt encrypts and/or signs the whole configuration file.
For this release Peter Nirschl prepared a demo showing Elektra's cryptographic abilities:
Thanks to Peter Nirschl for this great work!
Switch to INI
We plan to switch to INI as default storage instead of Elektra's infamous internal dump format.
As preparation work we implemented the dini plugin which transparently
converts all dump files to ini files on any write attempt.
Furthermore, we fixed most of the INI bugs which blocked INI to be the
default storage.
Due to this progress we will likely switch to INI as default starting
with the next release. If you want to, you can switch now by compiling
Elektra with:
-DKDB_DEFAULT_STORAGE=dini
Or simply switch for your installation with:
sudo kdb change-default-storage dini
If you are already using ini as default, changing to dini will:
- add some overhead because
dinialways checks if a file uses thedumpformat, unless thedumpplugin is not installed. - add support for binary values using the
binaryplugin
NOTE: INI (dini) was not completely ready for 0.8.21 thus we kept
dumpas default.diniis currently an experimental plugin.
Other New Features
We added even more functionality, which could not make it to the highlights:
kdb rmnow supports-fto ignore non-existing keys- use
%as profile name to disable reading from any profile - The new function
elektraArrayDecName:
c
int elektraArrayDecName (Key * key);
decreases the index of an array element by one. It can be used to reverse the effect of elektraArrayIncName,
thanks to René Schwaiger
Documentation
We improved the documentation in the following ways:
- We renamed our beginner friendly issues to "good first issue" as recommended by GitHub.
- In many parts of the documentation we already switched to American spelling thanks to René Schwaiger
- Added more automatic spelling corrections thanks to René Schwaiger
- Fixed many spelling mistakes thanks to René Schwaiger
- We extended the ReadMe of the
jniplugin. The ReadMe now also contains information about the Java prerequisites of thejniplugin on Debian Stretch. - Improved notes about testing thanks to Thomas Wahringer
- qt-gui: give hints which package to install
- The build phrases
jenkins build all pleaseandjenkins build doc pleasewere documented thanks to René Schwaiger - Documentation for libelektra-invoke was added
Compatibility
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).
All unit tests of 0.8.20 run successfully with Elektra 0.8.21. There are, however, some additions and changes in rarely used interfaces:
- added
elektraArrayDecNameandelektraArrayValidateNamein libease - fixed
kdbinvoke.hinterface: make structure private and complete API - fixed
xmlnsandxsi:schemaLocationto behttps://www.libelektra.org - the private header file
kdbopmphm.hgot nearly rewritten
Notes for Maintainer
These notes are of interest for people maintaining packages of Elektra:
- We added the following files in this release:
libelektra-dini.solibelektra-directoryvalue.sotestmod_directoryvalue
- The following plugins are not marked as experimental anymore:
camelcryptominixercesyamlcpp
- The binding
intercept-fsis now marked more clearly as experimental - The
luaandjniplugins are again experimental because they do not work with some Lua/Java interpreters.
Notes for Elektra's Developers
These notes are of interest for people developing Elektra:
- From now on release notes are written as part of PRs
- Elektra Initiative is spelled as two words
- At some more places we switched to use the logger, thanks to René Schwaiger
- Shell Recorder got many improvements, see below in Testing. Please use it.
- The plugin's template now adds all placements within backends by default (must be removed accordingly).
- We now warn if plugins do not have any placement.
- Please prefer -log and -debug builds
- The build server now understands the build phrase
jenkins build all pleasethanks to René Schwaiger. Please use it carefully, since it puts our build server under heavy load. - Markdown Shell Recorder Syntax recommended when reporting bugs.
- Elektra's Dockerfile was improved and simplified, thanks to Thomas Wahringer.
- Add more Explanations how to do Fuzz Testing
- Started documenting disabled tests in doc/todo/TESTING
- You now can use
tests/icheck.suppressionto disable already checked API changes. - The (hopefully) last Sourceforge references were removed and a redirection page was added, thanks to @the-Arioch for reporting.
Testing
- AFL unveiled some crashes in INI code
- fix OCLint problems, thanks to René Schwaiger
- fix ASAN problems, thanks to René Schwaiger
- disabled non-working tests
- Shell recorder
- Benchmark optionally also works with OpenMP, thanks to Kurt Micheli
- The Shell Recorder now uses
kdb-staticorkdb-fullifkdbis not available (BUILD_SHARED=OFF)
Fixes
Many problems were resolved with the following fixes:
- fix use of
dbus_connection_unref(NULL)API thanks to Kai-Uwe Behrmann - Properly include headers for
std::bindthanks to Nick Sarnie - qt-gui: assure active focus on appearance selection window thanks to Raffael Pancheri
- René Schwaiger repaired the
booleanplugin:- wrong metadata was used
- plugin configuration was missing
- documentation was missing
- logging code was added
- René Schwaiger repaired many problems different build agents had
kdb info -ldoes not openKDBanymore.change-resolver-symlinkandchange-storage-symlinknow correctly use@TARGET_PLUGIN_FOLDER@- date plugin will be removed on attempts to compile it with gcc 4.7, thanks to René Schwaiger
- C plugin: storage/c metadata added
- fix disabling documentation in CMake, thanks to Kurt Micheli
- Simplify
elektraArrayValidateName, thanks to René Schwaiger
Outlook
The Order Preserving Minimal Perfect Hash Map (OPMPHM) is ready to extend ksLookup. The implementation of the randomized Las Vegas hash map
algorithm is in a final stage and the heuristic functions that ensure time and space optimality are backed up by benchmarks.
Thanks to Kurt Micheli, the next release will include the OPMPHM!
Get It!
You can download the release from here or GitHub
The hashsums are:
- name: elektra-0.8.21.tar.gz
- size: 4712043
- md5sum: d627a01a0249fde46e80042c848d4521
- sha1: a7659a7bb1b2388d03cdf0084160de612e5c4511
- sha256: 51892570f18d1667d0da4d0908a091e41b41c20db9835765677109a3d150cd26
The release tarball is also available signed by me using GnuPG from here or GitHub
Already built API-Docu can be found online or GitHub.
Stay tuned!
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 Raab for the Elektra Initiative
Scientific Software - Peer-reviewed
- C
Published by markus2330 about 8 years ago
Elektra - Release 0.8.20
0.8.20 Release
- guid: 547d48e2-c044-4a8e-9d32-ca6b6fb914d9
- author: Markus Raab
- pubDate: Thu, 31 Oct 2017 23:08:07 +0200
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.
Highlights
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:
- libelektra.org: new website and puppet-libelektra
- plugin+bindings for Haskell and Ruby
- improved shell completion
- new plugins: yamlcpp, camel, mini, date, file, range, multifile, xerces, ipaddr
libelektra.org
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.
Haskell and Ruby
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.
Shell Completion
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.
New Plugins
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:
RFC2822ISO8601POSIX
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.
Documentation
The documentation was greatly improved within this release.
- Added "Hello, Elektra" and logging tutorial, thanks to René Schwaiger
- extended FAQ
- Christoph Weber (@krit0n) improved some tutorials
- options are passed to PDFLaTeX compiler, thanks to René Schwaiger
- small fixes, thanks to Dominik Hofer
- fix many spelling mistakes, use American english, fix formatting, fix+add links, unify title style, fix code blocks, add titles and fix the PDF manual a big thanks to René Schwaiger
Features
We added even more functionality, which could not make it to the highlights:
- DBUS support for qt-gui (listening to configuration changes): qt-gui gets a viewer-mode where configuration settings are immediately updated via DBus notifications, thanks to Raffael Pancheri With the new qt-gui and newer qt releases (~5.7) the qtquick experience is much smoother, for example, the tree view does not collapse on syncs anymore.
- Armin Wurzinger greatly improved the JNA binding. The build system now uses Maven to build them. Armin also added Doxygen documentation and a script to test the JNA binding using Randoop.
- The improved curlget plugin, is now able to upload configuration files, thanks to Thomas Waser and Peter Nirschl (CMake fixes).
- New command
kdb rmmeta, thanks to Bernhard Denner - crypto plugin and fcrypt plugin
- The configuration option
gpg/keywas renamed toencrypt/key - The plugins now make sure that you configured them properly by validating key IDs
- thanks to Peter Nirschl
- The configuration option
- fcrypt plugin:
- The plugin now list available GPG keys when config is missing
- You can now specify signatures via the configuration option
sign/key - New text mode, enabled by default (disable by setting
fcrypt/textmodeto0) - New option
fcrypt/tmpdirallows you to specify the output directory ofgpg - If you want to learn how to use the plugin please check out our new ASCII cast
- thanks to Peter Nirschl
- Thomas Waser added useful scripts:
- mount-list-all-files to list all mounted files.
- mountpoint-info to provide more info about mountpoints.
- stash
to stash away Elektra's configuration, to be restored using
restore. - backup to backup Elektra's configuration.
- restore to restore a backup or stash.
- check-env-dep allows users to check if environment has influence on configuration settings.
- change-resolver-symlink allows users to change the default resolver.
- change-storage-symlink allows users to change the default storage.
- limit min/max depth for
kdb ls(-mM), thanks to Armin Wurzinger. - conditionals: allow multiple assigns and conditions
- base64 also works as filter for binary data (not just encrypted data), thanks to René Schwaiger
- csvstorage plugin: compatibility with RFC 4180, thanks to Thomas Waser
- gitresolver plugin: improvements and update of libgit version, thanks to Thomas Waser
- curlget plugin: also allow uploading of configuration files, thanks to Thomas Waser
Compatibility
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:
- scripts now work on macOS (readlink and sed), thanks to Armin Wurzinger and René Schwaiger
- generalized error #60, "invalid line encountered"
- added new errors #164 - #187
- added private headerfiles
kdbglobal.h,kdbinvoke.h
Notes for Maintainer
- LICENSE.md now contains only the BSD 3-Clause License (without any additional non-license text)
- AUTHORS renamed to AUTHORS.md
- NEWS.md is now a generated file containing all news concatenated
- CMake 2.8.8 is no longer supported, CMake 3.0 is now needed
- fix macOS
RPATH, remove old policies, thanks to René Schwaiger - new option
BUILD_DOCSETto build DocSet, thanks to René Schwaiger - new option
ENABLE_OPTIMIZATIONSforOPMPHMpreparation work, thanks to Kurt Micheli For this release, please keepENABLE_OPTIMIZATIONSturned off. Currently the flag increases memory usage, without being faster. - add
TARGET_TOOL_DATA_FOLDERfor installation of tool data (for rest-backend and rest-frontend)
The following files are new:
- Libs:
libelektra-utility.so,libelektra4j-0.8.20.pom.xml - Plugins:
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 - Tools:
backup,mount-list-all-files,mountpoint-info,restore,stash,update-snippet-repository - Tests:
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.
Development
- Added macros, thanks to René Schwaiger:
ELEKTRA_NOT_NULLis an assertion against null pointersELEKTRA_MALLOC_ERRORsets an error when allocation failedELEKTRA_STRINGIFYto quote a macro valueELEKTRA_PLUGIN_STATUS_ERROR,ELEKTRA_PLUGIN_STATUS_SUCCESS,ELEKTRA_PLUGIN_STATUS_NO_UPDATEfor return values of plugins.
ELEKTRA_STRINGIFYused throughout, thanks to René Schwaiger- use
(void)instead of()(added-Wstrict-prototypes) - new positions for global plugins, thanks to Mihael Pranjic
- Kurt Micheli added
generateKeySetto randomly generate large key sets - add vagrant and docker support, thanks to Christoph Weber (@krit0n)
- improve support for CLion, NetBeans and
oclint - portability improvements for logger, thanks to René Schwaiger
- metadata consistency check within source repo, thanks to Thomas Waser
ELEKTRA_PLUGIN_EXPORTaccepts macro as argument- fallthroughs in switch statements are now marked with
FALLTHROUGH - introduce
print_resultto unify test output, thanks to René Schwaiger - export
validateKeyas preparation for type plugin
Other
- kdb: errors are more colorful, add infos to report issues,
catch signals for
kdbtools to print errors on crashes, use$EDITORifsensible-editorandeditoris not found. René Schwaiger fixed preposition and format of the messages. - added Spanish translation for qt-gui thanks to AdanGQ (@pixelead0)
- augeas plugin: error messages improved, export genconf (for WebUI to list all lenses)
- improvements for CentOS and Debian Packages, thanks to Sebastian Bachmann
- Travis improvements, fixes, and many build variants added, thanks to Mihael Pranjic and René Schwaiger
ronnnow always uses UTF-8 as encoded and is no longer required as essential dependency to get man pages, thanks to René Schwaiger- GitHub now recognizes that we have a BSD licence, thanks to René Schwaiger
- uninstallation Script also uninstalls directories and Python files, thanks to René Schwaiger
- Kurt Micheli created a benchmark tool to generate large KeySets
- added/reformatted use cases, thanks to Daniel Bugl
- Thomas Wahringer prepared for a new theme on the website
- Arfon Smith updated meta data for Elektra's journal entry
Quality
- fixed all remaining ASAN problems, thanks to René Schwaiger and Armin Wurzinger (some tests are excluded when compiled with ASAN)
- fix many compilation warnings, thanks to René Schwaiger and Armin Wurzinger
- fixed many potential out-of-bound errors, thanks to René Schwaiger
- fixed warnings of Clang's static analyzers, thanks to René Schwaiger
- fixed cppcheck warnings, thanks to Armin Wurzinger
- fixed strict prototypes, thanks to Armin Wurzinger
- fixed and use scan-build (clang)
- fixed potential memory leaks on errors
- added assertions
- generate Java API tests with randoop which revealed bugs in jna bindings that were fixed, thanks to Armin Wurzinger
- Numerous fixes in the shell recorder, which does regression tests on Elektra's tutorials and READMEs, thanks to René Schwaiger and Thomas Waser
Fixes
kdb file: never print errors, thanks to René Schwaiger- plugin mathcheck: fixed regex #1094, thanks to Thomas Waser
- dbus: properly do unref and document how to integrate DBus, thanks to Kai-Uwe Behrmann
- dbus accepts announce=once which is used for
kdb mount-openiccIt protects against message floods in large configuration files, thanks to Kai-Uwe Behrmann for reporting - plugin desktop: fix crash if
DESKTOP_SESSIONis missing - shell-recorder: many fixes and improvements, thanks to Thomas Waser and René Schwaiger
- fix getopt positional parameters, thanks to Armin Wurzinger
- resolver: avoid silent errors of fchown/fchmod
- plugin fcrypt: fixes in file name handling to make leaks less likely (still needs tmpfs to be secure!), thanks to Peter Nirschl
- plugin jni: fix segfaults on errors, plugin is nevertheless tagged as experimental due to other problems
- plugin type: reject integers if garbage follows
kdb: fix memleak when listing plugins- many spelling fixes and fix typo in source of qt-gui: thanks to klemens (ka7)
- dpkg, fix file leakage, thanks to Armin Wurzinger
- plugin line: only skip parentKey if present
- plugin resolver: avoid failure after commit for files that cannot be removed
- plugin simpleini: handle more errors, make format parameter more robust thanks to Bernhard Denner
- plugin crypto: fix compilation errors for openssl versions on Debian 9, thanks to Peter Nirschl
kdb mv: fail without keys also in recurse mode- fix bashism, thanks to Armin Wurzinger
- qtgui: fix crash on unhandled exception on binary values, thanks to Raffael Pancheri
Outlook
We are currently working on following topics:
- Migration of LCDproc, OpenIcc, machinekit, ... to Elektra.
- A reimplementation of Elektra's core API in Rust (next to implementation in C).
- A user interface which generates restricted input fields based on the specification.
- YAML as configuration file format (next to INI, XML, JSON, TCL, ...).
- An mmap persistent cache.
- Improvements for the specification language.
- New APIs to be directly used by applications.
- An order-preserving minimal hash for O(1) lookup and iteration.
- Mainloop migration for notifications (currently only DBus, to be extended to Redis, ZeroMq).
- Improvements on the Website and snippet sharing to also handle misconfiguration.
Get It!
You can download the release from here or GitHub
The hashsums are: name: elektra-0.8.20.tar.gz size: 4740032 md5sum: 0e906f1a1677a8bfb31d144e1eaeb3cf sha1: 5e33c49ae6e3b890c9267288fb9f321289910eb5 sha256: e9cbc796e175685ccb6221f1dd5ea5c43832f545c40557c32b764ff5d567b312
The release tarball is also available signed by me using gpg from here or GitHub
Already built API-Docu can be found online or GitHub.
Stay tuned!
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
Scientific Software - Peer-reviewed
- C
Published by markus2330 over 8 years ago
Elektra - Website Release
- guid: 102b84a3-c41e-485c-8fe2-f12a24b3fbfd
- author: Marvin Mall
- pubDate: Thu, 22 Dec 2016 17:46:19 +0100
- shortDesc: introduces new Elektra website with snippet sharing
Highlight
- Release of new Elektra website with an integrated service for sharing of configuration snippets.
- The website also supports conversion between different configuration formats.
- Website structures documentation and news sections in a new way.
Introduction
With Elektra developing into a more and more reliable as well as popular system to manage system configurations, the demand for a better public appearance increases as well. For this reason, we are happy to be able to announce the release of our new website!
The new website does not only give us a chance to better present ourselves to the open world, it also enables us to structure our project documentation better. We hope that this will make it easier for our users to get started with Elektra and all of its awesome features!
Besides the documentation, the website does also include a database that can be used to share, search, download and convert configuration snippets in various formats. We hope that this tool helps developers and administrators, but also anyone else to simplify their configuration processes when they have to look for a specific configuration snippet. Btw. with snippet we mean that you can also share parts of configuration files that you find particular useful!
But sharing of snippets does not only help other users, it can help yourself as well because you can search for them easier. You also have access to the snippets in various formats at any time, allowing you to use them across multiple system by mounting them with the curlget resolver!
The Website
The website was written by Marvin Mall in the course of his bachelor thesis as part of the front-end he developed for his snippet sharing service. His main goals were to create a proper appearance for Elektra, but also to create a platform that promotes his service. We think that this worked out quite well by connecting the website with the service the way it was done.
Documentation
An important aspect of the new website was to make existing documentation more transparent and structured. A lot of documentation files have been changed to achieve this goal and an equal amount of effort was put into writing a system that decouples the documentation structure on the website from the structure used within the Elektra repository.
The tutorials section was partially reworked to make the first steps together with Elektra easier for our users. Clearly the effort put into the tutorials is worth it. Thanks to Erik Schnetter for the valuable feedback where improvements are needed and Christoph Weber for (re)writing the tutorials!
We should note -- as always in software -- that the structure on the website is not final yet and will definitely develop over time, especially the bindings and libraries sections will get some more attention.
If you are interested in the techniques we use to structure our files, you can have a look at the rest-frontend readme. The website is already the fourth view of our markdown pages! The others are man pages, doxygen, and github.
Homepage & News
Besides the documentation we also wanted a place to properly present ourselves and our news around Elektra. For this reason we created a new home page which shall give an overview of what Elektra is and can do. Additionally to that, we also added a news section to keep you better up-to-date!
We hope that you enjoy our new appearance as much as we do!
Snippet Sharing
Another important part of the website and also without doubt the part that took most effort to create, is the service that allows for sharing of configuration snippets. It is run by a REST service fully built with the help of CppCMS on basis of Elektra as data store. All data concerning snippets and user accounts is stored in Elektra's key database (of course with password being properly hashed).
The service allows you to paste configuration snippets in various (supported) formats and to tag, describe and name them. This in return allows you to search snippets by keywords and to download them -- even in other formats than the format used for uploading.
Clearly the service is meant to be driven by its users. Therefore we ask you to share your own configuration snippets, maybe they can be of help, e.g., be a time saver for someone else!
Snippets shared with the service are BSD licensed. The snippets can also be downloaded directly as bundle from a separate GitHub repository. As soon as a snippet is added, changed or deleted on the website, a job that updates the repository is triggered. So you can expect the repository to be always up-to-date.
NoScript
The website is fully written with the help of AngularJS and is therefore
heavily based on JavaScript. This should be no issue though as the
website does only use resources that can be found in the official Elektra
repository:
1. So in case you cannot or do not want to use JavaScript, you
can find all resources also here.
2. If you are only worried about executed untrusted JavaScript,
you can study and improve the
Web Frontend,
which builds the website.
Based on this, we hope you disable NoScript for our page
so that you are able to share snippets!
Domains
All Elektra Domains directly hosted by us are now only served by https.
The former http sites are only redirects to https. This might cause
trouble with some software, e.g., update /etc/apt/sources.list:
deb [trusted=yes] https://build.libelektra.org/debian/ wheezy main
deb-src [trusted=yes] https://build.libelektra.org/debian/ wheezy main
The build Server is no longer reachable at port 8080, but now only directly at https://build.libelektra.org/.
The new RestApi serves as backend for the website. For the docu, simply visit the site with your browser.
While most libelektra.org now point to the new website, you can still
directly go to github and also to the
bug tracker.
The old Wordpress installation was shut down because of security concerns.
Feedback
At this point there is not much more to say about the new website except for: Feel free to explore it!
We greatly appreciate all feedback, be it for the website, the snippet sharing service or other parts of the Elektra project. We always have an open ear for suggestions and we also like to help with technical issues, simply leave us a note on github!
Stay tuned!
Subscribe to the reimplemented RSS feed to always get the release notifications.
For any questions and comments, please contact the mailing list, use the issue tracker on github or write an email to elektra@markus-raab.org. For issues or feedback concerning the website, you can also contact us at website@libelektra.org.
For more information, see https://libelektra.org
Best regards, Marvin & Markus
Scientific Software - Peer-reviewed
- C
Published by markus2330 about 9 years ago
Elektra - 0.8.19 Release
- guid: 8e05231a-4f3d-488b-8dc2-5f0d5c474c39
- author: Markus Raab
- pubDate: Tue, 22 Nov 2016 22:04:59 +0100
What is Elektra?
Elektra solves a non-trivial issue: how to abstract configuration in a way that software can be integrated and reconfiguration can be automated. Elektra solves this problem in a holistic way. Read why Elektra for an explanation of why such a solution is necessary. It can be seen as a virtual file system for configuration files.
Highlights
- more tutorials and getting started guides
- new Ruby bindings
- cleanup of core (only 124K for main library on Debian/amd64)
More Tutorials
Elektra already has an open and welcoming environment, with many interesting discussions. It is our interest that we keep it that way. To make this a bit more formal we added a code of conduct.
But without good introductions, it is easy to get lost in such a large initiative like Elektra. Thus we focused on writing great tutorials for this release! - We wrote an overview readme - We wrote new tutorials about mounting and validation (thanks to Christoph Weber) - We wrote a readme to shell recorder transpiler which allows us to execute tutorials and verify that the examples in them work. (thanks to Thomas Waser) - Lua and Python plugins got tutorials and better explanations! (Thanks to Marvin Mall) - The doxygen docu now also uses links to directories, thanks to Kurt Micheli!
Thanks to Armin Wurzinger for pointing to areas of improvement. A big thanks to Marvin Mall, Kurt Micheli, Christoph Weber and Thomas Waser!
If you like the tutorials, we would love to read from you. Please feel free to start a discussion or ask a question. We also added a FAQ and updated CONTRIBUTING
Ruby Bindings
We now provide Ruby bindings for Elektra. The bindings are based on the C++ bindings and are generated by SWIG. A strong focus was put on a good integration with standard Ruby features and conventions, such as naming conventions, predicates, key and meta data iteration...
A short introduction shows some basic usage scenarios. More detailed examples can be found in the examples directory.
A big thanks to Bernhard Denner!
Cleanup of Core
Following methods were hidden (static) or removed:
- mount* methods
- trie* methods
- backend*
- split*
- keyGetParentNameSize
- keyGetParentName
These are dozens of methods and it was required to adapt the unit tests to work with the hidden methods.
A big thanks to Kurt Micheli!
Usability
- Improved many error messages
- spelling
- be more friendly to the user
- capitalization
- mention
sudo !!
kdb set: do not print what was not donekdb editorhandles non-modified files (will not do anything)- Be more chatty about what
kdbdoes, can be disabled with-qor/sw/elektra/kdb/#0/current/quiet. - Furthermore,
-vnow tells even more details (e.g.kdb-importoutputs the key about to import)
Plugins
New
- c plugin generates C code that represents configuration. This is useful for unit tests or if you need to have hard-coded fallback configuration in your C application.
- base64 plugin allows you to encode binary data. This is especially handy in combination with the crypto plugin to avoid problems with non-printable characters in configuration files. (Thanks to Peter Nirschl)
- fcrypt plugin allows you to fully encrypt configuration files. They are only decrypted when applications access them. (Thanks to Peter Nirschl)
- required plugin rejects every key that is not required by an application.
- simple spec lang allows you to define metadata for enum and required in a more compact way.
Major Enhancements
- simpleini got a configurable
format in which it will read and write configuration files. For example, one
can use
format=% -> %to havekey -> value. - enum got support for multi-enums, i.e., multiple separated values within one value. The error reporting was improved, too. (Thanks to Thomas Waser)
- glob accepts a list of named flags instead of an integer value and aborts matching after first hit. (Thanks to Felix Berlakovich)
- hosts now only accepts
ipv4andipv6keys. (Thanks to Felix Berlakovich)
Development
In the perpetual effort to improve software quality, we made several improvements:
(This information is mainly intended for Elektra's developers.)
- A new logger encourages developers to write more comments (ELEKTRA_LOG)
- ELEKTRA_ASSERT prints better messages on failure and does not need && trick.
- get rid of previous VERBOSE macro at many places.
- Many assertions were added in the low-level helpers (memory management)
- Using the assertions we fixed some undefined behavior.
(Thanks to Thomas Waser)
- added new configure-debian-debug and configure-debian-log helper scripts
- The build server now checks if builds with active logger and debugging
work correctly.
- Improved Coding Style in cryptobotan (thanks to Peter Nirschl)
- add external-links.txt to outputs
(The file is generated in the build directory and contains
all external-links. To validate them, use ./scripts/link-checker)
(Thanks to Kurt Micheli)
- markdownlinkconverter handles directories correctly (using stat).
(Thanks to Kurt Micheli)
- Fixed compiler warning caused by libxml2 (different behavior since 2.9.4),
thanks to René Schwaiger
- added often used links in main README
- Improve documentation about failing test cases and what to do about it.
- added decisions about `pluginvariants
andarray.
(Thanks to Marvin Mall)
- Rename to metadata, metakey, mountpoint
(Thanks to Peter Nirschl)
- std::ios_base::showbase can be used to output metadata when streaming keys (C++)
- Newinfos/status:readonly,writeonly,limited
(Thanks to Marvin Mall)
- The toolupdate-infos-statusordersinfos/statusand allows devs to easily add/rem
entries. (Thanks to Kurt Micheli)
- Automatic setting ofinfos/status:nodoc,nodep,unittest,memleak,configurable
(Thanks to Kurt Micheli)
- Improvecreatelibsymlink, addPLUGINargument
and make it useful also for other library symlinks.
- New markdown style applied to most markdown files.
(Thanks to Marvin Mall)
- Tracer is now disabled, even forENABLEDEBUG.
(Thanks to Marvin Mall)
- Updated [SECURITY document](http://tree.libelektra.org/doc/SECURITY.md)
- Macro naming conventionELEKTRA, addedkdbmacros.h
-ENABLEDEBUGalso works withclangandENABLEASAN` now allows devs
to additionally enable sanitizers.
Thanks to Gabriel Rauter.
Compatibility
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).
It is now possible to enquiry which plugins provide a specific format.
This needed changes in libtools, which got a new major revision.
Changes in the plugin's contract are fully compatible:
You can now use storage/ini instead of storage ini in infos/provides
which gives you the information that ini is a storage format (and not
anything else the plugin might provide). For compatibility reasons,
the build system still adds storage ini even if only storage/ini
is specified.
That means that kdb mount file.json /examples/json json still will find
json plugins even if they are not called json but
yajl.
Another breaking change in libtools is that appendNamespace was renamed
to prependNamespace.
Error messages changed a bit, so if you tried to parse them, make sure
to make the e of error case-insensitive ([eE]).
In the C++ binding, rewindMeta is now const and some methods
to check if a key is in a namespace were added.
The intercept libraries were moved to a common
folder.
They can now be included or excluded like other BINDINGS.
For consistency reasons the libraries were also renamed
(libelektraintercept-fs.so and libelektraintercept-env.so.0),
but symlinks allow you to link against their old names
(lib/libelektraintercept.so and lib/libelektragetenv.so.0).
Package Maintainers
This information is intended for package maintainers.
- GI Bindings were removed from BINDINGS=ALL.
It is recommended to use SWIG bindings instead, which
will be added with ALL.
- Intercept libraries are part of BINDINGS.
They will be added on glibc systems where BINDINGS=ALL is used.
- Documentation in textfiles is now installed,
TARGET_DOCUMENTATION_TEXT_FOLDER was added for that purpose.
The files are:
- BIGPICTURE.md, GOALS.md, LICENSE.md, METADATA.ini, SECURITY.md, AUTHORS, CONTRACT.ini, NEWS.md, and WHY.md
Other new files are:
- Plugins: libelektra-base64.so, libelektra-c.so, libelektra-fcrypt.so
libelektra-required.so, libelektra-simplespeclang.so
(only in EXPERIMENTAL, not added by default, but with ALL)
- site_ruby/_kdb.so (ruby binding, only in ALL)
- testcpp_keyio, testkdb_error, testmod_base64,
testmod_fcrypt (test binaries in TARGET_TOOL_EXEC_FOLDER)
Changed files are:
- libelektraintercept-env.so (renamed from libelektragetenv.so., but still available as symlink)
- libelektraintercept-fs.so (renamed from libelektraintercept.so, but still available as symlink)
- version upgrade: libelektratools.so.2
Portability
Elektra should work on every system that has cmake and a C/C++ compiler.
For this release we increased portability to better work with Mac OS X,
CentOS 7, and OpenSuse 42.
- Mac OS X:
- Travis build server now also build qt-gui
- Support for xcode8 added (xcode6 still supported)
- fix lua != 5.2 issues (wrong output), update docu
- remove hard dependency to pkg-config
- remove hard dependency to version 3 of cmake
(most parts still work with version 2)
- make search for swig 2 visible
- fix plugin names and mounting on OpenSuse 42.1
A big thanks to Kai-Uwe Behrmann, Mihael Pranjić and Sebastian Bachmann.
Fixed Issues
- simpleini: use correct error number when open file fails
- yajl: improve error message on non-utf8 text. (Thanks to Christoph Weber)
- drop multiple
/from~paths (Thanks to Thomas Waser) - fix failing testcases with
ENABLE_DEBUG#988 (Thanks to Thomas Waser) - csvstorage: files in source are rewritten #987 (Thanks to Thomas Waser)
- fix RTLD_NODELETE for OpenBSD (Thanks to Thomas Waser)
- better handle adding/deleting of read-only (info) plugins.
- fix behavior of multiple plugins setting errors (first error wins, later errors are transformed to warnings) (Thanks to Thomas Waser)
- fix resolver logic for missing files
- regex string in conditionals (Thanks to Thomas Waser)
- use
KDBenvironment variable in shell tests and fix counting of tests forkdb run_all. - output to
stderrforelektrify-*scripts - make desktop plugin mountable
- avoid cmake warnings in
make uninstall(avoid@) - fix quoting in ini plugin (Thanks to Thomas Waser)
- fix plugin names and mounting with plugin pre/postfixes (Thanks to Kai-Uwe Behrmann)
- mount-openicc: rename to openicc.json (Thanks to Kai-Uwe Behrmann)
Get It!
You can download the release from here and also here on github - name: elektra-0.8.19.tar.gz - size: 2681639 - md5sum: 6669e765c834e259fb7570f126b85d7e - sha1: 82cefe4cea58d6e6b0a99ddbda24d1b57e98d93a - sha256: cc14f09539aa95623e884f28e8be7bd67c37550d25e08288108a54fd294fd2a8
This release tarball now is also available signed by me using gpg
already built API-Docu can be found here
Stay tuned!
Subscribe to the RSS feed to always get the release notifications.
For any questions and comments, please contact the Mailing List the issue tracker on github or by email elektra@markus-raab.org.
For more information, see http://libelektra.org
Best regards, Markus
Scientific Software - Peer-reviewed
- C
Published by markus2330 about 9 years ago
Elektra - 0.8.18 Release
- guid: 190576e0-9fef-486e-b8da-c4e75be08329
- author: Markus Raab
- pubDate: Fri, 16 Sep 2016 23:31:27 +0200
What is Elektra?
Elektra serves as a universal and secure framework to access configuration parameters in a global, hierarchical key database. For a small demo see here:
Highlights
- Intercept open syscalls which allows Elektra to dynamically generate config files from Elektra's database
- Experimental version of cryptographic plugins
- A new zsh completion file (next to the bash completion file)
- Gitresolver allows to directly read and write config files from git instead of files present in the file system.
- Survey completed successfully (and debts paid), we are now preparing raw data.
Crypto Plugin
Gpg is now used to decrypt a master password, which is used by the individual crypto backends. So all necessary parts for encryption of decryption of individual keys is present.
Furthermore, a new botan backend was implemented.
Thanks to Peter Nirschl.
Open Interception
When Elektra directly modifies config files which are on the disc,
and applications read the config files without Elektra, Elektra has
no control over the access, e.g. we cannot dynamically calculate
values. To avoid this, we wrote a library that
intercepts the open-call.
Together with the mozprefs plugin, we got control over the configuration
of Firefox and can dynamically change config values with all possibilities
Elektra provides.
For easy setup, we implemented the script configure-firefox.
Thanks to Thomas Waser.
Resolver
Resolvers in Elektra are the code that are responsible to determine where content should be read from and stored to. They are independent of the actual configuration file syntax.
The gitresolver allows you to get/store config data in git.
The blockresolver allows Elektra to take control of parts of the configuration file. This is useful for config files such as vim or zsh, which contain program code. The plugin allows you to split config files with special markers into parts containing code and others controlled by Elektra.
zsh completion
Added zsh completion file, and a script (kdb install-sh-completion)
that installs bash+zsh completion when the default installation places
do not work (e.g. for Mac OS X).
Thanks to Sebastian Bachmann.
Documentation
- fix
kdb-importman page, thanks to Kurt Micheli - mark
keyIsSystem/keyIsUseras internal - fix doxygen reference to example
- better document that
global-mountorgmountwill overwrite previously mounted global plugins - fix spelling mistake, thanks to René Schwaiger
- Wrote tutorial how to use Elektra-python bindings, thanks to Ulrike Schäfer
Quality
- shell recorder test cases now run during
make test, thanks to Kurt Micheli and René Schwaiger (Warning: might remove present keys when it conflicts with their mountpoints) - find-tools now is pep and pyflakes happy, thanks to Kurt Micheli
- fix bashism, thanks to Thomas Waser and Kurt Micheli
- better error message for conditionals plugin, thanks to Thomas Waser
- better error message for augeas plugin, thanks to Felix Berlakovich
- Many compilation warnings fixed, thanks to Gabriel Rauter, Thomas Waser
- GSettings: fix double free, thanks to Gabriel Rauter
- Fix external links and implement an external link checker, thanks to Kurt Micheli
- Fix openwrt/musl warnings with wrong printf format, thanks to Thomas Waser
- Fix NODEP metadata, allows you to build all plugins that do not have dependencies.
Compatibility
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).
Libtools
Libtools got a new major version (SOVERSION 0 -> 1): - backend/plugin configs are now validated by plugins (needed by gpg plugin, which checks if wrong key IDs are supplied during mount) - resolveRecommends was never implemented and was now removed
Plugins
The plugins conditionals and mathcheck are incompatible in some cases because of changes in syntax.
Proposal
New API: keyRel2 which differs from keyRel by allowing you to
specify which relation should be checked.
Development
- github descriptions+workflow (displayed by github when creating PRs and issues)
- new trigger phases for github, see doc/GIT thanks to Mihael Pranjić
- valgrind suppressions are great again, thanks to Peter Nirschl
- Plugins get a new namespace
internalwhich can be used for meta-data that is not relevant for other plugins. - kdberrors.h is only generated once, which allows us to use other build systems, thanks to René Schwaiger
INCLUDE_SYSTEM_DIRECTORIESin add_plugin allows you to add a include path where warnings are suppressed (useful for boost).infos/providesnow allows multiple entries
Packaging
- Plugin-provider
CRYPTOcan be used to enable/disable all crypto plugin variants (not enabled by default because its experimental). - Config option
ENABLE_OPTIMIZATIONS, enable by default: trade more memory for speed (can be turned off on embedded systems) INSTALL_SYSTEM_FILESis now off by default on Mac OS X.- bash-completion is installed to where pkg-config tells us,
thanks to Gabriel Rauter
(fallback is now
/usr/share/bash-completion/completions/kdb) was/etc/bash_completion.d/kdb(removed) - zsh is now installed to
/usr/share/zsh/vendor-completions/_kdb(except for Darwin, where/usr/local/share/zsh/site-functionsis used) - removed
/etc/profile.d/kdb.sh: the scriptelektraenv.shwas removed (and is no longer installed), superseded byelektrify-getenv - added scripts install-sh-completion configure-firefox elektrify-open
- added plugins libelektra-blockresolver.so libelektra-boolean.so libelektra-cryptobotan.so libelektra-cryptoopenssl.so libelektra-desktop.so libelektra-mozprefs.so libelektra-passwd.so
- added tests testmodblockresolver testmodboolean testmodcryptobotan testmodcrypto gcrypt testmodcryptoopenssl testmodmozprefs testmodpasswd testopmphmvheap testopmphm_vstack
- added test data blockresolver mozprefs passwd
Other
- Conditionals and mathcheck plugins got support to specify relative keys, thanks to Thomas Waser
kdbcommand-list: commands are written in bold- GSettings backend can be build standalone, thanks to Gabriel Rauter
- first data structures for order preserving minimal perfect hash map, thanks to Kurt Micheli
- added a new passwd plugin, thanks to Thomas Waser
- boolean plugin to normalize boolean values, thanks to Thomas Waser
- desktop plugin to detect which desktop currently is running (supports kde, gnome, tde, unity or any other XDG conformant desktop)
doc/papercontains some info for joss
Get It!
You can download the release from here and also here on github
name: elektra-0.8.18.tar.gz size: 2582183 md5sum: 62fe0fbf9ee57ffaa58a982f602f596a sha1: 743484e16b102a00cd58956a49f0c558939d56a8 sha256: 9ee65895ba5cba6736c13c264637664c1410b25f4aaaeac8f1f83712ff93d53b
This release tarball now is also available signed by me using gpg
already built API-Docu can be found here
Stay tuned!
Subscribe to the RSS feed to always get the release notifications.
For any questions and comments, please contact the Mailing List the issue tracker on github or by email elektra@markus-raab.org.
For more information, see http://libelektra.org
Best regards, Markus
Scientific Software - Peer-reviewed
- C
Published by markus2330 over 9 years ago
Elektra - 0.8.17 Release
http://doc.libelektra.org/news/e6153a39-c4bd-41c3-bc86-785d451eb6c5.html
Scientific Software - Peer-reviewed
- C
Published by markus2330 over 9 years ago
Elektra - 0.8.16 Release
In case you do not yet know about it, here is an abstract about Elektra:
Elektra serves as a universal and secure framework to access configuration parameters in a global, hierarchical key database. Elektra provides a mature, consistent and easily comprehensible API. Its modularity effectively avoids code duplication across applications and tools regarding configuration tasks. Elektra abstracts from cross-platform-related issues and allows applications to be aware of other applications' configurations, leveraging easy application integration.
Elektra consists of three parts: 1. LibElektra is a modular configuration access toolkit to construct and integrate applications into a global, hierarchical key database. The building blocks are: - language bindings (inclusive high-level interfaces) - GenElektra, the code generator for type-safe bindings - plugins for configuration access behaviour and validation 2. SpecElektra is a configuration specification language that is easy to use and self-contained in the same key database (i.e. written in any of the configuration file formats Elektra supports). 3. Tools on top of LibElektra for administrators, such as CLI tools and GUIs.
The same text as follows is also available here as html and here on github
Highlights
- Elektra now allows applications to support multiple profiles with a plugin, thus without code modifications in Elektra applications. That means a user can select multiple configuration files to use, even if the application has no explicit support for it. It completes the cascading feature (level $HOME before /etc), to allows us also to select different configuration for the same level.
- Resolver can now better handle conflicts that happen when files are removed and others that happen within a single time tick (resolution of your clock) and also better handles NFS and older file systems
- Default storage and resolver can be changed by symlink. So no need to recompile Elektra to change the default storage from INI to dump. INI now works quite reliable as default plugin and already used by default by its author Thomas Waser.
Other important features
- shell plugin allows you to execute shell commands on every KDB access and curlget plugin allows you to download configuration files from a URL during KDB access.
- Improvements in sync/merge of qt-gui with important fix (Usage of 0.8.15 qt-gui is discouraged)
- Add plugin for dpkg database (read-only)
- Assignment for conditionals using
assign/condition. - Support for multiple and nested statements
- Support for
condition/validsuffixwhich allows you to suffix numbers with signs such as%or$. It does not check if the suffixes are identical. - kdb mount now uses topological sorting to always find a dependency solution if there is one, many effort was put in that ordering is as requested, thanks to Thomas Waser for the topological sorting implementation
- Frontend generated by GenElektra now also can reload its values with taking the correct context into account.
- Source is now automatically formatted and formatting is checked on build server
- More flexible CMake syntax for PLUGINS
Plugins
Many new or vastly improved plugins are waiting to be explored.
curlget
The plugin curlget fetches a configuration file from a remote host before the configuration is being accessed:
kdb mount -R noresolver /tmp/curltest.ini system/curltest ini curlget url="https://raw.githubusercontent.com/ElektraInitiative/libelektra/master/src/plugins/ini/ini/plainini"
kdb ls system/curltest # every get access will redownload the file
Thanks to Thomas Waser!
INI
The INI plugin is still under heavy development and was again nearly rewritten: - fixed key is below hacks - fixed ordering - custom delimiter - use meta array for comments - rewritten ordering - best effort order - fixed array support
Thanks to Thomas Waser!
shell
This plugin allows you to executes shell commandos after kdbGet, kdbSet and kdbError (failing kdbSet):
kdb mount /tmp/test.ini system/shelltest ini array= shell 'execute/set=echo set >> /tmp/log,execute/get=echo get >> /tmp/log'
kdb set system/shelltest
cat /tmp/log
Thanks to Thomas Waser!
validation
The validation plugin is not new, but got many new features. It allows you to match values by a regex and set your own error messages in case a validation did not match.
Up to now, the regex was given as is to regcomp, which means that if the regex is contained anywhere in the value, the value is accepted.
Often this is not what we want, thus Thomas Waser added special support for icase, word and line validation. Additionally, flags allow you now to ignore the case or invert the match. This can be changed for every individual value or for the whole mountpoint.
Additionally, kdb vset validation was updated to use the new
metadata and correctly match against the whole value.
Thanks to Thomas Waser!
hosts
Only minor improvements were necessary for the host plugin but it is quite matured already. The contract was changed so that ipv6 addresses for ipv4 addresses will be rejected:
```
kdb mount --with-recommends /etc/hosts system/hosts hosts
kdb set system/hosts/ipv4/localhost ::1
The command set failed... Reason: localhost value: ::1 message: Address family not supported
kdb set system/hosts/ipv6/localhost ::1
```
You can also comfortably and safely edit the hosts file
with: kdb editor system/hosts hosts, then you have the
functionality sudoedit for the hosts file.
rename
Again not a new plugin, but the plugin was greatly improved and many test cases were added.
Now you can set upper/lowercase individually for both sides: 1. What applications see. 2. What the configuration file contains.
For example, if you always want the keys in the configuration file upper case, but for your application lower case you would use:
$ kdb mount caseconversion.ini /rename ini rename get/case=tolower,set/case=toupper
$ kdb set user/rename/section/key valu
$ cat ~/.config/caseconversion.ini
[SECTION]
KEY = value
Thanks to Thomas Waser!
Resolver
Resolving by ~ as home directory now also for system and spec namespaces, thanks to Thomas Waser.
Files keep their previous owner, useful when root edits configuration files of others, thanks to Thomas Waser.
The resolver has many improvements to better detect conflicts.
The lock is now extended longer after the commit and already requested in the temporary file.
The warnings were improved when getcwd fails.
Resolver now can correctly handle conflicts with empty files. It can also better cope with frequent commits of the same binary. Elektra already reached some limits filesystems have.
Bindings
Java
Marvin Mall improved the Java binding, fixed the appending of keysets, added lots of documentation, and many unit tests.
C++
Some kind of misusage of vaargs is now detected at compile-time instead of crashing at runtime.
Generated C++
Value now supports convenience activations. Values can be used to activate context, no more layers are needed. Topological sorting makes sure that values are activated in the correct order, loops are not allowed anymore.
The bool operator< is now correctly inline (allows to use it in more than
one translation unit)
Documentation
René Schwaiger
Testing
- Tests work if the build path contains spaces
- Tests: Fix problems locating memory checker
- remove obsolete TestScript.cmake
Thanks to René Schwaiger
Maintainer
By default now ALL plugins except EXPERIMENTAL are included. Plugins will be automatically excluded if dependencies are missing.
The PLUGINS syntax was vastly improved. Now many categories can be intermixed freely and also categories can be used for exclusion.
E.g. to include all plugins without deps, that provide storage (except yajl) and are maintained, but not include all plugins that are experimental, you would use:
-DPLUGINS="NODEP;STORAGE;-yajl;MAINTAINED;-EXPERIMENTAL"
Details see /doc/COMPILE.md.
Renamed files:
/usr/include/elektra/merging/kdbmerge.hpp -> /usr/include/elektra/merging/mergingkdb.hpp
/etc/profile.d/kdb -> /etc/profile.d/kdb.sh
(So that it works on arch linux, thanks to Gabriel Rauter)
removed files:
- /usr/lib/elektra/libelektra-crypto.so
was only necessary because of limitations of the build system and is now removed. It never had actual functionality, but was only a stub without a crypto provider selected.
new files:
- /usr/include/kdbease.h
- /usr/lib/elektra4/libelektra-curlget.so*
- /usr/lib/elektra4/libelektra-dpkg.so*
- /usr/lib/elektra4/libelektra-profile.so*
- /usr/lib/elektra4/libelektra-resolverfmhpu_b.so
- /usr/lib/elektra4/libelektra-shell.so*
more new files with ALL or EXPERIMENTAL: - /usr/lib/elektra/libelektra-semlock.so
new tests all in folder /usr/lib/elektra/toolexec: testcppcontextualupdate testkdbconflict testkeyname testmodcurlget testmoddpkg testmodjni testmodprofile testmodsemlock testmodshell testtoolmergingkdb
Following Plugins are excluded on specific platforms: - mathcheck on Intel compiler (reason: failing test cases) - simpleini on non-glibc systems (reason: not portable printf extension)
new symlinks:
- /usr/lib/elektra4/libelektra-storage.so
- /usr/lib/elektra4/libelektra-resolver.so
new releases
The first release of the libraries libelektratools-full, libelektratools and libelektragetenv. They now have SOVERSION 0.
Development
You do not need to format the source manually anymore. Make sure that you run scripts/reformat-source before creating a PR.
clang-tidy helps you to add blocks to have better
maintainable code.
Felix Berlakovich improved the performance of the augeas plugin and also contributed a script to benchmark different host plugin. His thesis can be downloaded from here. It contains benchmarks and discussions about augeas.
The CMake function add_plugin was completely rewritten.
Now you do not have to register your plugin at multiple points
but instead information of README.md is parsed to correctly
register the plugin to categories as stated by infos/status
and infos/provides.
The code generator for errors also yields macros. This avoids usage of the IDs, which can be problematic if multiple pullrequests are prepared at once.
Compatibility
This might be the last release supporting wheezy, because it gets more and more time-intensive to find workarounds for the old compiler. The C++11 regex do not work at all.
Binary Compatibility Test
When you execute the testcases of 0.8.15 against Elektra 0.8.16 following testcases fail. None of them effect the API.
testsplitget testsplitset .. Internal restructuring
testmodcrypto .. not included by default now
testmodini .. section handling changed, line 178:
nosectionkey contained no comment
testmodrename .. internal API elektraKeyCreateNewName changed
testmodresolver .. internal data structure now contains more
members to remember uid and gid
testmodtemplate .. not present by default
testtoolbackend testtoolbackendbuilder testtoolbackendparser
testtoolspecreader .. changes in KDB tool before release
checkkdbinternalcheck .. experimental plugins are now excluded
Added API
in libease René Schwaiger added:
extern char const * elektraKeyGetRelativeName(Key const * cur, Key const * parentKey);
in libmeta Thomas Waser added (partly based on ideas/code from Felix Berlakovich):
extern void elektraMetaArrayAdd(Key *, char const *, char const *);
extern KeySet * elektraMetaArrayToKS(Key *, char const *);
extern char * elektraMetaArrayToString(Key *, char const *, char const *);
extern int elektraSortTopology(KeySet *, Key * *);
Tools
Qt-gui
Felix Berlakovich updated the qt-gui so that it uses a newly written sync-method added in libtools.
Gabriel Rauter added a desktop file that uses the new svg logo from René Schwaiger.
Portability
- Peter Nirschl fixed code in the resolver that uses EBADMSG which was not available in BSD.
- Peter Nirschl improved detection of librt
- Felix Berlakovich fixed searching of FindSystemd
- MinGW64 resolver now handles conflicts correctly and does not ignore them anymore and now also is able to create empty files (but still not directories)
Mac OS X
A lot of effort was invested to all test cases also run on Mac OS X: - .template syntax - linking errors - fix regex in conditionals plugins
Thanks to René Schwaiger
Bugs
- print null-environment correctly with
kdb getenv - keyIs(Direct)Below didn't work with cascading keys
- fix elektraKeyGetRelativeName (needed by ni) for cascading keys and move it to libease, thanks to René Schwaiger
- make nickel tests show correct test name, thanks to René Schwaiger
- glib: replace cursor_t with gssize so that GElektra-4.0.gir builds with gobject-introspection later than 1.47, thanks to Manuel Mausz
- fixed out-of-bounds bug in timeofday plugin
- elektraMetaArrayToKS correctly adds parent key, thanks to Thomas Waser
- kdb-shell: Do not abort ksOutput on binary data.
- some rework for global hooks, still not stable
Get It!
You can download the release from here and now also here on github - name: elektra-0.8.16.tar.gz - size: 2405443 - md5sum: ef0c138b4a4fda017aa8bb6f812671ce - sha1: c6a6f9c26addd5fcc274cea635de02ef680cfb1a - sha256: 3cf0624eb027e533192ca9d612618df3d38ec3674c9cd20474f04ff269fad77e - sha512: b225e61379907365a423ea75ec7138e5257bb78c526bb05a1ec21f66a52eb4bad9e6f1eb23209d700670b21b86166497b47c3bc46bc9d45f6d366cd544afc326
This release tarball now is also available signed by me using gpg
already built API-Docu can be found here
Stay tuned!
Subscribe to the RSS feed to always get the release notifications.
For any questions and comments, please contact the Mailing List the issue tracker on github or by mail elektra@markus-raab.org.
For more information, see http://libelektra.org
Best regards, Markus
Scientific Software - Peer-reviewed
- C
Published by markus2330 almost 10 years ago
Elektra - 0.8.15 Release
0.8.15 Release
- guid: 1ab4a560-c286-46d2-a058-1a8e7e208fe8
- author: Markus Raab
- pubDate: Tue, 16 Feb 2016 17:47:00 +0100
In case you do not yet know about it, here is an abstract about Elektra:
Elektra serves as a universal and secure framework to access configuration parameters in a global, hierarchical key database. Elektra provides a mature, consistent and easily comprehensible API. Its modularity effectively avoids code duplication across applications and tools regarding configuration tasks. Elektra abstracts from cross-platform-related issues and allows applications to be aware of other applications' configurations, leveraging easy application integration.
Overview
This is one of the largest release up to now. It includes many
user-visible improvements. Some highlights:
- Mounting is vastly improved:
think about Debian's "dpkg" to "apt"-like functionality
- In previous releases you could already specify the structure
of the configuration. Now you can also automatically enforce
this property.
- We split the shared library libelektra into smaller parts.
Now users can link against the parts of the library they need.
- As always, the ABI and API is fully forward-compatible.
- The release contains improvements in the
bootstrapping process.
- We improved the ini, rename and crypto plugins.
- The tool kdb now supports bookmarks and profiles.
- The new tool kdb editor allows you to edit KDB configuration in
your favorite text editor.
- We are glad of the new packages for Debian, Arch Linux and OpenWRT.
The same text as follows is also available here as html and here on github
Global Mount
Sometimes you simply want some functionality for the whole key database. For example, you want to enable logging or notification of configuration changes. In previous versions, you had to change every mountpoint individually. Even more problematic, every mountpoint created its individual logs and notifications, without any way for someone to know if an application has issued its last log/notification.
These problems are now solved by global plugins. The same plugins are reused for this purpose. Also the mounting works nearly in the same way, you only have to omit the configuration file and the mountpoint:
kdb global-mount syslog journald dbus
Voilà, from now on every configuration change gets logged to syslog and journald. Additionally, every application gets notified via dbus.
If you want it more verbose for debugging, you can easily do so by:
kdb global-mount logchange counter
Which gives you detailed information to standard output which keys
were changed/edited/deleted. Additionally, Elektra counts how often
the counter plugin is invoked.
The underlying work for the global plugins, i.e. hooks in the core
libraries and the list plugin that allows us to use many plugins
without bloating the core was done by Thomas Waser.
It was already possible in earlier versions of Elektra to specify the configuration of your program. Until now, this specification could be mainly used to to generate code as described here. This release adds two more interesting options: 1. the spec plugin, and 2. the spec mount.
Spec Plugin
The most important global plugin that is now newly introduced with this
release (thanks to Thomas Waser) is the spec plugin. By default it
will be added for every global-mount. So for a new installation make
sure you executed at least once:
kdb global-mount
The spec plugin is a global plugin that copies metadata from the
spec-namespace to other namespaces. That means, it reads the
specification, and makes sure that the configuration conforms to it. The
actual validation is done by the many validation plugins already present.
Lets start by saying a key is a long and must have at least the value 10:
kdb setmeta spec/example/longkey check/type long
Then we can create a key in a different namespace and see if the spec
plugin applies the meta-data correctly:
kdb set /example/longkey 25
kdb lsmeta /example/longkey
Should now at least print check/type.
By itself, this is useful for documentation of keys.
For example, the application developer says:
kdb setmeta spec/example/longkey description "Do not change"
kdb setmeta spec/example/longkey example 30
The user can retrieve this documentation by:
kdb getmeta /example/longkey description
But we want check/type to be not only a documentation, but also
enforced.
Spec Mount
Using kdb setmeta extensively and always looking out that all plugins
are mounted correctly is error-prone. So instead, one can directly mount
the plugins as specified. For the example above one simply needs:
kdb setmeta spec/example mountpoint example.ecf
kdb spec-mount /example
Now, when we try to modify /example/longkey it will be validated:
``` kdb set /example/longkey a
Error (#52) [...] long [not] matched [...] a ```
Based on the present meta-data, the correct plugins (in this case type
because of the metadata check/type) will be loaded.
We can also create a whole specification file, first mount the
specification and then the mountpoint according the specification, e.g
when we have battery.ini in the folder $(dirname $(kdb file spec))
with following content:
``` [] mountpoint = battery.ini infos/plugins = ini
[level] check/enum = 'critical', 'low', 'high', 'full' ```
Then we can use:
```
mount the file itself:
kdb mount battery.ini spec/example/battery ni
make sure all plugins are present (e.g. enum for check/enum):
kdb spec-mount /example/battery ```
Now lets verify if it worked:
``` kdb lsmeta /example/battery/level
we see it has a check/enum
kdb getmeta /example/battery/level check/enum
now we know allowed values
kdb set /example/battery/level low
success, low is ok!
kdb set /example/battery/level wrong
fails, not one of the allowed values!
```
The main idea of the spec-mount is: search a plugin for every specification (meta-data) found in the spec-namespace.
General Mount Improvements
In earlier versions kdb mount failed when plugin dependencies were
not satisfied. Now dependencies will automatically be fulfilled, e.g.
kdb mount /etc/modules system/modules line
In earlier versions you would have got an error because of the missing
null plugin. Now it simply adds the needed plugins.
The plugins given in the command-line used to be real plugins. Now also so called providers are accepted.
To make providers useful we need to actually know which plugin is the
best candidate. To get the information we added a infos/status clause
in the contract. In this clause the plugin developer adds many details
how well the plugin is tested, reviewed, documented, maintained and so
on. Based on this information, the best suited plugin will be chosen.
For example, you now can use:
kdb mount /etc/security/limits.conf system/limits augeas \
lens=Limits.lns logging
And the best suitable logger will automatically be chosen.
The configuration variable /sw/kdb/current/plugins now allows
us to pass plugin configuration with the same syntax as the plugin
specification passed on the commandline. A subtle difference is that
thus the shell-splitting of arguments is missing, it is not possible to
include whitespaces in the plugin configuration that way.
Now it is also possible to include the same plugin multiple times and also give them individual names. This feature is essential for script-based plugins, e.g. you now might add:
kdb mount file.x /example/mountpoint \
lua#resolver script=resolver.lua \
lua#storage script=storage.lua
Furthermore, kdb mount now supports recommendations, which can be
enabled with --with-recommends. E.g. supplied to the mount command
using augeas above, comments will automatically transformed to meta-data
to avoid cluttering of the real configuration.
Library Split
Up to now, Elektra consisted only of a single shared library,
libelektra.so. Not all symbols in it were relevant to end users, for
example, some were only needed by plugins. Others were only proposed and
not yet part of the stable API. And finally, other symbols were not needed
in some situations, e.g. the plugins do not need the kdb interface.
Thus, we split libelektra.so, so that only coherent parts are in the
same library:
- libelektra-core.so only contains the KeySet data structure and
module loading. Every binary using Elektra should link against it.
- libelektra-kdb.so contains the missing KDB symbols. Together with
the core they contain everything declared in kdb.h.
Michael Zehender plans to have multiple variants of libelektra-kdb.so
that use different kinds of concurrency.
Headerfile: <kdb.h>
- libelektra-ease.so adds functionality missing in core to make the
life for C programmers easier.
New headerfile: kdbease.h
- libelektra-proposal.so adds functionality proposed for core. It
directly uses internal structures of core, thus they always need to
have exactly the same version.
Headerfile: kdbproposal.h
The source code is now better organized by the introduction of a libs
folder. The explanation of every library can be found in
/src/libs/.
The rationale of the library split is documented here. Shortly put, it was needed for further evolution and allowing us to grow and enhance without getting a fat core.
Thanks to Manuel Mausz for fixing many bugs related to the library split and also adapting all the bindings for it.
Benchmark
To show that the split does not make Elektra slower, Mihael Pranjić made a small benchmark. The real time of benchmarks/large and revision 634ad924109d3cf5d9f83c33aacfdd341b8de17a 1. kdb-static: Median :0.8800 2. kdb-full: Median :0.8700 3. kdb: Median :0.8700
So it seems that the split does not influence the time of running elektrified processes.
Times were measured with time(1) and the median is calculated for 21 runs of benchmarks/large. This was done using scripts/benchmark_libsplit.sh
Compatibility
As always, the ABI and API is fully forward-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 every program without errors (API).
We added keyGetNamespace which allows us to handle all namespaces
in a switch and to iterate all namespaces. This is essential, when
a new namespace is added, thus then the compiler can warn you about
every part where the new namespace is not yet considered. We currently
do not plan to add a new namespace, but better be safe than sorry.
The internal function keyCompare now also detects any meta-data
change.
libtools was nearly rewritten. Even though it is mostly API compatible
(you should not use the low-level Backend anymore but instead use the
BackendBuilder), it is certainly not ABI compatible. If you have an
undefined symbol: _ZN3kdb5tools7Backend9addPluginESsNS_6KeySetE you need
to recompile your tool. Even the merging part has ABI incompatibility
(different size of _ZTVN3kdb5tools7merging14NewKeyStrategyE).
Unfortunately, we still cannot guarantee compatibility in libtools,
further changes are planned (e.g. implementing mounting of lazy plugins).
The python(2) and lua interfaces changed, an additional argument (the
plugin configuration) is passed to open.
The INI plugin was rewritten, so many options changed in incompatible ways.
The default format plugin (e.g. for import/export) is no longer hardcoded
to be dump. Instead KDBDEFAULTSTORAGE will be used.
To get KDBDEFAULTSTORAGE you can use the constants plugin:
kdb mount-info
kdb get system/info/constants/cmake/KDB_DEFAULT_STORAGE
Thanks to Manuel Mausz plugins do no longer export any method other than
elektraPluginSymbol. It now will fail if you directly linked against
plugins and did not correctly use their public interface. Please
use the module loading and access functions via the contract.
The CMake and Pkgconfig Files now only link against elektra-core and
elektra-kdb. If you used some symbols not present in kdb.h, your
application might not work anymore.
libelektra.so is still present for compatibility reasons. It should
not be used for new applications. Some unimportant parts, however,
moved to the "sugar" libraries. E.g. the symbol elektraKeyCutNamePart
is no longer part of libelektra.so.
Bootstrapping
When you use kdbOpen in Elektra as first step it reads mountpoint
configuration from /elektra. This step is the only hardcoded one,
and all other places of the KDB's tree can be customized as desired
via mounting.
The bootstrapping now changed, so that /elektra is not part of the
default configuration default.ecf (or as configured with KDB_DB_FILE),
but instead we use elektra.ecf (or as configured with KDB_DB_INIT).
This behaviour solves the problem that default.ecf was read twice
(and even differently, once for /elektra and once for /).
To be fully compatible with previous mountpoints, Elektra will still read
mountpoints from default.ecf as long as elektra.ecf is not present.
To migrate the mountpoints to the new method, simply use:
kdb upgrade-bootstrap
which basically exports system/elektra/mountpoints, then does kdb rm
-r system/elektra/mountpoints so that default.ecf will be without an
mountpoint and thus the compatibility mode does not apply anymore. As
last step it will import again what it exported before.
Plugins
We already highlighted the new spec plugin, but also other plugins
were improved at many places. Small other changes are:
- Conditionals now also support assign/condition syntax,
thanks to Thomas Waser
- Lua and Python are not tagged experimental anymore.
They now correctly add their configuration to the open-call.
- The plugin yajl (the json parser and generator) now also accepts the
type string and yields better warnings on wrong types.
- Improved error message in the type plugin.
Larger changes were done in the following plugins:
INI
The INI plugin was rewritten and a huge effort was taken so that it
fully-roundtrips and additionally preserves all comments and ordering.
Currently, it is brand new. It is planned that it will replace dump
in the future.
Currently is has some minor problems when used as KDBDEFAULTSTORAGE. You can avoid most problems by mounting a different file into root:
kdb mount root.ini /
Read here about the details.
A huge thanks to Thomas Waser.
Rename
Thanks to Thomas Waser rename is now fixed for cascading keys.
Additionally, it does not change the sync status of the keys so
that notification plugins work properly afterwards.
Crypto
The crypto plugin is a facility for securing sensitive Keys by symmetric encryption of the value. It acts as a filter plugin and it will only operate on Keys, which have the meta-key „crypto/encrypt“ set.
The key derivation is still work-in-progress, so the plugin does not work with kdb yet. A planned method for key derivation is to utilize the gpg-agent.
For now the plugin requires the following Keys within the plugin configuration in order to work properly: 1. /crypto/key - the cryptographic key (binary 256 bit long) 2. /crypto/iv - the initialization vector (binary 128 bit long)
Please note that this method of key input is for testing purposes only and should never be used in a productive environment!
Thanks to Peter Nirschl, especially the patience for also supporting different platforms where dependencies need to be handled differently.
KDB
A technical preview of a new tool was added: kdb editor allows you
to edit any part of Elektra's configuration with any editor and any
syntax. It uses 3-way merging and other stable technology, but it
currently does not provides a way to abort editing. So you only should
use it with care.
The tool kdb list now searches in the rpath for libraries and thus
will also find plugins not present at compile time (using glob).
Additionally, it sorts the plugins by infos/status score, which can
also be printed with -v. The last plugins printed are the ones ranked
highest.
When running as root, kdb will now use the system namespace when
writing configuration to cascading key names.
Long paths are cumbersome to enter in the CLI. Thus one can define
bookmarks now. Bookmarks are key-names that start with +. They are
only recognized by the kdb tool or tools that explicitly have support
for it. Applications should not depend on the presence of a bookmark. For
example, if you set the bookmark kdb:
kdb set user/sw/elektra/kdb/#0/current/bookmarks
kdb set user/sw/elektra/kdb/#0/current/bookmarks/kdb user/sw/elektra/kdb/#0/current
You are able to use:
kdb ls +kdb/bookmarks
kdb set +kdb/format ini
The kdb tool got much more robust when the initial configuration is broken, no man page viewer is present or Elektra was installed wrongly.
The --help usage is unified and improved.
The new keyname naming conventions are now used for
configuration of the kdb-tool itself: /sw/elektra/kdb/#0/%/
and /sw/elektra/kdb/#0/current/ are additionally read. The option
-p/--profile is now supported for every command, it allows to fetch
configuration from /sw/elektra/kdb/#0/<profile>/ instead of current.
KDB is more robust when it cannot fetch its own configuration due to
KDB errors.
Coding Guidelines
Thanks to Kurt Micheli the code guidelines are now properly documented. Thanks to René Schwaiger we also provide a style file for clang-format.
Furthermore we unified and fixed the source: - only use @ for doxygen commands - always use elektra* functions for allocation - added a file header for every file
C++11 migration
Since we now only use C++11, we applied clang-modernize which simplified
many loops and replaced many 0 to nullptr. Additionally, we added
override and default at many places.
We removed all places where we had ifdefs to use auto_ptr if no
modern smart pointer is available.
Because of these changes there is no easy way to compile Elektra without C++11 support, except by avoiding the C++ parts all together.
The C++ KeySet now also supports a get to retrieve whole containers
at once. By specializing KeySetTypeWrapper you can support your own
containers. Currently only map<string, T> is supported (T is any type
supported by Key::get).
If you haven't removed it from your flags already, there is no use
anymore to set ENABLE_CXX11.
Documentation
The documentation was improved vastly. Most thanks to Kurt Micheli who did a lot of editing and fixed many places throughout the documentation Also thanks to Michael Zehender who added two paragraphs in the main README.md.
Keynames of applications should be called /sw/org/app/#0/current,
where current is the default profile (non given). org and
app is supposed to not contain / and be completely lowercase.
Keynames are documented here.
See also here. The main
reason for long paths is the provided flexibility in the future
(e.g. to use profiles and have a compatible path for new major versions
of configuration). By using bookmarks, users should not be confronted
by it too often.
- many man pages were improved
- many typos were fixed, thanks to Pino Toscano!
- Fix documentation for kdb list, thanks to Christian Berrer
- Compilation variants are explained better,
thanks to Peter Nirschl for pointing out what was missing
- document ronn as dependency, thanks to Michael Zehender
- fix broken links, thanks to Daniel Bugl
Thanks to Kurt Micheli, developers are now warned during compilation on broken links in Markdown. The output format is the same as for gcc. Additionally, the markdown documentation of plugins now get a proper title in the pdf and html output of doxygen.
Qt-Gui 0.0.10
Raffael Pancheri again updated qt-gui with many nice improvements:
- update existing nodes in case the config was changed outside the gui
- safely update tree
- add update signal to metadata
- fix crash when closing the GUI
- move Actions in separate file to make main.qml less clustered
- plugins do not output messages at startup
- BackendBuilder is now used, which automatically takes cares of the correct ordering of plugins
- Qt 5.4 compatibility is still ensured
- C++11 is now used in Qt-Gui, too
Packaging and Build System
Elektra 0.8.14 now in Debian with qt-gui, man pages, thanks to Pino Toscano read more here
Thanks to Gustavo Alvarez for updating and splitting the packages on Arch Linux!
Thanks to Harald Geyer,
Elektra is now packaged for OpenWRT. We fixed a number of
cross-compilation issues and now officially support building against musl
libc, with one minor limitation: RPATH works differently on musl so you
need to install all plugins directly in /usr/lib/ or set LDLIBRARYPATH.
Report any bugs in
Harald's OpenWRT packaging issue tracker.
- export errors/symbols are now called elektra-export-symbols and
elektra-export-symbols and can be installed using INSTALL_BUILD_TOOLS
(by default off). This is needed for cross-compilation.
Thanks to Harald Geyer for reporting.
- some header files are renamed because they endlessly included themselves
if the header files were found in wrong order.
Thanks to Harald Geyer for reporting.
- fixed compilation when built on more than 20 cores with >= -j15,
thanks to Gustavo Alvarez for reporting and Manuel Mausz for analyzing
- lua 5.1 now works too (except for iterators),
thanks to Harald Geyer for reporting.
thanks to Manuel Mausz for adding a new FindLua.cmake
- pdf builds do not fail due to half written files,
reported by René Schwaiger and fixed by Kurt Micheli
Read about other packages here.
Fixes and Improvements
- 3 way merge now properly deals with binary data, thanks to Felix Berlakovich
- getenv: fix wrapping on powerpc, thanks to Pino Toscano
- markdownlinkconverter: fix char/int mismatch, thanks to Pino Toscano
- wresolver: use KDBMAXPATHLENGTH instead of PATHMAX, thanks to Pino Toscano
- Cleaning up #ifdefs that break statements, thanks to Romero Malaquias
- Daniel Bugl tested the INI plugin
- cmake listfilter was broken because of different behaviour in cmakeparse_arguments, thanks to Christian Berrer for reporting
- g++5.3 is now supported
- gtest does not link against pthread if not needed
- testcases that are built with BUILD_SHARED also successfully work
- kdb list works when libs are in same path as plugins, thanks to Harald Geyer for reporting
- fix Mac OS issues, thanks to Peter Nirschl, René Schwaiger and Mihael Pranjic
- fix resolver-baseflag docu, thanks to Harald Geyer for reporting
- do not create wrong directories called
(and)in source, thanks to René Schwaiger - fix cmake for systems where iconv is not part of libc, thanks to Michael Zehender and Peter Kümmel (for FindIconv.cmake)
- fix segfault in libgetenv if root keys are present
- lua: fix Key:tostring(), thanks to Manuel Mausz
- add list of supported bindings, thanks to Manuel Mausz
Get It!
You can download the release from here and now also here on github - name: elektra-0.8.15.tar.gz - size: 2338297 - md5sum: 33ec1e5982fb7fbd8893bf7b579b80f0 - sha1: 6b1fdd5aa5aaad6ba377b4bb5ef437e0c85319ff - sha256: 6a406986cecb8d4a44485ced118ee803bc039b0824b72298e123b4dd47eb0b22 - sha512: 86a408dd546b33e3b437f92f415de7aee6a235189f9eab0762b3f44ab4c453ee369a53de10a9f5b0df1b446460b12c57c6b8b77c282648ec2a49f2328d9af13d
This release tarball now is also available signed by me using gpg
already built API-Docu can be found here
Stay tuned!
Subscribe to the RSS feed to always get the release notifications.
For any questions and comments, please contact the Mailing List the issue tracker on github or by mail elektra@markus-raab.org.
For more information, see http://libelektra.org
Best regards, Markus
Scientific Software - Peer-reviewed
- C
Published by markus2330 about 10 years ago
Elektra - 0.8.14 Release
- guid: 519cbfac-6db5-4594-8a38-dec4c84b134f
- author: Markus Raab
- pubDate: Thu, 19 Nov 2015 17:48:14 +0100
Again we managed to release with many new features and plugins (lua, enum, list, crypto, csvstorage, conditionals, mathcheck, filecheck, logchange) many fixes, and especially with a vastly improved polished documentation.
Documentation Initiative
The Documentation Initiative is a huge success and now the documentation of Elektra is in a state where someone (preferable a linux guru), never heard of Elektra, still can use Elektra only by reading man pages.
There are now many ways to show a man page:
- on github
- in the API docu
- by using kdb --help or kdb help <command>
- by using man kdb
Help system
Ian Donnelly wrote man pages for all the tools delivered with Elektra. Additionally, nearly all README.md are now also converted to man pages and also to Doxygen.
Doxygen Filter
Kurt Micheli did an amazing work with a new doxygen filter. The filter allows all Elektra markdown pages to be also included in the doxygen documentation. Thus all technical concepts are now explained in Markdown pages, this filter is essential.
But even more, the filter also includes all man pages written for the tools, giving a nice html view for them. (In addition to the markdown rendering on github).
Enjoy the result.
A big thanks to Kurt Micheli!
Further Docu fixes
- getenv debugging docu was improved
- typo fix: Specify, thanks to Pino Toscano
- Design decisions Definition of Bool, capabilities and Publish Subscribe (thanks to Daniel Bugl)
- Improve iconv docu
- usage examples for many plugins
- improve README for line plugin (thanks to Ian Donnelly)
- add docu about dependencies for some plugins (thanks to Ian Donnelly)
- create many new links within the documentation
Simplicity
We shifted our goals a bit: We want to prefer simplicity to flexibility. Not because we do no like flexibility, but because we think we achieved enough of it. Currently (and in future) you can use Elektra: - obviously as primitive key/value storage - with specifications and dozens of plugins driven by it - with code generation - ...
But we cut flexibility regarding: - namespaces are only useful for configuration (not for arbitrary key/value) - the semantics of metadata - mounting functionality - error code meanings are fixed, if a resolver detects a conflict, our defined error must be used - of course ABI, API
Qt-gui 0.0.9
Raffael Pancheri again updated his qt-gui to version 0.0.9 (beta) with important of fixes and improvements: - Fixes for Qt 5.5 - Handling of merge-conflicts improved - Avoid rewriting on merge-conflicts - Allow QML to destroy C++ owned model - Dialog at startup - Reduce memory footprint - add man page
A bit thanks to Raffael Pancheri!
Compatibility
As always, the API and API is fully forward-compatible, i.e. programs compiled against an older 0.8 versions of Elektra will continue to work.
The behaviour of some plugins, however, changed: - the INI plugin, the section handling was improved. - in the NI plugin, the symbol Ni_GetVersion vanished - in the resolver plugin files of other namespaces which are not mounted are not resolved anymore
Build System
ENABLE_CXX11 does not exist anymore, it is always on. We do not care about 199711L compilers anymore, which makes development easier, without losing any actually used platform.
Some programs that are only used in-source are not installed anymore. (by Pino Toscano)
Python and Lua plugins are enabled now in -DPLUGINS=ALL.
Python3 plugin was renamed to python.
Lua Plugin
Manuel Mausz add a lightweight alternative to the python plugin: the lua plugin. In a similar way, someone can write scripts, which are executed on every access to the key database.
To mount a lua based filter, you can use:
kdb mount file.ini /lua ini lua script=/path/to/lua/lua_filter.lua
Even though it works well, it is classified as technical preview.
Thanks to Manuel Mausz for this plugin!
Cryptography Plugin
In this technical preview, Peter Nirschl demonstrates how a plugin can encrypt Elektra's values. In testcases it is already able to do so, but for the end user an easy way for key derivation is missing.
A big thanks to Peter Nirschl!
INI Plugin
The INI plugin got a near rewrite. Now it handles many situations better, has many more options and features, including: - preserving the order - using keys as meta-data - many new testcases - fix escaping
Thanks to Thomas Waser for this work!
Mathcheck plugin
This plugin allows you to check and even calculate keys from
other keys using an polish prefix notation.
It supports the typical operations + - / * and
<, <=, ==, !=, =>, >, :=. To mount, check and
calculate values, one would use:
kdb mount mathcheck.dump /example/mathcheck dump mathcheck
kdb setmeta user/example/mathcheck/k check/math "== + a b"
kdb setmeta user/example/mathcheck/k check/math ":= + a b"
For details see the documentation.
Thanks to Thomas Waser for this important plugin!
List Plugin
Currently, Elektra has some limitations on how many plugins can be added to certain placement. Because of the rapidly growing number of plugins, some combinations are not possible anymore.
This plugin tackles the issue, by delegating the work to an arbitrary number of subplugins. As a bonus, it works lazily and thus might avoid the loading of some plugins all together.
Thanks to Thomas Waser for this plugin!
Conditionals
Brings if inside Elektra. It lets you check if some keys have
the values they should have.
kdb mount conditionals.dump /tmount/conditionals conditionals dump
kdb set user/tmount/conditionals/fkey 3.0
kdb set user/tmount/conditionals/hkey hello
kdb setmeta user/tmount/conditionals/key check/condition "(hkey == 'hello') ? (fkey == '3.0')" # success
kdb setmeta user/tmount/conditionals/key check/condition "(hkey == 'hello') ? (fkey == '5.0')" # fail
For details see the documentation.
Again, thanks to Thomas Waser for this plugin!
Csvstorage Plugin
You can now mount csv-files. To mount test.csv simply use:
kdb mount test.csv /csv csvstorage
There are many options, e.g. changing the delimiter, use header for the key names or predefine how the columns should be named. For details see the documentation.
Thanks to Thomas Waser!
Filecheck plugin
This plugin lets you validate lineendings, encodings, null, bom and unprintable characters.
The also new plugin lineendings is already superseded by the filecheck plugin.
Thanks to Thomas Waser!
Enum plugin
The Enum plugin checks string values of Keys by comparing it against a list of valid values.
Thanks to Thomas Waser!
Elektrify Machinekit.io
We are proud that Machinekit starts using Elektra.
Alexander Rössler is digging into all details, and already enhanced the DBUS Plugin for their needs. DBus now can emit a message for every changed key.
A big thanks to Alexander Rössler!
Bugfixes
- libgetenv did not reinitalized its mutexes on forks
- add needSync also in C++ binding
- handle removed current working directories (fallback to /)
- avoid segfault on missing version keys (when doing
kdb rm system/elektra/version) - fix glob plugin + kdb mount with config/needs usage
- fix different handling of strerror_r in Mac OS X (thanks to Daniel Bugl)
- do not change the users parentKey in early-error scenarios
- do not try to interpret some binary keys as function keys
Other Gems
- getenv example: do not link to elektra/elektratools, thanks to Pino Toscano
- fixes in other examples
- avoid useless UTF-8 chars and fix typos, thanks to Kurt Micheli
- fix kdb check return code (open fail)
- pdf now also allows UTF-8 characters if added to elektraSpecialCharacters.sty, thanks to Kurt Micheli
- libgetenv: lookup also used for layers
- handle wrong arguments of metals better, thanks to Ian Donnelly
- Improvement of error messages in the augeas plugin
kdb setavoids fetching unnecessary namespaces- verbose unmount
- logchange: small demonstration plugin to show how to log added, removed and changed keys
- setmeta will use spec as default
- libtools: avoid useless getName, add verbosity flag for findBackend
- Improve iconv error messages
- That mount needs permissions to /etc should now really be obvious with new error message
- many fixes in the template for new plugins
Get It!
You can download the release from here and now also here on github - name: elektra-0.8.14.tar.gz - size: 2252008 - md5sum: a87cd3845e590bf413959dfd555e3704 - sha1: 2360603c347ae3f3a28e827eb9260ff0b9881e46 - sha256: af681a38c9c2921b8d249f98ab851c3d51371735471d8a1f833a224c4446fe2e
This release tarball now is also available signed by me using gpg
already built API-Docu can be found here
Stay tuned!
Subscribe to the RSS feed to always get the release notifications.
For any questions and comments, please contact the Mailing List the issue tracker on github or by mail elektra@markus-raab.org.
For more information, see http://libelektra.org
Btw. the whole release happened with elektrify-getenv enabled.
Best regards, Markus
Scientific Software - Peer-reviewed
- C
Published by markus2330 over 10 years ago
Elektra - Elektra 0.8.13
Again we managed to release with many new features, many fixes and also other improvements.
Elektrify-getenv
getenv(3) is one of the most popular ways to retrieve configuration, even though it has many known problems: - no standard way to modify it - relogin (or restart of shell) necessary - names are flat (no hierarchical structure) - cannot be set for individual applications - different in at, cron and similar scripts
With elektrify-getenv we wrote a solution which solves most of the problems. We use the LDPRELOAD technique to _additionally retrieve values from Elektra, and not only the environment.
You simply can do:
bash
kdb set user/env/override/HTTP_PROXY "http://my.proxy:8080"
This will set the HTTP_PROXY environment variable to http://my.proxy:8080.
Configuration can be retrieved with kdb get:
bash
kdb get user/env/override/HTTP_PROXY
lynx # or start another www-browser with the newly set HTTP_PROXY
Or using the man pages:
kdb elektrify-getenv man man --elektra:MANWIDTH=40
Will use MANWIDTH 40 for this invocation of man man. This feature is handy, if an option is only available by environment, but not by command-line arguments, because sometimes environment variables are not trivial to set (e.g. in Makefiles).
Some more examples:
kdb set user/env/override/MANOPT -- "--regex -LC"
kdb elektrify-getenv getenv MANOPT # to check if it is set as expected
kdb getenv MANOPT # if /etc/ld.so.preload is active
So is this the final solution for configuration and manual elektrification of applications is not needed anymore?
The answer is: no and yes.
It is quite satisfactory for configuration that is inherently sharable (not different from one application to another) and needs the environment semantics, i.e. some subprocesses should have different configuration than others, e.g. in a specific terminal.
But it might not be a good solution for your own application, because
libgetenv(3) implies many architectural decision, that other elektrified
applications would decide differently, e.g.:
- it uses global variables (getenv(3) has no handle)
- it uses mutex for multi-threading safety
- the API getenv(3) only returns char* and has no support for other data types
For more information see src/libgetenv/README.md
Compatibility
As always, the API and API is fully forward-compatible, i.e. programs compiled against an older 0.8 versions of Elektra will continue to work.
Because keyUnescapedName and keyGetUnescapedNameSize is added in this release, it is not backward-compatible,
i.e. programs compiled against 0.8.13, might not work with older 0.8 libraries.
The function keyUnescapedName provides access to an unescaped name, i.e. one where / and \\ are
literal symbols and do not have any special meaning. NULL characters are used as path separators.
This function makes it trivial and efficient to iterate over all path names, as already exploited
in all bindings:
- jna (java)
- lua
- python2
- python3
Other small changes/additions in bindings: - fix key constructor, thanks to Manuel Mausz - add copy and deepcopy in python (+examples,+testcases), thanks to Manuel Mausz - dup() in python3 returned wrong type (SWIG wrapper), thanks to Toscano Pino for reporting, thanks to Manuel Mausz for fixing it
Doxygen 1.8.8 is preferred and the configfile was updated to this version.
The symbols of nickel (for the ni plugin) do not longer leak from the Elektra library. As such, old versions of testmod_ni won't work with Elektra 0.8.13. A version-script is now in use to only export following symbols: - kdb* - key* - ks* - libelektra* for module loading system - elektra* for proposed and other functions (no ABI/API compatibility here!)
In this release, ENABLE_CXX11 was changed to ON by default.
Note that in the next release 0.8.14 there will be two changes: - According to issue #262, we plan to remove the option ENABLECXX11 and require the compiler to be C++11 compatible. If you have any system you are not able to build Elektra with -DENABLECXX11=ON (which is the default for 0.8.13) please report that immediately. - the python3 bindings will be renamed to python
By not having to care for pre-C++11 compilers, we hope to attract more developers. The core part is still in C99 so that Elektra can be used on systems where libc++ is not available. Many new plugins are still written in C99, also with the purpose of not depending on C++.
Python Plugins
A technical preview of python3 and python2 plugins has been added.
With them its possible to write any plugin with python scripts.
Note, they are a technical preview. They might have severe bugs and the API might change in the future. Nevertheless, it is already possible to, e.g. develop storage plugins with it.
They are not included in ALL plugins. To use it, you have to specify it:
-PLUGINS="ALL;python;python2"
Thanks to Manuel Mausz for to this work on the plugins and the patience in all the last minute fixes!
Qt-gui 0.0.8
The GUI was improved and the most annoying bugs are fixed: - only reload and write config files if something has changed - use merging in a way that only a conflict free merge will be written, thanks to Felix Berlakovich - made sure keys can only be renamed if the new name/value/metadata is different from the existing ones - fixed 1) and 2) of #233 - fixed #235 - fixed qml warning when deleting key - fixed qml typerror when accepting an edit
A big thanks to Raffael Pancheri!
KDB Tool
The commandline tool kdb also got some improvements.
Most noteworthy is that kdb get -v now gives a complete trace for
every key that was tried. This is very handy if you have a complex
specification with many fallback and override links.
It also shows default values and warnings in the case of context-oriented features.
Furthermore:
- Add -v for setmeta
- Copy will warn when it won't overwrite another key (behaviour did not change)
- improve help text, thanks to Ian Donnelly
Documentation Initiative
As Michael Haberler from machinekit pointed out it was certainly not easy for someone
to get started with Elektra. With the documentation initiative we are going to change that.
- The discussion in github issues should clarify many things
- We start writing man pages in ronn-format(7), thanks to Ian Donnelly for current work
- Kurt Micheli is woring on improved doxygen docu + pdf generation
- Daniel Bugl already restructed the main page
- Daniel Bugl also improved formatting
- doc: use @retval more, thanks to Pino Toscano
- doxygen: fix template to use @ and not \\.
- SVG logo is preferred, thanks to Daniel Bugl
- doc: use @retval more, thanks to Pino Toscano
- many typo fixes, thanks to Pino Toscano
- fix broken links, thanks to Manuel Mausz, Daniel Bugl and Michael Haberler
Any further help is very welcome! This call is especially addressed to beginners in Elektra because they obviously know best which documentation is lacking and what they would need.
Portability
kdb-full and kdb-static work fine now for Windows 64bit, thanks to Manuel Mausz.
The wresolver is now more relaxed with unset environment.
All issues for Mac OS X were resolved. With the exception of elektrify-getenv everything should work now, thanks to Mihael Pranjic: - fix mktemp - testscripts - recursive mutex simplification - clearenv ifdef
and thanks to Daniel Bugl:
- RPATH fixed, so that kdb works
furthermore:
- fix __FUNCTION__ to __func__ (C99), thanks to Pino Toscano
- avoid compilation error when JNIVERSION18 is missing
- fix (twice, because of an accidental revert) the TARGETCMAKE_FOLDER, thanks to Pino Toscano
Thanks to Manuel Mausz for to testing and improving portability!
Packaging and Build System
- 0.8.12 packaged+migrated to testing, thanks to Pino Toscano
- fix build with external gtest, thanks to Pino Toscano
- switch from FindElektra.cmake to ElektraConfig.cmake, thanks to Pino Toscano
- use
cmake_parse_argumentsinstead ofparse_arguments, thanks to Manuel Mausz
Further Fixes
- Key::release() will also work when Key holds a null-pointer
- Key::getName() avoids std::string exception
- support for copy module was introduced, thanks to Manuel Mausz
- be more POSIX compatible in shell scripts (
typetocommand -vand avoidecho -e) thanks to Pino Toscano - fix vararg type for KEY_FLAGS, thanks to Pino Toscano
- fix crash of example, thanks to Pino Toscano
- add proper licence file for Modules (COPYING-CMAKE-SCRIPTS), thanks to Pino Toscano
- fix XDG resolver issue when no given path in XDGCONFIGDIRS is valid
- make dbus example work again
- fix compiler warnings for gcc and clang
- fix valgrind suppressions
- Installation of GI binding is fixed, thanks to Dāvis
- make uninstall is fixed and docu improved
Notes
There are some misconceptions about Elektra and semi structured data (like XML, JSON). Elektra is a key/value storage, that internally represents everything with key and values. Even though, Elektra can use XML and JSON files elegantly, there are limitations what XML and JSON can represent. XML, e.g., cannot have holes within its structure, while this is obviously easily possible with key/value. And JSON, e.g., cannot have non-array entries within an array. This is a more general issue of that configuration files in general are constrained in what they are able to express. The solution to this problem is validation, i.e. keys that does not fit in the underlying format are rejected. Note there is no issue the other way round: special characteristics of configuration files can always be captured in Elektra's metadata.
Get It!
You can download the release from here and now also here on github - name: elektra-0.8.13.tar.gz - size: 2141758 - md5sum: 6e7640338f440e67aba91bd64b64f613 - sha1: ca58524d78e5d39a540a4db83ad527354524db5e - sha256: f5c672ef9f7826023a577ca8643d0dcf20c3ad85720f36e39f98fe61ffe74637
This release tarball now is also available signed by me using gpg
already built API-Docu can be found here
Stay tuned!
Subscribe to the RSS feed to always get the release notifications.
For any questions and comments, please contact the Mailing List the issue tracker on github or by mail elektra@markus-raab.org.
For more information, see http://libelektra.org
Scientific Software - Peer-reviewed
- C
Published by markus2330 over 10 years ago


