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

2 ответа

Решение

Ваше первоначальное предположение было правильным. 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 и выпустить новую установку.

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

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

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

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

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

Другие вопросы по тегам