无法将Ubuntu 18.04升级到20.04,因为出现了“请在升级之前安装所有可用的更新”错误。

我一直在尝试将我的Ubuntu 18.04版本升级到20.04。我已经运行了更新和升级apt和apt-get的所有步骤,更改了更新管理器中的设置,并按照此链接描述的步骤操作。但是我一直收到以下错误提示:
Please install all available updates for your release before upgrading.

升级从18.04到20.04有什么特殊之处导致了这个错误吗?我是不是需要先升级到19.04呢?
编辑:我刚刚注意到一个可能很重要的问题。当我运行sudo apt-get update时,在输出的末尾我得到以下提示:
The following packages have been kept back:
  colord gimagereader python-sane sane simple-scan
0 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.

那可能是导致问题的原因吗?

3从18.04LTS升级到20.04LTS的更新直到20.04.1发布之前不会发生。与此同时,请执行sudo apt-get updatesudo apt-get upgrade命令。 - heynnema
运行do-release-upgrade后,这会将我升级到19.04吗? - ModalBro
我不这么认为。等到20.04.1版本发布再说吧。 - heynnema
1要处理被拦截的软件包,请尝试使用sudo apt install -f命令来修复错误。 - WinEunuuchs2Unix
@karel很遗憾,当我尝试执行do-release-upgrade时,出现了以下错误: 正在检查是否有新的Ubuntu版本可用 请在升级之前安装所有可用的更新。 - ModalBro
1关于被保留的软件包的问题,我最近自己遇到了,并在Ubuntu错误跟踪器(https://bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+bug/1874927)上报告了。如果您能使用“ubuntu-bug ubuntu-release-upgrader”报告一个有关ubuntu-release-upgrader的错误,那将非常有帮助,这样我就可以查看您的日志文件并尝试解决为什么这些软件包被保留的问题。谢谢! - Brian Murray
你可以通过sudo apt list --upgradable命令查看可以升级的软件包列表。如果列表看起来没问题,可以使用sudo apt dist-upgrade -y命令进行升级。 - zdave
12个回答

我也遇到了同样的问题。然而,当我运行常规的升级命令(sudo apt upgrade,sudo apt full-upgrade,sudo apt-get dist-upgrade)时,它们都报告没有要升级的软件包和没有被保留的软件包。
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

最后,我将文件/usr/bin/do-release-upgrade复制到我的主目录,并进行了以下修改:
for pkg in upgradable:
    if 'Phased-Update-Percentage' in pkg.candidate.record:
        # P-U-P does not exist if it is fully phased
        continue
    else:
        install_count += 1
        print(pkg)   # <--- ADD THIS LINE
        # one upgradeable package is enough to stop the dist-upgrade
        # break      # <--- COMMENT THIS LINE OUT to get all packages

这个更改将打印出所有需要升级的软件包的名称。
当我运行`sudo ~/do-release-upgrade`时,会打印出一个来自外部仓库的软件包,该软件包有可用的更新版本,但是较新版本依赖于一个不可用的库,导致软件包无法升级。
仍然不确定为什么它没有被`apt upgrade`报告为“未升级”。
编辑:可以在Python控制台中运行以下代码片段以列出所有可升级的软件包-感谢@jferard!
import apt

cache = apt.Cache()
cache.open()
print([pkg for pkg in cache if pkg.is_upgradable])

2太好了,这看起来对我来说是最好的答案,因为其他答案只涉及到某些用户删除其过期软件包的特定环境。赞! - danza
1这对我来说解决了问题,不得不移除了wine软件包,干杯! - Khada Kuraki
1这对我有用,这应该被接受为答案。谢谢 :) - Chakradar Raju
4对我来说有效。您还可以在Python3 REPL中键入以下内容:>>> import apt >>> cache = apt.Cache() >>> cache.open() >>> [pkg for pkg in cache if pkg.is_upgradable]以列出需要升级的软件包。 - jferard
2这应该被接受作为答案。 - rubynorails
这个方法有效,我有一个无法升级的'i3status'软件包。 - Dmitriy Pavlukhin
这对我来说做到了。我移除了NVIDIA 390驱动程序 - 它们无法升级 - 我想我会改用nuuveau驱动程序(开源)。 - Estatistics

从18.04到20.04的序列
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt autoremove
sudo do-release-upgrade -d -f DistUpgradeViewGtk3

请按照屏幕上的指示操作。 祝你好运!

16仍然无法安装更新版本 - Amit Dwivedi
7这对我也没用。 - Brian Piercy
2这对我来说不起作用,因为它涉及一个未升级的特定软件包。请查看下面的答案,以获取通用解决方案。 - piit79
1我认为是sudo apt dist-upgrade这一部分解决了我的问题,那么它实际上做了什么,而apt updateapt upgradeapt autoremove没有涵盖的呢? - Jarl
对我来说,运行sudo apt dist-upgradesudo apt autoremove,然后重新启动解决了问题。 - marw

问题是你的仓库没有更新,所以你需要移除这五个仓库:colord gimagereader python-sane sane simple-scan 执行sudo add-apt-repository -r ppa:<ppa to remove>或者编辑/etc/apt/sources.list来移除所有这些仓库。
然后你可以运行update-manager

对我来说,那个方法很有效。 - cem

刚刚通过sudo apt-get remove --auto-remove winehq-stable成功移除了wine,然后重新使用sudo do-release-upgrade,问题解决了。

首先在您的终端中执行以下命令:

sudo apt dist-upgrade

然后你就会得到
The following packages have been kept back:

  mongodb-org mongodb-org-mongos mongodb-org-server mongodb-org-shell mongodb-org-tools

0 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.

只需要使用以下命令:

sudo apt install <软件包名称>

执行后的结果将会是:
sudo apt install mongodb-org mongodb-org-mongos mongodb-org-server mongodb-org-tools

最后,选择:
sudo do-release-upgrade

我的具体命令是 sudo apt install libc++1 libodbc1 - caduceus

真实例子及解决方案(抱歉提供的是俄语输出的例子,我会尽快翻译):

$ sudo do-release-upgrade -d
...
Please install all available updates for your release before upgrading.

$ sudo apt install
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Обновлено 0 пакетов, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 2 пакетов не обновлено. 
// ... 2 packages are not updated

$ apt list --upgradable
Вывод списка… Готово # list output... Done
wine-stable-amd64/bionic 6.0.0~bionic-1 amd64 [может быть обновлён с: 4.0.1~bionic]
wine-stable-i386/bionic 6.0.0~bionic-1 i386 [может быть обновлён с: 4.0.1~bionic]

上一个命令显示了哪些软件包没有更新。在我的情况下,我删除了这些软件包(它们只是实验后的垃圾),然后再次运行了sudo do-release-upgrade -d。没有问题,更新开始了。

你还可以尝试使用sudo apt full-upgrade命令。 - Данила Икрянников

你需要使用最新的补丁/更新来更新你当前的版本。运行以下命令:

  • sudo apt update
  • sudo apt upgrade

然后通过运行以下命令强制升级到20.04:

  • sudo update-manager -d

在20.04的第一个点发布之前... 20.04.1... 升级不会自动显示。在此之前,需要使用-d选项。

正如@heynnema在下面所写的,-d表示"开发版本"。目前还没有下一个Ubuntu(20.10)的开发版本。如果从18.04或19.10升级到20.10,你应该会收到一个警告。如果发生这种情况,请去掉-d并尝试不带它的命令。


-d不是获取开发版本吗? - heynnema
@heynnema,目前还没有20.10的开发版本,所以使用-d选项不会造成任何问题。 - Soren A
OP表示他按照标准步骤进行了操作。问题很可能是由于存在第三方软件包仓库所致。只需在更新管理器中取消选中它们的复选框(然后让其更新缓存),这样应该就足够了。我刚刚自己尝试了一下这个方法。 - Arnaud Meuret

如此贴出这里

只需删除/var/lib/apt/lists目录中的所有内容:

sudo rm -rf /var/lib/apt/lists/*

然后点击这里
sudo apt-get clean
sudo apt update && sudo apt upgrade

重新启动Ubuntu Linux系统,请输入以下命令:
sudo reboot

安装Ubuntu更新工具,运行:
sudo apt install update-manager-core

开始升级程序,运行:
sudo do-release-upgrade

重启盒子,运行:
sudo reboot

我发现这个很有帮助,可以在更新期间删除那些讨厌的“错误”消息。你可以从这里这里找到相关信息。
sudo apt-get remove graphicsmagick 

在这里,graphicsmagick 是一个不再受支持的软件包/软件等。


你首先要执行sudo apt updatesudo apt upgrade

1这没有任何区别。 - Artur Meinild

前往Ubuntu软件更新并检查任何未完成的更新。将其更新完成,然后就完成了。有些更新不会使用sudo apt-get update来执行。