diff --git a/lib/livebook/application.ex b/lib/livebook/application.ex index e9e0d6d2b..2f1e3d4a3 100644 --- a/lib/livebook/application.ex +++ b/lib/livebook/application.ex @@ -88,9 +88,7 @@ defmodule Livebook.Application do invalid_hostname!("your hostname \"#{hostname}\" does not resolve to an IP address") {:ok, hostent(h_addrtype: :inet, h_addr_list: addresses)} -> - any_loopback? = Enum.any?(addresses, &match?({127, _, _, _}, &1)) - - unless any_loopback? do + unless any_loopback?(addresses) or any_if?(addresses) do invalid_hostname!( "your hostname \"#{hostname}\" does not resolve to a loopback address (127.0.0.0/8)" ) @@ -102,6 +100,22 @@ defmodule Livebook.Application do end end + defp any_loopback?(addresses) do + Enum.any?(addresses, &match?({127, _, _, _}, &1)) + end + + defp any_if?(addresses) do + case :inet.getifaddrs() do + {:ok, addrs} -> + Enum.any?(addrs, fn {_name, flags} -> + Enum.any?(flags, fn {key, value} -> key == :addr and value in addresses end) + end) + + _ -> + false + end + end + defp invalid_hostname!(prelude) do Livebook.Config.abort!(""" #{prelude}, which indicates something wrong in your OS configuration.