是否存在一个包管理器,在安装/更新期间已经开始安装第一个获取的包,同时其他包仍在下载?
虚构场景示例:
Chromium 依赖于 libwebkit。
通常情况下,当用户运行apt-get install chromium
apt 时,会获取较小的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 也在同一时刻安装,然后两者都失败,什么也没做。
(事情是这样的)
好吧,我没有空间了,嘿人类在这里释放一些空间,否则我无法下载任何东西。*释放一些空间*好的,我有可用的下载空间,但是我没有可用的安装空间,请从文件系统中删除一些东西。*删除东西*看,安装完成了。
从这个简单的例子可以看出,最后一种方法使用线性流程来完成工作。这种方法似乎需要更多时间,但更安全,也更容易修复可能发生的任何问题。