开始安装软件包并进一步获取更新

开始安装软件包并进一步获取更新

是否存在一个包管理器,在安装/更新期间已经开始安装第一个获取的包,同时其他包仍在下载?

虚构场景示例:

Chromium 依赖于 libwebkit。

通常情况下,当用户运行apt-get install chromiumapt 时,会获取较小的libwebkit.deb库,然后等待chromium.deb获取。这纯粹是浪费时间,尤其是在进行大型系统更新时。

相反,这种情况更加合理:

apt-get install

Apt-get下载libwebkit.deb后立即libwebkit.deb开始安装,无需等待chromium.deb完全获取,chromium.deb同时在后台获取。chromium.deb下载完成后,apt-get 可以立即进行安装,而无需等待 libwebkit 安装,因为 libwebkit 在获取期间已经安装chromium.deb

答案1

实际上,如果你用 portage 执行正常的‘安装一些软件包’例程,它会执行以下所有操作:

  • 计算包的依赖关系以及所有对 glibc 根目录的依赖关系;

  • 一旦找到依赖项列表,它会检查哪些包尚未安装;

  • 确定安装它们的正确顺序

到目前为止,这几乎匹配所有包管理器。然后发生了一些不同的事情:

  • 只要有足够的可用空间(是的,该工具存储源包大小),它就会开始按安装顺序下载每个源包。

(这在后台发生,其余部分按包下载的顺序发生)

  • 如果您的链接速度很慢,100MB 的源包需要 20 分钟,但前一个文件已经完成,Portage 将立即开始配置和构建前一个文件,只要它不需要进一步的依赖关系。

就 Clementine 而言,它需要大量可能尚未安装的 gstreamer 模块。它还需要 QT。假设您没有 QT。

gstreamer 模块不需要 qt;它们会在 qt 之前下载。它们要小得多。如果您的连接速度足够慢,它们会在 qt 下载之前进行编译,并作为编译过程的一部分完全自行安装。

请理解这种行为非常有用,并且根据我的经验(在 10 个发行版和 FreeBSD 中大约 15 年),Debian、Ubuntu、基于 RPM 或其他发行版中都没有类似的东西。

因此,尚未得到明确回答的问题是:“是否存在这样的并行获取/安装包管理器”,我猜测答案是“尚不存在”。或者也许是“欢迎补丁”。

我的 0.02 美元,已根据通货膨胀和货币兑换调整为您当地的货币单位。

答案2

简短回答:不。

长答案:为什么?

APT 在其工作中非常高效,而且做得很好。它同时下载、解压和安装,这很不划算。如果该过程因任何原因中断,则 apt 不会结束其任何操作。或者它的每个操作都需要太多时间才能完成。请记住,UNIX 的优势之一是从基础开始模块化。如果某些东西不起作用,您可以识别并修复它。

让我们举个例子:

(这就是你的计划)

当 Chrome 下载时磁盘没有剩余空间,但是等等,libwebkit 也在同一时刻安装,然后两者都失败,什么也没做。


(事情是这样的)

好吧,我没有空间了,嘿人类在这里释放一些空间,否则我无法下载任何东西。*释放一些空间*好的,我有可用的下载空间,但是我没有可用的安装空间,请从文件系统中删除一些东西。*删除东西*看,安装完成了。

从这个简单的例子可以看出,最后一种方法使用线性流程来完成工作。这种方法似乎需要更多时间,但更安全,也更容易修复可能发生的任何问题。

相关内容