Debian Golang 打包流程
一 准备与工具
- 安装构建工具与 Go:sudo apt update && sudo apt install -y build-essential devscripts dh-golang golang-go(或 golang-any)。
- 准备项目:确保使用 Go Modules(go.mod),可执行文件名称与上游一致,版本号遵循 Debian 版本规范(如:1.2.3-1)。
- 选择打包方式:
- 推荐:使用 dh-golang 在打包环境中从源码构建,符合 Debian 规范。
- 备选:预编译二进制后封装为 .deb(适合内部交付或上游未提供源码构建的场景)。
二 推荐方式 使用 dh-golang 从源码构建
- 生成打包骨架:在项目根目录执行 dh_make -p your-go-app_1.0.0-1 --createorig(或按团队模板复制 debian/ 目录)。
- 关键文件要点:
- debian/control(示例)
- Source: your-go-app
- Section: utils
- Priority: optional
- Maintainer: Your Name you@example.com
- Build-Depends: debhelper-compat (= 13), dh-golang, golang-go
- Standards-Version: 4.5.0
- Homepage: https://github.com/youruser/your-go-app
- Package: your-go-app
Architecture: amd64(或依据实际选择,如 arm64;纯 Go 程序常为 amd64/arm64/…)
Depends: ${misc:Depends}
Description: Short desc.
Long desc.
- debian/rules(最小化示例)
- #!/usr/bin/make -f
%:
dh $@ --with golang
- override_dh_auto_install:
dh_golang_install
如有静态资源:dh_install -p your-go-app path/in/src /usr/share/your-go-app/
- 其他常见文件:debian/copyright、debian/changelog、debian/install(如需显式安装文件)。
- 构建与检查:
- 构建二进制包:debuild -us -uc(或 dpkg-buildpackage -us -uc -b)。
- 安装测试:sudo dpkg -i …/your-go-app_1.0.0-1_amd64.deb;运行时检查二进制架构与权限。
- 质量检查:lintian …/your-go-app_1.0.0-1_amd64.changes,必要时添加 debian/lintian-overrides/ 条目抑制误报。
三 备选方式 预编译二进制封装为 deb
- 交叉编译为静态可执行文件(在构建机或 CI 中):
- CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o your-go-app ./cmd/your-go-app
- 其他架构同理(如 arm64)。静态链接可避免运行时依赖问题。
- 准备 debian/ 目录与元数据(至少包含 debian/control),在 debian/rules 中跳过构建步骤,仅做安装:
- override_dh_auto_build override_dh_auto_test: # 空
- override_dh_auto_install:
dh_install -p your-go-app your-go-app /usr/bin/
- 构建与安装:debuild -us -uc 或 dpkg-buildpackage -us -uc -b;sudo dpkg -i 安装并测试。
四 常见要点与排错
- 架构与构建参数:纯 Go 程序常用 amd64/arm64;跨编译时使用 CGO_ENABLED=0 生成静态二进制,避免外部 C 库依赖。
- 版本与变更:debian/changelog 使用 dch -i 递增版本;遵循 Debian 版本规则(上游版本-修订号)。
- 依赖处理:dh-golang 会解析模块依赖,但打包时仍需在 Build-Depends 中声明必要的构建工具(如 dh-golang、golang-go)。
- Lintian 警告:对 Go 静态二进制常见的 “binary-without-manpage”“hardening-no-relro” 等,可通过 debian/lintian-overrides/ 合理抑制,并在 README 或说明中给出理由。
- 资源与系统整合:配置文件、静态网页、systemd 单元等用 debian/install 或 override_dh_auto_install 安装到 /etc/your-go-app/、/usr/share/your-go-app/、/lib/systemd/system/ 等标准路径。