我想知道 Linux 的更新管理器是如何工作的。例如,我的 Linux 发行版如何检查是否有任何可用的更新可供下载以及哪些服务器可以下载这些更新?如果我正在处理不属于主发行版的第三方软件,这些程序如何与我的更新管理器交互以通知我这些程序有可用的更新?最后,关于这个主题有哪些好的文献?
答案1
这取决于。每个主要 Linux 发行版的细节都不同。
第1部分您的问题:它如何适用于 OS(操作系统)?
要么有镜像列表,要么有操作系统获取镜像列表的分发点。或者有一个硬编码 URL 指向提供这些更新的 HA 服务器。通常使用HTTP、FTP作为传输协议。 HTTPS 可能用于非开源发行版。本地镜像可能包括 NFS。
选择更新服务器后,操作系统会下载包含所有软件包版本号的列表。如果版本号高于安装的版本,则应升级。包包含对其他将被检查的包(依赖项)的引用。如果较新的软件包需要尚未安装的其他软件包,这些软件包也会被下载(通常到临时暂存目录)。然后安装这些更新。
第2部分您的问题:它如何适用于第三方软件?
如果无法将包的源 URL 集成到本地发行版中,则不会。
如果第 3 方提供与您的发行版匹配的存储库,这很容易。如果他们不提供这一点,那就更困难了。
在后一种情况下,您必须编写一个机制来:
- 检查是否有较新的版本
- 下载它们
- 可选择编译它们
- 包装它们
- 为这些包构建本地存储库
答案2
从版本号来看,如果你指的是 Ubuntu 的更新管理器,它只是 apt-get 的一个有限前端。
基本上有两个数据库,一个存储在您的计算机上,记录您安装的软件包及其版本;另一个数据库存储在您的计算机上,记录您安装的软件包及其版本。另一个保存您从服务器下载的数据库,其中包含所有可用的软件包和版本号。
当您从更新服务器下载更新(元信息)时,程序将检查您安装的任何软件包是否具有较新版本,如果是,则可以升级该软件包。
在 ubuntu 上,当apt-get update
(获取元信息)完成时,更新管理器将检测更改,并查看是否有可用的更新,如果有,它会弹出。