5.3. 源软件包的结构

5.3.1. 格式

一个源代码软件包通常包括三个文件,.dsc.orig.tar.gz、与 .debian.tar.gz (或 .diff.gz)。它们允许从以编程语言撰写的程序源代码文件,创建二进制软件包 (如前所述的 .deb 文件)。

.dsc (Debian Source Control) 文件是包括 RFC 2822 标头 (如同 control 文件于 第 5.2.1 节 “描述:control 文件”) 的简短文本档,描述原始软件包及包括的其他文件。由维护者签署,保证其真实性。详情见 第 6.5 节 “检查软件包真伪”

例 5.1. 一个.dsc 文件

  1. -----BEGIN PGP SIGNED MESSAGE-----
  2. Hash: SHA256
  3.  
  4. Format: 3.0 (quilt)
  5. Source: zim
  6. Binary: zim
  7. Architecture: all
  8. Version: 0.62-3
  9. Maintainer: Emfox Zhou <emfox@debian.org>
  10. Uploaders: Raphaël Hertzog <hertzog@debian.org>
  11. Homepage: http://zim-wiki.org
  12. Standards-Version: 3.9.6
  13. Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/zim.git
  14. Vcs-Git: git://anonscm.debian.org/collab-maint/zim.git
  15. Build-Depends: debhelper (>= 9), xdg-utils, python (>= 2.6.6-3~), libgtk2.0-0 (>= 2.6), python-gtk2, python-xdg
  16. Package-List:
  17. zim deb x11 optional arch=all
  18. Checksums-Sha1:
  19. ad8de170826682323c10195b65b9f1243fd75637 1772246 zim_0.62.orig.tar.gz
  20. a4f70d6f7fb404022c9cc4870a4e62ea3ca08388 14768 zim_0.62-3.debian.tar.xz
  21. Checksums-Sha256:
  22. 19d62aebd2c1a92d84d80720c6c1dcdb779c39a2120468fed01b7f252511bdc2 1772246 zim_0.62.orig.tar.gz
  23. fc2e827e83897d5e33f152f124802c46c3c01c5158b75a8275a27833f1f6f1de 14768 zim_0.62-3.debian.tar.xz
  24. Files:
  25. 43419efba07f7086168442e3d698287a 1772246 zim_0.62.orig.tar.gz
  26. 725a69663a6c2961f07673ae541298e4 14768 zim_0.62-3.debian.tar.xz
  27.  
  28. -----BEGIN PGP SIGNATURE-----
  29. Version: GnuPG v2
  30. Comment: Signed by Raphael Hertzog
  31.  
  32. iQEcBAEBCAAGBQJUR2jqAAoJEAOIHavrwpq5WFcH/RsdzCHc1oXXxHitU23hEqMj
  33. T6ok29M1UFDJDowMXW75jQ1nT4WPUtvEGygkCHeoO/PvjEvB0sjU8GQlX+N9ddSB
  34. aHfqfAYmVhADNGxrXQT5inZXUa8qGeeq2Sqf6YcWtsnuD56lDbvxkyf/XYopoIEl
  35. oltfl05z/AI+vYsW482YrCz0fxNAKAvkyuPhDebYI8jnKWeAANoqmKpsNc/HYyvT
  36. +ZiA5o57OiGdOKT6XGy3/FiF3dkHiRY8lXW7xdr1BbIgulwl9UmiUNwuxwOYbQO7
  37. edtjiTJqOaFUA0x1zB/XGv5tHr1MjP8naT+kfVoVHTOox51CDbeu5D3DZY4imcY=
  38. =Wtoa
  39. -----END PGP SIGNATURE-----

需要注意的是源码包也有依赖性(编译-依赖),和那些二进制包依赖完全不同,因为它们需要设置编译软件所需工具的选项后,再来构建二进制包。

当心 不同的命名空间

需注意,原始软件包与其产生的可运行软件包间,不需使用对应的名称。每个原始软件包可能产生多个可运行软件包。所以 .dsc 文件有 SourceBinary 字段记录原始软件包的名称与其产生的可运行软件包清单。

文化 为什么要分成几个软件包

通常,一个源代码软件包 (对于一个指定软件来说) 可产生多个二进制软件包。分开多个二进制包,可以满足在不同的环境使用 (部分) 软件。对于一个共享库,安装它后,可以让一个于应用程序工作 (如,libc6);或者安装后,可以用来开发一个新的程序 (libc6-dev 就是这样的软件包)。在客户端-服务端服务里发现同样的逻辑,在一部机器安装服务端的内容同时在另部机器安装客户端的内容 (例如: openssh-server 与 openssh-client)。

一样频繁的是,在一个专用的软件包提供文档:用户可以不依赖软件包而独立安装文档包,并且可以在任何时候选择删除掉以节省磁盘空间。此外,这也节省了 Debian 镜像的磁盘空间,因为在所有的架构中(而不是在每个架构中都复制一个一样的文档软件包)将共享这个文档软件包。

洞察不同格式的源码包

本来只有一个原始的软件包格式,像1.0这样的格式,它关联了.orig.tar.gz.diff.gz“Debian化”的补丁(还有一个变种,由一个单一的.tar.gz归档,当.orig.tar.gz不可用时它会自动使用。).

因为 Debian Squeeze、及其开发者可以选择新的格式以校正旧格式的问题。格式 3.0 (quilt) 在同个原始软件包里纳入多个上游文件:除了使用 .orig.tar.gz,还可纳入 .orig-*component*.tar.gz 文件。这种做法有助于散布在多个上游组件的软件,只需准备一个原始软件包。通常把这些文件压缩成 bzip2xz 格式而不是 gzip,以节省磁盘空间与网络资源。最后,在单件补丁的情况下,.diff.gz.debian.tar.gz 取代,包括编译指令与软件包维护者奉献的上传软件包补丁。最后的这些部分记录于格式兼容的 quilt — 它是强化补丁管理的工具。

.orig.tar.gz 文件包括原开发者提供的源代码。要求 Debian 的软件包维护者不要修改它,以便检查原来的文件与集成后的文件 (比较校验码就知道) 并且尊重其他著者的意愿。

.debian.tar.gz 包括 Debian 维护者做的所有修订,特别是添加至 debian 目录运行 Debian 软件包的指令。

工具 解压缩源码包

使用原始软件包时,您可使用 dpkg-source 指令 (从 dpkg-dev 软件包取得) 解压缩它:

  1. $

可以使用 apt-get 下载原始软件包并立即拆包它。然而,这需要使用适当的 deb-src 位于 /etc/apt/sources.list 文件内,(详情见 第 6.1 节 “写入sources.list文件”)。用于列出原始软件包的 “来源” (就是收藏原始软件包的服务器)。

  1. $

5.3.2. Debian 中的使用

Debian 的基础是原始软件包。Debian 所有的软件包都从原始软件包而来,对软件包的修改也是针对原始软件包。运行软件包出了问题后,Debian 维护者修改原始软件包后,再编译为运行软件包。维护者的工作成果都在 Debian 的原始软件包内:您可轻易地回到原始软件包找出源头。

Debian 服务器收到新版软件包 (原始软件包或运行软件包) 时,原始软件包是最重要的。原始软件包被支持 Debian 的多种架构机器编译。开发者同时送出指定架构 (通常是 i386 或 amd64) 的多个运行软件包,其实一点都不重要,因为可以自动生成该等运行软件包。