自定义Debian Golang打包配置可通过以下工具和方法实现,结合工具特性与配置灵活性选择方案:
dh-make-golang
工具(推荐)适用场景:快速生成符合Debian规范的包,支持自动化依赖解析和模板化配置。
步骤:
sudo apt-get install dh-make-golang
dh-make-golang --native
这会生成debian/
目录,包含control
、rules
等配置文件。debian/control
:指定包名、版本、依赖(Depends
字段)、维护者信息等。debian/rules
:通过修改Makefile规则,自定义编译参数(如启用CGO、设置安装路径)。debian/
目录下创建postinst
/prerm
脚本,实现安装后或卸载前的自定义操作。dpkg-buildpackage -us -uc
生成.deb
包文件。dpkg-deb
工具适用场景:需高度定制化目录结构和元数据。
步骤:
mkdir -p mypackage/DEBIAN usr/local/bin
control
文件:DEBIAN
目录下创建control
文件,定义包元数据(名称、版本、依赖等),例如:Package: myapp
Version: 1.0.0
Architecture: amd64
Depends: libc6 (>= 2.14), libssl1.1
Maintainer: Your Name <your@email.com>
Description: Custom Go application package
GOOS=linux GOARCH=amd64 go build -o myapp -ldflags="-s -w" main.go
(-ldflags
可优化二进制大小,-s
禁用调试信息,-w
移除符号表)cp myapp mypackage/usr/local/bin/
dpkg-deb --build mypackage
生成mypackage.deb
。fpm
工具(跨平台支持)适用场景:需同时生成多种格式包(如.deb、.rpm),或简化复杂配置。
步骤:
gem install fpm
fpm -s dir -t deb -n myapp -v 1.0.0 \
--prefix /usr/local/bin \
--depends "libc6 (>= 2.14)" \
--description "Go app with fpm" \
./myapp
--depends
:指定依赖包。--description
:添加包描述。--prefix
:设置安装路径前缀。# 编译阶段
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o myapp main.go
# 运行阶段
FROM debian:bullseye-slim
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]
-ldflags
注入版本号,与Git标签关联:VERSION=$(git describe --tags)
go build -ldflags="-X main.Version=$VERSION" -o myapp main.go
debian/
目录下创建myapp.service
文件,并在rules
中配置安装到/lib/systemd/system/
,实现开机自启。工具 | 优点 | 缺点 |
---|---|---|
dh-make-golang |
自动化依赖、符合Debian标准 | 依赖Debian工具链,学习曲线较陡 |
dpkg-deb |
高度灵活,可手动控制细节 | 需手动处理依赖和脚本,易出错 |
fpm |
跨平台、命令简洁 | 依赖Ruby环境,部分场景配置复杂 |
根据项目需求选择工具,优先使用dh-make-golang
简化流程,复杂场景可结合dpkg-deb
或fpm
调整细节。