*.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-utilslibfoo0libfoo-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. 中的补丁程序,如果出现问题,他们会继续挖掘。一些维护者可能会使用gitquilt 或其他我不知道的工具,但据我所知,这真的取决于包维护者。 您答案中的某些链接已损坏。

以上是关于*.dsc 文件如何与 *.deb 和源代码文件相关联的主要内容,如果未能解决你的问题,请参考以下文章

DSC 文件资源 - 覆盖/替换文件内容

如何获取ubuntu源码包里面的源码进行编译

如何获取ubuntu源码包里面的源码进行编译

Azure DSC 将文件从存储上传到 VM?

.deb 文件 如何打开

linux系统安装deb文件怎么安装