反驳和实际可行的解决方案

反驳和实际可行的解决方案

当使用 安装软件包时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 那么它将从头开始重新开始下载。

解决方案

我的解决方案是:

  1. 将现有的部分下载的 .deb 文件备份为 .deb.BAK

  2. 使用 apt-get 的--print-uris选项显示要下载的 .deb 文件的 URL

  3. wget -c使用apt-get 而不是 apt-get 来恢复部分下载... 像这样:wget -v -d -S -c [--random-wait] [--keep-badhash] https://url-to-file/path/some0package.deb

上述步骤的代码模板:

  1. $ cp some0package.deb some0package.deb.BAK

  2. $ apt-get --print-uris download some0package

  3. $ 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

这对我有用!总结:

  1. 我从以下命令开始: $ apt-get download chromium-browser

  2. 它被中断了/我取消了(ctrl-c)。

  3. 我备份了现有文件: $ cp [local-filename.deb] [local-filename.deb.BAK]

  4. 我获取了以下网址以供使用: $ apt-get download --print-uris chromium-browser

  5. 我突出显示并复制到剪贴板该命令的输出的第一部分,对我来说,最终结果是(不要使用这个;使用你在终端中获得的那个) 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

  6. 然后我使用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

相关内容