Debian 软件包简介
了解 Debian 包、包管理器和镜像仓库。
什么是 Debian 包?
Linux 发行版有多个家族。大多数发行版都使用软件包来安装软件。一个软件包包含软件运行所需的文件,以及元信息,如描述、版本号、依赖关系、冲突项等。
Debian 操作系统使用 Debian 包。这类包文件的扩展名为 .deb。同一家族的其他发行版也采用相同的包格式,包括 Ubuntu、Linux Mint、Knoppix 以及一些知名度较低的发行版。
本课程将教我们如何自行构建 Debian 包。首先,我们将了解这些包所处的环境。
包管理器与软件仓库
在 Debian 或 Ubuntu 上安装软件时,通常第一步是检查我们的包管理器是否已知该软件。如果已知,安装只需一条命令即可完成。
那么包管理器是如何知道软件信息的呢?它维护着一组仓库地址列表。每个仓库都包含元数据和实际的软件包文件。
当我们请求安装某个软件包(例如 Inkscape:一款矢量图形工具)时,包管理器会查找该软件包的元数据。
注意: 大多数软件都有依赖项。依赖项是指软件正常运行所必需的其他程序或库。
Inkscape 需要 libxml2 来解析和写入 XML 文件,需要 libcairo2 来在屏幕上渲染文本和图像,并需要 Python 解释器以支持插件功能。
随后,包管理器会检查这些依赖项是否已安装。如果没有,则会自动安排安装这些依赖项及其自身的依赖项,这一过程会递归进行。
拉取模型
依赖关系解析机制依赖于仓库提供的**拉取模型**。包管理器决定需要哪些包,然后从仓库中拉取它们。
如果反过来,我们直接将包推送到目标系统,就必须事先明确需要一并推送哪些依赖项。

仓库镜像
Debian 项目提供官方仓库,其中包含了该项目打包的所有软件。然而,大多数系统并不直接使用这些官方仓库,而是通过镜像获取。镜像是一个提供与官方仓库相同内容的 Web 服务器。
镜像将带宽压力分摊到多个组织上。我们通常会选择距离较近的镜像,以获得更低的延迟和更高的传输速度。当某个镜像不可用时,只需修改配置即可切换到另一个镜像。
那些运行大量 Linux 机器的组织往往会自建镜像,以节省上行带宽、降低延迟,并使自身基础设施脱离对无法控制系统的依赖。
软件包列表签名
当我们不是直接从源下载软件包,而是从镜像获取时,如何确保软件包在传输过程中未被篡改?答案是使用加密签名。
Debian 仓库包含一份软件包列表,其中包含软件包文件的链接和校验和。这份列表由一个 PGP(或 GnuPG)密钥进行签名。每台安装 Debian 包的机器都维护一份可信的 PGP 公钥列表:实际上,每台机器都保存一组公钥,并信任与之匹配的私钥所签发的软件包列表。这些公钥用于在安装前验证软件包列表和校验和的完整性。有关如何管理这个公钥环的信息,请参阅 `man apt-key`。
