温馨提示×

golang在debian如何打包好

小樊
45
2026-10-22 15:46:49
栏目: 编程语言

在 Debian 上把一个 Go 程序打包成 deb 包,常见且“正规”的做法有几种,取决于你是自己用、内部发布还是上 Debian 官方仓库。下面从最简单到最规范逐步说明。


一、最推荐:使用 dh-make-golang(官方风格)

这是 Debian 官方推荐方式,适合长期维护。

1. 安装工具

sudo apt update
sudo apt install -y dh-make-golang build-essential devscripts fakeroot

2. 初始化打包

假设你的项目在 GitHub:

dh-make-golang github.com/yourname/yourrepo

它会自动:

  • 生成 debian/ 目录
  • 写 control、rules、changelog
  • 设置 Go 构建规则

3. 构建 deb 包

cd yourrepo
dpkg-buildpackage -us -uc -b

生成的 deb 在上一层目录:

../yourrepo_0.1.0-1_amd64.deb

✅ 优点:最规范、可进 Debian
❌ 缺点:流程稍复杂


二、简单实用:用 fpm 打包(推荐个人/内部)

如果你只是想 快速打一个能装的 deb,这是最简单方案。

1. 安装 fpm

sudo apt install -y ruby ruby-dev rubygems build-essential
sudo gem install fpm

2. 编译 Go 程序

CGO_ENABLED=0 go build -o myapp

3. 用 fpm 打包

fpm -s dir -t deb \
  -n myapp \
  -v 1.0.0 \
  -a amd64 \
  --prefix /usr/bin \
  myapp

生成:

myapp_1.0.0_amd64.deb

✅ 优点:极快、可控
❌ 缺点:不符合 Debian 官方规范


三、手动写 debian/ 目录(进阶)

适合 CI / 自动化。

目录结构:

myapp/
├── myapp
└── debian/
    ├── control
    ├── rules
    ├── changelog
    └── install

debian/control 示例

Package: myapp
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Maintainer: you <you@example.com>
Description: My Go app
 A simple Go program.

debian/install

myapp usr/bin/

构建

dpkg-deb --build myapp

四、静态编译注意事项(很重要)

Debian 上 Go 程序建议:

CGO_ENABLED=0 go build -ldflags="-s -w"

避免依赖 glibc 版本问题。


五、systemd 服务(常见需求)

如果你要开机启动:

debian/myapp.service

[Unit]
Description=My Go App

[Service]
ExecStart=/usr/bin/myapp
Restart=always

[Install]
WantedBy=multi-user.target

并在 debian/rules 或 postinst 中启用。


六、选择建议

场景 推荐方式
自己/内部用 fpm
长期维护 dh-make-golang
CI 自动打包 手动 debian/
想进 Debian dh-make-golang

如果你愿意,可以告诉我:

  • 是否是 CLI / Web / 服务
  • 是否要 systemd
  • 是否要 多架构(arm64)

我可以直接帮你写一套 完整 debian/ 模板或 CI 脚本。

0 踩