go plugin with snapcraft 4 doesn't support building static binaries

Bug #1884558 reported by Ian Johnson
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Snapcraft
Triaged
Medium
Chris Patterson

Bug 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

snapcraft, version 4.0.5

description: updated
Changed in snapcraft:
status: New → Triaged
importance: Undecided → Medium
assignee: nobody → Chris Patterson (cjp256)
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.