在没有打包系统的情况下,我们有 (A) 源代码,可以将其翻译/编译为 (B) 二进制代码。
对于 debian/ubuntu 包,我们有 (1) 源代码,(2) 源包 - dsc文件和 (3) 二进制包 - deb文件。(2) 与 (1) 和 (3) 相关的源包如何?为什么我们需要它?而且,最重要的问题是:从 (1) 生成 (2) 和 (3) 的工作流是什么?
在没有打包系统的情况下,我们有 (A) 源代码,可以将其翻译/编译为 (B) 二进制代码。
对于 debian/ubuntu 包,我们有 (1) 源代码,(2) 源包 - dsc文件和 (3) 二进制包 - deb文件。(2) 与 (1) 和 (3) 相关的源包如何?为什么我们需要它?而且,最重要的问题是:从 (1) 生成 (2) 和 (3) 的工作流是什么?
工作流程通常大致如下:
Debian 的某个人下载了源代码,并写道
一组补丁文件,用于在 Debian 上构建源代码并符合 Debian 指南。跑
curl -s 'http://archive.ubuntu.com/ubuntu/pool/universe/s/splint/splint_3.1.2.dfsg1-2.diff.gz' | gunzip -dc | less
看到这个示例包。
.dsc
文件和debian/control
文件。“DSC”是 Debian 源代码控制的首字母缩写。.deb
包是从原始上游源代码为每个架构构建的,并应用了 Debian 特定的补丁。这是一个这样的文件。Debian Binary Package Building HOWTO解释了这些文件的格式以及如何检查它们。该.dsc
文件不用于构建逻辑,更多用于元数据。然而,沿途的许多工具都需要它。例如,该Build-Depends:
字段用于安装所需的构建依赖项。
它实际上比这复杂得多。Debian 软件包背后的理念是它们包含构建页面所需的所有信息。通常,源被修改为包含一个debian
目录,该目录包含一个文件,该control
文件描述了该包和它与之交互的其他包的依赖关系(例如,中断、替换、提供虚拟包)。一个rules
文件解释了如何构建和安装包。由于单个源包可以变成许多二进制包(例如,、、、),因此也有关于如何打包foo-utils
的libfoo0
说明libfoo-dev
。debuild
实际上读取这些信息,进行编译,并生成二进制包。一个微妙之处:如果foo
使用libbar-dev
,我实际上可能不知道/关心什么版本libbar
我使用的二进制包。pbuilder
在干净的环境中运行debuild
,因此没有机会针对您未明确指定的内容进行编译。
有关详细信息,请参阅Debian 新维护者指南。