在 Ubuntu 上用 Go(Golang)进行“打包”,通常可以从两个层面理解:把 Go 程序编译成可执行文件(构建),以及把程序打包成 Ubuntu/Debian 系统可用的软件包(.deb)。下面分情况说明常见方式。
go build -o myapp main.go
或:
go build ./...
特点:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp
常见目标:
-ldflags 减小体积go build -ldflags="-s -w" -o myapp
upx 进一步压缩(可选)upx --best myapp
如果你要在 Ubuntu 上“像软件一样安装”,常见有以下几种方式:
dpkg-deb(手动打包)适合简单程序。
步骤:
mkdir -p myapp/DEBIAN
mkdir -p myapp/usr/bin
cp myapp myapp/usr/bin/
编写 myapp/DEBIAN/control:
Package: myapp
Version: 1.0
Section: utils
Priority: optional
Architecture: amd64
Maintainer: you@example.com
Description: My Go App
打包:
dpkg-deb --build myapp
checkinstall(最简单)sudo apt install checkinstall
go build -o myapp
sudo checkinstall ./myapp
优点:
dh-make + debuild(标准 Debian 方式)适合正式发布。
sudo apt install dh-make devscripts
dh_make --makefile --native
debuild -us -uc
生成:
../myapp_1.0_amd64.deb
goreleaser(最流行)goreleaser init
goreleaser build
支持:
nfpm轻量级 deb/rpm 打包:
name: myapp
arch: amd64
version: 1.0.0
nfpm package
sudo snap install snapcraft
snapcraft
适合:
FROM golang:1.22 as build
WORKDIR /app
COPY . .
RUN go build -o app
FROM ubuntu
COPY --from=build /app/app /usr/bin/app
| 方式 | 用途 | 难度 |
|---|---|---|
| go build | 基础可执行 | ⭐ |
| dpkg-deb | 手动 deb | ⭐⭐ |
| checkinstall | 快速 deb | ⭐⭐ |
| dh-make | 标准 deb | ⭐⭐⭐ |
| goreleaser | 多平台发布 | ⭐⭐⭐ |
| snap | Ubuntu 生态 | ⭐⭐⭐ |
如果你能说明:
我可以给你更精确的方案。