没有打包系统,我们有(A)源代码,可以翻译/编译为(B)二进制代码。
在debian/ubuntu包的情况下,我们有(1)源代码,(2)源包-dsc文件和(3)二进制包-deb档案。(2)源程序包与(1)和(3)有何关联?我们为什么需要它?而且,最重要的问题是:从(1)生成(2)和(3)的工作流是什么?
工作流程通常大致如下:
- 与Debian无关的人编写了一些源代码,并将其作为包发布在网络上,例如,splitnt-3.1.2.tar.gz
-
有人在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二进制包构建HOWTO解释了这些文件的格式以及如何检查它们
.dsc
文件不用于构建逻辑,更多用于元数据。然而,许多工具都需要它。例如,Build-Depends:
字段用于安装所需的构建依赖项。
它实际上比这复杂得多。Debian包背后的理念是,它们包含构建页面所需的所有信息。通常,源被修改为包括debian
目录,该目录包括control
文件,该文件描述了该包及其交互的其他包的依赖关系(例如,中断、替换、提供虚拟包)。rules
文件解释了如何构建和安装程序包。由于单个源包可以变成许多二进制包(例如,foo-utils
、libfoo0
、libfoo-dev
),因此还描述了如何进行打包。debuild
实际读取这些信息,进行编译,并生成二进制包。微妙之处在于:如果foo
使用libbar-dev
,我可能实际上不知道/不在乎我使用的是libbar
二进制包的哪个版本。pbuilder
在干净的环境中运行debuild
,因此不可能针对未明确指定的内容进行编译。
有关详细信息,请参阅Debian新维护人员指南。