Debian 系统简化 Golang 打包的实用方案
一、推荐路径 dh-golang 最小化配置
- 安装工具链:sudo apt-get install dh-golang golang-go debhelper
- 在项目根目录生成打包骨架:dh_make -f …/your-project_1.0.0.orig.tar.gz(或 dh_make -p your-go-app_1.0.0),选择单二进制包类型,按需保留示例文件
- 关键文件最简内容
- debian/control
- Build-Depends: debhelper (>= 10), dh-golang, golang-go
- Standards-Version: 4.5.0
- debian/rules(可执行,#!/usr/bin/make -f)
- %: dh $@ --with golang
- override_dh_auto_install: dh_golang_install
- debian/install(示例)
- your-go-app /usr/bin/
- config.yaml /etc/your-go-app/
- static/ /usr/share/your-go-app/static/
- 构建与检查
- debuild -us -uc 或 dpkg-buildpackage -us -uc -b
- lintian 校验(必要时用 debian/lintian-overrides 做精细化覆盖)
- 说明:dh-golang 会自动处理 Go 模块依赖、构建与安装,使 debian/rules 保持极简,符合 Debian 打包规范。
二、极速二进制封装 跳过编译
- 适用场景:上游已提供可复现的构建产物,或你已在外部完成构建,仅需封装为 .deb
- 步骤
- 准备已编译的二进制(如 bin/your-go-app),放入项目目录
- 生成 debian/ 骨架后,编辑 debian/rules 仅做安装(不触发编译)
- 使用 debian/install 指定安装路径(见上节示例)
- 构建:dpkg-buildpackage -us -uc -b(或 debuild -us -uc)
- 提示:若使用 debuild 遇到 lintian 严格检查,可直接用 dpkg-buildpackage 构建二进制包,或在 debian/lintian-overrides/ 中对特定告警做覆盖(如 binary-without-manpage)。
三、常见简化与提速技巧
- 使用国内 Go 代理加速依赖拉取:go env -w GOPROXY=https://goproxy.cn,direct
- 纯 Go 项目建议禁用 CGO 并静态编译,减小体积并避免外部运行时依赖:CGO_ENABLED=0 go build -ldflags ‘-s -w’ -o your-go-app
- 并行构建:export GOMAXPROCS=$(nproc)
- 依赖管理:go mod tidy && go mod download,确保可复现构建与缓存命中。
四、快速对照
| 方案 |
适用场景 |
核心文件要点 |
构建命令 |
优点 |
注意点 |
| dh-golang |
遵循 Debian 规范、在打包系统内构建 |
control 含 dh-golang、golang-go;rules 用 %: dh $@ --with golang |
debuild -us -uc 或 dpkg-buildpackage -us -uc -b |
自动化模块依赖与安装,规则简洁 |
需熟悉 debian/ 目录结构 |
| 二进制封装 |
上游已构建、仅需打包分发 |
rules 仅安装;install 指定二进制与资源 |
dpkg-buildpackage -us -uc -b |
极简、快速、可脚本化 |
需自行保证构建可复现与合规许可 |