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
文件
- -----BEGIN PGP SIGNED MESSAGE-----
- Hash: SHA256
- Format: 3.0 (quilt)
- Source: zim
- Binary: zim
- Architecture: all
- Version: 0.62-3
- Maintainer: Emfox Zhou <emfox@debian.org>
- Uploaders: Raphaël Hertzog <hertzog@debian.org>
- Homepage: http://zim-wiki.org
- Standards-Version: 3.9.6
- Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/zim.git
- Vcs-Git: git://anonscm.debian.org/collab-maint/zim.git
- Build-Depends: debhelper (>= 9), xdg-utils, python (>= 2.6.6-3~), libgtk2.0-0 (>= 2.6), python-gtk2, python-xdg
- Package-List:
- zim deb x11 optional arch=all
- Checksums-Sha1:
- ad8de170826682323c10195b65b9f1243fd75637 1772246 zim_0.62.orig.tar.gz
- a4f70d6f7fb404022c9cc4870a4e62ea3ca08388 14768 zim_0.62-3.debian.tar.xz
- Checksums-Sha256:
- 19d62aebd2c1a92d84d80720c6c1dcdb779c39a2120468fed01b7f252511bdc2 1772246 zim_0.62.orig.tar.gz
- fc2e827e83897d5e33f152f124802c46c3c01c5158b75a8275a27833f1f6f1de 14768 zim_0.62-3.debian.tar.xz
- Files:
- 43419efba07f7086168442e3d698287a 1772246 zim_0.62.orig.tar.gz
- 725a69663a6c2961f07673ae541298e4 14768 zim_0.62-3.debian.tar.xz
- -----BEGIN PGP SIGNATURE-----
- Version: GnuPG v2
- Comment: Signed by Raphael Hertzog
- iQEcBAEBCAAGBQJUR2jqAAoJEAOIHavrwpq5WFcH/RsdzCHc1oXXxHitU23hEqMj
- T6ok29M1UFDJDowMXW75jQ1nT4WPUtvEGygkCHeoO/PvjEvB0sjU8GQlX+N9ddSB
- aHfqfAYmVhADNGxrXQT5inZXUa8qGeeq2Sqf6YcWtsnuD56lDbvxkyf/XYopoIEl
- oltfl05z/AI+vYsW482YrCz0fxNAKAvkyuPhDebYI8jnKWeAANoqmKpsNc/HYyvT
- +ZiA5o57OiGdOKT6XGy3/FiF3dkHiRY8lXW7xdr1BbIgulwl9UmiUNwuxwOYbQO7
- edtjiTJqOaFUA0x1zB/XGv5tHr1MjP8naT+kfVoVHTOox51CDbeu5D3DZY4imcY=
- =Wtoa
- -----END PGP SIGNATURE-----
需要注意的是源码包也有依赖性(编译-依赖
),和那些二进制包依赖完全不同,因为它们需要设置编译软件所需工具的选项后,再来构建二进制包。
当心 不同的命名空间
需注意,原始软件包与其产生的可运行软件包间,不需使用对应的名称。每个原始软件包可能产生多个可运行软件包。所以 .dsc
文件有 Source
与 Binary
字段记录原始软件包的名称与其产生的可运行软件包清单。
文化 为什么要分成几个软件包
通常,一个源代码软件包 (对于一个指定软件来说) 可产生多个二进制软件包。分开多个二进制包,可以满足在不同的环境使用 (部分) 软件。对于一个共享库,安装它后,可以让一个于应用程序工作 (如,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
文件。这种做法有助于散布在多个上游组件的软件,只需准备一个原始软件包。通常把这些文件压缩成 bzip2
或 xz
格式而不是 gzip
,以节省磁盘空间与网络资源。最后,在单件补丁的情况下,.diff.gz
被 .debian.tar.gz
取代,包括编译指令与软件包维护者奉献的上传软件包补丁。最后的这些部分记录于格式兼容的 quilt
— 它是强化补丁管理的工具。
.orig.tar.gz
文件包括原开发者提供的源代码。要求 Debian 的软件包维护者不要修改它,以便检查原来的文件与集成后的文件 (比较校验码就知道) 并且尊重其他著者的意愿。
.debian.tar.gz
包括 Debian 维护者做的所有修订,特别是添加至 debian
目录运行 Debian 软件包的指令。
工具 解压缩源码包
使用原始软件包时,您可使用 dpkg-source
指令 (从 dpkg-dev 软件包取得) 解压缩它:
$
可以使用 apt-get
下载原始软件包并立即拆包它。然而,这需要使用适当的 deb-src
位于 /etc/apt/sources.list
文件内,(详情见 第 6.1 节 “写入sources.list
文件”)。用于列出原始软件包的 “来源” (就是收藏原始软件包的服务器)。
$
5.3.2. Debian 中的使用
Debian 的基础是原始软件包。Debian 所有的软件包都从原始软件包而来,对软件包的修改也是针对原始软件包。运行软件包出了问题后,Debian 维护者修改原始软件包后,再编译为运行软件包。维护者的工作成果都在 Debian 的原始软件包内:您可轻易地回到原始软件包找出源头。
Debian 服务器收到新版软件包 (原始软件包或运行软件包) 时,原始软件包是最重要的。原始软件包被支持 Debian 的多种架构机器编译。开发者同时送出指定架构 (通常是 i386 或 amd64) 的多个运行软件包,其实一点都不重要,因为可以自动生成该等运行软件包。