没有打包系统,我们有(A)源代码,可以将其翻译/编译为(B)二进制代码。* .dsc文件如何与* .deb和源代码文件相关
在于Debian/Ubuntu包的情况下,我们有(1)的源代码,(2)源包 - DSC文件和(3)的二进制包 - DEB文件。 (2)与(1)和(3)相关的源程序包是怎么样的?我们为什么需要它?而且,最重要的问题是:从(1)中生成(2)和(3)的工作流程是什么?
没有打包系统,我们有(A)源代码,可以将其翻译/编译为(B)二进制代码。* .dsc文件如何与* .deb和源代码文件相关
在于Debian/Ubuntu包的情况下,我们有(1)的源代码,(2)源包 - DSC文件和(3)的二进制包 - DEB文件。 (2)与(1)和(3)相关的源程序包是怎么样的?我们为什么需要它?而且,最重要的问题是:从(1)中生成(2)和(3)的工作流程是什么?
工作流程通常会大约是这样的:不符合Debian附属
有人在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特定的修补程序。 Here is one such file。 Debian Binary Package Building HOWTO解释了这些文件的格式以及如何检查它们。.dsc
文件不用于构建逻辑,它更多用于元数据。然而,许多工具都需要它。例如,Build-Depends:
字段用于安装必需的构建依赖项。
它实际上比这更复杂。 Debian软件包背后的想法是,它们包含了构建页面所需的所有信息。通常,源被修改为包括一个debian
目录,该目录包括一个control
文件,该文件描述该软件包以及与其交互的其他软件包(例如,中断,替换,提供虚拟软件包)的依赖关系。 A rules
文件解释了如何构建和安装软件包。也有关于如何封装的说明,因为单个源封装可以变成许多二进制封装(例如,foo-utils
,libfoo0
,libfoo-dev
)。 debuild
实际上读取这些信息,进行编译,并生成二进制包。微妙之处:如果foo
使用libbar-dev
,我可能实际上不知道/关心我使用的二进制包的版本。 pbuilder
在干净的环境中运行debuild
,所以没有机会针对你没有明确指定的东西进行编译。
有关详细信息,请参阅Debian New Maintainers' Guide。
感谢您的回复。到目前为止,我已经使用了debuild,但是你说我应该使用pbuilder呢?什么是源代码包?他们没有用?链接你发布它是伟大的,但它的大小让我害怕从阅读:) –
pbuilder是一个便捷的工具,用于验证依赖关系是完全指定的。它基本上创建了一个虚拟环境,除了已声明的依赖关系外,如果无法完成构建,通常意味着您有未声明的依赖关系。但是如果你现在只是对生成'.deb'文件感兴趣,没有必要这么严格。 – tripleee
源包是debianized源,即基本上是.orig.tar.gz加上你的debdiffs。这就是你需要提供给其他想为自己创建.deb文件的人,也许是他们自己的补丁或者调整,或者他们可能想为不同的体系结构构建软件包。如果你想把它提供给其他人,'pbuilder'可能开始有意义。 – tripleee
很好的答案!还有一个问题。在这里给出的例子中,我们在维护者更改之后有原始代码(上游)和差异。当新版本的原始代码即将被“debian化”时,维护人员如何跟踪他们的变化?他们将以前deb发布版本的差异合并到新版本的源代码中?他们是否使用过一些CVS? –
新版本发布后,他们通常会重新应用旧的'.diff.gz.'中的修补程序。如果发生故障,他们将继续挖掘。一些维护者可能会使用'git'或'quilt'或其他我不知道的工具,但据我所知,这真的取决于包维护者。 – andrewdotn
您答案中的部分链接已损坏。 –