为什么`do-release-upgrade`会跳过一个版本?

我回答了这个关于do-release-upgrade 问题 ,不允许将14.10升级到15.04只升级到15.10,我认为这是因为15.04即将结束。

一个用户(@xangua)发布了不可能跳过带有do-release-upgrade ,所以我通过在14.04框上运行命令查看了这些信息,但这就是混乱开始的地方。

我的14.04想直接升级到15.04?

当然这会使我的回答无效,因为15.04是生命的终结,但为什么这个命令似乎是跳过版本,如果不是基于生命结束?

没有任何迹象表明升级下载了14.10中的任何内容, software-updater说Ubuntu 15.04现在可以下载了,对此的一些澄清将是很好的。

你最初的猜测是对的。 2016-02-04支持15.04,因此do-release-upgrade试图将您升级到下一个受支持的版本,而不是您拥有的版本。

以下是/etc/update-manager/release-upgrades中正常升级提示模式的说明:

检查新版本是否可用。 如果找到多个新版本,则版本升级程序将尝试升级到立即成功运行当前正在发布的版本。

因此,如果我在14.04它应该试图把我带到14.10,但现在do-release-upgrade试图将OP(和我)改为15.04。

因此,阅读/usr/lib/python3/dist-packages/DistUpgrade/MetaRelease.py看起来我们在确定要升级到哪个版本时跳过不受支持的版本(除非您使用的是开发者标志):

  # then see what we can upgrade to upgradable_to = "" for dist in dists: if dist.date > current_dist.date: # Only offer to upgrade to an unsupported release if running # with useDevelopmentRelease, this way one can upgrade from an # LTS release to the next supported non-LTS release eg from # 14.04 to 15.04. if not dist.supported and not self.useDevelopmentRelease: continue upgradable_to = dist self._debug("new dist: %s" % upgradable_to) break 

我应该补充一点,我不建议尝试使用do-release-upgrade -d来解决这个问题。 当我尝试使用prompt=normal ,我得到了404,因为14.10是EoL。 我也认为在我的谵妄中我必须尝试do-release-upgrade -p ,它试图直接将我带到16.04。 当我意识到它带我去xenial时,一切都被打破了,我不得不从工厂恢复。 最后我决定等到16.04发布并进行全新安装。

do-release-upgrade对“跳转版本”一无所知。 它只是从Ubuntu存储库维护者下载升级计划。 这在do-release-upgrade README中指定:

2)升级工具必须能够下载如何执行升级的更新信息 (例如,首先升级某些库等其他步骤)

此外,在关于自动升级的规范中:

包含有关可用发行版的信息的元发布文件存储在中央服务器上,并且在每次运行的update-manager上都进行了If-Modified-Since测试。 如果找到新版本,update-manager将以可视方式显示。

这是允许do-upgrade-release和任何其他工具无缝升级的原因。