Appearance
Debian 打包入门:debian/control、rules 与 changelog 详解

如果你曾经尝试将一个应用程序打包成 .deb 包,你一定会遇到 debian/ 目录下的这三个文件:control、rules、changelog。它们是 Debian 源码包的"三驾马车",决定了你的软件包长什么样、怎么构建、版本如何迭代。
在开始本专题的正片(postinst、prerm、postrm 维护者脚本)之前,有必要先建立对这三个核心文件的认知。本篇序章会帮你快速扫清基础知识,后续章节将不再赘述。
debian/control:包的"身份证"
control 文件定义了软件包的元信息和依赖关系。它是 dpkg 和 apt 在安装、升级、卸载时读取的首要文件。
一个典型的 control 文件
yaml
Source: myapp
Section: utils
Priority: optional
Maintainer: Your Name <[email protected]>
Build-Depends: debhelper-compat (= 13), golang-go
Standards-Version: 4.6.2
Package: myapp
Architecture: amd64
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: My awesome application
A longer description of what this package does.
It can span multiple lines.关键字段解读
| 字段 | 作用 | 备注 |
|---|---|---|
Source | 源码包名称 | 通常与二进制包同名 |
Build-Depends | 构建时依赖 | 编译阶段需要的工具链、库 |
Package | 二进制包名称 | 最终用户安装的包名 |
Architecture | 架构 | amd64、arm64、all(纯脚本) |
Depends | 运行时依赖 | 安装时自动拉取的依赖包 |
Description | 包描述 | 第一行是短描述,后续是长描述 |
💡 关键点:
Depends中常见的${shlibs:Depends}和${misc:Depends}是debhelper自动生成的依赖变量,会在构建时被替换为实际的动态库依赖。
debian/rules:构建的"施工图纸"
rules 是一个 Makefile,告诉 dpkg-buildpackage 如何编译、测试、安装你的软件。它是整个构建过程的核心控制文件。
最简 rules(使用 dh)
makefile
#!/usr/bin/make -f
%:
dh $@就这么短?是的!dh 是 debhelper 提供的自动化构建系统,它会按顺序执行一系列标准步骤:
clean → build → build-arch → build-indep → install → binary-arch → binary-indep → binary常用 override 场景
在实际项目中,你往往需要覆盖某些默认行为。比如在 Go 项目中注入版本号:
makefile
#!/usr/bin/make -f
%:
dh $@
override_dh_auto_build:
go build -ldflags="-X main.Version=$(shell cat VERSION)" -o myapp ./cmd/myapp又比如 VUE 项目需要先执行 npm run build:
makefile
override_dh_auto_build:
npm install
npm run build常见的 dh 命令
| 命令 | 作用 |
|---|---|
dh_auto_clean | 清理构建产物 |
dh_auto_build | 执行构建 |
dh_auto_install | 安装到 debian/tmp 临时目录 |
dh_install | 将文件复制到包目录 |
dh_systemd_enable | 启用 systemd 服务 |
dh_systemd_start | 启动 systemd 服务 |
debian/changelog:版本的"时间线"
changelog 记录了软件包的版本历史和变更说明。它不仅是为了给用户看,更重要的是 dpkg 依赖它来判断版本新旧。
标准格式
plaintext
myapp (1.2.3-1) unstable; urgency=medium
* Feature: add support for config hot-reload
* Fix: memory leak in connection pool
* Update dependencies to latest
-- Your Name <[email protected]> Mon, 26 Jun 2026 10:00:00 +0800版本号规范
1.2.3-1 由两部分组成:
- 上游版本:
1.2.3(软件本身的版本) - Debian 修订号:
-1(该上游版本的第几次 Debian 打包)
常用操作
bash
# 查看版本历史
dpkg-parsechangelog
# 生成新版本条目(交互式)
dch -i
# 指定版本号
dch -v 1.2.4-1 "Release 1.2.4"
# 标记发布
dch -r三驾马车的关系
简单来说:
- changelog 决定了包的版本号
- control 定义了包的依赖和元信息
- rules 指挥了如何构建这个包
快速验证你的打包环境
执行以下命令确认基础工具已安装:
bash
dpkg --version # dpkg 工具
dpkg-buildpackage --version # 构建工具
dh --version # debhelper如果提示未安装,执行:
bash
sudo apt install build-essential debhelper devscripts小结
| 文件 | 核心职责 | 类比 |
|---|---|---|
debian/control | 定义依赖和元信息 | 商品的"标签" |
debian/rules | 控制构建流程 | 工厂的"生产线" |
debian/changelog | 管理版本历史 | 产品的"更新日志" |
掌握了这三个文件,你就具备了理解 Debian 打包的基础框架。在接下来的章节中,我们将深入维护者脚本(postinst、prerm、postrm),那是软件包在用户机器上安装、升级、卸载时的实际执行逻辑。
下一篇预告:第一章:postinst 脚本完整解读与最佳实践
