![为什么“do-release-upgrade”会跳过一个版本?](https://linux22.com/image/986963/%E4%B8%BA%E4%BB%80%E4%B9%88%E2%80%9Cdo-release-upgrade%E2%80%9D%E4%BC%9A%E8%B7%B3%E8%BF%87%E4%B8%80%E4%B8%AA%E7%89%88%E6%9C%AC%EF%BC%9F.png)
我回答了这个问题关于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 现在可以下载,如果对此进行澄清就更好了。
答案1
您最初的猜测是正确的。15.04 支持至 2016-02-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 e.g. 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 发布并进行全新安装。
答案2
do-release-upgrade 对“跳跃版本”一无所知。它只是从 Ubuntu 存储库维护者那里下载升级计划。这在执行发布升级自述文件:
2)升级工具必须能够下载更新信息 如何执行升级(例如首先升级某些库等额外步骤)
此外,在规范中自动升级:
包含可用发行版信息的元发布文件存储在中央服务器上,每次运行更新管理器时都会进行 If-Modified-Since 测试。如果发现新版本,更新管理器会以可视化方式显示。
这使得 do-upgrade-release 和任何其他工具可以无缝升级。