Ejabberd MQTT на AWS не запускается: неопределенный выход по причине {'EXIT', {undef, [{mod_mqtt, socket_type, [], []} - PullRequest
0 голосов
/ 30 марта 2020

Я следую инструкциям https://docs.ejabberd.im/admin/guide/mqtt/#enabling -mqtt-service-in-ejabberd .

Вот мой конфиг, такой же, как учебник. И я также открываю порт 1883, 8883 в группе безопасности AWS.

hosts:
  - "localhost"

listen:
  -
    port: 1883
    module: mod_mqtt
    backlog: 1000      
  -
    port: 5280
    module: ejabberd_http
    request_handlers:
       ...
       "/mqtt": mod_mqtt
  -
    port: 8883
    module: mod_mqtt
    backlog: 1000
    tls: true

# adapt the path to your own certfile    
certfiles:
  - "/var/snap/ejabberd/tls/mqtt.pem"

modules:
...
  mod_mqtt: {}

Однако ejabberd не запускается, выдавая следующие ошибки:

2020-03-29 21:30:59.416 [error] <0.299.0> Supervisor ejabberd_listener had child 
{1883,{0,0,0,0},tcp} started with ejabberd_listener:start({1883,{0,0,0,0},tcp}, 
mod_mqtt, [{backlog,1000}]) at undefined exit with reason {'EXIT',{undef,
[{mod_mqtt,socket_type,[],[]},{ejabberd_listener,start,3,[{file,
"src/ejabberd_listener.erl"},{line,86}]},{supervisor,do_start_child,2,[{file,
"supervisor.erl"},{line,358}]},{supervisor,start_children,3,[{file,
"supervisor.erl"},{line,341}]},{supervisor,init_children,2,[{file,
"supervisor.erl"},{line,307}]},{gen_server,init_it,6,[{file,"gen_server.erl"},
{line,328}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,240}]}]}} 
in context start_error

и

2020-03-29 21:29:31.371 [error] <0.38.0>@ejabberd_config:validate_opts:1022 
unknown option 'certfiles' will be likely ignored

1 Ответ

1 голос
/ 31 марта 2020

{undef, [{mod_mqtt, socket_type, [], []},

Это означает, что erlang не смог найти файл mod_mqtt.beam ... или, возможно, файл был найден, но он не включал определение функции socket_type / 0. Этот модуль с этой функцией был добавлен в ejabberd 19.02: https://github.com/processone/ejabberd/commit/a3df791373c30ccc79a6082f4c910a378d726cdc

Итак, возможно, вы установили более старую версию, или она установлена ​​неправильно, и в ней отсутствует этот модуль.

неизвестный параметр 'certfiles', скорее всего, будет игнорироваться

Параметр certfiles был добавлен в ejabberd 17.11, поэтому я не понимаю, как недавний ejabberd может жаловаться, что он неизвестен:

https://github.com/processone/ejabberd/commit/35b7203e01aefbdfe4ea7804ebe20a8667466628

...