[erlang-questions] epmd regression bug in erlang-solutions.com esl-erlang 18.3?
Khitai Pang
khitai.pang@REDACTED
Sun Mar 20 19:23:05 CET 2016
On 2016/3/20 6:53, Michael Santos wrote:
> On Sat, Mar 19, 2016 at 11:47:49PM +0800, Khitai Pang wrote:
>> On 2016/3/19 19:45, Michael Santos wrote:
>>> On Mar 18, 2016 10:46 PM, "Khitai Pang" <khitai.pang@REDACTED
>>> <mailto:khitai.pang@REDACTED>> wrote:
>>>> Hi,
>>>>
>>>> I have been using the esl-erlang pacakge from
>>> https://packages.erlang-solutions.com/erlang/ Ubuntu PPA for
>>> Trusty.
>>>> I have these in my bashrc:
>>>>
>>>> export ERL_EPMD_ADDRESS="XXX.XXX.XXX.XXX" (LAN IP of my VM in
>>> the cloud)
>>>> export ERL_EPMD_PORT="5678"
>>> Just tested and it worked for me.
>>>
>>> Does the IP address in ERL_EPMD_ADDRESS exist in the VM?
>>>
>> Yes it does, it's the IP of the LAN in the clound, and it all works
>> fine with 18.2.
>>
>> I believe it's possible that the issue is caused by the
>> configuration in the operating system (Ubuntu 14.04.4 x86_64) but
>> currently I have no idea how to further debug this issue.
>>
>> With esl-erlang 18.2 and the following configs in bashrc:
>>
>> export ERL_EPMD_ADDRESS="XXX.XXX.XXX.XXX"
>> export ERL_EPMD_PORT="5678"
>>
>> epmd works fine:
>>
>> tcp 0 0 127.0.0.1:5678 0.0.0.0:* LISTEN 6754/epmd
>> tcp 0 0 10.131.70.80:5678 0.0.0.0:* LISTEN 6754/epmd
>>
>>
>> Thanks
>> Khitai
>>
>>>> Everything worked fine with the 18.2 package. After upgrading
>>> to esl-erlang 18.3, epmd stopped to work:
>>>>> epmd -debug
>>>> epmd: Sat Mar 19 16:16:51 2016: epmd running - daemon = 0
>>>> epmd: Sat Mar 19 16:16:51 2016: failed to bind socket: Cannot
>>> assign requested address
>>>> There is a workaround: if I remove the ERL_EPMD_ADDRESS
>>> environment variable, epms works:
>>>> tcp 0 0 0.0.0.0:5678 <http://0.0.0.0:5678> 0.0.0.0:*
>>> LISTEN 3328/epmd
>>>> tcp6 0 0 :::5678 :::* LISTEN 3328/epmd
>>>>
>>>> After downgrading esl-erlang from 18.3 to 18.2, the issue is gone.
> Have you disabled IPv6?
>
> # disable IPv6 support on the loopback device
> $ sudo sysctl net.ipv6.conf.lo.disable_ipv6=1
>
> $ ERL_EPMD_ADDRESS="127.0.0.1" ERL_EPMD_PORT=5678 epmd
> epmd: Sat Mar 19 22:40:09 2016: failed to bind socket: Cannot assign requested address
>
> # enable IPv6 support on the loopback device
> $ sudo sysctl net.ipv6.conf.lo.disable_ipv6=0
>
> $ ERL_EPMD_ADDRESS="127.0.0.1" ERL_EPMD_PORT=5678 epmd
> <works>
>
> If we look at what is happening:
>
> $ ERL_EPMD_ADDRESS="127.0.0.1" ERL_EPMD_PORT=5678 strace epmd
> ...
> bind(4, {sa_family=AF_INET6, sin6_port=htons(5678), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 EADDRNOTAVAIL (Cannot assign requested address)
> ...
>
> When you specify a specific address to bind, epmd will also bind to the
> IPv4 and IPv6 loopbacks. In this case, your OS supports IPv6 but has
> disabled it on the loopback device so the bind fails:
>
> $ ifconfig lo
> lo Link encap:Local Loopback
> inet addr:127.0.0.1 Mask:255.0.0.0
> UP LOOPBACK RUNNING MTU:65536 Metric:1
> RX packets:0 errors:0 dropped:0 overruns:0 frame:0
> TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
> collisions:0 txqueuelen:0
> RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
>
> So either enable IPv6 for the loopback or disable IPv6 completely by
> passing "ipv6.disable=1" at boot.
Michael,
Thanks for the workaround. 2 questions:
1) I have these in my sysctl:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
net.ipv6.conf.eth1.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Aren't these enough to tell epmd that ipv6 is not available on loopback?
2) Why does 18.2 work in the same environment?
Thanks
Khitai
More information about the erlang-questions
mailing list