我可以让do-release-upgrade仅下载用于稍后升级的软件包吗?

我正在运行lubuntu 10.10,并希望升级到11.04。我的网络连接非常不稳定,所以我想在运行安装之前先下载所有的软件包。
根据this所说,没有简单的方法可以做到这一点。在那个讨论中提到的bug report仍然没有解决。
我的问题是: 有没有办法修改do-release-upgrade只下载软件包,就像给apt-get dist-upgrade添加一个“-d”一样?
还是说只能手动操作才能达到我想要的结果?
如果我必须手动操作,这些步骤是否足够,或者我漏掉了什么?
1. 在/etc/apt/sources.list/etc/apt/sources.list.d中禁用第三方软件源。 2. 将/etc/apt/sources.list中的软件源从maverick更改为natty。 3. 运行sudo apt-get update。 4. 运行sudo apt-get -d dist-upgrade以仅下载软件包。根据需要重复此步骤,直到所有软件包都被下载。 5. 运行sudo apt-get dist-upgrade以完成升级过程。

那似乎接近我本来会做的事情。 - Jo-Erlend Schinstad
12020年10月的答案是:apt-get --download-only --target-release groovy dist-upgrade - Jack Wasey
7个回答

你的前四个步骤是正确的,但第五步应该是sudo do-release-upgrade(而不是sudo apt-get dist-upgrade)。它应该注意到要下载的所有(或大部分)软件包已经存在于/var/cache/apt/archives目录中。
在早期版本的do-release-upgrade中,曾经存在一个bug,在重新下载软件包之前会清理/var/cache/apt/archives目录,但据我所知,这个bug已经修复了。

我做了这个,而且它起作用了。 - Menachem
请参考此链接了解如何使用图形用户界面进行操作:http://askubuntu.com/a/418789/21794 - Menachem
问题中描述的过程是否适用于从一个LTS版本升级到下一个LTS版本?我有一台运行12.04的服务器,我想将其升级到14.04,但可能没有机会在本月底之前完全准备好升级所需的条件。 - dgw

我为了将多台机器升级到Ubuntu 14.04 "trusty"而编写了一个脚本。它被称为'apt-get-other-release'。使用起来非常简单:
$ sudo apt-get-other-release -t trusty
  [ a long time passes as it downloads stuff ]
$ sudo apt-get-other-release -U
  [ it prepares the system for upgrade -- this is quick ]
$ sudo do-release-upgrade   # or update-manager, whatever you're comfortable with
  [ upgrading also takes a long time and may still download some additional stuff ]

脚本位于:

ftp://www.lubkin.com/pub/user/filbo/apt-get-other-release

版本1.0的sha1sum为87a466b2bb2d1ac5b0a08509246a450b8d1c7617。

在幕后,它基本上是使用自己私有的sources.list文件运行apt-get update; apt-get -d dist-upgrade。结果存储在/var/cache/apt-$to_rel/archives中,并且'-U'标志将其复制到系统范围的/var/cache/apt/archives中,以便在升级期间存在。

您还可以将升级归档从一个本地主机复制到另一个本地主机,以节省带宽。我为amd64和i386升级执行了此操作,只复制那些名称中不包含"amd64"的*.deb文件;然后在i386机器上运行了另一个apt-get-other-release -t trusty,因为这两台机器上安装了不同的软件包,所以下载了另一大堆软件包。

欢迎提供反馈;如果我不知道下次何时查看askubuntu,也欢迎通过电子邮件发送cc。搜索引擎对我非常了解。

注意:我实际上还没有对这种处理方式的系统进行过升级!在接下来的一周内会进行。发布此脚本是为了让人们能够在可能有用的时候使用。

>贝拉<


有一种方法可以让更新管理器为您完成步骤1-3。
  1. 在图形用户界面(GUI)的终端窗口中运行sudo update-manager(这很重要)

    • 启动更新管理器,告诉它你想要升级到下一个版本的Ubuntu,并让它开始运行。它会禁用第三方软件源,将主要软件源更改为最新版本,然后为您运行sudo apt-get update
    • 然后会弹出一个屏幕,告诉您为了运行更新,它将需要删除、安装和升级软件包。
    • 在这个阶段,去终端窗口并使用CTRL-C强制退出程序。[如果您不这样做,并通过更新管理器的取消按钮取消更新,它将恢复更改]。
  2. 根据需要多次从命令行运行sudo apt-get -d dist-upgrade,直到所有软件包都被下载并准备好安装。

  3. 运行sudo do-release-upgrade,并让它使用已经下载好的软件包完成升级。

  4. 重新启用第三方软件源,并再次运行sudo apt-get update && sudo apt-get upgrade来更新第三方软件源到最新版本(确保软件源已更新到最新的Ubuntu版本)。


我还为此编写了一个脚本,你可以在此处找到:

https://github.com/neldredge/fetch-release-upgrade

使用方法:在一个临时目录中运行以下命令
 ./fetch-release-upgrade.sh trusty

或者你想升级到的任何新版本。必要的软件包将被下载到一个名为“debs”的子目录中。然后,您可以将它们移动到“/var/cache/apt/archives”目录下,然后运行“do-release-upgrade”。
我还没有看过user270294的脚本,但听起来它的工作方式类似,并且可能有一些更多的功能。

下面这个稍微简短的版本 Menachem 的回答对我有用:
  1. 在一个终端窗口中运行sudo do-release-upgrade,等待提示:

    您是否要开始升级?
    
    ...
    
    获取和安装升级可能需要几个小时。一旦下载完成,进程将无法取消。
    
    继续 [yN]  详细信息 [d]
    

    不要确认,保持打开状态

  2. 在第二个终端窗口中运行sudo apt-get dist-upgrade --download-only

  3. 完成后,在第一个终端窗口中根据您的意愿继续或中止

专业提示:安装一个终端复用器,比如screen,然后在其中运行do-release-upgrade命令。这样,如果显示升级过程的终端出现任何问题,你可以使用screen -D -RR重新连接上去。(幸运的是,我的升级今天几乎完成了...)

这是一个不错的做法,但如果你需要在中途关闭电脑,它可能会失败。 - Menachem
@Menachem:谢谢。你所说的“失败”是什么意思?能否详细说明一下?是的,APT源可能会处于不一致的状态,但除此之外呢? - krlmlr
我还没尝试过,所以不太清楚会发生什么。我只是在想,因为取消do-release-upgrade会恢复更改,但你一直在使用最新的apt源来下载更新,当你尝试重新运行更新时,可能会导致系统不稳定。 - Menachem
我不确定仅仅下载安装文件是否会改变任何东西,这只是从互联网缓存文件吗?无论如何,这个过程对我来说很有效,我在下载后中止然后重新启动了do-release-upgrade - krlmlr
1没问题,只要你在完成之前不尝试运行常规更新,就应该没问题。 - Menachem
2如何解决“无法获取dpkg锁定”的问题? - SO_fix_the_vote_sorting_bug

Ubuntu 21.04 升级至 21.10

最近我将 21.04 版本升级至 21.10 版本,整个过程持续了两天,下载了三到四次。只需使用图形界面,并确保在带宽不好或失败时点击取消按钮。取消按钮“应该”会为您完成所有清理工作。我没有按照上述步骤进行操作,只使用了一个界面而没有使用终端。第二天早上,在经历了三到四次失败后,我仍然能够升级到当前版本之前的完整发行版升级。免责声明:我成功了,但你可能不会。


免责声明:我以前从未做过这个。这可能是一个可怕的主意。它可能会破坏一切,清空你的银行账户并逃到西班牙南部。像任何潜在危险的事情一样,在你做任何事之前,请务必进行备份。
我不确定你安装了多少东西,所以这可能是一个有缺陷的解决方案,但你可以从CD升级。下载“备选”iso,挂载它,然后运行升级脚本。
wget -c http://releases.ubuntu.com/11.04/ubuntu-11.04-alternate-amd64.iso

在我继续之前,你不必使用wget来获取图片。BitTorrent和标准下载管理器一样有效。重要的是你需要一个能够恢复下载的工具,这样你可以停止下载,并在另一个时间继续。这就是wget的-c选项的作用。
一旦你有了ISO文件,下一步就相当简单:
sudo mount -o loop ubuntu-11.04-alternate-amd64.iso /media/cdrom
sudo sh /media/cdrom/cdromupgrade

我所提到的缺陷是,这只会升级Ubuntu光盘中包含的与系统整合在一起的部分。它不会升级您的其他软件包。
从理论上讲,这应该没问题。您可能会发现一些应用程序出现故障,有些可能会被更新程序强制删除,但核心操作系统应该保持稳定。
如果我的理论是正确的,那么您可以通过Synaptic或(如果您安装了它)aptitude随时自由地升级其他软件包。

如果西班牙南部更近怎么办? - Matt Joiner