ALT Linux Distributions development
 help / color / mirror / Atom feed
From: Дмитрий <dmitry@udalov.online>
To: devel-distro@lists.altlinux.org
Subject: [devel-distro] Атомарный образ
Date: Fri, 31 Jan 2025 16:30:37 +0600
Message-ID: <e2d2691c-5e3d-4466-9e22-c2ab2b6954b8@udalov.online> (raw)

Здравствуйте, хотел бы обсудить реализацию атомарного образа для 
домашних систем.
Описание текущего состояния проекта: ссылка <https://atomic.alt-gnome.ru/>


Вступление
Компания ALT уже активно внедряет технологии атомарных образов в 
серверных решениях — ярким примером служит проект ALT Container OS. Эти 
образы ориентированы на массовое развертывание, эффективное 
администрирование серверов, минималистичный подход и решение 
узкоспециализированных задач.

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

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

Технологии
На сегодняшний день флагманом в сфере атомарных дистрибутивов я считаю 
решения от Red Hat. Поэтому как и ALT Container OS, я сосредоточился на 
технологиях, которые эта компания активно развивает.
Краеугольным камнем для реализации этой задачи стал *bootc* — 
инструмент, на котором сейчас сфокусирована Red Hat. Его ключевая 
философия заключается в возможности преобразования /*любого*/ 
дистрибутива в атомарный образ при соблюдении определённых технических 
условий.

Подготовка базового образа
За основу берётся OCI-контейнер 
<https://registry.altlinux.org/image/sisyphus%2Fbase/tag/latest> из 
реестра ALT Linux. Для приведения его к совместимости с *bootc* 
выполняется ряд доработок:

1. В образ добавляются все доступные пакеты из репозитория Sisyphus,
    чтобы обеспечить базовую функциональность.

2. Пакеты, отсутствующие в репозитории, собираются вручную с учётом
    зависимостей и специфики ALT Linux.

3. Форк проекта |bootupd| и исправление исходного кода для
    совместимости с ALT.

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

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

Установщик
Как оказалось готовых решений совместимых или хотя бы придерживающихся 
принципов совместимости с любым дистрибутивом для установки такого 
образа не существует, проекты привязаны к экосистеме других 
дистрибутивов, в частности bootc-image-builder который использует 
Anaconda установщик неразрывно связан с пакетным менеджером dnf.
Было принято решение сделать свой простенький установщик 
<https://github.com/SkyWar-design/atomic-actions/tree/main/models/installer> 
который бы потенциально мог установить любой bootc совместимый образ но 
в нашем случае полагающийся на готовый образ ALT.

Об изменении системы
Помимо разных вариантов установки программ многим юзерам может 
потребоваться установить пакеты напрямую с помощью встроенного пакетного 
менеджера или его аналогов. В данный момент единственный способ - это 
создание локального Dockerfile который наследует облачный образ и 
применяет в декларативном стиле какие-то команды, по сути любые, 
встроенный помощник системы atomic-actions прячет эту особенность за 
упрощенным вариантом взаимодействия с apt-get, но работает пока в весьма 
упрощенном виде. Теоретически можно попробовать интегрировать 
rpm-ostree, но насколько я знаю он слишком тесно связан с dnf и фокус 
разработки смещен в сторону dnf5 + bootc поэтому проект в будущем будет 
архивным.
Несмотря на кажущуюся абсурдность изменять систему через Dockerfile с 
философской точки зрения это намного удобнее чем спонтанные и хаотичные 
изменения которые привыкли совершать пользователи в системе так как 
любое изменение должно быть отражено и сохранено в файле, к тому же 
Dockerfile является легко переносимым и может быть повторно применен в 
другой аналогичной системе доступной пользователю или на его базе даже 
может быть сформирован образ в облаке.

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


О плохом
1. Обновления

Размер готового образа на базе gnome со всей пакетной базой сжимается до 
состояния 2.7гб. Это довольно много для того что бы позволить себе часто 
совершать обновления поэтому были предпринятые некоторые шаги для 
улучшения ситуации, а именно базовый образ был сжат до 1 слоя и назван 
например base, затем в облаке выполняется dist-upgrade который наследует 
base образ уже под названием latest итого мы получаем:
- base слой 2,7 гб который редко обновляется
- latest слой который наследует base и содержит в себе результат 
dist-upgrade, знимает от 20 до 150 мегабайт (зависит от обновлений)
Такой подход позволяет получать микро обновления без необходимости 
тянуть весь образ, но есть некоторые сомнения в правильности этого 
подхода, возможно dist-upgrade может изменить модули которые связаны с 
определенной версией ядра, но ядро у нас хранится в base слое и случится 
конфликт, если это произойдет то будет разумным перенести формирование 
ядра и других ключевых вещей в latest слой вместо base. Тут вопрос 
скорее к знатокам, мне не хватает знаний что бы предугадать такого рода 
проблемы, а протестировать такой вариант не представляется возможным.

2. Совместимость пакетов

Что касается обновлений, ostree как указано в этом коммите 
<https://github.com/ostreedev/ostree/pull/3166/commits/f81b9fa1666c62a024d5ca0bbe876321f72529c7> 
уже давно полностью игнорирует папку /var оставляя ее на совесть 
пользователя. Предполагается что идеально совместимая система - это 
система которая хранит себя в /usr.
Понятное дело что любая система далека от такой философии поэтому при 
установку *новых* пакетов которым требуется папка в /var нужно быть 
особенно аккуратными и либо создавать папку на стороне клиента с помощью 
tmpfiles.d или придумывать какие-то другие варианты решения проблемы, я 
хочу посмотреть как это делают другие дистрибутивы что бы найти 
оптимальный путь.



             reply	other threads:[~2025-01-31 10:30 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-31 10:30 Дмитрий [this message]
2025-01-31 12:29   ` Дмитрий
2025-01-31 13:29     ` Дмитрий
2025-01-31 14:30       ` [devel-distro] sysusers (was: Атомарный образ) Arseny Maslennikov
2025-02-01  1:06         ` [devel-distro] sysusers Vitaly Lipatov
2025-01-31 13:51   ` [devel-distro] Атомарный образ Arseny Maslennikov
2025-01-31 14:20     ` Дмитрий

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e2d2691c-5e3d-4466-9e22-c2ab2b6954b8@udalov.online \
    --to=dmitry@udalov.online \
    --cc=devel-distro@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Distributions development

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel-distro/0 devel-distro/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel-distro devel-distro/ http://lore.altlinux.org/devel-distro \
		devel-distro@lists.altlinux.org devel-distro@lists.altlinux.ru devel-distro@lists.altlinux.com
	public-inbox-index devel-distro

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel-distro


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git