Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Created by
brew bump
Created with
brew bump-formula-pr
.release notes
If you upgrade ejabberd from a previous release, please review those changes:
A more detailed explanation of those topics and other features:
Matrix federation
ejabberd is now able to federate with Matrix servers. Detailed instructions to setup Matrix federation with ejabberd will be detailed in another post.
Here is a quick summary of the configuration steps:
First, s2s must be enabled on ejabberd. Then define a listener that uses
mod_matrix_gw
:And add
mod_matrix_gw
in your modules:Support TLS 1.3, Bind 2, SASL2
Support for XEP-0424 Message Retraction
With the new support for XEP-0424: Message Retraction, users of MAM message archiving can control their message archiving, with the ability to ask for deletion.
Support for XEP-0198 pings
If stream management is enabled, let mod_ping trigger XEP-0198
<r/>equests
rather than sending XEP-0199 pings. This avoids the overhead of the ping IQ stanzas, which, if stream management is enabled, are accompanied by XEP-0198 elements anyway.Update the SQL schema
The table
archive
has a text column namedorigin_id
(see commit 975681). You have two methods to update the SQL schema of your existing database:If using MySQL or PosgreSQL, you can enable the option
update_sql_schema
and ejabberd will take care to update the SQL schema when needed: add in your ejabberd configuration file the lineupdate_sql_schema: true
If you are using other database, or prefer to update manually the SQL schema:
Authentication workaround for Converse.js and Strophe.js
This ejabberd release includes support for XEP-0474: SASL SCRAM Downgrade Protection, and some clients may not support it correctly yet.
If you are using Converse.js 10.1.6 or older, or any other client based in Strophe.js v1.6.2 or older, you may notice that they cannot authenticate correctly to ejabberd.
To solve that problem, either update to newer versions of those programs (if they exist), or you can enable temporarily the option
disable_sasl_scram_downgrade_protection
in the ejabberd configuration fileejabberd.yml
like this:Support for API versioning
Until now, when a new ejabberd release changed some API command (an argument renamed, a result in a different format...), then you had to update your API client to the new API at the same time that you updated ejabberd.
Now the ejabberd API commands can have different versions, by default the most recent one is used, and the API client can specify the API version it supports.
In fact, this feature was implemented seven years ago, included in ejabberd 16.04, documented in ejabberd Docs: API Versioning... but it was never actually used!
This ejabberd release includes many fixes to get API versioning up to date, and it starts being used by several commands.
Let's say that ejabberd 23.10 implemented API version 0, and this ejabberd 24.02 adds API version 1. You may want to update your API client to use the new API version 1... or you can continue using API version 0 and delay API update a few weeks or months.
To continue using API version 0:
--version 0
. For example:ejabberdctl --version 0 get_roster admin localhost
v0
to therequest_handlers
path. For example:/api/v0: mod_http_api
Check the details in ejabberd Docs: API Versioning.
ejabberd commands API version 1
When you want to update your API client to support ejabberd API version 1, those are the changes to take into account:
All those changes are described in the next sections.
Commands with list arguments
Several commands now use
list
argument instead of astring
with separators (different commands used different separators:;
:
\\n
,
).The commands improved in API version 1:
add_rosteritem
oauth_issue_token
send_direct_invitation
srg_create
subscribe_room
subscribe_room_many
For example,
srg_create
in API version 0 took as arguments:now in API version 1 the command expects as arguments:
mod_http_api not named results
There was an incoherence in mod_http_api results when they were integer/string and when they were list/tuple/rescode...: the result contained the name, for example:
Staring in API version 1, when result is an integer or a string, it will not contain the result name. This is now coherent with the other result formats (list, tuple, ...) which don't contain the result name either.
Some examples with API version 0 and API version 1:
ejabberdctl with list arguments
ejabberdctl now supports list and tuple arguments, like mod_http_api and ejabberd_xmlrpc. This allows ejabberdctl to execute all the existing commands, even some that were impossible until now like
create_room_with_opts
andset_vcard2_multi
.List elements are separated with
,
and tuple elements are separated with:
.Relevant commands:
add_rosteritem
create_room_with_opts
oauth_issue_token
send_direct_invitation
set_vcard2_multi
srg_create
subscribe_room
subscribe_room_many
Some example uses:
ejabberdctl list results
Until now, ejabberdctl returned list elements separated with
;
. Now in API version 1 list elements are separated with,
.For example, in ejabberd 23.10:
$ ejabberdctl get_roster admin localhost jan@localhost jan none subscribe group1;group2 tom@localhost tom none subscribe group3
Since this ejabberd release, using API version 1:
it is still possible to get the results in the old syntax, using API version 0:
$ ejabberdctl --version 0 get_roster admin localhost jan@localhost jan none subscribe group1;group2 tom@localhost tom none subscribe group3
ejabberdctl help improved
ejabberd supports around 200 administrative commands, and probably you consult them in the ejabberd Docs -> API Reference page, where all the commands documentation is perfectly displayed...
The
ejabberdctl
command-line script already allowed to consult the commands documentation, consulting in real-time your ejabberd server to show you exactly the commands that are available. But it lacked some details about the commands. That has been improved, and nowejabberdctl
shows all the information, including arguments description, examples and version notes.For example, the
connected_users_vhost
command documentation as seen in the ejabberd Docs site is equivalently visible usingejabberdctl
:Experimental support for Erlang/OTP 27
Erlang/OTP 27.0-rc1 was recently released, and ejabberd can be compiled with it. If you are developing or experimenting with ejabberd, it would be great if you can use Erlang/OTP 27 and report any problems you find. For production servers, it's recommended to stick with Erlang/OTP 26.2 or any previous version.
In this sense, the
rebar
andrebar3
binaries included with ejabberd are also updated: now they support from Erlang 24 to Erlang 27. If you want to use older Erlang versions from 20 to 23, there are compatible binaries available in git: rebar from ejabberd 21.12 and rebar3 from ejabberd 21.12.Of course, if you have
rebar
orrebar3
already installed in your system, it's preferable if you use those ones, because probably they will be perfectly compatible with whatever erlang version you have installed.Installers and
ejabberd
container imageThe binary installers now include the recent and stable Erlang/OTP 26.2.2 and Elixir 1.16.1. Many other dependencies were updated in the installers, the most notable is OpenSSL that has jumped to version 3.2.1.
The
ejabberd
container image has gotten all those version updates, and also Alpine is updated to 3.19.By the way, this container image already had support to run commands when the container starts... And now you can setup the commands to allow them fail, by prepending the character
!
.Summary of compilation methods
When compiling ejabberd from source code, you may have noticed there are a lot of possibilities. Let's take an overview before digging in the new improvements:
Tools to manage the dependencies and compilation:
Installation methods:
make install
: copies the files to the systemmake prod
: prepares a self-contained OTP production release in_build/prod/
, and generates atar.gz
file. This was previously namedmake rel
make dev
: prepares quickly an OTP development release in_build/dev/
make relive
: prepares the barely minimum in_build/relive/
to run ejabberd and starts itStart scripts and alternatives:
ejabberdctl
with erlang shell:start
/foreground
/live
ejabberdctl
with elixir shell:iexlive
ejabberd
console
/start
(this script is generated by rebar3 or mix, and does not support ejabberdctl configurable options)For example:
CI
dynamic tests userebar3
, andRuntime
tries to test all the possible combinationsmix + make prod
mix + make prod
too, and started withejabberdctl foreground
Several combinations didn't work correctly until now and have been fixed, for example:
mix + make relive
mix + make prod/dev + ejabberdctl iexlive
mix + make install + ejabberdctl start/foregorund/live
make uninstall
buggy has an experimental alternative:make uninstall-rel
rebar + make prod
with Erlang 26Use Mix or Rebar3 by default instead of Rebar to compile ejabberd
ejabberd uses Rebar to manage dependencies and compilation since ejabberd 13.10 4d8f770. However, that tool is obsolete and unmaintained since years ago, because there is a complete replacement:
Rebar3 is supported by ejabberd since 20.12 0fc1aea. Among other benefits, this allows to download dependencies from hex.pm and cache them in your system instead of downloading them from git every time, and allows to compile Elixir files and Elixir dependencies.
In fact, ejabberd can be compiled using
mix
(a tool included with the Elixir programming language) since ejabberd 15.04 ea8db99 (with improvements in ejabberd 21.07 4c5641a)For those reasons, the tool selection performed by
./configure
will now be:--with-rebar=rebar3
but Rebar3 not found installed in the system, use therebar3
binary included with ejabberd--with-rebar=/path/to/bin
mix
rebar3
rebar3
binary included with ejabberdRemoved Elixir support in Rebar
Support for Elixir 1.1 was added as a dependency in commit 01e1f67 to ejabberd 15.02. This allowed to compile Elixir files. But since Elixir 1.4.5 (released Jun 22, 2017) it isn't possible to get Elixir as a dependency... it's nowadays a standalone program. For that reason, support to download old Elixir 1.4.4 as a dependency has been removed.
When Elixir support is required, better simply install Elixir and use
mix
as build tool:Or install Elixir and use the experimental Rebar3 support to compile Elixir files and dependencies:
Added Elixir support in Rebar3
It is now possible to compile ejabberd using Rebar3 and support Elixir compilation. This compiles the Elixir files included in ejabberd's
lib/
path. There's also support to get dependencies written in Elixir, and it's possible to build OTP releases including Elixir support.It is necessary to have Elixir installed in the system, and configure the compilation using
--enable-elixir
. For example:apt-get install erlang erlang-dev elixir git clone https://github.com/processone/ejabberd.git ejabberd cd ejabberd ./autogen.sh ./configure --with-rebar=rebar3 --enable-elixir make make dev _build/dev/rel/ejabberd/bin/ejabberdctl iexlive
Elixir versions supported
Elixir 1.10.3 is the minimum supported, but:
make prod
ormake dev
make relive
Runtime
For all those reasons, if you want to use Elixir, it is highly recommended to use Elixir 1.13.4 or higher with Erlang/OTP 23.0 or higher.
make rel
is renamed tomake prod
When ejabberd started to use Rebar2 build tool, that tool could create an OTP release, and the target in
Makefile.in
was conveniently namedmake rel
.However, newer tools like Rebar3 and Elixir's Mix support creating different types of releases: production, development, ... In this sense, our
make rel
target is nowadays more properly namedmake prod
.For backwards compatibility,
make rel
redirects tomake prod
.New
make install-rel
andmake uninstall-rel
This is an alternative method to install ejabberd in the system, based in the OTP release process. It should produce exactly the same results than the existing
make install
.The benefits of
make install-rel
over the existing method:Makefile.in
make uninstall-rel
correctly deletes all the library filesThis is still experimental, and it would be great if you are able to test it and report any problem; eventually this method could replace the existing one.
Just for curiosity:
make uninstall
was addedmake uninstall
Acknowledgments
We would like to thank the contributions to the source code, documentation, and translation provided for this release by:
And also to all the people contributing in the ejabberd chatroom, issue tracker...
Improvements in ejabberd Business Edition
Customers of the ejabberd Business Edition, in addition to all those improvements and bugfixes, also get:
Push
x:oob
data as source for image delivered in pushesTooManyProviderTokenUpdated
errorget_push_logs
command generate better error ifmod_push_logger
not availableget_push_logs
that can be used to retrieve info about recent pushes and errors reported by push servicesMAM
mod_mam_http_access
API to also accept range of messagesMUC
mod_muc_state_query
to fixsubject_author
room state fieldxdata
inmod_muc_state_query
PubSub
ChangeLog
This is a more detailed list of changes in this ejabberd release:
Core
mod_matrix_gw
disable_sasl_scram_downgrade_protection
: New option to disable XEP-0474negotiation_timeout
: Increase default value from 30s to 2mOther
EJABBERD_OPTS
and logger options""
, and use previous flags as exampleeldap tls_verify=soft
andfalse
fail_if_no_peer_cert
for eldap ssl client connectionsmax_items
node options on readSQL
sha256_password
auth pluginsql_flags
: right now only useful to enablemysql_alternative_upsert
Installers and Container
CTL_ON_*
commandsCommands API
print_sql_schema
: New command available in ejabberdctl command-line scriptmuc_sub
tag to all the relevant commandsset_presence
: switch priority argument from string to integervX
Compilation with Rebar3/Elixir/Mix
--enable-group
option (#4135)--enable-tools
install-rel
anduninstall-rel
make rel
tomake prod
make edoc
to use ExDoc, requires mixescript
to run rebar|rebar3|mix--with-rebar=rebar3
but rebar3 not system-installed, use local one--enable-elixir
iex
dev
profile/environment, enable tools automaticallyFORMATTER ERROR: bad return value
(#4087)Elixir Hex API
vars.config
not foundvars_config_path
to set path tovars.config
(#4128)Full Changelog
processone/ejabberd@23.10...24.02
ejabberd 24.02 download & feedback
As usual, the release is tagged in the Git source code repository on GitHub.
The source package and installers are available in ejabberd Downloads page. To check the
*.asc
signature files, see How to verify ProcessOne downloads integrity.For convenience, there are alternative download locations like the ejabberd DEB/RPM Packages Repository and the GitHub Release / Tags.
The
ecs
container image is available in docker.io/ejabberd/ecs and ghcr.io/processone/ecs. The alternativeejabberd
container image is available in ghcr.io/processone/ejabberd.If you consider that you've found a bug, please search or fill a bug report on GitHub Issues.