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

Mar*_*rby 14 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,对此进行一些澄清会很棒。

小智 12

你原来的猜测是对的。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
Run Code Online (Sandbox Code Playgroud)

我应该补充一点,我不建议尝试使用do-release-upgrade -d. 当我尝试使用 时prompt=normal,我得到了 404,因为 14.10 是 EoL。我还认为在我的精神错乱中我一定尝试过do-release-upgrade -p,它试图将我直接带到 16.04。当我意识到它把我带到 xenial 时,一切都坏了,我不得不从工厂恢复。最后我决定等到 16.04 发布并重新安装。

  • 对我认为会变得默默无闻的问题的可靠答案:) (3认同)
  • 这个优秀答案中描述的行为仍然适用,它适用于通过软件更新程序以及“do-release-upgrade”进行的升级。目前,16.04 LTS 系统[自动提供升级到 17.04](https://i.stack.imgur.com/mNu4C.png),他们会[直接这样做](https://i.stack.imgur .com/F3ofa.png),跳过 16.10 因为[它是生命终结](https://wiki.ubuntu.com/Releases#End_of_Life)。[这些答案](https://askubuntu.com/q/34430) 将从这次更正中受益——或者可以发布一个*完全*描述当前行为的新答案。你想发布一些东西吗? (3认同)

Bra*_*iam 5

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

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

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

包含可用发行版信息的元发布文件存储在中央服务器上,并且在每次运行更新管理器时都经过 If-Modified-Since 测试。如果找到新版本,update-manager 会直观地显示出来。

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