Skip to content

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

debian/control、rules 与 changelog 详解示意图

如果你曾经尝试将一个应用程序打包成 .deb 包,你一定会遇到 debian/ 目录下的这三个文件:controlruleschangelog。它们是 Debian 源码包的"三驾马车",决定了你的软件包长什么样、怎么构建、版本如何迭代

在开始本专题的正片(postinst、prerm、postrm 维护者脚本)之前,有必要先建立对这三个核心文件的认知。本篇序章会帮你快速扫清基础知识,后续章节将不再赘述。

debian/control:包的"身份证"

control 文件定义了软件包的元信息依赖关系。它是 dpkgapt 在安装、升级、卸载时读取的首要文件。

一个典型的 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架构amd64arm64all(纯脚本)
Depends运行时依赖安装时自动拉取的依赖包
Description包描述第一行是短描述,后续是长描述

💡 关键点Depends 中常见的 ${shlibs:Depends}${misc:Depends}debhelper 自动生成的依赖变量,会在构建时被替换为实际的动态库依赖。

debian/rules:构建的"施工图纸"

rules 是一个 Makefile,告诉 dpkg-buildpackage 如何编译、测试、安装你的软件。它是整个构建过程的核心控制文件

最简 rules(使用 dh)

makefile
#!/usr/bin/make -f

%:
    dh $@

就这么短?是的!dhdebhelper 提供的自动化构建系统,它会按顺序执行一系列标准步骤:

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

三驾马车的关系

简单来说:

  1. changelog 决定了包的版本号
  2. control 定义了包的依赖和元信息
  3. 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 脚本完整解读与最佳实践

最后更新2026/07/25 14:21
如果你觉得这篇文章有帮助,或者想聊聊技术、工作,欢迎通过下面方式联系我:
contact fishfinal