-
Notifications
You must be signed in to change notification settings - Fork 17.7k
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
cmd/go: 'go test' on alpine and ubuntu requires gcc in GOPATH mode #28065
Comments
Forgot to mention - the stretch image does have gcc, while the alpine image does not. |
This might be better classified as "the official golang:alpine images should install a supported libc" . From #27264 (comment)
|
I don't think this is related. I'm not having any issues with Alpine's musl libc, and Go does otherwise work. If the official Go docker image based on Alpine required installing glibc, what would be the point of distributing that image to begin with? |
Also, I don't think we make any statement as to requiring glibc for Go to work if properly built. That comment is about the Go binary distribution. |
Looks like a dupe of #27639 |
I think this issue should stay open to describe the |
I'm also seeing this behaviour when running |
There have been a bunch of related issues, some being fixed and some being closed as duplicates. Note however, that many of them including #26988 require running the Go command in module-aware mode, while this one doesn't. It does look like #27639 is a very similar issue, but that was closed and didn't have much activity, so I think we should keep this one open for now. |
There's something about the Alpine image that makes the go command think rebuilding is necessary. Does pkg/linux_amd64/runtime/cgo.a even exist in the image? If the Alpine image were built with CGO_ENABLED=0 then I could see that doing a CGO_ENABLED=1 build would do a rebuild. But I don't see that in the Dockerfile. |
Dump of
|
Maybe this is unrelated to the Alpine image, as I experience the same issue with go 1.11.1 on Ubuntu 18.04.1 LTS, using vanilla go downloaded from https://dl.google.com/go/go1.11.1.linux-amd64.tar.gz. |
This unpins our version of core/scaffolding-go which in turn will pull in the latest version of core/go. All of A2 builds and passes tests with this change in place: https://buildkite.com/chef/chef-a2-master-verify/builds/17409 In the past we had pinned our version of Go to avoid this bug: golang/go#28065 However, rather than pinning, we should track down any places where that is still an issue and either make sure those builds either have gcc available or set GCO_ENABLED=0. Signed-off-by: Steven Danna <steve@chef.io>
This comment was marked as off-topic.
This comment was marked as off-topic.
This unpins our version of core/scaffolding-go which in turn will pull in the latest version of core/go. All of A2 builds and passes tests with this change in place: https://buildkite.com/chef/chef-a2-master-verify/builds/17409 In the past we had pinned our version of Go to avoid this bug: golang/go#28065 However, rather than pinning, we should track down any places where that is still an issue and either make sure those builds either have gcc available or set GCO_ENABLED=0. Signed-off-by: Steven Danna <steve@chef.io>
Hi @mvdan (and/or anyone else on this issue) Good chance you already saw this, but it seems #26988 is now hopefully fixed in tip (where this issue #28065 was originally spun out from #26988). I haven't personally seen anything that explicitly suggests that this issue #28065 might also be addressed, but it could be worth a quick try off of tip to see the situation here has improved. |
Thanks - I'll build tip on Alpine, and see if this bug is still present. |
Still appears to happen. New script:
Output:
|
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as resolved.
This comment was marked as resolved.
This is a little less confusing and improves IDE support. This required changing to a non-Alpine-based image for the build env due to golang/go#28065, and therefore building a statically-linked binary for the production image.
With go1.11 `go test` in GOPATH mode somehow seems to depend on GCC. See golang/go#28065 This change only enables cgo for CI profiles that need it. Those are the ones that seem to fail on TravisCI now, presumably due to some compiler version missmatch. That is a workaround and does not happen in GO11MODULE mode. Signed-off-by: Alexander Bezzubov <bzz@apache.org>
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
Thanks. The hash is the same, so that wasn't it. I think the problem is that vet wants to collect information, known as "facts", for runtime/cgo (as well as all the other packages that the problem depends on). That information can be cached, but it hasn't been cached on your system. For a package that uses cgo, vet needs to run cgo to see the generated files. So vet invokes cgo. But on your system, which does not have "gcc" installed, that fails. |
This comment was marked as duplicate.
This comment was marked as duplicate.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as spam.
This comment was marked as spam.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as spam.
This comment was marked as spam.
This comment was marked as spam.
This comment was marked as spam.
This comment was marked as spam.
This comment was marked as spam.
This comment was marked as spam.
This comment was marked as spam.
Please don't leave comments saying this is still an issue. Unless the Alpine image suddenly starts including gcc, which I find very unlikely, the problem will only be fixed once this github issue is closed. |
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
@candlerb That comment should be out of date now. Though I agree that your problem has something to do with cgo. Could you open a new issue with your test case? This issue is probably entirely out of date since we no longer use GOPATH mode. Thanks. |
I believe this was resolved for the 1.20 which disables cgo when no C compiler is found.
|
What version of Go are you using (
go version
)?golang:1.11.1-alpine3.8:
Does this issue reproduce with the latest release?
Yes.
What operating system and processor architecture are you using (
go env
)?Also from that docker image:
What did you do?
Run
go test
on a simple package that imports some network packages likenet/http
. Expect it to work, even when I don't havegcc
installed, which is the case with the Alpine Go images. This worked on 1.10. It broke when we switched to the 1.11 images.Here is a simple reproducer script:
What did you expect to see?
What I see if I use
golang:1.11.1-stretch
:Note that this has nothing to do with the package not having test files or tests. We encountered this on a package that has plenty of tests.
What did you see instead?
Also note that we are not in module-aware mode, so this issue should be different from #26988. I believe this is the same issue that @mfridman and @tylercloke were reporting in that thread.
For the time being, we've just globally set
CGO_ENABLED=0
on all of our CI jobs, since we don't use CGO on our production builds anyway. And one could argue that we should have been doing that from the start anyway. Nonetheless, this still seems like a bug or some sort of regression to me./cc @bcmills @thepudds @myitcv
The text was updated successfully, but these errors were encountered: