
\begin{DoxyItemize}
\item guid\+: 8e05231a-\/4f3d-\/488b-\/8dc2-\/5f0d5c474c39
\item author\+: Markus Raab
\item pub\+Date\+: Tue, 22 Nov 2016 22\+:04\+:59 +0100
\item short\+Desc\+: adds more tutorials, ruby bindings \& cleanup of core
\end{DoxyItemize}

\subsection*{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 https\+://master.libelektra.\+org/doc/\+W\+HY.md \char`\"{}why Elektra\char`\"{} for an explanation of why such a solution is necessary. It can be seen as a https\+://master.libelektra.\+org/doc/\+B\+I\+G\+P\+I\+C\+T\+U\+RE.md \char`\"{}virtual file system\char`\"{} for configuration files.

\subsection*{Highlights}


\begin{DoxyItemize}
\item more tutorials and getting started guides
\item new Ruby bindings
\item cleanup of core (only 124K for main library on Debian/amd64)
\end{DoxyItemize}

\subsubsection*{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 https\+://master.libelektra.\+org/\+C\+O\+D\+E\+\_\+\+O\+F\+\_\+\+C\+O\+N\+D\+U\+CT.md \char`\"{}code of
conduct\char`\"{}.

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!


\begin{DoxyItemize}
\item We wrote an https\+://master.libelektra.\+org/doc/tutorials/\+R\+E\+A\+D\+ME.md \char`\"{}overview readme\char`\"{}
\item We wrote new tutorials about https\+://master.libelektra.\+org/doc/tutorials/mount.md \char`\"{}mounting\char`\"{} and https\+://master.libelektra.\+org/doc/tutorials/validation.md \char`\"{}validation\char`\"{} (thanks to Christoph Weber)
\item 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)
\item \href{https://master.libelektra.org/src/plugins/lua}{\tt Lua} and \href{https://master.libelektra.org/src/plugins/python}{\tt Python} plugins got tutorials and better explanations! (Thanks to Marvin Mall)
\item The \href{https://doc.libelektra.org/api/0.8.19/html/}{\tt doxygen} docu now also uses links to directories, thanks to Kurt Micheli!
\end{DoxyItemize}

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 \href{https://git.libelektra.org/issues/new}{\tt start a discussion or ask a question}. We also added a https\+://master.libelektra.\+org/doc/help/elektra-\/faq.md \char`\"{}\+F\+A\+Q\char`\"{} and updated https\+://master.libelektra.\+org/.github/\+C\+O\+N\+T\+R\+I\+B\+U\+T\+I\+N\+G.\+md \char`\"{}\+C\+O\+N\+T\+R\+I\+B\+U\+T\+I\+N\+G\char`\"{}

\subsubsection*{Ruby Bindings}

We now provide Ruby bindings for Elektra. The bindings are based on the C++ bindings and are generated by S\+W\+IG. 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 https\+://master.libelektra.\+org/src/bindings/swig/ruby/\+R\+E\+A\+D\+ME.md \char`\"{}short introduction\char`\"{} shows some basic usage scenarios. More detailed examples can be found in the \href{https://master.libelektra.org/src/bindings/swig/ruby/examples}{\tt examples directory}.

A big thanks to Bernhard Denner!

\subsubsection*{Cleanup of Core}

Following methods were hidden ({\ttfamily static}) or removed\+:


\begin{DoxyItemize}
\item {\ttfamily mount$\ast$} methods
\item {\ttfamily trie$\ast$} methods
\item {\ttfamily backend$\ast$}
\item {\ttfamily split$\ast$}
\item {\ttfamily key\+Get\+Parent\+Name\+Size}
\item {\ttfamily key\+Get\+Parent\+Name}
\end{DoxyItemize}

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!

\subsection*{Usability}


\begin{DoxyItemize}
\item Improved many error messages
\begin{DoxyItemize}
\item spelling
\item be more friendly to the user
\item capitalization
\item mention {\ttfamily sudo !!}
\end{DoxyItemize}
\item {\ttfamily kdb set}\+: do not print what was not done
\item {\ttfamily kdb editor} handles non-\/modified files (will not do anything)
\item Be more chatty about what {\ttfamily kdb} does, can be disabled with {\ttfamily -\/q} or {\ttfamily /sw/elektra/kdb/\#0/current/quiet}.
\item Furthermore, {\ttfamily -\/v} now tells even more details (e.\+g. {\ttfamily kdb-\/import} outputs the key about to import)
\end{DoxyItemize}

\subsection*{Plugins}

\subsubsection*{New}


\begin{DoxyItemize}
\item \href{https://master.libelektra.org/src/plugins/c}{\tt 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.
\item \href{https://master.libelektra.org/src/plugins/base64}{\tt base64 plugin} allows you to encode binary data. This is especially handy in combination with the \href{https://master.libelektra.org/src/plugins/crypto}{\tt crypto plugin} to avoid problems with non-\/printable characters in configuration files. (Thanks to Peter Nirschl)
\item \href{https://master.libelektra.org/src/plugins/fcrypt}{\tt fcrypt plugin} allows you to fully encrypt configuration files. They are only decrypted when applications access them. (Thanks to Peter Nirschl)
\item \href{https://master.libelektra.org/src/plugins/required}{\tt required plugin} rejects every key that is not required by an application.
\item \href{https://master.libelektra.org/src/plugins/simplespeclang}{\tt simple spec lang} allows you to define metadata for \href{https://master.libelektra.org/src/plugins/enum}{\tt enum} and required in a more compact way.
\end{DoxyItemize}

\subsubsection*{Major Enhancements}


\begin{DoxyItemize}
\item \href{https://master.libelektra.org/src/plugins/simpleini}{\tt simpleini} got a configurable format in which it will read and write configuration files. For example, one can use {\ttfamily format=\% -\/$>$ \%} to have {\ttfamily key -\/$>$ value}.
\item \href{https://master.libelektra.org/src/plugins/enum}{\tt enum} got support for multi-\/enums, i.\+e., multiple separated values within one value. The error reporting was improved, too. (Thanks to Thomas Waser)
\item \href{https://master.libelektra.org/src/plugins/glob}{\tt glob} accepts a list of named flags instead of an integer value and aborts matching after first hit. (Thanks to Felix Berlakovich)
\item \href{https://master.libelektra.org/src/plugins/hosts}{\tt hosts} now only accepts {\ttfamily ipv4} and {\ttfamily ipv6} keys. (Thanks to Felix Berlakovich)
\end{DoxyItemize}

\subsection*{Development}

In the perpetual effort to improve software quality, we made several improvements\+: (This information is mainly intended for Elektra’s developers.)


\begin{DoxyItemize}
\item A new logger encourages developers to write more comments ({\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+\+L\+OG})
\item {\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+\+A\+S\+S\+E\+RT} prints better messages on failure and does not need {\ttfamily \&\&} trick.
\item get rid of previous {\ttfamily V\+E\+R\+B\+O\+SE} macro at many places.
\item Many assertions were added in the low-\/level helpers (memory management)
\item Using the assertions we fixed some undefined behavior. (Thanks to Thomas Waser)
\item added new {\ttfamily configure-\/debian-\/debug} and {\ttfamily configure-\/debian-\/log} helper scripts
\item The build server now checks if builds with active logger and debugging work correctly.
\item Improved Coding Style in crypto\+\_\+botan (thanks to Peter Nirschl)
\item add {\ttfamily external-\/links.\+txt} to {\ttfamily outputs} (The file is generated in the build directory and contains all external-\/links. To validate them, use {\ttfamily ./scripts/link-\/checker}) (Thanks to Kurt Micheli)
\item {\ttfamily markdownlinkconverter} handles directories correctly (using {\ttfamily stat}). (Thanks to Kurt Micheli)
\item Fixed compiler warning caused by libxml2 (different behavior since 2.\+9.\+4), thanks to René Schwaiger
\item added often used links in https\+://master.libelektra.\+org/\+R\+E\+A\+D\+ME.md \char`\"{}main R\+E\+A\+D\+M\+E\char`\"{}
\item Improve documentation about failing test cases and what to do about it.
\item added \href{https://master.libelektra.org/doc/decisions/}{\tt decisions} about {\ttfamily plugin\+\_\+variants} and {\ttfamily array}. (Thanks to Marvin Mall)
\item Rename to metadata, metakey, mountpoint (Thanks to Peter Nirschl)
\item std\+::ios\+\_\+base\+::showbase can be used to output metadata when streaming keys (C++)
\item New {\ttfamily infos/status}\+: {\ttfamily readonly}, {\ttfamily writeonly}, {\ttfamily limited} (Thanks to Marvin Mall)
\item The tool {\ttfamily update-\/infos-\/status} orders {\ttfamily infos/status} and allows devs to easily add/rem entries. (Thanks to Kurt Micheli)
\item Automatic setting of {\ttfamily infos/status}\+: {\ttfamily nodoc}, {\ttfamily nodep}, {\ttfamily unittest}, {\ttfamily memleak}, {\ttfamily configurable} (Thanks to Kurt Micheli)
\item Improve {\ttfamily create\+\_\+lib\+\_\+symlink}, add {\ttfamily P\+L\+U\+G\+IN} argument and make it useful also for other library symlinks.
\item New markdown style applied to most markdown files. (Thanks to Marvin Mall)
\item Tracer is now disabled, even for {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+D\+E\+B\+UG}. (Thanks to Marvin Mall)
\item Updated https\+://master.libelektra.\+org/doc/\+S\+E\+C\+U\+R\+I\+TY.md \char`\"{}\+S\+E\+C\+U\+R\+I\+T\+Y document\char`\"{}
\item Macro naming convention {\ttfamily E\+L\+E\+K\+T\+R\+A\+\_\+}, added {\ttfamily \hyperlink{kdbmacros_8h}{kdbmacros.\+h}}
\item {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+D\+E\+B\+UG} also works with {\ttfamily clang} and {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+A\+S\+AN} now allows devs to additionally enable sanitizers. Thanks to Gabriel Rauter.
\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).

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\textquotesingle{}s contract are fully compatible\+: You can now use {\ttfamily storage/ini} instead of {\ttfamily storage ini} in {\ttfamily infos/provides} which gives you the information that {\ttfamily ini} is a storage format (and not anything else the plugin might provide). For compatibility reasons, the build system still adds {\ttfamily storage ini} even if only {\ttfamily storage/ini} is specified.

That means that {\ttfamily kdb mount file.\+json /examples/json json} still will find {\ttfamily json} plugins even if they are not called {\ttfamily json} but \href{https://master.libelektra.org/src/plugins/yajl}{\tt yajl}.

Another breaking change in {\ttfamily libtools} is that {\ttfamily append\+Namespace} was renamed to {\ttfamily prepend\+Namespace}.

Error messages changed a bit, so if you tried to parse them, make sure to make the {\ttfamily e} of error case-\/insensitive ({\ttfamily \mbox{[}eE\mbox{]}}).

In the C++ binding, {\ttfamily rewind\+Meta} is now {\ttfamily const} and some methods to check if a key is in a namespace were added.

The intercept libraries were moved to a \href{https://master.libelektra.org/src/bindings/intercept}{\tt common folder}. They can now be included or excluded like other {\ttfamily B\+I\+N\+D\+I\+N\+GS}. For consistency reasons the libraries were also renamed ({\ttfamily libelektraintercept-\/fs.\+so} and {\ttfamily libelektraintercept-\/env.\+so.\+0}), but symlinks allow you to link against their old names ({\ttfamily lib/libelektraintercept.\+so} and {\ttfamily lib/libelektragetenv.\+so.\+0}).

\subsection*{Package Maintainers}

This information is intended for package maintainers.


\begin{DoxyItemize}
\item GI Bindings were removed from {\ttfamily B\+I\+N\+D\+I\+N\+GS=A\+LL}. It is recommended to use {\ttfamily S\+W\+IG} bindings instead, which will be added with {\ttfamily A\+LL}.
\item Intercept libraries are part of {\ttfamily B\+I\+N\+D\+I\+N\+GS}. They will be added on glibc systems where {\ttfamily B\+I\+N\+D\+I\+N\+GS=A\+LL} is used.
\item Documentation in textfiles is now installed, {\ttfamily T\+A\+R\+G\+E\+T\+\_\+\+D\+O\+C\+U\+M\+E\+N\+T\+A\+T\+I\+O\+N\+\_\+\+T\+E\+X\+T\+\_\+\+F\+O\+L\+D\+ER} was added for that purpose. The files are\+:
\begin{DoxyItemize}
\item {\ttfamily B\+I\+G\+P\+I\+C\+T\+U\+R\+E.\+md}, {\ttfamily G\+O\+A\+L\+S.\+md}, {\ttfamily L\+I\+C\+E\+N\+S\+E.\+md}, {\ttfamily M\+E\+T\+A\+D\+A\+T\+A.\+ini}, {\ttfamily S\+E\+C\+U\+R\+I\+T\+Y.\+md}, {\ttfamily A\+U\+T\+H\+O\+RS}, {\ttfamily C\+O\+N\+T\+R\+A\+C\+T.\+ini}, {\ttfamily N\+E\+W\+S.\+md}, and {\ttfamily W\+H\+Y.\+md}
\end{DoxyItemize}
\end{DoxyItemize}

Other new files are\+:


\begin{DoxyItemize}
\item Plugins\+: {\ttfamily libelektra-\/base64.\+so}, {\ttfamily libelektra-\/c.\+so}, {\ttfamily libelektra-\/fcrypt.\+so} {\ttfamily libelektra-\/required.\+so}, {\ttfamily libelektra-\/simplespeclang.\+so} (only in {\ttfamily E\+X\+P\+E\+R\+I\+M\+E\+N\+T\+AL}, not added by default, but with {\ttfamily A\+LL})
\item {\ttfamily site\+\_\+ruby/\+\_\+kdb.\+so} (ruby binding, only in {\ttfamily A\+LL})
\item {\ttfamily testcpp\+\_\+keyio}, {\ttfamily testkdb\+\_\+error}, {\ttfamily testmod\+\_\+base64}, {\ttfamily testmod\+\_\+fcrypt} (test binaries in {\ttfamily T\+A\+R\+G\+E\+T\+\_\+\+T\+O\+O\+L\+\_\+\+E\+X\+E\+C\+\_\+\+F\+O\+L\+D\+ER})
\end{DoxyItemize}

Changed files are\+:


\begin{DoxyItemize}
\item {\ttfamily libelektraintercept-\/env.\+so} (renamed from {\ttfamily libelektragetenv.\+so.}, but still available as symlink)
\item {\ttfamily libelektraintercept-\/fs.\+so} (renamed from {\ttfamily libelektraintercept.\+so}, but still available as symlink)
\item version upgrade\+: {\ttfamily libelektratools.\+so.\+2}
\end{DoxyItemize}

\subsection*{Portability}

Elektra should work on every system that has {\ttfamily cmake} and a {\ttfamily C/\+C++} compiler.

For this release we increased portability to better work with mac\+OS, Cent\+OS 7, and Open\+Suse 42.


\begin{DoxyItemize}
\item mac\+OS\+:
\begin{DoxyItemize}
\item Travis build server now also build qt-\/gui
\item Support for xcode8 added (xcode6 still supported)
\end{DoxyItemize}
\item fix lua != 5.\+2 issues (wrong output), update docu
\item remove hard dependency to {\ttfamily pkg-\/config}
\item remove hard dependency to version 3 of {\ttfamily cmake} (most parts still work with version 2)
\item make search for swig 2 visible
\item fix plugin names and mounting on Open\+Suse 42.\+1
\end{DoxyItemize}

A big thanks to Kai-\/\+Uwe Behrmann, Mihael Pranjić and Sebastian Bachmann.

\subsection*{Fixed Issues}


\begin{DoxyItemize}
\item simpleini\+: use correct error number when open file fails
\item yajl\+: improve error message on non-\/utf8 text. (Thanks to Christoph Weber)
\item drop multiple {\ttfamily /} from {\ttfamily $\sim$} paths (Thanks to Thomas Waser)
\item fix failing test cases with {\ttfamily E\+N\+A\+B\+L\+E\+\_\+\+D\+E\+B\+UG} \#988 (Thanks to Thomas Waser)
\item csvstorage\+: files in source are rewritten \#987 (Thanks to Thomas Waser)
\item fix R\+T\+L\+D\+\_\+\+N\+O\+D\+E\+L\+E\+TE for Open\+B\+SD (Thanks to Thomas Waser)
\item better handle adding/deleting of read-\/only (info) plugins.
\item fix behavior of multiple plugins setting errors (first error wins, later errors are transformed to warnings) (Thanks to Thomas Waser)
\item fix resolver logic for missing files
\item regex string in conditionals (Thanks to Thomas Waser)
\item use {\ttfamily K\+DB} environment variable in shell tests and fix counting of tests for {\ttfamily kdb run\+\_\+all}.
\item output to {\ttfamily stderr} for {\ttfamily elektrify-\/$\ast$} scripts
\item make \href{https://master.libelektra.org/src/plugins/desktop}{\tt desktop plugin} mountable
\item avoid cmake warnings in {\ttfamily make uninstall} (avoid {\ttfamily @})
\item fix quoting in ini plugin (Thanks to Thomas Waser)
\item fix plugin names and mounting with plugin pre/postfixes (Thanks to Kai-\/\+Uwe Behrmann)
\item mount-\/openicc\+: rename to openicc.\+json (Thanks to Kai-\/\+Uwe Behrmann)
\end{DoxyItemize}

\subsection*{Get It!}

You can download the release from \href{https://www.libelektra.org/ftp/elektra/releases/elektra-0.8.19.tar.gz}{\tt here} and also \href{https://github.com/ElektraInitiative/ftp/tree/master/releases/elektra-0.8.19.tar.gz}{\tt here on github}


\begin{DoxyItemize}
\item name\+: elektra-\/0.\+8.\+19.\+tar.\+gz
\item size\+: 2681639
\item md5sum\+: 6669e765c834e259fb7570f126b85d7e
\item sha1\+: 82cefe4cea58d6e6b0a99ddbda24d1b57e98d93a
\item sha256\+: cc14f09539aa95623e884f28e8be7bd67c37550d25e08288108a54fd294fd2a8
\end{DoxyItemize}

This release tarball now is also available \href{https://www.libelektra.org/ftp/elektra/releases/elektra-0.8.19.tar.gz.gpg}{\tt signed by me using gpg}

already built A\+P\+I-\/\+Docu can be found \href{https://doc.libelektra.org/api/0.8.19/html/}{\tt here}

\subsection*{Stay tuned!}

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

For any questions and comments, please contact the \href{https://lists.sourceforge.net/lists/listinfo/registry-list}{\tt Mailing List} the issue tracker \href{https://git.libelektra.org/issues}{\tt on github} or by email \href{mailto:elektra@markus-raab.org}{\tt elektra@markus-\/raab.\+org}.

\href{https://doc.libelektra.org/news/8e05231a-4f3d-488b-8dc2-5f0d5c474c39.html}{\tt Permalink to this N\+E\+WS entry}

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

Best regards, Markus 