1. 优先使用dh-golang工具
dh-golang是Debian社区推荐的Go应用打包工具,作为debhelper附加插件,它能自动化处理Go模块依赖、构建流程及文件安装,确保符合Debian打包标准。使用时需在debian/compat文件中指定兼容级别(如13及以上),并在debian/rules中通过dh --with=golang启用。
2. 正确处理静态链接特性
Go默认生成静态链接二进制文件(无外部依赖),但lintian工具可能对此发出binary-without-manpage等警告。可通过两种方式解决:一是直接使用dpkg-buildpackage -us -uc -b绕过lintian检查;二是通过lintian override在debian/changelog中添加注释(如* Lintian override: binary-without-manpage),明确告知此为预期行为。
3. 完善核心打包文件
golang-go)、运行时依赖(如${misc:Depends})及描述;dh $@ --with=golang以启用插件;/usr/bin/)及路径,避免包含不必要的源代码或模块缓存。4. 优化依赖管理
使用Go Modules(go mod init、go mod tidy)管理依赖,确保依赖关系清晰且可重复。构建前运行go mod tidy清理未使用的依赖,go mod download下载依赖以加快打包速度。
5. 静态编译提升可移植性
若应用无需CGO(如不依赖C/C++库),通过CGO_ENABLED=0编译生成纯静态二进制文件,减小包大小并避免动态链接依赖。命令示例:CGO_ENABLED=0 go build -o myapp -ldflags='-s -w' .(-s -w用于压缩二进制文件)。
6. 测试包的正确性
打包完成后,在目标Debian/Ubuntu环境中安装(sudo dpkg -i your-package.deb),验证:
/usr/bin/);myapp --version);7. 避免不必要的文件
最终Debian包应仅包含应用所需的二进制文件和资源文件(如配置文件),不要包含Go模块缓存($GOPATH/pkg/mod)或源代码,保持包简洁。