Kit Ho
Kit Ho

Reputation: 26988

Erl cannot connect to local EPMD. Why?

Erlang R14B04 (erts-5.8.5) [source] [64-bit] [rq:1] [async-threads:0 [kernel-poll:false]

Eshell V5.8.5  (abort with ^G)

[root@ip-10-101-61-85 ec2-user]# erl -sname foo
{error_logger,{{2012,12,7},{3,17,8}},"Protocol: ~p: register error: ~p~n",["inet_tcp",{{badmatch,{error,epmd_close}},[{inet_tcp_dist,listen,1},{net_kernel,start_protos,4},{net_kernel,start_protos,3},{net_kernel,init_node,2},{net_kernel,init,1},{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}]}
{error_logger,{{2012,12,7},{3,17,8}},crash_report,[[{initial_call,{net_kernel,init,['Argument__1']}},{pid,<0.20.0>},{registered_name,[]},{error_info,{exit,{error,badarg},[{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}},{ancestors,[net_sup,kernel_sup,<0.9.0>]},{messages,[]},{links,[#Port<0.55>,<0.17.0>]},{dictionary,[{longnames,false}]},{trap_exit,true},{status,running},{heap_size,377},{stack_size,24},{reductions,453}],[]]}
{error_logger,{{2012,12,7},{3,17,8}},supervisor_report,[{supervisor,{local,net_sup}},{errorContext,start_error},{reason,{'EXIT',nodistribution}},{offender,[{pid,undefined},{name,net_kernel},{mfargs,{net_kernel,start_link,[[foo,shortnames]]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]}
{error_logger,{{2012,12,7},{3,17,8}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,shutdown},{offender,[{pid,undefined},{name,net_sup},{mfargs,{erl_distribution,start_link,[]}},{restart_type,permanent},{shutdown,infinity},{child_type,supervisor}]}]}
{error_logger,{{2012,12,7},{3,17,8}},std_info,[{application,kernel},{exited,{shutdown,{kernel,start,[normal,[]]}}},{type,permanent}]}
{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}}"}

Crash dump was written to: erl_crash.dump
Kernel pid terminated (application_controller) ({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}})

I am working fine on my local machine but not on Amazon EC2, I wonder if it is some network related problem.

How can I check it? The EPMD log keep say my connection is from non-local address and block.

This would affect my RabbitMQ start.

Upvotes: 3

Views: 4275

Answers (3)

matthias krull
matthias krull

Reputation: 4429

This is not a bug. Newer erlang versions restrict connections to epmd to local addresses by default. Most likely you have had routing issues or the reason is to masquerade all outgoing traffic with iptables without checking if the destination is 127.0.0.0/8.

Adjust your MASQUERADE rule:

iptables -t nat -A POSTROUTING ! -d 127.0.0.0/8 -j MASQUERADE

And/Or check your routing table.

Upvotes: 8

Kit Ho
Kit Ho

Reputation: 26988

It seems that it is a bug for erlang R14 or above on CentOS Ec2, i am working fine on erlang R13 now

Upvotes: 0

Chen Yu
Chen Yu

Reputation: 4077

I think it is related to your hostname setting.

[root@ip-10-101-61-85 ec2-user]# erl -sname foo

According to your above shell information, the current host name is "ip-10-101-61-85 ec2-user", it may be allocated by the OS installation program. Try to reset your hostname, and not use whitespace in the host name and try again.

Upvotes: 0

Related Questions