Что такое поэтапные обновления и почему Ubuntu их использует?

Вопрос или проблема

Итак, я столкнулся с той странной проблемой “удерживаемых пакетов”, обновляя свою систему с помощью apt. После некоторых исследований выяснилось, что это результат “фазированных обновлений”.

  • Что вообще такое фазированные обновления?
  • Почему Ubuntu их использует?
  • Какая от них мне польза?
  • Могу ли я (и должен ли я) отключить их или обойти?
  • Почему сообщения apt о фазированных обновлениях такие непонятные?

Что такое фазированные обновления?

Фазированные обновления — это обновления программного обеспечения, которые внедряются пользователям постепенно, а не сразу всем пользователям. В системе обновлений, которая не использует фазированные обновления, всем пользователям сразу предлагается обновление, как только оно доступно. При использовании фазированных обновлений только некоторым пользователям предлагается обновление, когда оно впервые выпускается. Со временем обновление становится доступным все большему числу пользователей, пока оно не “полностью развернуто” и не предлагается всем пользователям.

В Ubuntu используется система фазированных обновлений для Ubuntu Desktop с версии Ubuntu 13.04 (почти десять лет назад!), однако до недавнего времени только графический интерфейс обновления Ubuntu мог обрабатывать фазированные обновления. Обновление через apt игнорировало фазирование обновлений. Однако начиная с Ubuntu 21.04, apt также использует фазированные обновления, что позволяет применять их ко всем версиям Ubuntu, включая Ubuntu Server и Ubuntu в контейнерах. Кстати, это изменение также стало причиной печально известного сообщения “Следующие пакеты были удержаны” от apt во время многих обновлений системы. Хотя фазированные обновления в apt существуют с Ubuntu 21.04, они стали наиболее заметными в Ubuntu 22.04 LTS.

Почему Ubuntu их использует?

Временами, как и все, разработчики Ubuntu допускают ошибки. Хотя обновления тестируются перед выпуском, иногда неожиданные крайние случаи не учитываются должным образом. И если эти неожиданные крайние случаи оказываются довольно распространенными, они могут начать вызывать проблемы у пользователей на их системах.

Раньше, до использования фазированных обновлений с Apt, когда любое обновление выпускалось, все пользователи Ubuntu могли сразу установить его. И если это обновление оказалось бы проблемным, оно могло нарушить работу многочисленных систем одновременно. Фазированные обновления позволяют предотвратить ситуацию, когда плохое обновление затрагивает всех пользователей, быстро установленное у всех. Сначала обновление получают только некоторые пользователи. Если их системы начинают сообщать об ошибках (или становятся видимыми серьезные проблемы с пакетом), процесс фазирования может быть остановлен, и обновление перестает отправляться пользователям по умолчанию. Это улучшает безопасность и стабильность Ubuntu.

Система фазирования гарантирует, что разные группы пользователей выбраны первыми для получения обновлений, таким образом, чтобы не было одной группы несчастливых людей, которые всегда получают обновления вскоре после выпуска.

Какая от них мне польза?

Если вы сталкивались с ситуациями, когда обновление ломало вашу систему в прошлом, вы не должны столь же часто сталкиваться с этой проблемой в будущем. Фазирование обновлений делает так, чтобы ошибки обнаруживались на ранних этапах, избегая причинения проблем для рабочих столов пользователей, серверов и других устройств на базе Ubuntu. Это напрямую приносит пользу пользователям Ubuntu, увеличивая стабильность и надежность системы.

Могу ли я (и должен ли я) отключить их или обойти?

Это зависит от того, насколько стабильной вам нужна ваша система. Если вы просто хотите избежать уведомлений о пакетах, удерживаемых во время обновлений apt, и готовы быть одним из первых, кто получит обновления при их выпуске, вы можете отключить фазированные обновления. Однако это определенный риск, так как это означает, что если обновление окажется плохим, вы почти наверняка всегда будете первым, кто его получит (по сути, вы становитесь подопытным кроликом для ранних выпусков обновлений!). Но это избавит от уведомлений об удерживаемых пакетах в apt.

Если это звучит как плохая идея, оставьте фазированные обновления включенными.

Обход фазированных обновлений, выполняя apt install на удерживаемых пакетах, вероятно, всегда будет плохой идеей – это не “исправит” уведомление об удержанном пакете (которое на самом деле не нуждается в устранении), и это заставит вас устанавливать пакеты раньше. Если вы уже это сделали, это, вероятно, не испортит вашу систему (если только у обновления нет проблем), но это, вероятно, не стоит делать регулярно.

Если вы абсолютно уверены, что хотите отключить фазированные обновления, вы можете изменить конфигурацию apt, создав файл в /etc/apt/apt.conf.d, содержащий следующие строки:

Update-Manager::Always-Include-Phased-Updates true;
APT::Get::Always-Include-Phased-Updates true;

Вы можете назвать файл 99-Phased-Updates, если /etc/apt/apt.conf.d/99-Phased-Updates не существует. Снова повторюсь, делайте это только если действительно знаете, что делаете, и абсолютно уверены, что это вам требуется (например, если вы намеренно устанавливаете все последние пакеты, так как хотите помочь тестировать их и готовы к возможной поломке вашей системы). Если вы делаете это почти по любой другой причине, кроме этого примера, вероятно, есть лучший способ.

Почему сообщения apt о фазированных обновлениях такие непонятные?

ОБНОВЛЕНИЕ: Начиная с Ubuntu 24.04, apt теперь четко показывает пакеты с Следующие обновления были отложены из-за фазирования, вместо того чтобы просто показывать, что пакеты удержаны.

На самом деле, довольно сложно заставить apt распознать фазированные обновления как удерживаемые, поскольку они являются фазированными обновлениями, из-за того как работают зависимости. Однако мы понимаем, что это раздражает, и это в нашем поле зрения. Здесь есть баг-репорт: https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1988819 Если у вас есть учетная запись Ubuntu SSO и вы можете войти в Launchpad, вы можете нажать на ссылку “Эта ошибка затрагивает X людей. Это затрагивает вас?” в верхней части страницы, затем нажмите “Да, это затрагивает меня”, чтобы увеличить рейтинг значимости ошибки.

(Примечание: Пожалуйста, не оставляйте злые и неприятные комментарии внизу отчёта об ошибке – это только раздражает нас или расстраивает и не ускоряет исправление ошибки.)

Также стоит добавить, как объясняется в документации apt-preferences, что фазированные обновления зависят от ID машины каждого устройства, который можно найти (и потенциально изменить/скопировать – но вообще стоит избегать изменения, как упоминает @Daniel) в /etc/machine-id. Таким образом, если у двух машин одинаковый идентификатор машины, они находятся на одной и той же “фазе” и получают одни и те же обновления.

Если у вас есть несколько систем, которые вы хотите получать один и тот же набор обновлений (что отвечает на вопрос @TamerZiady) – из документации:

Вы можете установить APT::Machine-ID в UUID, чтобы все они оказывались в одной фазе, или установить APT::Get::Never-Include-Phased-Updates или APT::Get::Always-Include-Phased-Updates в true, чтобы APT никогда/всегда учитывал фазированные обновления.

.

Ответ или решение

Теория (Theory)

Фазовые обновления — это метод распространения программного обеспечения, при котором обновления постепенно становятся доступными различным группам пользователей. По сравнению с традиционным подходом, когда все пользователи получают обновление одновременно, фазовые обновления позволяют минимизировать потенциальные проблемы, возникающие из-за ошибок в обновлениях. Ubuntu начала использовать такую стратегию начиная с версии 13.04 для графической оболочки, а с версии 21.04 фазовые обновления были интегрированы и для команды обновления через apt. Это позволило охватить всех пользователей, включая серверы Ubuntu и контейнеры.

Пример (Example)

Когда новый пакет или обновление становится доступным, только небольшая часть пользователей получает его сразу. Это позволяет Ubuntu наблюдать за системами этих пользователей на предмет сбоев или ошибок. Если все проходит гладко, обновление постепенно становится доступным для все большего числа пользователей. Если же возникают проблемы, процесс распространения может быть прерван, и разработчики могут исправить ошибку до того, как она затронет всех пользователей.

Причина, по которой Ubuntu использует фазовые обновления, заключается в повышении стабильности системы. Обновления тестируются Ubuntu перед выпуском, но предварительное тестирование не может охватить все возможные условия использования программного обеспечения. Поэтому фазовые обновления позволяют оперативно выявлять и устранять ошибки без серьезного влияния на всех пользователей.

Применение (Application)

Для пользователей Ubuntu фазовые обновления обеспечивают ряд преимуществ:

  1. Повышенная стабильность и надежность: Пользователи менее подвержены риску столкнуться с ошибками в обновлениях, поскольку их получают ограниченные группы пользователей на первых этапах.

  2. Минимализация риска простоя системы: Фазовый подход позволяет вовремя обнаружить значительные проблемы и предотвратить их массовое распространение.

  3. Прозрачность обновлений: Уменьшение числа критических сбоев улучшает доверие пользователей к системе обновлений Ubuntu.

Вопрос о том, следует ли отключать фазовые обновления, зависит от ваших конкретных нужд. Если вы предпочитаете получать последние обновления как можно скорее и готовы воспринимать потенциальный риск столкновения с проблемой раньше остальных, вы можете отключить фазовые обновления. Это сделает вас среди первых пользователей, получающих новые пакеты, но также увеличивает риск стать жертвой непредусмотренных ошибок. Для отключения можно создать файл конфигурации в /etc/apt/apt.conf.d, включив в него следующие строки:

Update-Manager::Always-Include-Phased-Updates true;
APT::Get::Always-Include-Phased-Updates true;

Тем не менее, рекомендуется оставлять фазовые обновления включенными из-за их пользы для безопасности системы. Рабочие методы обхода, например, использование команды apt install для пакетных обновлений, в большинстве случаев не стоит использовать, так как они могут привести к нестабильности системы.

Что касается нечеткости сообщений apt о фазовых обновлениях, Ubuntu постоянно стремится улучшать этот аспект. Например, в версии 24.04 сообщения были обновлены, чтобы четко показывать, что "следующие обновления были отложены из-за фазы", а не просто указывать, что они удерживаются. Для повышения приоритета исправления этой проблемы вы можете подключиться к отчету о ошибке в Launchpad, как предложено в официальных рекомендациях.

Фазовые обновления зависят от уникального идентификатора машины (Machine ID). Если у нескольких машин одинаковый идентификатор машины, они будут получать обновления в рамках одной фазы, что важнее всего для системных администраторов, поддерживающих множество компьютеров.

В заключение, фазовые обновления созданы, чтобы обеспечить баланс между инновациями и стабильностью, предоставляя пользователям Ubuntu лучший опыт в использовании их системы.

Оцените материал
Добавить комментарий

Капча загружается...