当使用 安装软件包时apt-get install
,它首先开始下载所有需要的软件包,然后逐个安装它们。
但是,如果您使用apt-get download
,并在第一阶段中断该过程并重新开始,它会从头开始再次下载所有软件包(删除任何部分下载的 .deb 文件)。
如何才能继续中止的下载过程而不重新下载已经收到的部分数据?
答案1
你的主张
如果您在第一阶段中断该过程并重新开始,它会再次下载所有软件包。
是完全错误!Apt 是一个智能的包管理系统,它永远不会重新下载满足安装请求所需的包,哪怕是一个包或 .deb 文件。
那些.deb
下载了一半的文件位于/var/cache/apt/archives/partial
目录中,您可以ls
使用命令(在 16.04 中,您需要使用sudo ls
)在那里检查这些文件。
您可以通过查看apt-get
手册页,其中提到/var/cache/apt/archives/partial/
/var/cache/apt/archives/partial/
Storage area for package files in transit. Configuration Item:
Dir::Cache::Archives (partial will be implicitly appended)
您甚至可以选择其中一个文件并使用手动恢复下载wget -c
。
在后台,Apt 使用wget
带有开关的程序-c
,从手册页方法
-c, --continue resume getting a partially-downloaded file
答案2
wget -v -d -nc -c -S --random-wait --keep-badhash\
https://mirror.math.princeton.edu/pub/ubuntu/ubuntu/pool/universe/c/chromium-browser/chromium-browser_105.0.5195.102-0ubuntu0.18.04.1_i386.deb
反驳和实际可行的解决方案
反驳:如果使用apt-get download
,然后重新启动,那么它确实从头开始重新启动。
平台:我正在使用 Ubuntu Bionic - 18.04 LTS - x86 (32 位)(...作为 Bodhi_Linux_5.1.0 的可启动 ISO - LiveCD 下的引擎)。
再次... 这个问题的答案是如果使用 --download-only 选项,或者
apt-get download some-package
相反
apt-get install some-package
...
如果使用,
apt-get download somepackage
那么它将从头开始重新开始下载。
解决方案
我的解决方案是:
将现有的部分下载的 .deb 文件备份为 .deb.BAK
使用 apt-get 的
--print-uris
选项显示要下载的 .deb 文件的 URLwget -c
使用apt-get 而不是 apt-get 来恢复部分下载... 像这样:wget -v -d -S -c [--random-wait] [--keep-badhash] https://url-to-file/path/some0package.deb
上述步骤的代码模板:
$ cp some0package.deb some0package.deb.BAK
$ apt-get --print-uris download some0package
$ wget -v -d -c -S --random-wait --keep-badhash [copy & paste here the full https://URL you got from the previous command, but NOT the other rest of that output]
使用 chromium-browser 的代码示例:
$ cp\
chromium-browser_105.0.5195.102-0ubuntu0.18.04.1_i386.deb\
chromium-browser_105.0.5195.102-0ubuntu0.18.04.1_i386.deb.BAK
$ apt-get download --print-uris chromium-browser
[结果输出:]
https://mirror.math.princeton.edu/pub/ubuntu/ubuntu/pool/universe/c/chromium-browser/chromium-browser_105.0.5195.102-0ubuntu0.18.04.1_i386.deb' chromium-browser_105.0.5195.102-0ubuntu0.18.04.1_i386.deb 79183996 SHA512:bc34c6241b4200bf9c4c8a7dccba5415daec9623741328146bf4d8edb91d3db7489d5c467162075caf9266644369ac2af0c41cd6b4e320e9c110a6e71411b4ce
在上面的输出中,该--print-uris
选项为我们提供了多条信息;超出了我们的需要。
- URL 路径服务器端的包文件((我们需要复制这个完整的 URL!))
- 文件名将如预期的那样保存在你的电脑本地
- 服务器端的完整文件大小;
- SHA512 哈希(下载后进行比较)
其中,我只需要复制
- 第一部分,URL
- 可选:SHA512 哈希(如果我希望在下载后比较它是否与服务器的副本匹配):
$ wget -v -d -c -S --random-wait --keep-badhas https://mirror.math.princeton.edu/pub/ubuntu/ubuntu/pool/universe/c/chromium-browser/chromium-browser_105.0.5195.102-0ubuntu0.18.04.1_i386.deb
这对我有用!总结:
我从以下命令开始:
$ apt-get download chromium-browser
它被中断了/我取消了(ctrl-c)。
我备份了现有文件:
$ cp [local-filename.deb] [local-filename.deb.BAK]
我获取了以下网址以供使用:
$ apt-get download --print-uris chromium-browser
我突出显示并复制到剪贴板该命令的输出的第一部分,对我来说,最终结果是(不要使用这个;使用你在终端中获得的那个) https://mirror.math.princeton.edu/pub/ubuntu/ubuntu/pool/universe/c/chromium-browser/chromium-browser_105.0.5195.102-0ubuntu0.18.04.1_i386.deb
然后我使用
wget -c
('-c'表示'继续现有的下载')...(添加了详细信息,这样我就可以查看是否出了问题)....并粘贴了我从上一个命令中获得的 URL,如下所示:
$ wget -v -d -c -S --random-wait --keep-badhash\
https://[URL-you-got-and-copied-from-output-of-the-previous-command]
somepackage.deb