在开始打包前,需确保系统已安装Go编译器及Debian打包工具链:
# 更新系统并安装Go(推荐使用官方二进制而非源码编译)
sudo apt update && sudo apt install -y golang-go
# 安装Debian打包工具(dh-make、debmake、lintian等)
sudo apt install -y dh-make debmake lintian
以上工具用于初始化Debian包结构、构建包及检查包质量。
进入项目根目录,使用go build编译生成可执行文件(若项目使用Go Modules,需提前初始化):
# 初始化Go模块(若未初始化)
go mod init your_project_name
# 编译项目(生成可执行文件,名称建议与包名一致)
go build -o your_project_name
编译后的二进制文件需后续复制到Debian包的工作目录中。
在项目根目录下创建debian目录,用于存放打包所需的元数据和文件:
mkdir -p debian
debian目录需包含以下核心文件(部分可通过工具自动生成):
control:定义包的元数据(名称、版本、依赖等);rules:构建规则(指定如何编译、安装文件);copyright:版权信息;changelog:版本变更记录(可选但推荐);install:指定需安装的文件及目标路径(可选但推荐)。debian/control文件定义包的基本信息,示例如下:
Source: your_project_name
Section: utils
Priority: optional
Maintainer: Your Name <your_email@example.com>
Build-Depends: debhelper-compat (= 13), golang-go
Standards-Version: 4.5.1
Homepage: https://your_project_url.com
Package: your_project_name
Architecture: amd64
Depends: libc6 (>= 2.14), ${misc:Depends}
Description: A brief description of your Go project.
A longer description can be added here (wrap at 80 characters).
Source:源码包名称;Package:二进制包名称;Architecture:支持架构(如amd64、all);Depends:依赖的其他包(如libc6)。debian/rules文件定义构建规则,可使用dh工具简化流程(适用于大多数Go项目):
#!/usr/bin/make -f
%:
dh $@ --buildsystem=golang --with=golang
--buildsystem=golang:指定使用Go构建系统;--with=golang:启用Go专用构建逻辑。debian/copyright文件声明版权信息,示例如下:
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: your_project_name
Source: https://your_project_url.com
Files: *
Copyright: 2025 Your Name
License: MIT
License字段(如Apache-2.0、GPL-3.0)。debian/changelog文件记录版本变更历史,可使用dch工具生成:
dch --create -v 1.0.0-1 --package your_project_name
编辑生成的文件,示例如下:
your_project_name (1.0.0-1) unstable; urgency=medium
* Initial release.
-- Your Name <your_email@example.com> Mon, 30 Aug 2025 12:00:00 +0000
upstream_version-debian_revision(如1.0.0-1);urgency:变更紧急程度(low、medium、high)。将编译生成的二进制文件复制到debian目录下的对应路径(需与install文件中的路径一致,若未创建install文件,可直接复制到debian/tmp/usr/local/bin/):
mkdir -p debian/tmp/usr/local/bin/
cp your_project_name debian/tmp/usr/local/bin/
使用dpkg-buildpackage命令生成.deb文件:
dpkg-buildpackage -us -uc
-us -uc:跳过签名步骤(仅用于测试,正式发布需移除);.deb文件将生成在项目根目录的上一级目录(如../your_project_name_1.0.0-1_amd64.deb)。使用dpkg命令安装并验证包:
# 安装包
sudo dpkg -i ../your_project_name_1.0.0-1_amd64.deb
# 检查包是否安装成功
dpkg -l | grep your_project_name
# 卸载包(测试完成后)
sudo dpkg -r your_project_name
若不想手动创建目录和文件,可使用fpm工具(需提前安装Ruby):
# 安装fpm
gem install fpm
# 编译Go项目
go build -o your_project_name
# 生成.deb包
fpm -s dir -t deb -n your_project_name -v 1.0.0 --prefix /usr/local/bin your_project_name
-s dir:源类型为目录;-t deb:目标类型为.deb包;-n:包名;-v:版本号;--prefix:安装路径前缀。以上步骤覆盖了Debian打包Golang项目的完整流程,从环境准备到包生成与验证,可根据项目需求调整细节(如依赖、安装路径等)。