[go-nuts] Re: Cross-compile macOS binary with cgo DNS resolver enabled
I reported this issue as a potential go1.10 regression in https://github.com/golang/go/issues/27506. On Thursday, August 30, 2018 at 10:54:08 PM UTC-7, Julien Gricourt wrote: > > I'm trying to cross-compile a macOS binary in Docker with the cgo DNS > resolver enabled. My understanding is that this is doable without setting > up a full macOS SDK toolchain, and by using the package from the macOS > distribution. However, I'm unable to make it work. Somehow the compiler > always rebuilds the net package from sources and the netgo DNS resolver > becomes the de facto. > > Very short implementation I'm using for testing: > > package main > > import "net" > > func main() { >net.LookupIP("google.com") > } > > The build output shows that net.a is built from sources instead of picking > up /usr/local/go/pkg/darwin_amd64/net.a: > > $ ls -la /usr/local/go/pkg/darwin_amd64/net.a > -rw-r--r-- 1 root root 1241304 Jun 6 23:51 > /usr/local/go/pkg/darwin_amd64/net.a > > $ go clean -cache > > $ go build -x -o dns-test ./dns > WORK=/tmp/go-build098597944 > mkdir -p $WORK/b002/ > cat >$WORK/b002/importcfg << 'EOF' # internal > # import config > importmap golang_org/x/net/route=vendor/golang_org/x/net/route > packagefile context=/usr/local/go/pkg/darwin_amd64/context.a > packagefile errors=/usr/local/go/pkg/darwin_amd64/errors.a > packagefile > vendor/golang_org/x/net/route=/usr/local/go/pkg/darwin_amd64/vendor/golang_org/x/net/route.a > packagefile > internal/nettrace=/usr/local/go/pkg/darwin_amd64/internal/nettrace.a > packagefile internal/poll=/usr/local/go/pkg/darwin_amd64/internal/poll.a > packagefile > internal/singleflight=/usr/local/go/pkg/darwin_amd64/internal/singleflight.a > packagefile io=/usr/local/go/pkg/darwin_amd64/io.a > packagefile math/rand=/usr/local/go/pkg/darwin_amd64/math/rand.a > packagefile os=/usr/local/go/pkg/darwin_amd64/os.a > packagefile runtime=/usr/local/go/pkg/darwin_amd64/runtime.a > packagefile sort=/usr/local/go/pkg/darwin_amd64/sort.a > packagefile sync=/usr/local/go/pkg/darwin_amd64/sync.a > packagefile sync/atomic=/usr/local/go/pkg/darwin_amd64/sync/atomic.a > packagefile syscall=/usr/local/go/pkg/darwin_amd64/syscall.a > packagefile time=/usr/local/go/pkg/darwin_amd64/time.a > EOF > cd /usr/local/go/src/net > /usr/local/go/pkg/tool/linux_amd64/compile -o $WORK/b002/_pkg_.a -trimpath > $WORK/b002 -p net -std -buildid _tpOUnWlUki4sCfaeRYL/_tpOUnWlUki4sCfaeRYL > -goversion go1.10.3 -D "" -importcfg $WORK/b002/importcfg -pack -c=4 > ./addrselect.go ./cgo_stub.go ./conf.go ./dial.go ./dnsclient.go > ./dnsclient_unix.go ./dnsconfig_unix.go ./dnsmsg.go ./error_posix.go > ./fd_unix.go ./file.go ./file_unix.go ./hook.go ./hook_unix.go ./hosts.go > ./interface.go ./interface_bsd.go ./interface_darwin.go ./ip.go > ./iprawsock.go ./iprawsock_posix.go ./ipsock.go ./ipsock_posix.go > ./lookup.go ./lookup_unix.go ./mac.go ./net.go ./nss.go ./parse.go > ./pipe.go ./port.go ./port_unix.go ./rawconn.go ./sendfile_stub.go > ./sock_bsd.go ./sock_posix.go ./sockopt_bsd.go ./sockopt_posix.go > ./sockoptip_bsdvar.go ./sockoptip_posix.go ./sys_cloexec.go ./tcpsock.go > ./tcpsock_posix.go ./tcpsockopt_darwin.go ./tcpsockopt_posix.go > ./udpsock.go ./udpsock_posix.go ./unixsock.go ./unixsock_posix.go > ./writev_unix.go > /usr/local/go/pkg/tool/linux_amd64/buildid -w $WORK/b002/_pkg_.a # internal > cp $WORK/b002/_pkg_.a > /root/.cache/go-build/71/71d5652836fbf72132d2864101b08cfb7dc5657beaa4cd0804e7d893646a3d60-d > > # internal > mkdir -p $WORK/b001/ > cat >$WORK/b001/importcfg << 'EOF' # internal > # import config > packagefile net=$WORK/b002/_pkg_.a > packagefile runtime=/usr/local/go/pkg/darwin_amd64/runtime.a > EOF > cd /workspace/src/go.example.com/dns > /usr/local/go/pkg/tool/linux_amd64/compile -o $WORK/b001/_pkg_.a -trimpath > $WORK/b001 -p main -complete -buildid > t_6XipuZQQ3V_Rlugib8/t_6XipuZQQ3V_Rlugib8 -goversion go1.10.3 -D "" > -importcfg $WORK/b001/importcfg -pack -c=4 ./main.go > /usr/local/go/pkg/tool/linux_amd64/buildid -w $WORK/b001/_pkg_.a # internal > cp $WORK/b001/_pkg_.a > /root/.cache/go-build/35/35e87cb5622549aaa8a434a32334706a5b3862ff7d49ce9daf3b29ba88094f41-d > > # internal > cat >$WORK/b001/importcfg.link << 'EOF' # internal > packagefile go.example.com/dns=$WORK/b001/_pkg_.a > packagefile net=$WORK/b002/_pkg_.a > packagefile runtime=/usr/local/go/pkg/darwin_amd64/runtime.a > packagefile context=/usr/local/go/pkg/darwin_amd64/context.a > packagefile errors=/usr/local/go/pkg/darwin_amd64/errors.a > packagefile > vendor/golang_org/x/net/route=/usr/local/go/pkg/darwin_amd64/vendor/golang_org/x/net
[go-nuts] Cross-compile macOS binary with cgo DNS resolver enabled
I'm trying to cross-compile a macOS binary in Docker with the cgo DNS resolver enabled. My understanding is that this is doable without setting up a full macOS SDK toolchain, and by using the package from the macOS distribution. However, I'm unable to make it work. Somehow the compiler always rebuilds the net package from sources and the netgo DNS resolver becomes the de facto. Very short implementation I'm using for testing: package main import "net" func main() { net.LookupIP("google.com") } The build output shows that net.a is built from sources instead of picking up /usr/local/go/pkg/darwin_amd64/net.a: $ ls -la /usr/local/go/pkg/darwin_amd64/net.a -rw-r--r-- 1 root root 1241304 Jun 6 23:51 /usr/local/go/pkg/darwin_amd64/net.a $ go clean -cache $ go build -x -o dns-test ./dns WORK=/tmp/go-build098597944 mkdir -p $WORK/b002/ cat >$WORK/b002/importcfg << 'EOF' # internal # import config importmap golang_org/x/net/route=vendor/golang_org/x/net/route packagefile context=/usr/local/go/pkg/darwin_amd64/context.a packagefile errors=/usr/local/go/pkg/darwin_amd64/errors.a packagefile vendor/golang_org/x/net/route=/usr/local/go/pkg/darwin_amd64/vendor/golang_org/x/net/route.a packagefile internal/nettrace=/usr/local/go/pkg/darwin_amd64/internal/nettrace.a packagefile internal/poll=/usr/local/go/pkg/darwin_amd64/internal/poll.a packagefile internal/singleflight=/usr/local/go/pkg/darwin_amd64/internal/singleflight.a packagefile io=/usr/local/go/pkg/darwin_amd64/io.a packagefile math/rand=/usr/local/go/pkg/darwin_amd64/math/rand.a packagefile os=/usr/local/go/pkg/darwin_amd64/os.a packagefile runtime=/usr/local/go/pkg/darwin_amd64/runtime.a packagefile sort=/usr/local/go/pkg/darwin_amd64/sort.a packagefile sync=/usr/local/go/pkg/darwin_amd64/sync.a packagefile sync/atomic=/usr/local/go/pkg/darwin_amd64/sync/atomic.a packagefile syscall=/usr/local/go/pkg/darwin_amd64/syscall.a packagefile time=/usr/local/go/pkg/darwin_amd64/time.a EOF cd /usr/local/go/src/net /usr/local/go/pkg/tool/linux_amd64/compile -o $WORK/b002/_pkg_.a -trimpath $WORK/b002 -p net -std -buildid _tpOUnWlUki4sCfaeRYL/_tpOUnWlUki4sCfaeRYL -goversion go1.10.3 -D "" -importcfg $WORK/b002/importcfg -pack -c=4 ./addrselect.go ./cgo_stub.go ./conf.go ./dial.go ./dnsclient.go ./dnsclient_unix.go ./dnsconfig_unix.go ./dnsmsg.go ./error_posix.go ./fd_unix.go ./file.go ./file_unix.go ./hook.go ./hook_unix.go ./hosts.go ./interface.go ./interface_bsd.go ./interface_darwin.go ./ip.go ./iprawsock.go ./iprawsock_posix.go ./ipsock.go ./ipsock_posix.go ./lookup.go ./lookup_unix.go ./mac.go ./net.go ./nss.go ./parse.go ./pipe.go ./port.go ./port_unix.go ./rawconn.go ./sendfile_stub.go ./sock_bsd.go ./sock_posix.go ./sockopt_bsd.go ./sockopt_posix.go ./sockoptip_bsdvar.go ./sockoptip_posix.go ./sys_cloexec.go ./tcpsock.go ./tcpsock_posix.go ./tcpsockopt_darwin.go ./tcpsockopt_posix.go ./udpsock.go ./udpsock_posix.go ./unixsock.go ./unixsock_posix.go ./writev_unix.go /usr/local/go/pkg/tool/linux_amd64/buildid -w $WORK/b002/_pkg_.a # internal cp $WORK/b002/_pkg_.a /root/.cache/go-build/71/71d5652836fbf72132d2864101b08cfb7dc5657beaa4cd0804e7d893646a3d60-d # internal mkdir -p $WORK/b001/ cat >$WORK/b001/importcfg << 'EOF' # internal # import config packagefile net=$WORK/b002/_pkg_.a packagefile runtime=/usr/local/go/pkg/darwin_amd64/runtime.a EOF cd /workspace/src/go.example.com/dns /usr/local/go/pkg/tool/linux_amd64/compile -o $WORK/b001/_pkg_.a -trimpath $WORK/b001 -p main -complete -buildid t_6XipuZQQ3V_Rlugib8/t_6XipuZQQ3V_Rlugib8 -goversion go1.10.3 -D "" -importcfg $WORK/b001/importcfg -pack -c=4 ./main.go /usr/local/go/pkg/tool/linux_amd64/buildid -w $WORK/b001/_pkg_.a # internal cp $WORK/b001/_pkg_.a /root/.cache/go-build/35/35e87cb5622549aaa8a434a32334706a5b3862ff7d49ce9daf3b29ba88094f41-d # internal cat >$WORK/b001/importcfg.link << 'EOF' # internal packagefile go.example.com/dns=$WORK/b001/_pkg_.a packagefile net=$WORK/b002/_pkg_.a packagefile runtime=/usr/local/go/pkg/darwin_amd64/runtime.a packagefile context=/usr/local/go/pkg/darwin_amd64/context.a packagefile errors=/usr/local/go/pkg/darwin_amd64/errors.a packagefile vendor/golang_org/x/net/route=/usr/local/go/pkg/darwin_amd64/vendor/golang_org/x/net/route.a packagefile internal/nettrace=/usr/local/go/pkg/darwin_amd64/internal/nettrace.a packagefile internal/poll=/usr/local/go/pkg/darwin_amd64/internal/poll.a packagefile internal/singleflight=/usr/local/go/pkg/darwin_amd64/internal/singleflight.a packagefile io=/usr/local/go/pkg/darwin_amd64/io.a packagefile math/rand=/usr/local/go/pkg/darwin_amd64/math/rand.a packagefile os=/usr/local/go/pkg/darwin_amd64/os.a packagefile sort=/usr/local/go/pkg/darwin_amd64/sort.a packagefile sync=/usr/local/go/pkg/darwin_amd64/sync.a packagefile sync/atomic=/usr/local/go/pkg/darwin_amd64/sync/atomic.a packagefile syscall=/usr/local/go/pkg/darwin_amd64/syscall.a packagefile time=/usr/local/go/pkg/darwin_amd64/time.a