12

在没有打包系统的情况下,我们有 (A) 源代码,可以将其翻译/编译为 (B) 二进制代码。

对于 debian/ubuntu 包,我们有 (1) 源代码,(2) 源包 - dsc文件和 (3) 二进制包 - deb文件。(2) 与 (1) 和 (3) 相关的源包如何?为什么我们需要它?而且,最重要的问题是:从 (1) 生成 (2) 和 (3) 的工作流是什么?

4

2 回答 2

13

工作流程通常大致如下:

  1. 不隶属于 Debian 的人编写了一些源代码并将其作为一个包发布在网络上,例如splint-3.1.2.tar.gz
  2. Debian 的某个人下载了源代码,并写道

    1. 一组补丁文件,用于在 Debian 上构建源代码并符合 Debian 指南。跑

      curl -s 'http://archive.ubuntu.com/ubuntu/pool/universe/s/splint/splint_3.1.2.dfsg1-2.diff.gz' | gunzip -dc | less
      

      看到这个示例包。

    2. 描述包的文本元数据文件——这是.dsc文件和debian/control文件。“DSC”是 Debian 源代码控制的首字母缩写。
  3. 二进制.deb包是从原始上游源代码为每个架构构建的,并应用了 Debian 特定的补丁。这是一个这样的文件Debian Binary Package Building HOWTO解释了这些文件的格式以及如何检查它们。

.dsc文件不用于构建逻辑,更多用于元数据。然而,沿途的许多工具都需要它。例如,该Build-Depends:字段用于安装所需的构建依赖项。

于 2012-11-22T17:29:16.673 回答
2

它实际上比这复杂得多。Debian 软件包背后的理念是它们包含构建页面所需的所有信息。通常,源被修改为包含一个debian目录,该目录包含一个文件,该control文件描述了该包和它与之交互的其他包的依赖关系(例如,中断、替换、提供虚拟包)。一个rules文件解释了如何构建和安装包。由于单个源包可以变成许多二进制包(例如,、、、),因此也有关于如何打包foo-utilslibfoo0说明libfoo-devdebuild实际上读取这些信息,进行编译,并生成二进制包。一个微妙之处:如果foo使用libbar-dev,我实际上可能不知道/关心什么版本libbar我使用的二进制包。pbuilder在干净的环境中运行debuild,因此没有机会针对您未明确指定的内容进行编译。

有关详细信息,请参阅Debian 新维护者指南

于 2012-11-22T15:45:40.823 回答