dh-make-golang 自动化生成 Debian 包模板dh-make-golang 是专为 Go 语言项目设计的 Debian 打包工具,可自动化完成创建 Debian 包模板、下载依赖、生成必要文件(如 control、rules)的过程,大幅减少手动工作量。安装后,只需进入项目目录运行 dh-make-golang --native(--native 表示原生 Debian 包),工具会自动生成包含 Debian 打包结构的目录,开发者只需修改 control 文件中的元数据(如包名、版本、描述)即可完成打包。
通过以下编译优化,可减小可执行文件体积、移除调试信息,使打包后的 Debian 包更轻量且易于分发:
CGO_ENABLED=0 禁用 CGO,生成不依赖外部 C 库的可执行文件,避免在目标机器上安装额外依赖;-ldflags="-s -w" 参数,去除符号表和调试信息;GOMAXPROCS=$(nproc),利用所有 CPU 核心加速编译。CGO_ENABLED=0 GOMAXPROCS=$(nproc) go build -ldflags="-s -w" -o myapp。手动创建 Debian 包时,需准备以下核心文件(以项目目录 myapp 为例):
debian/control:定义包元数据(名称、版本、依赖、维护者、描述),例如:Package: myapp
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Depends: ${misc:Depends}
Maintainer: Your Name <your.email@example.com>
Description: A brief description of your Go application.
A longer description of your application's functionality.
debian/install:指定需安装的文件及目标路径(如将编译后的二进制文件安装到 /usr/bin):myapp usr/bin
debian/rules:构建规则文件(通常继承自 dh,无需修改即可满足大多数需求)。dpkg-deb --build myapp 命令生成 .deb 文件。通过 Docker 容器封装编译和打包环境,避免因本地环境差异(如 Go 版本、依赖缺失)导致的问题。常用多阶段构建示例:
# 第一阶段:编译 Go 应用
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY . .
RUN go mod tidy && CGO_ENABLED=0 go build -o myapp .
# 第二阶段:创建最小化 Debian 镜像
FROM debian:bookworm-slim
COPY --from=builder /app/myapp /usr/bin/myapp
CMD ["myapp"]
构建镜像后,可直接运行容器生成 Debian 包,确保打包流程的一致性。
使用 GitLab CI 配置 .gitlab-ci.yml 文件,实现代码提交后自动编译、打包和发布。示例配置:
stages:
- build
- package
build:
stage: build
script:
- go build -o myapp
artifacts:
paths:
- myapp
package:
stage: package
script:
- dpkg-deb --build myapp
only:
- tags # 仅在打标签时触发打包
每次推送代码并添加 tag 时,CI 会自动构建 .deb 文件,无需手动操作。