【问题标题】:Consistent builds / remove personal information from binaries一致的构建/从二进制文件中删除个人信息
【发布时间】:2016-09-28 00:27:37
【问题描述】:

我现在意识到 Go 将源代码的绝对路径保存在二进制文件中,以便打印堆栈跟踪等。我不想完全删除这些信息,但是,这也意味着每个构建相同程序的开发人员都会生成具有不同校验和的可执行文件。在我尝试使用 chroot 或类似的东西重新实现构建之前:有没有办法告诉 Go 不要为此使用绝对路径?

【问题讨论】:

  • 发布二进制文件应该构建在一个一致的、可重现的环境中,一开始就没有个人信息。一旦你这样做了,GOPATH 的文本就不再重要了。
  • @JimB 我也需要它用于开发人员的构建。创建 99.99% 相似的工件 50 多次是没有意义的,只是为了让开发人员在堆栈跟踪中看到他们的用户名。
  • 无论如何,一旦您有了创建一致构建的方法,这将成为一个有争议的问题。目前没有办法从文件名中删除 GOPATH 值(有一个未解决的问题 golang.org/issue/3467,但没有人优先考虑)。
  • @JimB 说真的,我不是在问你如何运行我的构建......你不知道原因和情况,不需要猜测我。我问了一个非常具体的问题。你知道这是不可能的:请将其作为答案发布,我会接受。

标签: go build stack-trace


【解决方案1】:

我知道它直接解决了您的问题,但@JimB 的建议确实为您似乎遇到的问题提供了一类解决方案。

其中一个更简单的方法(我认为)是让您的开发人员安装Docker 并创建一个别名以便go 命令运行:

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

然后,每个构建(以及测试和运行)都认为它使用的 GOPATH 为 /go,并且您的开发人员的校验和不会因此而不一致。

请参阅here 了解更多信息。

【讨论】:

  • 不,这既不是一个非常简单问题的答案,也不是真正的解决方案。 Docker 本身就是一堆蠕虫(在我工作的地方,我们构建了一个补丁版本……嗯,非常好的程序,但那不是重点)。对于想要在 Windows 或 Mac 上构建的人来说,这不是一个真正的解决方案(太慢、无法调试、文件所有权完全混乱等)。这不适用于现有的任何构建系统。而且,不幸的是,我知道这一点,因为这就是我今天所做的,我讨厌这样做。
猜你喜欢
  • 2012-06-11
  • 1970-01-01
  • 2014-11-26
  • 2014-06-12
  • 1970-01-01
  • 2010-09-18
  • 2014-03-12
  • 2017-12-22
  • 1970-01-01
相关资源
最近更新 更多