Activity log for bug #1884558

Date Who What changed Old value New value Message
2020-06-22 15:06:57 Ian Johnson bug added bug
2020-06-22 15:07:23 Ian Johnson description I have a go program which does not require any dynamic library dependencies, and as such I would like to link it statically and use the `base: base` for this snap, so I have tried this: ``` parts: etrace: build-environment: - CGO_ENABLED: "0" plugin: go source: . ``` but it still produces a dynamically linked executable against libc, because snapcraft internally does this command always: ``` Building etrace go build -o /root/parts/etrace/install/bin ./... go build -ldflags -linkmode=external -o /root/parts/etrace/install/bin ./... # github.com/anonymouse64/etrace/cmd/etrace loadinternal: cannot find runtime/cgo ``` which completes, but gives me this: ``` $ ldd ./squashfs-root/bin/etrace linux-vdso.so.1 (0x00007ffd91f77000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3d02414000) /lib64/ld-linux-x86-64.so.2 (0x00007f3d02624000) ``` which I can't use with the bare base snap. What works instead is to do this manually: ``` override-build: | mkdir -p $SNAPCRAFT_PART_INSTALL/bin cd $SNAPCRAFT_PART_SRC go build -o $SNAPCRAFT_PART_INSTALL/bin ./... ``` It would be nice if snapcraft either: 1. automatically detected that CGO_ENABLED=0 was set in the build-environment and didn't manually link things 2. automatically detected that the built binaries from go build -o ./bin ./... were not dynamically linked at all and skipped the final link step 3. had a property or otherwise first-class mechanism to specify that a go part built with the go plugin should be statically compiled (perhaps an option to the plugin yaml, etc.), this could also potentially replace setting the build-environment for CGO_ENABLED=0 as well I have a go program which does not require any dynamic library dependencies, and as such I would like to link it statically and use the `base: base` for this snap, so I have tried this: ``` parts:   etrace:     build-environment:       - CGO_ENABLED: "0"     plugin: go     source: . ``` but it still produces a dynamically linked executable against libc, because snapcraft internally does this command always: ``` Building etrace go build -o /root/parts/etrace/install/bin ./... go build -ldflags -linkmode=external -o /root/parts/etrace/install/bin ./... # github.com/anonymouse64/etrace/cmd/etrace loadinternal: cannot find runtime/cgo ``` which completes, but gives me this: ``` $ ldd ./squashfs-root/bin/etrace         linux-vdso.so.1 (0x00007ffd91f77000)         libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3d02414000)         /lib64/ld-linux-x86-64.so.2 (0x00007f3d02624000) ``` which I can't use with the bare base snap. What works instead is to do this manually: ```     override-build: |       mkdir -p $SNAPCRAFT_PART_INSTALL/bin       cd $SNAPCRAFT_PART_SRC       go build -o $SNAPCRAFT_PART_INSTALL/bin ./... ``` It would be nice if snapcraft either: 1. automatically detected that CGO_ENABLED=0 was set in the build-environment and didn't manually link things 2. automatically detected that the built binaries from go build -o ./bin ./... were not dynamically linked at all and skipped the final link step 3. had a property or otherwise first-class mechanism to specify that a go part built with the go plugin should be statically compiled (perhaps an option to the plugin yaml, etc.), this could also potentially replace setting the build-environment for CGO_ENABLED=0 as well snapcraft, version 4.0.5
2021-03-25 17:15:04 Sergio Schvezov snapcraft: status New Triaged
2021-03-25 17:15:06 Sergio Schvezov snapcraft: importance Undecided Medium
2021-03-25 17:15:18 Sergio Schvezov snapcraft: assignee Chris Patterson (cjp256)