*.dsc 文件如何与 *.deb 和源代码文件相关联
Posted
技术标签:
【中文标题】*.dsc 文件如何与 *.deb 和源代码文件相关联【英文标题】:How *.dsc files are related to *.deb and source code files 【发布时间】:2012-11-10 12:35:34 【问题描述】:没有打包系统,我们有 (A) 源代码,可以翻译/编译成 (B) 二进制代码。
如果是 debian/ubuntu 包,我们有 (1) 源代码,(2) 源包 - dsc 文件和 (3) 二进制包 - deb 文件。 (2) 与 (1) 和 (3) 相关的源包如何?为什么我们需要它?而且,最重要的问题是:从 (1) 生成 (2) 和 (3) 的工作流是什么?
【问题讨论】:
【参考方案1】:实际上比这要复杂得多。 Debian 软件包背后的理念是它们包含构建页面所需的所有信息。通常,源会被修改为包含一个debian
目录,该目录包含一个control
文件,该文件描述了该包和与之交互的其他包的依赖关系(例如,中断、替换、提供虚拟包)。 rules
文件解释了如何构建和安装包。还有关于如何打包的描述,因为单个源包可以变成许多二进制包(例如,foo-utils
、libfoo0
、libfoo-dev
)。 debuild
实际上会读取此信息,进行编译并生成二进制包。一个微妙之处:如果foo
使用libbar-dev
,我可能实际上并不知道/关心我使用的libbar
二进制包的版本。 pbuilder
在干净的环境中运行 debuild
,因此没有机会针对您未明确指定的内容进行编译。
详情请咨询Debian New Maintainers' Guide。
【讨论】:
感谢您的回复。到目前为止,我已经使用了 debuild,但你是说我应该使用 pbuilder 来代替?什么是源码包?它们不被使用?链接你发布它很棒,但它的大小吓到我阅读:) pbuilder 是一个方便的工具,用于验证是否完全指定了依赖项。它基本上创建了一个虚拟环境,除了声明的依赖项之外什么都没有;如果它无法完成构建,通常意味着您有一个未声明的依赖项。但是,如果您只是对此时此地生成.deb
文件感兴趣,则没有必要如此严格。
源包是 debianized 源,即基本上是 .orig.tar.gz 加上你的 debdiff。这是您需要提供给其他想要为自己创建 .deb 文件的人,可能使用他们自己的补丁或调整,或者他们可能希望为不同的架构构建包。如果您想将其提供给其他人,pbuilder
可能会开始有意义。【参考方案2】:
工作流程通常大致如下:
-
不隶属于 Debian 的人编写了一些源代码并将其作为软件包发布在网络上,例如,splint-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
查看示例包。
描述包的textual metadata file — 这是.dsc
文件和debian/control
文件。 “DSC”是 Debian Source Control 的首字母缩写。
.deb
包是为每个架构从原始上游源代码构建的,并应用了特定于Debian 的补丁。 Here is one such file。 Debian Binary Package Building HOWTO 解释了这些文件的格式以及如何检查它们。
.dsc
文件不用于构建逻辑,它更多地用于元数据。然而,沿途的许多工具都需要它。例如,Build-Depends:
字段用于安装所需的构建依赖项。
【讨论】:
很好的答案!还有一个问题。在您在这里给出的示例中,我们有原始代码(上游)和维护者更改后的差异。当原始代码的新版本即将被“debianized”时,维护人员如何跟踪他们的更改?他们将以前的 deb 版本的差异合并到新版本的源代码?他们是否使用了一些 CVS? 发布新版本后,他们通常会重新应用旧.diff.gz.
中的补丁程序,如果出现问题,他们会继续挖掘。一些维护者可能会使用git
或quilt
或其他我不知道的工具,但据我所知,这真的取决于包维护者。
您答案中的某些链接已损坏。以上是关于*.dsc 文件如何与 *.deb 和源代码文件相关联的主要内容,如果未能解决你的问题,请参考以下文章