2012-11-22 33 views
11

没有打包系统,我们有(A)源代码,可以将其翻译/编译为(B)二进制代码。* .dsc文件如何与* .deb和源代码文件相关

在于Debian/Ubuntu包的情况下,我们有(1)的源代码,(2)源包 - DSC文件和(3)的二进制包 - DEB文件。 (2)与(1)和(3)相关的源程序包是怎么样的?我们为什么需要它?而且,最重要的问题是:从(1)中生成(2)和(3)的工作流程是什么?

回答

10

工作流程通常会大约是这样的:不符合Debian附属

  1. 有人写一些源代码,并将其发布为Web上的包,例如,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. A textual metadata file描述包 - 这是.dsc文件和debian/control文件。 “DSC”是Debian源代码管理的首字母缩写。
  3. 二进制.deb软件包是针对每个架构从原始上游源代码构建而成,并且应用了Debian特定的修补程序。 Here is one such fileDebian Binary Package Building HOWTO解释了这些文件的格式以及如何检查它们。

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

+0

很好的答案!还有一个问题。在这里给出的例子中,我们在维护者更改之后有原始代码(上游)和差异。当新版本的原始代码即将被“debian化”时,维护人员如何跟踪他们的变化?他们将以前deb发布版本的差异合并到新版本的源代码中?他们是否使用过一些CVS? –

+1

新版本发布后,他们通常会重新应用旧的'.diff.gz.'中的修补程序。如果发生故障,他们将继续挖掘。一些维护者可能会使用'git'或'quilt'或其他我不知道的工具,但据我所知,这真的取决于包维护者。 – andrewdotn

+0

您答案中的部分链接已损坏。 –

1

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

有关详细信息,请参阅Debian New Maintainers' Guide

+0

感谢您的回复。到目前为止,我已经使用了debuild,但是你说我应该使用pbuilder呢?什么是源代码包?他们没有用?链接你发布它是伟大的,但它的大小让我害怕从阅读:) –

+1

pbuilder是一个便捷的工具,用于验证依赖关系是完全指定的。它基本上创建了一个虚拟环境,除了已声明的依赖关系外,如果无法完成构建,通常意味着您有未声明的依赖关系。但是如果你现在只是对生成'.deb'文件感兴趣,没有必要这么严格。 – tripleee

+1

源包是debianized源,即基本上是.orig.tar.gz加上你的debdiffs。这就是你需要提供给其他想为自己创建.deb文件的人,也许是他们自己的补丁或者调整,或者他们可能想为不同的体系结构构建软件包。如果你想把它提供给其他人,'pbuilder'可能开始有意义。 – tripleee