Интересная статья вышла в Fedora Magazine, рекомендую.
https://fedoramagazine.org/offline-updates-and-fedora-35/
Для Ъ
В интернете часто встречается вопрос, почему Fedora Linux необходимо перезагружать, чтобы обновить систему. Действительно, чтобы обновить дистрибутив, перезагрузка не требуется, однако всё не так просто. В этой статье рассмотрим, почему же Fedora Linux просит вас перезагрузить систему и устанавливает обновления автономно.
Автономные обновления
Это такой процесс, когда ваш компьютер перезагружается в особый безопасный режим работы, применяет обновления и снова перезагружается в нормальный режим.
Почему существуют автономные обновления
За последние двадцать лет операционные системы стали гораздо сложнее, чем в те далёкие времена, когда многозадачность была в зачаточном состоянии и фактически не было ситуаций, чтобы пользователи в системе работали и одновременно обновляли её, поэтому обновления не представляли особых проблем.
Да, ядро Linux умеет изменять файлы без перезагрузки, но службы и приложения, использующие эти файлы, так делать не умеют. Если файл изменяется во время работы программы, то программа ничего об этом не знает, что может стать причиной некорректной работы программы. Так что утверждение типа «Linux не надо перезагружать, чтобы обновиться» больше не работает, все дистрибутивы Linux надо перезагружать!
Как работают автономные обновления
В системе есть пара совместно работающих компонентов, чтобы реализовать такие обновления. Первый — пакетный менеджер, который лишь скачивает обновления и сообщает следующему компоненту о наличии этих самых обновлений.
Второй компонент — это systemd. Во время загрузки системы, systemd проверяет пакетный менеджер на наличие скачанных обновлений, и если таковые имеются, systemd вместо нормальной загрузки стартует пакетный менеджер, применяет обновления и перезагружает систему в нормальный режим.
[полагаю, под ПМ автор имеет здесь в виду PackageKit]
Откуда ноги растут
Проблему впервые осознали в 2009 году (об этом можно почитать здесь). Как только возможное решение проблемы было спроектировано, его сразу же запустили в разработку.
Однако требовалось несколько компонентов заставить работать вместе. Надо было внести изменения в systemd для поддержки особого способа загрузки системы, а также заставить пакетные менеджеры «понимать» этот процесс. Кроме того было важно, чтобы у пользователей появился соответствующий графический интерфейс, который и был включён в GNOME Software Center в 2012 году, а в KDE Discover в 2021.
Наконец, эта новая функция была реализована в Fedora 18, что сделало Fedora первым дистрибутивом, который делает всё возможное, чтобы ваша система была надёжна и стабильна. Да, это был долгий путь, но вот мы здесь, и эта технология с нами уже почти 10 лет!
Если обновить систему по старинке через DNF
Скорее всего ничего плохого не произойдёт, так как это могут быть небольшие обновления или программа, которую вы обновили, была выключена. Например, не страшно обновить SDL, если вы не играете в этот момент.
Следует только помнить, что если вы обновили работающую программу, то она всё ещё может содержать уязвимости, так как работает старая версия программы, в которой может содержаться вредоносный код.
Опытные пользователи Linux, например администраторы, часто инстинктивно знают, какие программы можно обновлять без проблем. Также можно устанавливать только обновления безопасности (обсуждается здесь). А вот для масштабных обновлений даже профессионалам рекомендуется использовать автономные обновления через DNF.
Firefox — хороший пример
Когда Firefox (во время работы) обнаружит, что был обновлён, он заставит вас перезагрузить браузер, а всё потому, что он не умеет надёжно работать в такой ситуации без полного перезапуска программы.
Такие сложные и чувствительные к безопасности программы, как Firefox, помогают вам и защищают вас от возможных аварийных ситуаций или наличия уязвимостей в программе. Такое поведение некоторым кажется назойливым, но это гораздо меньшее зло, чем, например, внезапное падение программы.
Аварийные ситуации
Дело в том, что Firefox скорее приятное исключение из правила, ведь остальные программы просто тихо падают, если их обновить во время работы. Например в случае X Window Server или GNOME Shell вы можете получить чёрный экран. Однако это ещё не значит, что процесс обновления системы прервался, но чтобы наверняка понять что же происходит, придется переключиться в виртуальную консоль и проверить закончил ли свою работу пакетный менеджер.
Нажмите <Ctrl + Alt + F3>, чтобы перейти в консоль, залогиньтесь, запустите программу top
, в ней нажмите O
и напишите COMMAND=dnf
. Дождитесь, когда пакетный менеджер закончит обновление системы и перезагрузите компьютер.
Выключили электричество во время обновления системы
На данный момент надежда ещё есть. Включите компьютер и посмотрите загрузилась ли система. Если удалось загрузиться в графический режим, то скорее всего всё будет хорошо. Если нет, то придётся зайти в виртуальную консоль и посмотреть историю DNF, чтобы понять на какой стадии произошёл обрыв и повторить попытку обновления.
$ dnf history list
$ dnf history info {номер последнего события}
$ dnf history redo {номер последнего события}
Дополнительную информацию можно найти здесь. К сожалению, невозможно гарантировать, что повторная попытка обновления всё исправит, но это лучшее, что можно сделать в такой ситуации. Кстати, не помешает удалить сторонние драйверы типа Nvidia, они также могут создавать проблемы при обновлении системы.
Всё сломалось
Если во время неудачного обновления вышел из строя DNF или systemd, то продолжить обновление вряд ли получится и перезагрузка компьютера тоже ничего не даст.
Не существует однозначного ответа, что делать в таких обстоятельствах. Прежде всего у вас должна быть флешка с Fedora Linux! Вы могли бы попробовать восстановить систему с помощью systemd-nspawn, но это слишком сложно. Для обычных пользователей будет проще систему переустановить.
Помните, пока ещё вы не потеряли ваши персональные данные. Загрузка с флешки их никак не повредит и вам всего лишь надо проследить, чтобы существующий раздел /home не был отформатирован во время переустановки системы.
Заключительное слово
Обновление работающей системы — настоящая лотерея. Мы верим в удачу и склонны переоценивать свои шансы. Многие из нас никогда не сталкивались с выходом системы из строя из-за обновлений, но такие истории далеко не редкость на просторах интернета. Поэтому очень важно распространять информацию о том, как следует безопасно обновлять Linux. Призывайте пользователей использовать автономные обновления, а сами будьте крайне осторожны, когда обновляете работающую систему!
В будущем подобные проблему исчезнут совершенно, благодаря таким технологиям как Flatpak и Fedora Silverblue. Десктопный Linux постепенно движется в этом направлении, а пока нам приходится иметь дело со всякими индикаторами прогресса обновления системы, как в других операционных системах.