我想知道 Linux 更新管理器是如何工作的。例如,我的 Linux 发行版如何检查是否有任何可下载的更新以及从哪些服务器下载这些更新?如果我正在处理不属于主发行版的第三方软件,这些程序如何与我的更新管理器交互以通知我这些程序有可用更新?最后,关于这个主题有哪些好的文献?
答案1
根据你的发行版不同它会有些不同。
通常,每个发行版都会保留一份可供安装的所有软件包的庞大列表。这被称为软件存储库或简称“repo”。包管理器(apt、RPM、pacman 等...)会定期从 repo 中提取更新的软件包列表。发行版开发人员拥有 repo 中软件包的所有权,他们会执行以下任务:以发行版期望的格式打包软件包(repo 通常包含从上游检索到的原始源代码编译的软件包版本)、查看提交给发行版的有关软件包的错误、在官方“原始”源代码上应用补丁(可能是为了使它们更好地集成到系统中、配置它们或修复上游尚未解决的问题),并且他们会查看上游软件包是否有可能应用于软件存储库中的版本的更新。
例如:
- http://packages.ubuntu.com/
- http://www.debian.org/distrib/packages
- http://gentoo-portage.com/
- http://www.archlinux.org/packages/
- https://admin.fedoraproject.org/pkgdb
有些发行版实际上并不应用常规版本更新。例如,Ubuntu 将坚持使用该发行版发布时的软件版本。它们通常只修复安全问题或重大错误。这确保软件不会发生意外更改(例如,下一个版本可能会有重大的 UI 更改,新的错误会破坏某些东西,大型组织可能会针对特定版本的源代码应用自己的自定义补丁)。软件包维护者每 6 个月会从 Debian 中提取软件包列表,应用 Ubuntu 修复/补丁,然后发布新版本的发行版。有此规则的一些例外情况,最值得注意的是 Firefox,它将更新到 Mozilla 提供的最新稳定版本。
Debian 有稳定版、测试版和不稳定版。软件包一旦准备好,就会从不稳定版移至测试版。然后,每 1.5 年 Debian 会发布一个“稳定”版本,锁定当前测试版的软件包。
同样,Ubuntu 有一个特殊的LTS(或长期支持)每 2 年左右发布一次,该版本的软件包维护时间更长(5 年,尽管桌面软件包曾经是 3 年)。
其他发行版会尽可能地跟踪源代码。例如 Arch 和 Gentoo。它们被称为“滚动发布'。虽然它们通常也有不稳定和稳定的类别,软件包在功能得到验证后会转移,但可能只需要几个月甚至几周,而不是像其他发行版那样需要半年或更长时间。您可以在这些发行版上获得较新版本的软件,但要以稳定性为代价。
Debian 测试版可以看作是滚动发布。而 Debian Stable 则类似于 Ubuntu 的 LTS 版本。
大多数真正的第三方软件(即不是来自发行版存储库而是直接来自网站的软件)根本不会与发行版的更新系统交互。如果您手动安装软件(而不是使用 apt-get、yum 或其他工具),则您有责任保持其更新。
一些第三方会维护自己的存储库,您的更新系统可以将其导入其中。例如,Google 为 Ubuntu 上的 Chrome 维护了一个存储库。此外还有许多 Launchpad PPA。在这种情况下,您依赖第三方来维护更新。