Ejabberd启用mod_ecaptcha模块后崩溃问题求助
我尝试在ejabberd-contrib里安装新的mod_ecaptcha模块,但启用后ejabberd直接崩溃了,想请大家帮忙排查下原因。
我的环境信息
- ejabberd版本:23.01
- Erlang版本:25.2.3
已执行的操作步骤
- 先通过
ejabberdctl modules_update_specs启用ejabberd-contrib - 安装并重新编译mod_ecaptcha:
- 执行
ejabberdctl module_install mod_ecaptcha - 手动编译依赖的NIF部分:
make -C .ejabberd-modules/sources/ejabberd-contrib/mod_ecaptcha/deps/ecaptcha/c_src - 执行
ejabberdctl module_upgrade mod_ecaptcha - 编译过程没有报错,不过一开始因为缺少依赖,我额外安装了
erlang-dev(命令:apt install erlang-dev)
- 执行
- 配置文件的相关设置:
captcha_cmd: mod_ecaptcha captcha_url: http://myjabber:5280/captcha listen: - port: 5280 module: ejabberd_http request_handlers: /captcha: ejabberd_captcha modules: mod_ecaptcha: {}
出现的错误情况
启动ejabberd后服务直接崩溃,error.log里的关键错误如下:
2023-06-19 19:59:11.892726+03:00 [error]
<0.757.0>@proc_lib:crash_report/4:539 CRASH REPORT: crasher:
initial call: ejabberd_captcha:init/1
pid: <0.757.0>
registered_name: []
exception error: undefined function ecaptcha_nif:rand_size/0
in function ecaptcha:pixels/2 (/var/lib/ejabberd/.ejabberd-modules/sources/ejabberd-contrib/mod_ecaptcha/deps/ecaptcha/src/ecaptcha.erl,
line 63)
in call from ecaptcha:img/3 (/var/lib/ejabberd/.ejabberd-modules/sources/ejabberd-contrib/mod_ecaptcha/deps/ecaptcha/src/ecaptcha.erl,
line 107)
in call from mod_ecaptcha:create_image/1 (/var/lib/ejabberd/.ejabberd-modules/sources/ejabberd-contrib/mod_ecaptcha/src/mod_ecaptcha.erl,
line 78)
in call from ejabberd_captcha:check_captcha_setup/0 (ejabberd_captcha.erl, line 573)
in call from ejabberd_captcha:init/1 (ejabberd_captcha.erl, line 294)
in call from gen_server:init_it/2 (gen_server.erl, line 851)
in call from gen_server:init_it/6 (gen_server.erl, line 814)
还有启动失败的critical日志:
2023-06-19 19:59:11.925067+03:00 [critical] <0.123.0>@ejabberd_app:start/2:68 Failed to start ejabberd
application: {error,
{shutdown,
{failed_to_start_child,
ejabberd_captcha,
{undef,
[{ecaptcha_nif,rand_size,[],[]},
{ecaptcha,pixels,2,
[{file,
"/var/lib/ejabberd/.ejabberd-modules/sources/ejabberd-contrib/mod_ecaptcha/deps/ecaptcha/src/ecaptcha.erl"},
{line,63}]},
{ecaptcha,img,3,
[{file,
"/var/lib/ejabberd/.ejabberd-modules/sources/ejabberd-contrib/mod_ecaptcha/deps/ecaptcha/src/ecaptcha.erl"},
{line,107}]},
{mod_ecaptcha,create_image,1,
[{file,
"/var/lib/ejabberd/.ejabberd-modules/sources/ejabberd-contrib/mod_ecaptcha/src/mod_ecaptcha.erl"},
{line,78}]},
{ejabberd_captcha,
check_captcha_setup,0,
[{file,"ejabberd_captcha.erl"},
{line,573}]},
{ejabberd_captcha,init,1,
[{file,"ejabberd_captcha.erl"},
{line,294}]},
{gen_server,init_it,2,
[{file,"gen_server.erl"},
{line,851}]},
{gen_server,init_it,6,
[{file,"gen_server.erl"},
{line,814}]}]}}}}
麻烦各位帮忙看看这个问题该怎么解决?
备注:内容来源于stack exchange,提问作者saxad

