Debian 环境下 Golang 打包步骤
一 准备环境
- 安装 Go 与打包工具:
- sudo apt update
- sudo apt install -y golang-go debhelper dh-golang
- 确认版本:go version
- 建议启用 Go Modules(Go 1.11+),在项目根目录执行:go mod init <module_name>;整理依赖:go mod tidy。
二 方法一 使用 dh-golang 构建符合 Debian 规范的包(推荐)
- 在项目根目录生成打包骨架(仅首次):dh_make -f …/your-project.tar.gz,按向导选择单二进制包等;或手动创建 debian/ 目录及必要文件。
- 编辑 debian/control(示例):
- Source: my-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/my-go-app
- Vcs-Git: https://github.com/youruser/my-go-app.git
- Vcs-Browser: https://github.com/youruser/my-go-app
- Package: my-go-app
- Architecture: amd64
- Depends: ${misc:Depends}
- Description: Short desc
Long description.
- 编辑 debian/rules(示例,使用 dh-golang 插件):
- #!/usr/bin/make -f
- export GOPATH := $(CURDIR)/.gopath
- export GOBIN := $(CURDIR)/bin
- %:
- override_dh_auto_install:
- dh_golang_install
-
如有静态资源:dh_install -X.go -X.mod -X.sum
- override_dh_auto_clean:
- dh_auto_clean
- rm -rf $(GOPATH) $(GOBIN)
- 构建与检查:
- debuild -us -uc
- 或仅构建二进制包:dpkg-buildpackage -us -uc -b
- 安装测试:sudo dpkg -i …/my-go-app_1.0.0-1_amd64.deb
- 质量检查:lintian …/my-go-app_1.0.0-1_amd64.deb(如有误报可用 lintian-overrides 处理)。
三 方法二 预编译二进制直接封装为 .deb(简单交付)
- 交叉/本地编译(禁用 CGO 便于移植):
- CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags “-s -w” -o myapp main.go
- 验证:file myapp(应显示“statically linked”等)
- 快速打包为 .deb(最小化 debian/ 结构):
-
mkdir -p debian/usr/bin
-
cp myapp debian/usr/bin/
-
cat > debian/control <<EOF
Source: myapp
Section: utils
Priority: optional
Maintainer: Your Name you@example.com
Build-Depends: debhelper (>= 9)
Standards-Version: 3.9.5
Package: myapp
Architecture: amd64
Depends: ${misc:Depends}
Description: Short desc
Long description.
EOF
-
dpkg-deb --build debian myapp.deb
-
安装与测试:sudo dpkg -i myapp.deb。
四 常见要点与排错
- 架构与构建参数:
- 多架构构建可用交叉编译:GOOS=linux GOARCH=arm64(或 amd64);无 C 依赖时建议 CGO_ENABLED=0 生成静态二进制,减少外部依赖与环境差异带来的问题。
- 减小体积与优化:
- 链接参数:-ldflags “-s -w” 去除调试信息;配合 CGO_ENABLED=0 可进一步减小体积并提升可移植性。
- Lintian 警告处理:
- 简单绕过:dpkg-buildpackage -us -uc -b(不自动跑 lintian)
- 规范做法:使用 debian/lintian-overrides/ 或 debian/changelog 中的 override 注释忽略特定告警(如 binary-without-manpage)。
- 资源与安装路径:
- 二进制通常安装到 /usr/bin/;配置文件、静态资源按需在 debian/rules 中使用 dh_install 安装到 /etc/、/usr/share/ 等路径,并在 .install 文件中声明。