一致的构建/从二进制文件中删除个人信息

问题描述 投票:0回答:3

我现在意识到 Go 将源代码的绝对路径保存在二进制文件中,以便打印堆栈跟踪等。我不想完全删除这些信息,但是,这也意味着构建相同程序的每个开发人员都会生成具有不同校验和的可执行文件。在我尝试使用

chroot
或类似的东西重新实现构建之前:有没有办法告诉 Go 不要为此目的使用绝对路径?

go build stack-trace
3个回答
1
投票

我知道它并没有直接解决你所问的问题,但@JimB的建议确实表明了一类针对你似乎遇到的问题的解决方案。

(我认为)更简单的方法之一是让开发人员安装 Docker 并创建一个别名,以便运行

go
命令:

docker run --rm --tty --volume $GOPATH:/go golang:1.7.1(-$YOUR_PLATFORM) go

然后,每个构建(以及测试和运行)都认为它使用的是

/go
的 GOPATH,并且您的开发人员的校验和不会基于此而不一致。

请参阅此处了解更多信息。


0
投票

有没有办法告诉 Go 不要为此使用绝对路径?

现在有:

-trimpath

https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependency解释:

-修剪路径

从生成的可执行文件中删除所有文件系统路径。 记录的文件名而不是绝对文件系统路径 将开始模块路径@版本(使用模块时), 或普通导入路径(使用标准库或 GOPATH 时)。


0
投票

要扩展 erik258 响应,您还需要修复 GOPATH。

我认为如果您启用了模块,那并不重要。我只是将我的设置为 /home/runner/go 以匹配 github 运行者所拥有的内容,它的工作就像一个魅力。

这是我使用的整个构建命令,它在我的机器上和 GitHub 操作中生成完全相同的二进制文件

export CGO_ENABLED=0 
export GOOS=linux 
export GOARCH=amd64
export GOPATH=/home/runner/go

build="go build -trimpath -tags lambda.norpc -buildvcs=false -compiler gc"
$build -o cmd/lambda/package/bootstrap cmd/lambda/main.go
© www.soinside.com 2019 - 2024. All rights reserved.