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