En mettant à jour de Wheezy à Jessie, quelques problèmes sont apparus avec ejabberd :
* Le serveur refusait d'être lancé avec un joli message dans les logs :
« <0.38.0>@gen_mod:start_module:90 Problem starting the module mod_admin_extra for host <<"guigui.example">>
options: []
error: undef
[{mod_admin_extra,start,[<<"guigui.exemple">>,[]],[]},
{gen_mod,start_module,3,[{file,"src/gen_mod.erl"},{line,82}]},
{lists,foreach,2,[{file,"lists.erl"},{line,1336}]},
{ejabberd_app,start,2,[{file,"src/ejabberd_app.erl"},{line,67}]},
{application_master,start_it_old,4,
[{file,"application_master.erl"},{line,272}]}]
2016-01-03 16:10:49.411 [critical] <0.38.0>@gen_mod:start_module:95 ejabberd initialization was aborted because a module start failed.
Cela vient du fait que j'ai conservé mon ancienne configuration, qui charge le module « mod_admin_extra » qui a été déplacé dans ejabberd-contrib (
https://github.com/processone/ejabberd-contrib), voir
https://www.ejabberd.im/node/24787 . Il faut donc installer le package ejabberd-contrib ou virer mod_admin_extra de la configuration ejabberd. Il n'est pas présent dans le fichier de conf' par défaut de Jessie donc on peut vivre sans. :D
* Par défaut, ejabberd utilise désormais une syntaxe yaml pour son fichier de configuration. C'est toujours mieux que le format erlang. \o/ On peut convertir son ancien fichier de conf' à la nouvelle syntaxe avec « ejabberctl convert_to_yaml /etc/ejabberd/ejabberd.cfg /etc/ejabberd/ejabberd-converted.yml ». J'ai rencontré deux problèmes :
* « Error: eacces ». Cela signifie que l'utilisateur ejabberd n'a pas le droit d'écrire dans le dossier de destination. Une impossibilité de lire le fichier source se manifeste par « Problem 'exit "Problem loading ejabberd config file /tmp/ejabberd.cfg : permission denied"' occurred executing the command. »
* « Problem 'error function_clause' occurred executing the command.
Stacktrace: [{p1_yaml,encode_pair,
[inet6,4],
[{file,"src/p1_yaml.erl"},{line,117}]},
{p1_yaml,'-encode/2-lc$^0/1-1-',2,
[{file,"src/p1_yaml.erl"},{line,98}]},
{p1_yaml,'-encode/2-lc$^0/1-1-',2,
[{file,"src/p1_yaml.erl"},{line,98}]},
{p1_yaml,'-encode/2-lc$^1/1-0-',2,
[{file,"src/p1_yaml.erl"},{line,100}]},
{p1_yaml,encode_pair,2,[{file,"src/p1_yaml.erl"},{line,118}]},
{p1_yaml,'-encode/2-lc$^0/1-1-',2,
[{file,"src/p1_yaml.erl"},{line,98}]},
{p1_yaml,'-encode/2-lc$^0/1-1-',2,
[{file,"src/p1_yaml.erl"},{line,98}]},
{p1_yaml,encode,1,[{file,"src/p1_yaml.erl"},{line,90}]}] »
Le parser ne gère pas le mot-clé « inet6 » que l'on utilise dans le fichier de configuration pour faire écouter ejabberd en IPv6 (et aussi en IPv4 en fonction de bindv6only ;) ). C'est un bug connu et corrigé (voir
https://github.com/processone/ejabberd/issues/803 ) mais ce n'est pas dans Jessie ni encore dans les backports. IPv6 c'est pour demain qu'ils disent... Deux méthodes :
* Si votre fichier de configuration n'est pas trop spécifique / poilu, je vous recommande de prendre le modèle yml fourni par défaut et de le re-remplir à votre convenance (genre domain, certificat x509,...). Pas seulement pour éviter ce bug de parse ou le déplacement de mod_admin_extra mais aussi pour conserver les commentaires explicatifs de ce que fait chaque directive de config' et, enfin, pour éviter d'autres galères...
* Mettre les « inet6 » en commentaire dans les blocs listen de votre ejabberd.cfg puis convertir le fichier puis corriger le fichier généré en ajoutant « ip: "::" » à chaque listener car sinon ejabberd écoute uniquement en IPv4...