I'm trying to install emqttd on my Raspberry Pi3 but am faced with the following error.

When I do cd emqttd && make && make dist I get this error:

make[1]: Entering directory '/home/pi/emqttd/deps/gproc'
make[1]: *** No targets.  Stop.
make[1]: Leaving directory '/home/pi/emqttd/deps/gproc'
erlang.mk:310: recipe for target 'deps' failed
make: *** [deps] Error 2

I'm new to RPi and linux so please help me with a newbie instruction. Thanks.


I tried Shreyas Murali's answer but I get this error:

pi@raspberrypi:~ $ cd emqttd-relx && make
 DEP    emqttd
 DEP    emqttd_dashboard
 DEP    emqttd_recon
 DEP    emqttd_reloader
 DEP    emqttd_stomp
 DEP    emqttd_auth_ldap
 DEP    emqttd_auth_http
 DEP    emqttd_auth_mysql
 DEP    emqttd_auth_pgsql
 DEP    emqttd_auth_redis
 DEP    emqttd_auth_mongo
 DEP    emqttd_plugin_template
 DEP    emqttd_sn
 DEP    emqttd_coap
make[1]: Entering directory '/home/pi/emqttd-relx/deps/emqttd'
 DEP    gproc
make[2]: Entering directory '/home/pi/emqttd-relx/.erlang.mk/rebar'
./bootstrap
Recompile: src/rebar
Recompile: src/rebar_abnfc_compiler
Recompile: src/rebar_app_utils
Recompile: src/rebar_appups
Recompile: src/rebar_asn1_compiler
Recompile: src/rebar_base_compiler
Recompile: src/rebar_cleaner
Recompile: src/rebar_config
Recompile: src/rebar_core
Recompile: src/rebar_cover_utils
Recompile: src/rebar_ct
Recompile: src/rebar_deps
Recompile: src/rebar_dia_compiler
Recompile: src/rebar_edoc
Recompile: src/rebar_erlc_compiler
Recompile: src/rebar_erlydtl_compiler
Recompile: src/rebar_escripter
Recompile: src/rebar_eunit
Recompile: src/rebar_file_utils
Recompile: src/rebar_getopt
Recompile: src/rebar_lfe_compiler
Recompile: src/rebar_log
Recompile: src/rebar_metacmds
Recompile: src/rebar_mustache
Recompile: src/rebar_neotoma_compiler
Recompile: src/rebar_otp_app
Recompile: src/rebar_otp_appup
Recompile: src/rebar_port_compiler
Recompile: src/rebar_proto_compiler
Recompile: src/rebar_proto_gpb_compiler
Recompile: src/rebar_protobuffs_compiler
Recompile: src/rebar_qc
Recompile: src/rebar_rel_utils
Recompile: src/rebar_reltool
Recompile: src/rebar_require_vsn
Recompile: src/rebar_shell
Recompile: src/rebar_subdirs
Recompile: src/rebar_templater
Recompile: src/rebar_upgrade
Recompile: src/rebar_utils
Recompile: src/rebar_xref
==> rebar (compile)
==> rebar (escriptize)
Congratulations! You now have a self-contained script called "rebar" in
your current working directory. Place this script anywhere in your path
and you can use rebar to build OTP-compliant apps.
make[2]: Leaving directory '/home/pi/emqttd-relx/.erlang.mk/rebar'
/home/pi/emqttd-relx/deps/emqttd
 DEP    lager
 DEP    gen_logger
 DEP    gen_conf
 DEP    esockd
 DEP    mochiweb
make[2]: Entering directory '/home/pi/emqttd-relx/deps/gproc'
 DEPEND gproc.d
 ERLC   gproc.erl gproc_app.erl gproc_bcast.erl gproc_dist.erl gproc_info.erl gproc_init.erl gproc_lib.erl gproc_monitor.erl gproc_pool.erl gproc_ps.erl gproc_pt.erl gproc_sup.erl
src/gproc_dist.erl:23: Warning: behaviour gen_leader undefined
 APP    gproc.app.src
make[2]: Leaving directory '/home/pi/emqttd-relx/deps/gproc'
make[2]: Entering directory '/home/pi/emqttd-relx/deps/lager'
 DEP    goldrush
make[3]: Entering directory '/home/pi/emqttd-relx/deps/goldrush'
 DEPEND goldrush.d
 ERLC   glc.erl glc_code.erl glc_lib.erl glc_ops.erl glc_run.erl gr_app.erl gr_context.erl gr_counter.erl gr_counter_sup.erl gr_manager.erl gr_manager_sup.erl gr_param.erl gr_param_sup.erl gr_sup.erl gre.erl
 APP    goldrush.app.src
make[3]: Leaving directory '/home/pi/emqttd-relx/deps/goldrush'
 DEPEND lager.d
 ERLC   error_logger_lager_h.erl lager.erl lager_app.erl lager_backend_throttle.erl lager_common_test_backend.erl lager_config.erl lager_console_backend.erl lager_crash_log.erl lager_default_formatter.erl lager_file_backend.erl lager_format.erl lager_handler_watcher.erl lager_handler_watcher_sup.erl lager_manager_killer.erl lager_msg.erl lager_stdlib.erl lager_sup.erl lager_transform.erl lager_trunc_io.erl lager_util.erl
 APP    lager.app.src
make[2]: Leaving directory '/home/pi/emqttd-relx/deps/lager'
make[2]: Entering directory '/home/pi/emqttd-relx/deps/gen_logger'
 DEPEND gen_logger.d
 ERLC   console_logger.erl error_logger_logger.erl gen_logger.erl lager_logger.erl
 APP    gen_logger.app.src
make[2]: Leaving directory '/home/pi/emqttd-relx/deps/gen_logger'
make[2]: Entering directory '/home/pi/emqttd-relx/deps/gen_conf'
 DEPEND gen_conf.d
 ERLC   gen_conf.erl
 APP    gen_conf.app.src
make[2]: Leaving directory '/home/pi/emqttd-relx/deps/gen_conf'
make[2]: Entering directory '/home/pi/emqttd-relx/deps/esockd'
 DEPEND esockd.d
 ERLC   esockd.erl esockd_acceptor.erl esockd_acceptor_sup.erl esockd_access.erl esockd_app.erl esockd_cidr.erl esockd_connection.erl esockd_connection_sup.erl esockd_gen.erl esockd_keepalive.erl esockd_listener.erl esockd_listener_sup.erl esockd_net.erl esockd_ratelimit.erl esockd_server.erl esockd_sup.erl esockd_transport.erl esockd_udp.erl
 APP    esockd.app.src
 GEN    rebar.config
make[2]: Leaving directory '/home/pi/emqttd-relx/deps/esockd'
make[2]: Entering directory '/home/pi/emqttd-relx/deps/mochiweb'
 DEPEND mochiweb.d
 ERLC   mochifmt.erl mochifmt_records.erl mochifmt_std.erl mochiglobal.erl mochihex.erl mochijson.erl mochijson2.erl mochilists.erl mochilogfile2.erl mochinum.erl mochitemp.erl mochiutf8.erl mochiweb.erl mochiweb_base64url.erl mochiweb_charref.erl mochiweb_cookies.erl mochiweb_cover.erl mochiweb_headers.erl mochiweb_html.erl mochiweb_http.erl mochiweb_io.erl mochiweb_mime.erl mochiweb_multipart.erl mochiweb_request.erl mochiweb_response.erl mochiweb_session.erl mochiweb_util.erl mochiweb_websocket.erl
 APP    mochiweb.app.src
make[2]: Leaving directory '/home/pi/emqttd-relx/deps/mochiweb'
 DEPEND emqttd.d
 ERLC   emqttd.erl emqttd_access_control.erl emqttd_access_rule.erl emqttd_acl_anonymous.erl emqttd_acl_internal.erl emqttd_acl_mod.erl emqttd_alarm.erl emqttd_app.erl emqttd_auth_anonymous.erl emqttd_auth_clientid.erl emqttd_auth_mod.erl emqttd_auth_username.erl emqttd_base62.erl emqttd_boot.erl emqttd_bridge.erl emqttd_bridge_sup.erl emqttd_bridge_sup_sup.erl emqttd_broker.erl emqttd_cli.erl emqttd_client.erl emqttd_cluster.erl emqttd_cm.erl emqttd_cm_sup.erl emqttd_conf.erl emqttd_ctl.erl emqttd_gen_mod.erl emqttd_guid.erl emqttd_hook.erl emqttd_http.erl emqttd_keepalive.erl emqttd_message.erl emqttd_metrics.erl emqttd_mnesia.erl emqttd_mod_presence.erl emqttd_mod_retainer.erl emqttd_mod_rewrite.erl emqttd_mod_subscription.erl emqttd_mod_sup.erl emqttd_mqueue.erl emqttd_net.erl emqttd_node.erl emqttd_opts.erl emqttd_packet.erl emqttd_parser.erl emqttd_plugins.erl emqttd_pmon.erl emqttd_pool_sup.erl emqttd_pooler.erl emqttd_protocol.erl emqttd_pubsub.erl emqttd_pubsub_sup.erl emqttd_router.erl emqttd_serializer.erl emqttd_server.erl emqttd_session.erl emqttd_session_sup.erl emqttd_sm.erl emqttd_sm_helper.erl emqttd_sm_sup.erl emqttd_stats.erl emqttd_sup.erl emqttd_sysmon.erl emqttd_sysmon_sup.erl emqttd_time.erl emqttd_topic.erl emqttd_trace.erl emqttd_trace_sup.erl emqttd_trie.erl emqttd_vm.erl emqttd_ws.erl emqttd_ws_client.erl emqttd_ws_client_sup.erl gen_server2.erl lager_emqtt_backend.erl priority_queue.erl
src/emqttd_cli.erl:276: Warning: function if_valid_qos/2 is unused
 APP    emqttd.app.src
 GEN    rebar.config
make[1]: Leaving directory '/home/pi/emqttd-relx/deps/emqttd'
make[1]: Entering directory '/home/pi/emqttd-relx/deps/emqttd_dashboard'
 DEPEND emqttd_dashboard.d
 ERLC   emqttd_auth_dashboard.erl emqttd_dashboard.erl emqttd_dashboard_admin.erl emqttd_dashboard_alarm.erl emqttd_dashboard_app.erl emqttd_dashboard_cli.erl emqttd_dashboard_client.erl emqttd_dashboard_metric.erl emqttd_dashboard_overview.erl emqttd_dashboard_route.erl emqttd_dashboard_session.erl emqttd_dashboard_subscription.erl emqttd_dashboard_sup.erl emqttd_dashboard_topic.erl emqttd_dashboard_user.erl emqttd_meter_access.erl emqttd_meter_define.erl
 APP    emqttd_dashboard.app.src
 GEN    rebar.config
make[1]: Leaving directory '/home/pi/emqttd-relx/deps/emqttd_dashboard'
make[1]: Entering directory '/home/pi/emqttd-relx/deps/emqttd_recon'
 DEP    recon
make[2]: Entering directory '/home/pi/emqttd-relx/deps/recon'
 DEPEND recon.d
 ERLC   recon.erl recon_alloc.erl recon_lib.erl recon_trace.erl
 APP    recon.app.src
make[2]: Leaving directory '/home/pi/emqttd-relx/deps/recon'
 DEPEND emqttd_recon.d
 ERLC   emqttd_recon_app.erl emqttd_recon_cli.erl emqttd_recon_gc.erl emqttd_recon_sup.erl
 APP    emqttd_recon.app.src
 GEN    rebar.config
make[1]: Leaving directory '/home/pi/emqttd-relx/deps/emqttd_recon'
make[1]: Entering directory '/home/pi/emqttd-relx/deps/emqttd_reloader'
 DEPEND emqttd_reloader.d
 ERLC   emqttd_reloader.erl emqttd_reloader_app.erl emqttd_reloader_cli.erl emqttd_reloader_sup.erl
 APP    emqttd_reloader.app.src
 GEN    rebar.config
make[1]: Leaving directory '/home/pi/emqttd-relx/deps/emqttd_reloader'
make[1]: Entering directory '/home/pi/emqttd-relx/deps/emqttd_stomp'
 DEPEND emqttd_stomp.d
 ERLC   emqttd_stomp.erl emqttd_stomp_app.erl emqttd_stomp_client.erl emqttd_stomp_frame.erl emqttd_stomp_heartbeat.erl emqttd_stomp_proto.erl emqttd_stomp_sup.erl emqttd_stomp_transaction.erl
src/emqttd_stomp_proto.erl:253: Warning: variable 'Id' is unused
src/emqttd_stomp_proto.erl:255: Warning: variable 'Id' is unused
 APP    emqttd_stomp.app.src
 GEN    rebar.config
make[1]: Leaving directory '/home/pi/emqttd-relx/deps/emqttd_stomp'
make[1]: Entering directory '/home/pi/emqttd-relx/deps/emqttd_auth_ldap'
 DEPEND emqttd_auth_ldap.d
 ERLC   emqttd_auth_ldap.erl emqttd_auth_ldap_app.erl
 APP    emqttd_auth_ldap
 GEN    rebar.config
make[1]: Leaving directory '/home/pi/emqttd-relx/deps/emqttd_auth_ldap'
make[1]: Entering directory '/home/pi/emqttd-relx/deps/emqttd_auth_http'
 DEPEND emqttd_auth_http.d
 ERLC   emqttd_acl_http.erl emqttd_auth_http.erl emqttd_auth_http_app.erl
 APP    emqttd_auth_http.app.src
 GEN    rebar.config
make[1]: Leaving directory '/home/pi/emqttd-relx/deps/emqttd_auth_http'
make[1]: Entering directory '/home/pi/emqttd-relx/deps/emqttd_auth_mysql'
 DEP    mysql
 DEP    ecpool
make[2]: Entering directory '/home/pi/emqttd-relx/deps/mysql'
 DEPEND mysql.d
 ERLC   mysql.erl mysql_cache.erl mysql_encode.erl mysql_protocol.erl
 APP    mysql.app.src
make[2]: Leaving directory '/home/pi/emqttd-relx/deps/mysql'
make[2]: Entering directory '/home/pi/emqttd-relx/deps/ecpool'
 DEPEND ecpool.d
 ERLC   ecpool.erl ecpool_app.erl ecpool_pool.erl ecpool_pool_sup.erl ecpool_sup.erl ecpool_worker.erl ecpool_worker_sup.erl
 APP    ecpool.app.src
make[2]: Leaving directory '/home/pi/emqttd-relx/deps/ecpool'
 DEPEND emqttd_auth_mysql.d
 ERLC   emqttd_acl_mysql.erl emqttd_auth_mysql.erl emqttd_auth_mysql_app.erl emqttd_auth_mysql_client.erl emqttd_auth_mysql_sup.erl
 APP    emqttd_auth_mysql.app.src
 GEN    rebar.config
make[1]: Leaving directory '/home/pi/emqttd-relx/deps/emqttd_auth_mysql'
make[1]: Entering directory '/home/pi/emqttd-relx/deps/emqttd_auth_pgsql'
 DEP    epgsql
make[2]: Entering directory '/home/pi/emqttd-relx/deps/epgsql'
 DEPEND epgsql.d
 ERLC   epgsql.erl epgsql_binary.erl epgsql_errcodes.erl epgsql_fdatetime.erl epgsql_idatetime.erl epgsql_sock.erl epgsql_types.erl epgsql_wire.erl epgsqla.erl epgsqli.erl ewkb.erl
 APP    epgsql.app.src
make[2]: Leaving directory '/home/pi/emqttd-relx/deps/epgsql'
 DEPEND emqttd_auth_pgsql.d
 ERLC   emqttd_acl_pgsql.erl emqttd_auth_pgsql.erl emqttd_auth_pgsql_app.erl emqttd_auth_pgsql_sup.erl
 APP    emqttd_auth_pgsql.app.src
 GEN    rebar.config
make[1]: Leaving directory '/home/pi/emqttd-relx/deps/emqttd_auth_pgsql'
make[1]: Entering directory '/home/pi/emqttd-relx/deps/emqttd_auth_redis'
 DEP    eredis
make[2]: Entering directory '/home/pi/emqttd-relx/deps/eredis'
mkdir -p ebin
cp -f -- src/eredis.app.src ebin/eredis.app
sed "s/{{EXTRA_OPTS}}/ {d,namespaced_types},/" Emakefile.src > Emakefile
erl -noinput -eval 'up_to_date = make:all()' -s erlang halt
Recompile: src/eredis_sub_client
Recompile: src/eredis_sub
Recompile: src/eredis_parser
src/eredis_parser.erl:26: can't find include lib "eunit/include/eunit.hrl"
{"init terminating in do_boot",{{badmatch,error},[{erl_eval,expr,3,[]}]}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
Makefile:10: recipe for target 'compile' failed
make[2]: *** [compile] Error 1
make[2]: Leaving directory '/home/pi/emqttd-relx/deps/eredis'
../../erlang.mk:312: recipe for target 'deps' failed
make[1]: *** [deps] Error 2
make[1]: Leaving directory '/home/pi/emqttd-relx/deps/emqttd_auth_redis'
erlang.mk:310: recipe for target 'deps' failed
make: *** [deps] Error 2
pi@raspberrypi:~/emqttd-relx $

I have installed erlang and all of it's packages with the followind commands but unfortunately the problem in not solved:

sudo apt-get install erlang
sudo apt-get install erlang-dev erlang-edoc erlang-eunit erlang-reltool erlang-crypto erlang-eldap erlang-public-key erlang-runtime-tools erlang-ssl 

Please help.

  • see this. Looks like you are missing the erlang-eunit package.try installing apt-get install erlang-dev erlang-edoc erlang-eunit – Shreyas Murali Oct 2 '16 at 19:17

I just cloned the repository over here and found the deps folder was actually empty. this is why make was unable to find the any targets to build.

Looking a bit further down under "Quick Start" markdown there a section that shows how to build from source like so

Installing from source:

git clone https://github.com/emqtt/emqttd-relx.git

cd emqttd-relx && make

cd _rel/emqttd && ./bin/emqttd console

I tried the steps and was able to get the build going.

BTW this question (and answer) has very little to do with raspberry pi hardware or Pi specific software and should probably be migrated to the right site

... and btw Welcome :)

sudo apt-get update
sudo apt-get install wget
sudo apt-get install libssl-dev
sudo apt-get install ncurses-dev
wget http://www.erlang.org/download/otp_src_19.2.tar.gz
tar -xzvf otp_src_19.2.tar.gz
cd otp_src_19.2/
./configure
make
sudo make install
cd ..
rm otp_src_19.2.tar.gz
sudo rm -R otp_src_19.2/

git clone https://github.com/emqtt/emq-relx.git
cd emq-relx && make
cd _rel/emqttd && ./bin/emqttd console
  • You have added all the steps but no explanation of how or why this works - a good answer requires both. – Steve Robillard Jan 1 '17 at 13:01

Your Answer

 
discard

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.