ejabberd 17.11 – Happy Birthday ejabberd !

Ejabberd has been the leading choice to serve reliable XMPP domains for 15 years, and we are happy to announce yet another great new version of your favorite server.

This version includes great new features from Google Summer of Code, many improvements and a lot of bug fixes. By the way, ejabberd is “Compliance Suite 2018” compatible now (see XEP-0387) !

New features

ACME Support

Google Summer of Code 2017 was a big success for ejabberd project. In this context, Konstantinos Kallas contributed support for the “Let’s Encrypt” ACME protocol, which is now part of ejabberd. The code was reviewed and improved by ejabberd team to ensure we meet the same standard of quality you are used to.

The objective of the ACME protocol is to make it possible to automatically obtain trusted certificates, without any human intervention. So, the main functionality of the implementation is acquiring and managing the aforementioned certificates.

Many thanks to Konstantinos Kallas for contributing this great feature ! Thanks to Evgeny Khramtsov for being the ProcessOne mentor.

Introduce ‘certfiles’ global option

The option is supposed to replace existing options ‘c2s_certfile’, ‘s2s_certfile’ and ‘domain_certfile’. The option accepts a list of file paths (optionally with wildcards “*”) containing either PEM certificates or PEM private keys. At startup, ejabberd sorts the certificates, finds matching private keys and rebuilds full certificates chains which can be used by fast_tls driver.

Allow writing custom modules in own path

In ejabberdctl.cfg, add this parameter to EJABBERD_OPTS

external_beams /path/to/ebin

Then, all beams /path/to/ebin/*.beam will be known by ejabberd_config at startup. This makes ejabberd able to load your own modules. So you can embed ejabberd as a dependency to your Elixir project, or manage your own backend modules, without messing with ejabberd installation.

Use new API for IQ routing

Functions ejabberd_local:route_iq/2,3 are now deprecated: ejabberd_router:route_iq/2,3,4 should be used instead.

Improvements

Build with host dependencies

Building ejabberd takes care of runtime dependencies, and some of them are even needed in order to build ejabberd. For several packaging systems, a package is not allowed to handles dependencies by itself. This makes ejabberd hard to package and maintain on these systems.

Configuring ejabberd with option ‘–enable-system-deps’ help to use hosts libraries to build ejabberd, and avoid ejabberd to handle dependencies by itself. This option has been improved to cover most needs and fix pending issues. Packagers should really have a look at this option to simplify packaging when needed.

PubSub

We are preparing work to improve the PEP implementation in ejabberd. In that regards we already fixed few glitches and improved XEP-0163 coverage.

We also added support of SQL export, to ease migration of your existing PubSub database from Mnesia to an SQL backend.

At last, we fixed the use of historical ‘hometree’ plugin, which now allows to propagate publications in the nodes tree to cover simple needs around nodes hierarchy.

Database

As an experimental feature, if you compile from sources with option ‘–enable-new-sql-schema’, an extra server_host columns will be used in your SQL tables. This feature allows to use the same database for all your vhosts. See ‘ejabberdctl update_sql’ command to update your sql schema in order to try this feature.

Upgrade

If you’re upgrading from a previous version, you must follow the instructions. More details in documentation, see upgrade notes.

Changes

Admin

Omit “ProtectSystem” option from systemd unit

Log warnings for c2s/s2s certfile option

Log a message when a user gets registered

ejabberdctl: Fix ‘read’ syntax for non-bash shells

Fix renew_certificates ejabberdctl command

Unregister commands when stopping node only if it’s last one

Halt ejabberd if the top supervisor fails to start

Build

Avoid badarg error when running get-deps before ./configure has created src/ejabberd.app