LINUX.ORG.RU

Перегружайся, если не хочешь проблем!

 , , ,


1

1

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

И эти люди еще что-то говорят про апдейты в винде (которая у меня просит ребута примерно раз в месяц).

anonymous ()

Никогда не делал оффлайн апгрейды, и ничего страшного не происходило. Зато у меня стоит dnf-plugin-tracer, который говорит, что именно надо перезапустить после апгрейда.

rupert ★★★★★ ()
Ответ на: комментарий от Stil

«система будет перезагружена в нерабочее время»

«Ага, юзер пинает балду. Дай-ка я перезагружусь!»

rupert ★★★★★ ()
Ответ на: комментарий от Stil

Да, отсутствие выбора - это проблема. Но т.к. происходит ~ раз в месяц, можно найти время и перезагрузиться (в моем случае).

anonymous ()

Зачем я прочитал эту народно-патреотическую блевоту? Словно первый канал посмотрел. Хорошо, что у меня BSD.

untitl3d ()
Ответ на: комментарий от rupert

Никогда не делал оффлайн апгрейды

Я тоже обходился как-то, только если номер дистра меняется, то из виртуальной консоли, но это лотерея конечно.

Однако нарвался как-то на описанное в статье: обновлял шапку с 8.3 на 8.4 и что-то как-то автоматически тупо в терминал… поймал серый экран, чуть со стула не упал :-D

Надо таки освоить dnf offline-upgrade, когда на 8.6 обновы приедут.

dnf-plugin-tracer

Во! Видел там такое в комментах, надо глянуть.

papin-aziat ★★★★★ ()

Единственное, что заставал ломающимся при апдейте - многострадальная CUDA.

izzholtik ★★★ ()
Ответ на: комментарий от papin-aziat

В бздю завезли атомарные обновления?

FreeBSD обновляется нормально удалённо без оффлайн-режимов в т.ч. со сменой мажорной версии релиза. Ну ребут сделать придётся конечно т.к. там новое ядро и новые системные сервисы.

firkax ★★★ ()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от untitl3d

Выдерни из розетки, когда будешь систему обновлять (не порты или пакеты), потом приходи и расскажи нам про Ъ-юникс :-)

papin-aziat ★★★★★ ()
Ответ на: комментарий от firkax

Фишка в том, что оффлайн обновление в линукс реализовано через PackageKit, и оно вроде как атомарное или наподобие, не боится отключения электричества. А для фряхи требуется бесперебойник, есть другие надёжные варианты, кроме бекапа?

papin-aziat ★★★★★ ()
Ответ на: комментарий от papin-aziat

реализовано через PackageKit

Ааа это та пакость которая мне заспамила диск на старой виртуалке с wheezy (долго искал кто ж качает всякий мусор в кеш пакетов без спросу, занимая в итоге всё свободное место одинаковыми файлами с разными именами) и которую я недавно вычищал с основного ноута т.к. выглядела похоже на что-то блоатварное. Нет, лучше не надо.

А для фряхи требуется бесперебойник, есть другие надёжные варианты, кроме бекапа?

Ну, сервер без бесперебойника это так себе идея в любом случае. Да, наверно может что-то накрыться из-за механики работы фс (какой-нить нужный файл окажется нулевого размера или потеряется). Хотя я точно не знаю, возможно журнал не даст этому случиться. А вот ctrl+c или ctrl-alt-del думаю в любой момент обновления можно нажимать без опасений того что оно в итоге не запустится, но это конечно другая тема уже. Новое ядро ставится в новую директорию, и никак не может сломать старое. Юзерспейсные же файлы можно менять по одному не ломая загрузку (ну, кроме обновления через несколько релизов за 1 раз наверно). Старые (которых нет в новом релизе) удаляются только после того как всё запустилось с новыми.

firkax ★★★ ()
Последнее исправление: firkax (всего исправлений: 1)

В будущем подобные проблему исчезнут совершенно, благодаря таким технологиям как Flatpak и Fedora Silverblue.

Во влатпаке по прежнему будут стоять отдельные приложения, а сильверблю никто не будет использовать. Когда кто-нибудь сделает аналог Nix без заигрывания с функциональщиной, тогда эта проблема исчезнет. А пока лучше обновляться по старинке, без всяких автономных обновлений.

altwazar ★★★ ()
Ответ на: комментарий от anonymous

в убунту уже, но платно (для коммерческого пользования)

Нет такого в Ubuntu

🌰

anonymous ()
Ответ на: комментарий от firkax

Юзерспейсные же файлы можно менять по одному не ломая загрузку

Не понял.

Старые (которых нет в новом релизе) удаляются только после того как всё запустилось с новыми.

Автоматически, или руками?

Вообще я подозреваю, что там не дураки и тоже какие-то крайние варианты рассматривают и решают.

papin-aziat ★★★★★ ()

Во дурка так дурка. А еще и пендоская манера поговорить в статье «вы могли бы». Чего с них брать РедГаднутые же. Довелось как-то прочитать ответы на мои вопросы на гитхабе трудоустроенного в РедГаде сотрудника из Чехии, капец там пассивная ангресивная манера указывать то как другим жить, я аж офигел.

Кстати zypper в opensuse говорит какие процессы нужно перезапустить. Всю жизнь перезагружался один раз без потери каких-либо данных.

Если во время неудачного обновления вышел из строя DNF или systemd, то продолжить обновление вряд ли получится и перезагрузка компьютера тоже ничего не даст.

Венда откатывает и переустанавливает не удачные обновления сама автоматически и без системы двойных образов типа rpm-ostree или других лясепедов.

Btrfs генерирует снапшоты и их можно откатить через grub. Не рассказывайте авторам Silverblue они будут в шоке.

730 раз за год карл!

Та же венда просит перезагружаться куда реже. Я уже не помню когда она перезагружалась последний ради обновлений.

bhfq ★★★★★ ()
Ответ на: комментарий от firkax

Ааа это та пакость которая мне заспамила диск на старой виртуалке с wheezy

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

papin-aziat ★★★★★ ()
Ответ на: комментарий от bhfq

Венда откатывает и переустанавливает не удачные обновления сама автоматически и без системы двойных образов типа rpm-ostree или других лясепедов.

И где же венда хранит все это богатство на которое потом откатывается? Да и os-tree вроде только разницу хранит.

Btrfs генерирует снапшоты и их можно откатить через grub. Не рассказывайте авторам Silverblue они будут в шоке.

Совместят наверное потом как-то всё это хозяйство с бтрфс.

papin-aziat ★★★★★ ()
Ответ на: комментарий от papin-aziat

И где же венда хранит все это богатство на которое потом откатывается? Да и os-tree вроде только разницу хранит.

Volume Shadow Copy сделает автоматический снимок системного диска, даже read-only файлов, NTFS и такое умеет! В случае тотальных проблем после нескольких проблемных загрузок винда предложит восстановить из него. Такого уже лет 8 как не возникает. А откатываются и исправляются обновления они через windows update, потому что процесс обновления не тупо распаковка архива и выполнение bash скрипта. На сайте мелкософта можно найти что из себя представляет процесс обновлений.

bhfq ★★★★★ ()
Последнее исправление: bhfq (всего исправлений: 1)
Ответ на: комментарий от papin-aziat

Не понял.

Это значит что при обновлении с 9.3 до 10.1 вполне может быть /sbin/init от десятки и /bin/sh от девятки (не успел обновиться) и система от этого не станет сломанной.

Более того, сейчас проверил:

/bin/sh от 10.x запускается с /libexec/ от 8.х (там аналог ld.so из линукса) и /lib/ (в т.ч. libc) от 9.x.

/bin/sh от 11.х запускается с /libexec/ от 8.х и /lib/ от 10.x. А точнее, от 10.х ему нужен только libc, остальные зависимости (libedit и libncurses) можно взять и от 8.х.

Автоматически, или руками?

А, тут требуется уточнение. Если обновлять пересборкой - то удаление вообще это отдельный этап (отдельная команда). Если обновлять бинарно - то отдельно только для .so, бинарники видимо удаляются сразу (но вряд ли это может сломать загрузку, всё критичное имена файлов не меняет). Руками, и оно пишет «пересоберите всё что могло зависеть от старых библиотек, потом удаляйте».

firkax ★★★ ()
Ответ на: комментарий от bhfq

Может и хорошо сделано в винде, я не знаю, но rpm-ostree выглядит очень удобным и надёжным: получил образ не прерывая работы и перегрузился в него, когда удобно.

papin-aziat ★★★★★ ()
Ответ на: комментарий от papin-aziat

получил образ не прерывая работы и перегрузился в него, когда удобно.

зачем же оно тогда два раза перезагружается?

bhfq ★★★★★ ()
Ответ на: комментарий от firkax

Похоже на то, что к обратной совместимости там подходят очень серьезно, впрочем в линукс тоже наверное так.

papin-aziat ★★★★★ ()
Ответ на: комментарий от bhfq

Дык это про классику, в статье речи нет про сильверблю.

papin-aziat ★★★★★ ()

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

slapin ★★★★★ ()
Ответ на: комментарий от bhfq

Я уже не помню когда она перезагружалась последний ради обновлений.

Где-то раз в неделю предлагает поставить обновления при выключении/перезагрузке. При этом я потом оказываюсь в линуксе, так как винда после установки обновлений перезагружается еще раз.

altwazar ★★★ ()

В текущем релизе я даже и не помню чтобы были обновления с перезагрузкой. Вот в предыдущем иногда были.

Im_not_a_robot ★★★★★ ()
Ответ на: комментарий от Im_not_a_robot

В текущем релизе я даже и не помню чтобы были обновления с перезагрузкой.

Глубоко не вникал. Выглядит как предложение поставить обновления при перезагрузке, перезагружаюсь, отхожу от компа, отхожу от компа, загружен линукс.

altwazar ★★★ ()
Ответ на: комментарий от altwazar

перезагружаюсь, отхожу от компа, отхожу от компа, загружен линукс.

Вот это чудеса! Даже линукс загружается, а не что-то другое.

🌰

anonymous ()
Ответ на: комментарий от altwazar

Не, я то про Федору. Ну и в Винде 10 я бы не сказал, что часто бывают двойные перезагрузки. Я вот и не помню когда последний раз такое было. Хотя я загружаюсь-то в нее очень редко.

Im_not_a_robot ★★★★★ ()
Ответ на: комментарий от Im_not_a_robot

Не, я то про Федору.

Я только под kde neon пробовал включать. Бессмысленная и пустая трата времени в этом дистре.

altwazar ★★★ ()

Дерьмо.

В SUSE и Debian такой фигни нет

anonymous ()
Ответ на: комментарий от Im_not_a_robot

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

anonymous ()

Ваще пофиг на мнение специалистов, обновлялся, обновляюсь и буду обновляться через dnf update, apt upgrade, в крайнем случае через zypper dup.

Khnazile ★★★★★ ()
Ответ на: комментарий от Khnazile

На тебя тоже по фиг, как разработчики сделают - так и будешь. Куда ты денешься

🌰

anonymous ()

Компания ред хат это гниль и раковая опухоль в мире Linux. После сваливается на неë популярности в 90-е, она потеряла успех, дропнув Red Hat 9.0 в пользу RHEL 3. Другим за опроприетаривание сразу бы «прилетело», перед глазами много примеров закрытой кода или спецификации, и заслуженного наказания. А этим хоть бы что, и они продолжили.

После неплохого релиза RHEL 4, они стали делать [url=https://www.linux.org.ru/forum/talks/16735674?cid=16738076]хрень[/url]. А нахрена был этот PackageKit, призванный сгладить неровности между RHEL, SLES, SUSE, Mandrake, Fedora, Debian и Ubuntu? Кто-нибудь им вообще пользовался?

Дальше - больше. После RHEL 6 решили всë нахрен сломать и выбросить на помойку. Wayland, GTK3, Systemd. Гады.

Щас видимо кому-то не угодили, что Linux может похвастаться долгим аптаймом. И они такие «неееет, это не так, линукс дерьмо в этом плане!» Притом что актуальные версии ДРУГИХ дистрибутивов линукса вполне себе обновляются без перезагрузки, в том числе актуальная версия Debian 11

anonymous ()
Ответ на: комментарий от anonymous

Возможно, сейчас другие дистрибутивы начнут «ломать через колено», чтобы и у них тоже сломалось обновление без перезагрузки. Да, это глупо выглядит: вчера работало, а сегодня делают вид, что не работает и никогда не работало, и вообще, всегда так было. Но ведь никто же не хочет, как с Мëрдоком. Поэтому надо бежать и выполнять сиюминутную хотелку Ред Хата доказать всем, что линукс не умеет в долгий аптайм

anonymous ()
Ответ на: комментарий от anonymous

У меня на Debian вполне ломались темы оформления при апдейте.

Лет шесть назад. На ходу не могло.

🌰

anonymous ()
Ответ на: комментарий от anonymous

Ну если ты латентный пользователь, то может проще так?

Это только сделает ситуацию хуже.

altwazar ★★★ ()

debian просит перезагрузки только когда новая дровина для невидии прилетела - в остальных случаях перезагрузка не критична, у меня было такое на сиде что прилетали новые ядра, но я не перезагружался и ехал на старых, а новые ядра все прилетали и прилетали… arch вообще не помню что бы перезагрузиться просил.

anonymous ()
Ответ на: комментарий от anonymous

а, это глупо выглядит: вчера работало, а сегодня делают вид, что не работает и никогда не работало, и вообще, всегда так было.

Тут всё на самом деле просто.

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

С точки зрения разработчика или админа всё наоборот. Пользователей много и жалобы перенаправят на них. Им выгодно снять с себя ответственность за эту проблему, пусть и в ущерб интересам пользователя.

altwazar ★★★ ()
Ответ на: комментарий от papin-aziat

Надо таки освоить dnf offline-upgrade, когда на 8.6 обновы приедут.

Я на федоре такой скрипт написал:

#!/bin/sh

sudo dnf offline-upgrade download && \
    sudo DNF_SYSTEM_UPGRADE_NO_REBOOT=True dnf offline-upgrade reboot && \
    echo Reboot to install updates

Смысл в том, чтобы он сам не перезагружался. То бишь я запускаю этот скрипт, он скачивает обновления и потом готовится к перезагрузке. Но перезагружаться я должен сам. Когда я перезагружаюсь, то он при загрузке устанавливает эти обновления.

Legioner ★★★★★ ()
Ответ на: комментарий от papin-aziat

оффлайн обновление в линукс реализовано через PackageKit

Это неправда. По крайней мере в Fedora это реализовано через dnf (и немного systemd). PackageKit на моём компьютере вообще нет.

Legioner ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.