Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Consul on macOS Sequoia is unable to connect to server #21765

Open
vsarunas opened this issue Sep 18, 2024 · 1 comment
Open

Consul on macOS Sequoia is unable to connect to server #21765

vsarunas opened this issue Sep 18, 2024 · 1 comment

Comments

@vsarunas
Copy link

Overview of the Issue

Experiencing that Consul on macOS Sequoia is actually not working completely since it is not able to establish a connection:

2024-09-17T09:04:48.507+0100 [WARN]  agent: (LAN) couldn't join: number_of_nodes=0
  error=
  | 1 error occurred:
  | \t* Failed to join 192.168.67.2:8301: dial tcp 192.168.67.2:8301: connect: no route to host

This only happens when the Consul is launched via launchctl; but does not occur when launched via Terminal.

The problem looks to be related to the way Go linker works and the fact macOS Local Network Privacy is doing some filtering; and previous with macOS Sonoma it allowed the connections but Sequoia does not. This is also been reported under golang/go#68678

The root cause is that Consul binary does not have the UUID set at link time, as there is for Nomad which causes the Local Network Privacy to drop the connection attempts:

$ dwarfdump --uuid /opt/homebrew/bin/consul
$ dwarfdump --uuid /opt/homebrew/bin/nomad 
UUID: 7A0A50B8-59DC-309C-A1BE-51B591F285AA (arm64) /opt/homebrew/bin/nomad

Are you able to adjust the linker settings in order to make Consul work on Sequoia?

Reproduction Steps

Try to join Consul server on the local network when using launchctl.

Minimal example for showing the Go linking problem is also provided under golang/go#68678

Consul info for both Client and Server

Consul v.1.19.2

Operating system and Environment details

macOS 15.0

@vsarunas
Copy link
Author

The difference between Nomad and Consul Makefile that cause the LC_UUID to be set is setting of CGO_ENABLED=1

CGO_ENABLED=1 go build -ldflags "-X github.com/hashicorp/consul/version.GitCommit=ac9e694b98+CHANGES -X github.com/hashicorp/consul/version.BuildDate=2024-09-18T19:36:27Z " -tags ""

dwarfdump --uuid consul
UUID: 03455CBE-9535-F7F5-C277-FFB6D21A71CE (arm64) consul

With the default:

CGO_ENABLED=0 go build -ldflags "-X github.com/hashicorp/consul/version.GitCommit=ac9e694b98+CHANGES -X github.com/hashicorp/consul/version.BuildDate=2024-09-18T19:36:27Z " -tags ""

dwarfdump --uuid consul
<empty>

Trying to build with external linker requires CGO to be enabled:

CGO_ENABLED=0 go build -ldflags "-linkmode=external -X github.com/hashicorp/consul/version.GitCommit=ac9e694b98+CHANGES -X github.com/hashicorp/consul/version.BuildDate=2024-09-18T19:36:27Z " -tags ""
-linkmode=external requires external (cgo) linking, but cgo is not enabled

Building with current go defaults results in a working binary:

go build -ldflags "-X github.com/hashicorp/consul/version.GitCommit=ac9e694b98+CHANGES -X github.com/hashicorp/consul/version.BuildDate=2024-09-18T19:36:27Z " -tags ""
dwarfdump --uuid consul                                                                                                                                                
UUID: 03455CBE-9535-F7F5-C277-FFB6D21A71CE (arm64) consul

In Nomad this was introduced initially in hashicorp/nomad#11329.

In Consul this first appears 8 years ago under 33829cd and survives the several iterations of build script updates and move to Makefiles.

The release build platforms also set this extensively propagates this flag - https://github.com/hashicorp/consul/blob/main/.github/workflows/build.yml#L135

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant