第 6 章 Debian 档案库

目录

6.1. 有多少种 Debian 发布版本?
6.2. 诸如 etch、lenny 之类的名字是什么?
6.2.1. 过去使用过哪些代号?
6.2.2. 这些代号来自哪里?
6.3. 那“sid”呢?
6.4. stable 目录包含什么?
6.5. “测试版”包含什么?
6.5.1. “测试”的过程是怎样的?它是如何“冻结”的?
6.6. “不稳定版”包含什么?
6.7. Debian 档案库中的那些目录都是干什么用的?
6.8. dists/stable/main 里面的那些目录都是干什么用的?
6.9. 源代码在哪里?
6.10. pool 目录里有什么?
6.11. “incoming”目录是什么?
6.12. 我要如何建立我自己的、可使用 apt 的软件仓库?

6.1. 有多少种 Debian 发布版本?

有三种主要的发布版本:“稳定(stable)”版、“测试(testing)”版和“不稳定(unstable)”版。“测试”版有时会“冻结”(参见第 6.5.1 节 ““测试”的过程是怎样的?它是如何“冻结”的?”)。此外,还有“旧的稳定(oldstable)”版(也就是之前的“稳定”版),以及“实验(experimental)”版。

实验版本用于提供仍在开发中的软件包,它们有很高的机率会损坏您的系统。希望研究和测试最前沿软件的开发人员会使用该发行版本。用户不应该使用这些软件包,因为即使是对最有经验的用户,它们也可能是危险和有害的。

参见第 3 章 选择一个 Debian 发布版本以获得关于选择 Debian 发布版本的帮助。

6.2. 诸如 etch、lenny 之类的名字是什么?

那些只不过是“代号”。当 Debian 发布版本仍处于开发阶段时,它们没有版本号,只有代号。设立这些代号的目的是使得制作 Debian 发布版本的镜像更加容易(如果一个真实存在的目录,如 unstable,突然更名为 stable,将会不得不毫无意义地下载很多文件)。

当前,stable 是到 bullseye(即 Debian GNU/Linux 11)的符号链接,而 testing 是到 bookworm 的符号链接。这意味着 bullseye 是当前的稳定版本,而 bookworm 是当前的测试版本。

unstable 是到 sid 的永久链接,因为 sid 永远是不稳定版本的代号(参见第 6.3 节 “那“sid”呢?”)。

6.2.1. 过去使用过哪些代号?

除了 bullseyebookworm,已经用过的代号有:版本 1.1 buzz、版本 1.2 rex、版本 1.3.x bo、版本 2.0 hamm、版本 2.1 slink、版本 2.2 potato、版本 3.0 woody、版本 3.1 sarge、版本 4.0 etch、版本 5.0 lenny、版本 6.0 squeeze、版本 7 wheezy、版本 8 jessie、版本 9 stretch、版本 10 buster

6.2.2. 这些代号来自哪里?

到目前为止,这些代号都来自皮克斯电影《玩具总动员》系列的角色。

  • buzz(Debian 1.1)是太空人 Buzz Lightyear(巴斯光年),

  • rex(Debian 1.2)是那只霸王龙,

  • bo(Debian 1.3)是 Bo Peep(宝贝),那个放羊的女孩,

  • hamm(Debian 2.0)是那个小猪储蓄罐,

  • slink(Debian 2.1)是 Slinky Dog,那只玩具狗,

  • potato(Debian 2.2)当然是 Mr. Potato(蛋头先生),

  • woody(Debian 3.0)是牛仔胡迪,

  • sarge(Debian 3.1)是绿色塑料玩具士兵的首领,

  • etch(Debian 4.0)是那个玩具画板(Etch-a-Sketch),

  • lenny(Debian 5.0)是那个玩具望远镜,

  • squeeze(Debian 6)是那个三只眼的外星人的名字,

  • wheezy(Debian 7)是那只戴着红领结的橡胶玩具企鹅,

  • jessie(Debian 8)是那个唱着约德尔的女牛仔,

  • stretch(Debian 9)是那个有八条长着吸盘的长腿的橡胶玩具章鱼,

  • buster(Debian 10)是安弟的宠物狗。

  • bullseye(Debian 11)是胡迪的玩具木马。

  • bookworm(Debian 12)是那个内置手电筒的、爱看书的玩具蠕虫。

  • trixie(Debian 13)是蓝色塑料三角龙。

  • sid 是破坏所有玩具的隔壁男孩。

使用《玩具总动员》角色名的决定是由 Bruce Perens 作出的,他当时是 Debian 计划领导者,同时也在皮克斯(该电影的制作商)工作。

6.3. 那“sid”呢?

sid 或称作 unstable 是大多数软件包最初上传到的地方。它从来不会被直接发布,因为将被发布的软件包首先需要进入 testing,然后才能进入 stable 并发布。sid 包含已经发布和尚未发布的架构的软件包。

“sid”这个名字同样来自动画电影《玩具总动员》:Sid 是破坏玩具的隔壁男孩 :-)

[2]

6.4. stable 目录包含什么?

  • stable/main/:这个目录包含了组成 Debian GNU/Linux 系统最新版本的正式部分的软件包。

    这些软件包都符合 Debian 自由软件指导方针,所以都可以自由使用和分发。

  • stable/non-free/:这个目录包含了分发时需要发布者留意特定的版权要求,所以分发受到限制的软件包。

    比如,有些软件包的许可证禁止商业性质的分发。有些软件包可以重新发布,但事实上是共享软件,而不是自由软件。这些软件包需要先分别研究甚至讨论其许可证,然后才能重新发布(例如被包含于 CD-ROM 中)。

  • stable/contrib/:这个目录包含了本身符合 DFSG 且可以自由分发,但以某种方式依赖由于不能自由分发而只能被放在 non-free 区的软件的软件包。

6.5. “测试版”包含什么?

unstable 中经过了一定测试的软件包会进入“testing”目录。

这些软件包的版本在所有已构建的架构上要保持一致,并且不能含有使它们无法安装的依赖关系;它们也必须比“不稳定版”含有更少的对发布关键的缺陷。通过这种方式,我们希望“测试版”总是更接近于一个发布候选版本。

关于“测试”状态的更多一般性信息,以及各软件包的“测试”状态的含义,请阅读 https://www.debian.org/devel/testing

6.5.1. “测试”的过程是怎样的?它是如何“冻结”的?

当“测试版”足够成熟的时候,发布管理员会开始“冻结”它。正常的迁移延迟会被延长,以确保从“不稳定版”进入“测试版”的缺陷尽可能少。

经过一段时间后,“测试版”会被真正“冻结”。这意味着所有向“测试版”的软件包迁移都会被暂停,除非它们含有对发布关键缺陷(release-critical bug)的修补。当发布非常临近的时候,“测试版”也可能处于“测试周期”中的“深度冻结”阶段。

当“测试版”被“冻结”时,“不稳定版”也会处于一个接近冻结的状态。这是因为开发者倾向于不把全新版本的软件上传到“不稳定版”,这样“测试版”中已冻结的软件需要小幅更新时,或是需要修复阻止它们成为“稳定版”的对发布关键的缺陷时,“不稳定版”就能派得上用场。

我们有一个“测试版”的阻止软件包发布的缺陷列表,或是阻止整个版本发布的缺陷列表。详情请见当前“测试版”的发行信息

当缺陷的数量降低到可接受的最大值时,已冻结的“测试版”会被宣布是“稳定”的,并被赋予一个版本号并发布。

最重要的缺陷数量是“对发布关键的(Release Critical)”缺陷数量,可以在对发布关键的缺陷的状态页面找到。常见的发布目标是 NoRCBugs,也就是发布版本应当不含有严重程度为 critical、grave 或是 serious 的缺陷。所有被认为是“关键的”的问题的列表可以在 RC 政策文档中找到。

随着每次新版本的发布,之前的“稳定版”将会变得过时,并被存档。欲了解更多信息,请阅读 Debian 存档

6.6. “不稳定版”包含什么?

“unstable”目录包含了当前处于开发中的系统的快照。我们欢迎用户使用和测试这些软件包,但需要做好充足的准备。使用“不稳定版”的优点是您可以一直跟随 GNU/Linux 软件行业的最新技术,但是如果系统崩成两半了,您就需要自行把它们粘起来 :-)

“unstable”目录中也有 main、contrib 和 non-free 子目录,划分标准和“stable”相同。

6.7. Debian 档案库中的那些目录都是干什么用的?

为 Debian GNU/Linux 打包的软件位于每个 Debian 镜像站的多个目录树中的一个。

dists 目录是“distributions”的缩写,它是访问当前可用的 Debian 发布版本(和预发布版本)的正统方式。

pool 目录包含实际的软件包,参见第 6.10 节 “pool 目录里有什么?”

有以下的辅助目录:

/tools/

可用于创建可引导磁盘、对磁盘进行分区、压缩和解压文件,以及引导 Linux 的 DOS 工具。

/doc/

基本的 Debian 文档,例如这份 FAQ、缺陷报告系统的手册,等等。

/indices/

站点的各种索引文件(Maintainers 文件和 override 文件)。

/project/

主要是针对开发者的资料和一些杂项文件。

6.8. dists/stable/main 里面的那些目录都是干什么用的?

在每个主目录树中[3],有三种类型的子目录是包含索引文件的。

第一种是 binary-某某某 子目录,它包含了某个可用的计算机架构的二进制软件包的索引文件,例如 binary-i386 用于可在 Intel x86 PC 上执行的软件包,而 binary-sparc 用于可在 Sun SPARCStations 上执行的软件包。

每个版本可用的架构的完整列表可以在该版本的网页中找到。当前版本的架构列表请见第 4.1 节 “Debian GNU/Linux 可以运行于哪些硬件架构/系统上?”

binary-* 中的索引文件名为 Packages(.gz, .bz2),它们包含了该发行版包括的每个二进制软件包的摘要。实际的二进制软件包位于顶级的 pool 目录

此外,还有一个子目录叫做 source/,它包含了该发行版包括的源码包的索引文件。这个文件名为 Sources(.gz, .bz2)。

最后一类重要的子目录存放了安装系统的索引文件,它们位于debian-installer/binary-架构名

6.9. 源代码在哪里?

Debian 系统的一切都有源代码。进一步地说,系统中大多数程序的许可证要求在分发程序的同时必须同时分发源代码,或者可以按要求提供源代码。

源代码在 pool 目录中(参见第 6.10 节 “pool 目录里有什么?”),和特定架构的二进制包的目录一起分发。要在不熟悉档案库结构的情况下获得源代码,可以使用类似 apt-get source 软件包名 的命令。

由于许可证上的限制,“contrib”和“nonfree”区的软件包可能提供源代码,也可能不提供。这些软件包不是 Debian 系统的正式组成部分。有些情况下,只允许分发没有源代码的“binaly blob”(例如 firmware-misc-nonfree);还有些情况下,软件许可证禁止分发预编译的二进制文件,但允许分发源码包,用户可以在本地编译(例如 broadcom-sta-dkms)。

6.10. pool 目录里有什么?

软件包位于一个很大的“池(pool)”中,依源码包的名称进行组织。为了便于管理,pool 按照区(“main”、“contrib”和“non-free”)和源码包名的首字母进行分类。这些目录包括一些文件:每个架构的二进制软件包,以及用于生成这些二进制软件包的源码包。

要得到单个软件包的存放位置,您可以执行类似 apt-cache showsrc 软件包名 的命令,再查看“Directory:”行。例如,apache 软件包位于 pool/main/a/apache/

另外,因为以 lib* 打头的软件包太多了,它们被单独处理:比如,libpaper 软件包位于 pool/main/libp/libpaper/

[4]

6.11. “incoming”目录是什么?

在开发者上传软件包之后,它将在“incoming”目录待上一小段时间,以验证软件包的真实性,然后才会被允许进入档案库。

通常您不应该安装这里的软件包。然而,在罕见的紧急情况下,您可以访问位于 https://incoming.debian.org/ 的“incoming”目录。您可以手动下载软件包、验证 .changes 和 .dsc 文件中的 GPG 签名和 MD5 校验和,然后安装这些软件包。

6.12. 我要如何建立我自己的、可使用 apt 的软件仓库?

如果您构建了一些私用的 Debian 软件包,并且想要使用标准的 Debian 软件包管理工具安装它们,您可以建立您自己的、可使用 apt 的软件包仓库。如果您想要共享您的 Debian 软件包,而它们还没有被 Debian 计划分发,也可以如此做。建立的步骤可以在 Debian 维基上找到。



[2] 在现在的 sid 还不存在的时候,FTP 站点的组织结构有一个重大缺陷:它假设当一个架构在“不稳定版”中被创建的时候,这个架构一定会在新的“稳定版”中发布。对于很多架构,情况并不是这样的,这就导致那些目录在新版本发布的时候要被重新命名。这并不现实,因为重命名会消耗大量带宽。

档案库的管理员几年来处理这一问题的方法是,将未发布的架构的二进制文件放入一个特别的目录,名为“sid”。对于那些还未发布的架构,它们初次发布的时候,会创建一个从当前的 stable 到 sid 的链接,之后就正常地在 unstable 树中创建目录。这种组织结构让用户有些困惑。

随着软件包池的出现(参见第 6.10 节 “pool 目录里有什么?”),二进制软件包开始被存放在 pool 中的标准位置,和发布版本无关,所以发布一个新版本不再会大量占用镜像的带宽(不过在开发过程中会有很多小的带宽占用)。

[3] dists/stable/maindists/stable/contribdists/stable/non-free,以及 dists/unstable/main/,等等。

[4] 历史上,软件包曾依照所处的发布版本,保存在 dists 目录的对应的子目录下。这造成了各种问题,例如出现重大变更时,镜像站的带宽占用会非常大。软件包池的出现修复了这个问题。

dists 目录至今仍用于存放 apt 等程序使用的索引文件。