如何将Go二进制文件放入Debian软件包?因为Go是静态链接的,所以我只有一个可执行文件——我不需要太多复杂的项目元数据信息.有没有一种简单的方法可以打包可执行文件和资源文件,而不必经历debuild年的创伤?

我已经到处寻找现有的问题;然而,我的所有研究都发现了关于包含golang开发环境的.deb文件的问题/答案(即,如果使用sudo apt-get install golang-go个文件,您会得到什么).

推荐答案

井.我认为debuild的唯一"创伤"是它在构建包之后运行lintian,而lintian是试图发现包问题的人.

因此,有两种方法可以应对这种情况:

  • 不要使用debuild:此工具只调用dpkg-buildpackage,它真正执行必要的提升.构建二进制包的通常调用是dpkg-buildpackage -us -uc -b.你也可以出于其他目的拨打debuild,比如debuild clean.
  • 加上所谓的"lintian override",可以让lintian对你的包裹中的selected个问题视而不见,你坚持认为这些问题不是问题.

这两种方法都意味着你可以通过打包工具来创建你的应用程序,而不是把它当作一个只包装到一个包中的blob.这将需要稍微远离正常的工作方式(不要try 构建任何东西).

另一个可能的解决方案(实际上更像Debian-ish)是try 使用gcc-go(加上gold用于链接):因为它是一个GCC前端,这个工具生成一个动态链接的应用程序(链接到libgo或类似的东西).我个人还没有经验,如果你想把你的包推到Debian合适的地方,它只会考虑使用它.

关于为Debian打包Go程序的一般问题,您可能会发现以下资源很有用:

  • This thread人开始吃坚果,由其中一家Go for Debian Packers开始.
  • 特别是,该线程中的第一篇帖子链接到debian devel上的this discussion.
  • 关于同一问题的debian-devel上的The second thread(它是前一个线程的逻辑延续).

2015年10月15日Update分.

(由于这篇帖子似乎还在被人们搜索、查找和研究,我决定更新它,以更好地反映当前的情况.)

从那时起,打包围棋应用程序和软件包的情况得到了戏剧性的改善,可以使用"classic "围棋(所谓的gc套来自谷歌的套件)而不是gcc-go来构建Debian软件包. 而且包也有很好的基础设施.

现在,对围棋程序进行Debianing时使用的关键工具是dh-golang here.

Go相关问答推荐

如何使用go从map.dbf map.prj map.shp map.shx中的任何文件中了解层名称

VS代码,Golang格式顽固的情况与switch / case

你能帮我优化一个golang代码关于函数CrossPointTwoRect

macOS上GoLand 2023.3.4中的代码导航

如何在VSCode中为特定的.go文件创建调试配置?

如果values.yaml文件中不存在某个属性,如何返回默认的FALSE?

如何配置vscode以在Go中显示不必要的(过度指定的)泛型?

如何模拟 stripe 需要 webhooks 的捕获事件?

Golang Fiber Render - 将数据发送到多个布局

使用 goroutine 比较 Golang 中的两棵树是等价的

查找、解析和验证邮箱地址

将 .gz 文件添加到 tar.gz 文件,但在添加之前解码 gz.输出文件被剪辑(损坏)

在 Golang 中,如何将接口作为泛型类型与 nil 进行比较?

使用 Golang 在字符串中循环重复数据

在 Go 中读取数字行

即使一个测试用例失败,如何运行所有测试用例

K8s 算子读取原始数据

手动将 OpenTelemetry 上下文从 golang 提取到字符串中?

泛型:对具有返回自身的函数的类型的约束

Golang 泛型同时具有接口和实现