From a753ca64e23d3e9c7a19f0c60c5f3c8163dc8f1d Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 24 May 2023 08:51:05 -0600 Subject: [PATCH] hack/make/.binary: don't use "netgo" when building Windows binaries Starting with go1.19, the Go runtime on Windows now supports the `netgo` build- flag to use a native Go DNS resolver. Prior to that version, the build-flag only had an effect on non-Windows platforms. When using the `netgo` build-flag, the Windows's host resolver is not used, and as a result, custom entries in `etc/hosts` are ignored, which is a change in behavior from binaries compiled with older versions of the Go runtime. From the go1.19 release notes: https://go.dev/doc/go1.19#net > Resolver.PreferGo is now implemented on Windows and Plan 9. It previously > only worked on Unix platforms. Combined with Dialer.Resolver and Resolver.Dial, > it's now possible to write portable programs and be in control of all DNS name > lookups when dialing. > > The net package now has initial support for the netgo build tag on Windows. > When used, the package uses the Go DNS client (as used by Resolver.PreferGo) > instead of asking Windows for DNS results. The upstream DNS server it discovers > from Windows may not yet be correct with complex system network configurations, > however. Our Windows binaries are compiled with the "static" (`make/binary-daemon`) script, which has the `netgo` option set by default. This patch unsets the `netgo` option when cross-compiling for Windows. Co-authored-by: Bjorn Neergaard Signed-off-by: Bjorn Neergaard (cherry picked from commit 53d1b12bc014b4243e9439fc2610eb4ef863659f) Signed-off-by: Bjorn Neergaard --- hack/make/.binary | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/hack/make/.binary b/hack/make/.binary index 39c00cd50c..3812468209 100644 --- a/hack/make/.binary +++ b/hack/make/.binary @@ -51,6 +51,18 @@ source "${MAKEDIR}/.go-autogen" fi fi + # XXX: Disable netgo on Windows and use Window's system resolver instead. + # + # go1.19 and newer added support for netgo on Windows (https://go.dev/doc/go1.19#net), + # which won't ask Windows for DNS results, and hence may be ignoring + # custom "C:\Windows\System32\drivers\etc\hosts". + # See https://github.com/moby/moby/issues/45251#issuecomment-1561001817 + # https://github.com/moby/moby/issues/45251, and + # https://go-review.googlesource.com/c/go/+/467335 + if [ "$(go env GOOS)" = "windows" ]; then + BUILDFLAGS=("${BUILDFLAGS[@]/netgo/}") + fi + # only necessary for non-sandboxed invocation where TARGETPLATFORM is empty PLATFORM_NAME=$TARGETPLATFORM if [ -z "$PLATFORM_NAME" ]; then