go install fail to generate binary
There are two folds to this problem:
1) Go install not able to generate binary
go version go1.7.3 linux/amd64 go env: GOARCH="amd64" GOBIN="" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" GOPATH="/opt/gopath" GORACE="" GOROOT="/opt/go" GOTOOLDIR="/opt/go/pkg/tool/linux_amd64" CC="gcc" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build831334660=/tmp/go-build -gno-record-gcc-switches" CXX="g++" CGO_ENABLED="1"
Source of the program:
Main program to build:
CGO_ENABLED=0 GOBIN=/opt/gopath/bin go install -x -ldflags " -X github.com/hyperledger/fabric/common/metadata.Version=1.0.0-snapshot-d6fbfcf -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.3.0 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger -linkmode external -extldflags -static -lpthread" github.com/hyperledger/fabric/peer
I expect the binary built in
/opt/gopath/bin but there was nothing there.
It shows on the console that series of .a files were built and moved to
Eventually program stopped and no binary was built.
This is true regardless CGO_ENABLED was set to 0 or 1.
Somehow the program thoughts it was done, without linking the object files and building the binary? Any other debugging measures that I can use to look further into it?
2) The ‘Go install’ command was taken from Makefile
@$(DRUN) \ -v $(abspath build/docker/bin):/opt/gopath/bin \ -v $(abspath build/docker/$(TARGET)/pkg):/opt/gopath/pkg \ hyperledger/fabric-baseimage:$(BASE_DOCKER_TAG) \ go install -compiler gccgo -ldflags "$(DOCKER_GO_LDFLAGS)" $(pkgmap.$(@F)) where DRUN = docker run -i --rm $(DOCKER_RUN_FLAGS) \ -v $(abspath .):/opt/gopath/src/$(PKGNAME) \ -w /opt/gopath/src/$(PKGNAME)
'Go install' command was run inside a docker container, which was started the same way the Makefile specified. The only difference was that I was doing it manually, in two shots, i.e. start docker container + go install. If I were to build it with Makefile in one shot, it would work just fine.
Is there any catch/caveat on using this
'docker run <image> go install <args>' style command?