在开始打包前,需确保Debian系统已安装Go编译器及必要工具:
sudo apt update
sudo apt install golang-go dh-make git build-essential
golang-go:Go编译器,用于编译项目为二进制文件;dh-make:Debian打包辅助工具,用于生成模板文件;git、build-essential:用于版本控制和编译依赖。Go项目需编译为静态链接的二进制文件(避免依赖动态库),确保在目标系统上无需额外安装Go环境:
cd /path/to/your/golang-project # 进入项目根目录
go mod tidy # 整理依赖(若使用Go Modules)
go build -o myproject # 编译为可执行文件(默认名称为项目目录名)
go.mod和go.sum文件已正确维护;-ldflags="-s -w"参数压缩二进制文件大小(如go build -ldflags="-s -w" -o myproject)。在项目根目录下创建debian目录,并生成模板文件:
dh-make-golang --native # 自动生成debian目录及模板文件(--native表示原生Debian包)
或手动创建目录结构:
mkdir -p debian/{source,DEBIAN} # 创建source(源码相关)和DEBIAN(控制信息)目录
dh-make-golang会自动生成debian/control、debian/rules等文件,减少手动配置工作量;debian/compat文件指定兼容版本)。编辑debian目录下的关键文件,定义包的属性和行为:
debian/control(核心元数据):Package: myproject # 包名(小写字母,无特殊字符)
Version: 1.0.0 # 版本号(遵循语义化版本)
Section: utils # 所属分类(如utils、net、devel)
Priority: optional # 优先级(optional/required/standard)
Architecture: amd64 # 架构(amd64/arm64等,需与二进制文件匹配)
Depends: libc6 (>= 2.14) # 依赖项(如libc6,可通过`apt-cache depends`查询)
Maintainer: Your Name <youremail@example.com> # 维护者信息
Description: A simple Go-based project # 描述(首行简短,后续详细)
This project provides XXX functionality...
debian/rules(构建规则):dh-make-golang生成,文件已包含默认规则(基于dh工具);若手动创建,需指向编译脚本:#!/usr/bin/make -f
%:
dh $@ --buildsystem=golang
debian/copyright(版权信息):Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: myproject
Source: https://github.com/yourname/myproject
Files: *
Copyright: 2025 Your Name
License: MIT
debian/install(文件安装路径):myproject usr/bin # 将myproject二进制文件安装到/usr/bin目录
使用dpkg-buildpackage命令生成.deb文件:
dpkg-buildpackage -us -uc # -us:不签名源码;-uc:不签名.changes文件
../)将生成myproject_1.0.0_amd64.deb文件(命名格式:包名_版本_架构.deb)。lintian ../myproject_1.0.0_amd64.deb # 检查包是否符合Debian政策
sudo dpkg -i ../myproject_1.0.0_amd64.deb # 安装包
sudo apt install -f # 修复依赖问题(若有)
which myproject # 检查是否安装到指定路径
myproject --version # 测试运行(若项目支持)
若不想手动配置Debian文件,可使用fpm工具(需提前安装Ruby):
gem install fpm # 安装fpm
go build -o myproject # 编译项目
fpm -s dir -t deb -n myproject -v 1.0.0 --prefix /usr/bin myproject # 生成.deb包
-s dir:源类型为目录;-t deb:目标类型为.deb包;-n:包名;-v:版本号;--prefix:安装路径前缀。以上流程覆盖了从环境准备到包生成的全步骤,可根据项目需求选择手动配置或工具辅助方式。