We are proud to release Elektra 0.\+8.\+21.


\begin{DoxyItemize}
\item guid\+: 7f5de1b1-\/6086-\/47a6-\/9922-\/cac08c898ae7
\item author\+: Markus Raab
\item pub\+Date\+: Fri, 22 Dec 2017 09\+:24\+:02 +0100
\item short\+Desc\+: F\+O\+S\+D\+EM, New Book, Maturing of Plugins
\end{DoxyItemize}

\subsection*{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 \href{https://libelektra.org}{\tt https\+://libelektra.\+org}.

The news can be read rendered at \href{https://www.libelektra.org/news/0.8.21-release}{\tt our web server}.

\subsection*{Highlights}

In this release 8 authors created 307 commits and changed 217 files (5227 insertions, 1914 deletions). The highlights of this release are\+:


\begin{DoxyItemize}
\item Fosdem Talk about Elektra was accepted
\item C\+C-\/licensed book about Elektra published
\item Maturing of plugins
\item Elektra with encryption
\item Preparation for switch to I\+NI as default storage
\end{DoxyItemize}

\subsubsection*{Fosdem Talk about Elektra in Main Track}

We are happy to announce that there will be a talk about Elektra in one of the \href{https://fosdem.org/2018/schedule/event/elektra/}{\tt main tracks of Fosdem 2018}\+:


\begin{DoxyItemize}
\item Title\+: Configuration Revolution
\item Subtitle\+: Why it Needed 13 Years and How it Will be Done
\item Day\+: Saturday 2018-\/02-\/03
\item Start time\+: 15\+:00
\item Duration\+: 50 min
\item Room\+: K.\+1.\+105 (La Fontaine)
\end{DoxyItemize}

And a second talk in the \href{https://fosdem.org/2018/schedule/event/puppet_key_value/}{\tt Config Management Dev\+Room}\+:


\begin{DoxyItemize}
\item Title\+: Breaking with conventional Configuration File Editing
\item Subtitle\+: Puppet with a Key/\+Value A\+PI in a User Study
\item Day\+: Sunday 2018-\/02-\/04
\item Start time\+: 12\+:30
\item Duration\+: 25 min
\item Room\+: U\+A2.\+114 (Baudoux)
\end{DoxyItemize}

See you in Brussels at 3 and 4 February 2018!

I will also be present in the \href{http://cfgmgmtcamp.eu/}{\tt Config Management Camp} directly after Fosdem in Gent.

\subsubsection*{C\+C-\/licenced Book About Vision of Elektra Published}

I am proud to release a book with the title \char`\"{}\+Context-\/aware Configuration\char`\"{} describing\+:


\begin{DoxyItemize}
\item the last 13 years of Elektra (focus on last 4 years with the questionnaire survey and code analysis),
\item the current state of Elektra, and
\item the long-\/term goals of Elektra (context-\/aware configuration).
\end{DoxyItemize}

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 La\+TeX sources are available \href{https://book.libelektra.org}{\tt here} and the compiled book can be downloaded from \href{https://www.libelektra.org/ftp/elektra/publications/raab2017context.pdf}{\tt here}.

\subsubsection*{Maturing of Plugins}


\begin{DoxyItemize}
\item The new \href{https://www.libelektra.org/plugins/directoryvalue}{\tt Directory Value plugin} supports storage plugins such as \href{https://www.libelektra.org/plugins/yajl}{\tt Y\+A\+JL} and \href{https://www.libelektra.org/plugins/yamlcpp}{\tt Y\+A\+ML C\+PP}. 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.
\item The \href{https://www.libelektra.org/plugins/yamlcpp}{\tt Y\+A\+ML C\+PP plugin} reads and writes \href{http://yaml.org}{\tt Y\+A\+ML} data using \href{https://github.com/jbeder/yaml-cpp}{\tt yaml-\/cpp}. The plugin supports arrays, binary data and metadata.
\item The \href{https://www.libelektra.org/plugins/camel}{\tt Camel plugin} stores data as simplified Y\+A\+ML flow lists containing double quoted keys and values. For proper Y\+A\+ML support please use the \href{https://www.libelektra.org/plugins/yamlcpp}{\tt Y\+A\+ML C\+PP} instead.
\item The \href{https://www.libelektra.org/plugins/mini}{\tt m\+I\+NI plugin} reads and writes simple property list, separated by equal ({\ttfamily =}) signs.
\item The \href{https://www.libelektra.org/plugins/xerces}{\tt xerces plugin} allows Elektra to read and write X\+ML data. The plugin uses \href{http://xerces.apache.org/xerces-c}{\tt Xerces-\/\+C++} for this task. It supports both arrays and metadata.
\item The \href{https://www.libelektra.org/plugins/boolean}{\tt boolean plugin} normalizes boolean values such as {\ttfamily 0}, {\ttfamily 1}, {\ttfamily true} and {\ttfamily false}.
\item The \href{https://www.libelektra.org/plugins/crypto}{\tt crypto plugin} and \href{https://www.libelektra.org/plugins/fcrypt}{\tt fcrypt plugin} are described below.
\end{DoxyItemize}

\subsubsection*{Elektra With Encryption}

The plugins {\ttfamily fcrypt} and {\ttfamily crypto} are now considered stable. They are no longer tagged as {\ttfamily experimental}. While {\ttfamily crypto} encrypts individual values within configuration files, {\ttfamily fcrypt} encrypts and/or signs the whole configuration file.

For this release Peter Nirschl prepared a demo showing Elektra\textquotesingle{}s cryptographic abilities\+:

\href{https://asciinema.org/a/153014}{\tt }

Thanks to Peter Nirschl for this great work!

\subsubsection*{Switch to I\+NI}

We plan to switch to I\+NI as default storage instead of Elektra\textquotesingle{}s infamous internal dump format.

As preparation work we implemented the {\ttfamily dini} plugin which transparently converts all {\ttfamily dump} files to {\ttfamily ini} files on any write attempt. Furthermore, we fixed most of the I\+NI bugs which blocked I\+NI to be the default storage.

Due to this progress we will likely switch to I\+NI as default starting with the next release. If you want to, you can switch now by compiling Elektra with\+:~\newline
 {\ttfamily -\/\+D\+K\+D\+B\+\_\+\+D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+T\+O\+R\+A\+GE=dini}

Or simply switch for your installation with\+:~\newline
 {\ttfamily sudo kdb change-\/default-\/storage dini}

If you are already using {\ttfamily ini} as default, changing to {\ttfamily dini} will\+:


\begin{DoxyItemize}
\item add some overhead because {\ttfamily dini} always checks if a file uses the {\ttfamily dump} format, unless the {\ttfamily dump} plugin is not installed.
\item add support for binary values using the {\ttfamily binary} plugin
\end{DoxyItemize}

\begin{quote}
N\+O\+TE\+: I\+NI (dini) was not completely ready for 0.\+8.\+21 thus we kept {\ttfamily dump} as default. {\ttfamily dini} is currently an experimental plugin. \end{quote}


\subsection*{Other New Features}

We added even more functionality, which could not make it to the highlights\+:


\begin{DoxyItemize}
\item {\ttfamily kdb rm} now supports {\ttfamily -\/f} to ignore non-\/existing keys
\item use {\ttfamily \%} as profile name to disable reading from any profile
\item The new function {\ttfamily elektra\+Array\+Dec\+Name}\+:
\end{DoxyItemize}


\begin{DoxyCode}
\textcolor{keywordtype}{int} \hyperlink{array_8c_a4376537e9d6545dd26afe0c6c62dd9ed}{elektraArrayDecName} (Key * key);
\end{DoxyCode}


decreases the index of an array element by one. It can be used to reverse the effect of {\ttfamily elektra\+Array\+Inc\+Name}, thanks to René Schwaiger

\subsection*{Documentation}

We improved the documentation in the following ways\+:


\begin{DoxyItemize}
\item We renamed our beginner friendly issues to \char`\"{}good first issue\char`\"{} as recommended by Git\+Hub.
\item In many parts of the documentation we already switched to American spelling thanks to René Schwaiger
\item Added more \href{https://master.libelektra.org/scripts/sed}{\tt automatic spelling corrections} thanks to René Schwaiger
\item Fixed many spelling mistakes thanks to René Schwaiger
\item We extended the Read\+Me of the {\ttfamily jni} plugin. The Read\+Me now also contains information about the Java prerequisites of the {\ttfamily jni} plugin on Debian Stretch.
\item Improved notes about testing thanks to Thomas Wahringer
\item qt-\/gui\+: give hints which package to install
\item The build phrases {\ttfamily jenkins build all please} and {\ttfamily jenkins build doc please} were https\+://master.libelektra.\+org/doc/\+G\+IT.md \char`\"{}documented\char`\"{} thanks to René Schwaiger
\item Documentation for libelektra-\/invoke was added
\end{DoxyItemize}

\subsection*{Compatibility}

As always, the A\+BI and A\+PI of kdb.\+h is fully compatible, i.\+e. programs compiled against an older 0.\+8 version of Elektra will continue to work (A\+BI) and you will be able to recompile programs without errors (A\+PI).

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\+:


\begin{DoxyItemize}
\item added {\ttfamily elektra\+Array\+Dec\+Name} and {\ttfamily elektra\+Array\+Validate\+Name} in libease
\item fixed {\ttfamily kdbinvoke.\+h} interface\+: make structure private and complete A\+PI
\item fixed {\ttfamily xmlns} and {\ttfamily xsi\+:schema\+Location} to be {\ttfamily \href{https://www.libelektra.org}{\tt https\+://www.\+libelektra.\+org}}
\item the private header file {\ttfamily \hyperlink{kdbopmphm_8h}{kdbopmphm.\+h}} got nearly rewritten
\end{DoxyItemize}

\subsection*{Notes for Maintainer}

These notes are of interest for people maintaining packages of Elektra\+:


\begin{DoxyItemize}
\item We added the following files in this release\+:
\begin{DoxyItemize}
\item {\ttfamily libelektra-\/dini.\+so}
\item {\ttfamily libelektra-\/directoryvalue.\+so}
\item {\ttfamily testmod\+\_\+directoryvalue}
\end{DoxyItemize}
\item The following plugins are not marked as experimental anymore\+:
\begin{DoxyItemize}
\item {\ttfamily camel}
\item {\ttfamily crypto}
\item {\ttfamily mini}
\item {\ttfamily xerces}
\item {\ttfamily yamlcpp}
\end{DoxyItemize}
\item The binding {\ttfamily intercept-\/fs} is now marked more clearly as experimental
\item The {\ttfamily jni} plugin is again experimental because it does not work with some Java systems. For the {\ttfamily lua} plugin there are also problems with some Lua systems.
\end{DoxyItemize}

\subsection*{Notes for Elektra\textquotesingle{}s Developers}

These notes are of interest for people developing Elektra\+:


\begin{DoxyItemize}
\item From now on release notes are written as part of P\+Rs
\item Elektra Initiative is spelled as two words
\item At some more places we switched to use the logger, thanks to René Schwaiger
\item Shell Recorder got many improvements, see below in Testing. Please use it.
\item The plugin\textquotesingle{}s template now adds all placements within backends by default (must be removed accordingly).
\item We now warn if plugins do not have any placement.
\item Please prefer -\/log and -\/debug builds
\item The build server now understands the build phrase {\ttfamily jenkins build all please} thanks to René Schwaiger. Please use it carefully, since it puts our \href{https://build.libelektra.org/}{\tt build server} under heavy load.
\item Markdown Shell Recorder Syntax recommended when reporting bugs.
\item Elektra\textquotesingle{}s \href{https://master.libelektra.org/scripts/docker/legacy/Dockerfile}{\tt Dockerfile} was improved and simplified, thanks to Thomas Wahringer.
\item Add more Explanations how to do Fuzz Testing
\item Started documenting disabled tests in \href{https://master.libelektra.org/doc/todo/TESTING}{\tt doc/todo/\+T\+E\+S\+T\+I\+NG}
\item You now can use {\ttfamily tests/icheck.\+suppression} to disable already checked A\+PI changes.
\item The (hopefully) last Sourceforge references were removed and a redirection page was added, thanks to -\/\+Arioch for reporting.
\end{DoxyItemize}

\subsection*{Testing}


\begin{DoxyItemize}
\item A\+FL unveiled some crashes in I\+NI code
\item fix O\+C\+Lint problems, thanks to René Schwaiger
\item fix A\+S\+AN problems, thanks to René Schwaiger
\item disabled non-\/working tests
\item Shell recorder
\item Benchmark optionally also works with Open\+MP, thanks to Kurt Micheli
\item The Shell Recorder now uses {\ttfamily kdb-\/static} or {\ttfamily kdb-\/full} if {\ttfamily kdb} is not available ({\ttfamily B\+U\+I\+L\+D\+\_\+\+S\+H\+A\+R\+ED=O\+FF})
\end{DoxyItemize}

\subsection*{Fixes}

Many problems were resolved with the following fixes\+:


\begin{DoxyItemize}
\item fix use of {\ttfamily dbus\+\_\+connection\+\_\+unref(\+N\+U\+L\+L)} A\+PI thanks to Kai-\/\+Uwe Behrmann
\item Properly include headers for {\ttfamily std\+::bind} thanks to Nick Sarnie
\item qt-\/gui\+: assure active focus on appearance selection window thanks to Raffael Pancheri
\item René Schwaiger repaired the {\ttfamily boolean} plugin\+:
\begin{DoxyItemize}
\item wrong metadata was used
\item plugin configuration was missing
\item documentation was missing
\item logging code was added
\end{DoxyItemize}
\item René Schwaiger repaired many problems different build agents had
\item {\ttfamily kdb info -\/l} does not open {\ttfamily K\+DB} anymore.
\item {\ttfamily change-\/resolver-\/symlink} and {\ttfamily change-\/storage-\/symlink} now correctly use {\ttfamily @T\+A\+R\+G\+E\+T\+\_\+\+P\+L\+U\+G\+I\+N\+\_\+\+F\+O\+L\+D\+ER@}
\item date plugin will be removed on attempts to compile it with gcc 4.\+7, thanks to René Schwaiger
\item C plugin\+: storage/c metadata added
\item fix disabling documentation in C\+Make, thanks to Kurt Micheli
\item Simplify {\ttfamily elektra\+Array\+Validate\+Name}, thanks to René Schwaiger
\end{DoxyItemize}

\subsection*{Outlook}

The Order Preserving Minimal Perfect Hash Map (O\+P\+M\+P\+HM) is ready to extend {\ttfamily ks\+Lookup}. 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 O\+P\+M\+P\+H\+M!

\subsection*{Get It!}

You can download the release from \href{https://www.libelektra.org/ftp/elektra/releases/elektra-0.8.21.tar.gz}{\tt here} or \href{https://github.com/ElektraInitiative/ftp/blob/master/releases/elektra-0.8.21.tar.gz?raw=true}{\tt Git\+Hub}

The \href{https://github.com/ElektraInitiative/ftp/blob/master/releases/elektra-0.8.21.tar.gz.hashsum?raw=true}{\tt hashsums are\+:}


\begin{DoxyItemize}
\item name\+: elektra-\/0.\+8.\+21.\+tar.\+gz
\item size\+: 4712043
\item md5sum\+: d627a01a0249fde46e80042c848d4521
\item sha1\+: a7659a7bb1b2388d03cdf0084160de612e5c4511
\item sha256\+: 51892570f18d1667d0da4d0908a091e41b41c20db9835765677109a3d150cd26
\end{DoxyItemize}

The release tarball is also available signed by me using Gnu\+PG from \href{https://www.libelektra.org/ftp/elektra/releases/elektra-0.8.21.tar.gz.gpg}{\tt here} or \href{https://github.com/ElektraInitiative/ftp/blob/master/releases//elektra-0.8.21.tar.gz.gpg?raw=true}{\tt Git\+Hub}

Already built A\+P\+I-\/\+Docu can be found \href{https://doc.libelektra.org/api/0.8.21/html/}{\tt online} or \href{https://github.com/ElektraInitiative/doc/tree/master/api/0.8.21}{\tt Git\+Hub}.

\subsection*{Stay tuned!}

Subscribe to the \href{https://www.libelektra.org/news/feed.rss}{\tt R\+SS feed} to always get the release notifications.

For any questions and comments, please contact the issue tracker \href{http://issues.libelektra.org}{\tt on Git\+Hub} or me by email using \href{mailto:elektra@markus-raab.org}{\tt elektra@markus-\/raab.\+org}.

\href{https://www.libelektra.org/news/0.8.21-release}{\tt Permalink to this N\+E\+WS entry}

For more information, see \href{https://libelektra.org}{\tt https\+://libelektra.\+org}

Best regards, Markus Raab for the \href{https://www.libelektra.org/developers/authors}{\tt Elektra Initiative} 