LINUX.ORG.RU

Immutable-дистрибутивы, что это такое, и с чем это едят?

 , ,

Immutable-дистрибутивы, что это такое, и с чем это едят?

3

2

Начнем с простого

Как часто вы сталкиваетесь с ситуацией когда ваш любимый линукс вдруг перестает работать? А как часто после обновления выясняется что что-то отвалилось или вообще отказывается грузится?

Если вы один из таких «счастливчиков», то добро пожаловать в мир immutable-дистрибутивов! В этой статье мы наглядно разберем все плюсы и минусы, а также выясним, действительно ли immutable лучше традиционных дистрибутивов?

Что вообще такое этот ваш immutable?

В этих системах есть три общих принципа:

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

В зависимости от реализации система может предлагать больше возможностей. Но приведённый список – это то, чем должен обладать дистрибутив Linux, чтобы на данный момент считаться immutable.

Звучит конечно довольно ограничено, но мы к этому еще вернемся. А пока…

В чем преимущества неизменяемой операционной системы?

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

К примеру, если у вас выключили свет во время обновления, или кошка пробежала по клавиатуре и случайно набрала sudo rm -rf /* (пример утрированный), вы не останетесь без системы в самый неподходящий момент.

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

Это все хорошо, но как насчет примеров?

На самом деле их не так уж и много. По крайней мере из более или менее популярных это:

  • Fedora Silverblue
  • VanilaOS;
  • SteamOS;
  • ChromeOS;
  • NixOS.

Каждый из этих дистрибутивов реализует свой подход к атомарным обновлениям.

Как это работает?

К примеру, Fedora Silverblue реализует интерфейс OSTree. Если очень кратко то OSTree сочетает в себе “git-подобную” модель для хранения версий различных бинарных файлов, включая загрузчик. Он атомарно копирует базовую ОС и позволяет пользователю при необходимости “наслаивать” традиционный RPM поверх базовой ОС. По сути, тот же самый git но для всей вашей системы. Где каждое обновление – это по сути переключение на нужную ветку.

Напротив, VanilaOS, SteamOS, ChromeOS используют A/B метод обновления путем обмена данными между двумя корневыми файловыми системами: A и B. На практике у вас два раздела с базовой системой, один используется при загрузке, другой просто лежит на диске. Во время обновления, ОС разворачивает свежескачанный образ в раздел B и только после успешной перезагрузки образ B становится образом А, а образ А становится образом В, чтобы в случае чего загрузится с него. Если загрузка прошла неудачно, или не отработали внутренние тесты, то система продолжит работу с образом B.

NixOS же использует менеджер пакетов Nix, который функционально обрабатывает пакеты и зависимости. Каждый пакет изолирован, что позволяет нескольким версиям сосуществовать без конфликтов. Настройка в NixOS выполняется декларативно с использованием одного файла конфигурации. Этот файл описывает настройку всей системы, включая пакеты, службы и системные настройки. NixOS тоже работает по immutable модели, что означает, что изменения в конфигурации системы создают новый экземпляр системы, а не модифицируют существующий.

Немного про VanilaOS и мои мысли

Это дистрибутив который пока что основывается на Ubuntu. Почему пока что? Потому что в версии Orchid V2 базовый образ будет собираться уже на основе OCI debian. Под капотом VanilaOS использует ABroot для обновлений и систему интегрированных distrobox контейнеров для работы в безопасной среде.

В связи с этим автоматически возникает вопрос: «Как мне установить дополнительные драйверы?» В Vanilla OS Orchid установка наиболее распространенных драйверов представляет собой графический процесс, не требующий особых усилий. Однако бывают случаи, когда необходимо установить дополнительные пакеты в систему. По этой причине в ABRoot v2 внедрили менеджер пакетов, который позволяет пользователям управлять своими пакетами с помощью атомарных транзакций.

Ниже приведен пример команд для добавления и удаления пакетов:

abroot pkg add <your-package>

abroot pkg remove <your-package>

Потом необходимо выполнить

abroot pkg apply

чтобы применить изменения и перегрузиться.

Для текущей VanilaOS 22.10 используется ABroot V1, но в целом принцип тот же.

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

Когда команда выполняется в режиме abroot, транзакция запускается в транзакционной оболочке во втором корневом разделе. Если транзакция завершается успешно, изменения применяются с использованием наложения и синхронизируются с текущим root при перезагрузке. Если транзакция завершается неудачно, изменения не применяются (из-за свойства, известного как атомарность). abroot также позволяет выполнять транзакции по требованию с помощью команды оболочки abroot. Подробнее можно узнать чем V1 отличается от V2 можно тут и тут.

Войти в транзакционный shell можно просто набрав:

sudo abroot shell

И установить драйвера, библиотеки и т.д. Потом ребут.

Но в целом хочу заметить что устанавливать пакеты в систему мне приходилось крайне редко. Связка flatpak/distobox полностью удовлетворяет все потребности в софте. Плюс система не ограничена одними deb пакетами, и есть возможность поставить любой контейнер с любым дистрибутивом. Разработчики называют это SubSystem. Для этого даже есть встроенный в систему GUI.

Создатели явно вдохновлялись WSL в этом плане, но в отличии от WSL, в контейнере есть поддержка аппаратного ускорения и графических программ. Но по моему опыту хочу сказать, что мало что приходилось устанавливать таким образом, кроме нескольких программ. Например Davinci Resolve у меня стоит в подсистеме c archlinux. Но все остальное поставлено просто из flathub, мышкой. А ну и нативная поддержка Appimage тоже порадовала прям из коробки.

А что в итоге-то?

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

Всем спасибо за внимание, и не стесняйтесь делиться своим мнением в комментариях!



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 5)
Ответ на: комментарий от eugrus

Но в этом сценарии приглашение «счастливчиков» с LORа «в мир immutable-дистрибутивов» лишается целевой аудитории.

Тут я соглашусь, но хотя бы знать как это работает, и что такое вообще существует все таки надо.

Unixson
() автор топика
Ответ на: комментарий от eugrus

Кстати офтоп, пока не отошел от компа, у нас тут в офис закупили вот такую интересную штучку https://meetingdevices.withgoogle.com/seriesone/ для переговоки чтобы устраивать созвоны. Так вот там стоит вполне себе linux и вполне себе железо. Intel i7 processor, Google Edge TPU (edge AI), и 4 гига оперативы. На ютубчике есть видос где чувак на эту штуку steamOS накатывал и в игры играл, лол.

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

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

Есть ощущение, что разработчикам FOSS искренне не понятно, что в реальном мире нужно от рабочих мест.

С терминальным сервером для меня больная тема, так как очень полюбил, как это работает на Windows. Три месяца в прошлом году проводил 5-7 upd: 7-9 часов в день в поезде между домом и работой. Утром и вечером в поезде по RDP подключался к Windows Server и видел рабочий стол таким, каким оставил его в офисе. В дороге подключался иногда на телефоне, иногда на служебном ноутбуке, иногда на личном. В офисе на офисном тонком клиенте. Работа не смотря на перемещение между городами и устройствами не разрывалась - каждый раз происходит подключение к той же сессии. При входе с нового устройства от сессии отключается предыдущее.

Тем временем в Linux: xrdp на выбор (1) с каждым соединением открывает для того же пользователя новую сессию, (2) подключает всех пользователей к одной и той же, (3) может попробовать связать пользователя с его предыдущей сессией, но только если он открыл удалённую сессию с того же устройства. В Wayland маразм пошёл другим путём: роль RDP-сервера берёт на себя отдельный композитор, а подключение можно произвести (только) к сессии, в которую пользователь уже залогинен локально, при этом а-ля Team Viewer локально всё будет видно на экране - таким пользоваться мне было бы банально незаконно.

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

Не осилил читать весь тред, но nixos очень зря в immutable записали, поскольку в нем одни пакеты могут влиять на поведение других, что будет переезжать из поколения в поколение. И при переносе конфига на другой хост очень вероятна ситуация что придется допиливать состояние ручками.

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

Я то так вообще в NixOS все больше и больше разочаровываюсь. Дистрибутив с переусложнённой декларативностью и всеми приколами Rolling Release, когда узнаешь что какое то ПО начало работать не так как всегда до этого только тогда, когда оно нужно для работы(как у меня это случилось сегодня). И вместо работы идешь в интернет, узнавать а что же поменялось и как его починить. Однако он очень полезен для расширения кругозора.

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

Все остальные тупо держат загрузочную флешку

Эти все остальные сейчас с нами в одной комнате?

Aswed ★★★★★
()

Представлено семейство атомарно обновляемых дистрибутивов Fedora Atomic Desktops

Федора, похоже, всерьез взялась за это направление:

  • Fedora Silverblue (Gnome)
  • Fedora Kinoite (KDE)
  • Fedora Sway Atomic
  • Fedora Budgie Atomic

Плюс, ожидаемые Fedora Xfce Atomic, Fedora Pantheon Atomic, Fedora COSMIC Atomic.

Атомарные сборки Fedora поставляются в форме монолитного образа, не разделяемого на отдельные пакеты и обновляемого как единое целое через замену системного образа целиком.
Базовое окружение собирается из официальных RPM-пакетов Fedora при помощи инструментария rpm-ostree и монтируется в режиме только для чтения.
Для установки и обновления дополнительных приложений применяется система самодостаточных пакетов flatpak, при помощи которой приложения отделяются от основной системы и запускаются в отдельном контейнере.

krasnh ★★★★
()

Для встраиваемых систем это то, что надо. Переписали целиком одну из системных партиций и телемаркет. Для систем с определенной и неизменной функциональностью годно. Вот бы еще добиться того, что сделал Яббл: поставить набор прикладных программ и обновлять ОСь независимо о них. Существуют ли линухи с Ябловской концепцией построения пакетов и обновлений?

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

Тоже, пожалуй, попугаю.

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

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

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

Существуют ли линухи с Ябловской концепцией построения пакетов и обновлений?

Так это оно и есть. Ось обновляется независимо от прикладных программ.

Unixson
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.