Почему `do-release-upgrade` пропускает версию?

14

Я ответил на этот вопрос о 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 теперь доступна для загрузки, некоторые пояснения по этому поводу были бы хорошими.

Марк Кирби
источник
2
Нормально, что ваша система 14.04 хочет обновить систему до 15.04, поскольку это не поддерживается. Например, в примечаниях к выпуску за 15.04 упоминается только обновление с 14.10. Когда я работаю do-release-upgradeв своей системе 14.04, он говорит: «Новая версия не найдена», как обычно, поскольку систему 14.04 можно было обновить только до 14.10, но теперь 14.10 - это EOL.
2016 г.
1
Поэтому в вашей системе должно быть что-то ненормальное. Какая у вас версия ubuntu-release-upgrader-core?
2016 г.
1
Я больше не могу предоставить эту информацию, что установка прошла из-за путаницы с командой, переустановить было проще, чем исправить ошибки, вызванные остановкой обновления.
Марк Кирби
1
@fkraiem на самом деле, пропуски версий поддерживаются, так как менеджеры репозитория могут «писать» свой путь.
Брайам

Ответы:

12

Ваше первоначальное предположение было правильным. 15.04 поддерживается до 2016-02-04, поэтому do-release-upgradeпытается обновить вас до следующей поддерживаемой версии по сравнению с той, которая у вас есть.

Вот описание нормального режима запроса на обновление от /etc/update-manager/release-upgrades:

Проверьте, доступен ли новый выпуск. Если найдено более одного нового выпуска, средство обновления выпуска попытается выполнить обновление до выпуска, который немедленно следует за текущим выпуском.

Поэтому, если я нахожусь на 14.04, он должен попытаться перевести меня на 14.10, а сейчас do-release-upgradeпытается вместо этого перевести ОП (и меня) на 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 и выпустить новую установку.

mmaluff
источник
1
У вас есть что-нибудь, чтобы подтвердить это, или вы просто догадались?
Кен Шарп
1
Добавлены детали. Я столкнулся с той же проблемой, что и OP.
Mmaluff
3
Твердый ответ на вопрос, который я думал, просто упал в безвестность :)
Марк Кирби
2
Поведение, описанное в этом превосходном ответе, все еще применяется, и оно также применимо к обновлениям через Software Updater do-release-upgrade. В настоящее время системы 16.04 LTS автоматически предлагают обновить до 17.04 , и они будут делать это напрямую , пропуская 16.10, потому что это срок службы . Эти ответы могли бы получить пользу от этого исправления - или можно было бы опубликовать новый ответ, полностью описывающий текущее поведение. Вы хотите что-то опубликовать?
Элия ​​Каган
5

do-release-upgrade ничего не знает о «прыгающих версиях». Он просто загружает план обновления из разработчиков хранилища Ubuntu. Это указано в do-release-upgrade README :

2) Утилита обновления должна иметь возможность загружать обновленную информацию о том, как выполнить обновление (например, дополнительные шаги, такие как обновление определенных библиотек в первую очередь)

Также в спецификации об автоматических обновлениях :

Файл мета-релиза с информацией о доступных дистрибутивах хранится на центральном сервере, и он проверяется If-Modified-Since при каждом запуске update-manager. Если новая версия найдена, update-manager показывает это визуально.

Это то, что позволяет do-upgrade-release и любому другому инструменту без проблем обновляться.

Braiam
источник