Git

Капсулы

Капсула это один исполняемый файл с приложением и всем его окружением. Собирается инструментом Capsule из образа контейнера (OCI). Для запуска не нужны права root. В ALT Atomic установленная версия Capsule 0.5.x.

Короткий рассказ с картинками есть на странице сайта, а здесь справочник: команды, ключи манифеста, режимы изоляции и работа в Atomic Booster.

Когда нужна капсула#

Что нужноЧто выбрать
Обычное графическое приложение, есть FlatpakFlatpak
Приложения нет во Flatpak, нужен один файл, своя версия библиотек или изоляциякапсула
Среда разработки или программа из другого дистрибутива с доступом к домашней папкеDistrobox
Системный компонент для всех навсегдавстроить в образ

Установка Capsule#

sudo apm s install capsule capsule --version

В Atomic Booster на вкладке «Capsules» для этого есть кнопка «Установить через APM».

Вкладка Capsules в Atomic Booster#

Мои капсулы#

Список установленных капсул обновляется сам: при показе вкладки и раз в 20 секунд. У капсулы есть кнопки:

  • Запустить;
  • Экспортировать: сохранить капсулу в выбранное место;
  • Удалить: капсула удаляется навсегда вместе с данными внутри и ярлыками в меню;
  • Открыть папку с капсулой.

В подробностях капсулы:

  • Данные внутри капсулы: настройки и файлы, которые приложение сохранило внутри. Кнопка «Сбросить данные…» вернёт капсулу к состоянию после сборки;
  • Зависимости: список пакетов внутри (загружается при раскрытии);
  • Последние ошибки.

Блок «Место на диске» показывает три строки: кэш сборки (слои образов от прошлых сборок), данные приложений внутри капсул и сами капсулы. Кнопка «Очистить…» чистит только кэш сборки: капсулы и их данные не затрагиваются.

Официальный каталог#

Поле «имя-capsule» ищет рецепты в каталоге Aides. Booster загружает проверенный манифест и собирает капсулу командой capsule build. Ход сборки виден в блоке «Сейчас», сборку можно отменить, а если Booster закрыли посреди сборки, об этом будет сообщено, а готовой капсулы не будет.

Каталог eepm#

Раздел «Создать капсулу из каталога eepm» собирает капсулу для приложения с сайта производителя:

  1. Выберите приложение в списке (до 100 строк, поиск по названию).
  2. Нажмите «Создать капсулу» и задайте имя файла, папку (по умолчанию ~/.local/bin) и режим песочницы (по умолчанию shared).
  3. Booster соберёт капсулу и покажет прогресс.

Каталог приложений кэшируется вкладкой Distrobox. Если его ещё нет, Booster предложит открыть эту вкладку. Оценка размера: база ALT около 220 МБ плюс само приложение.

В основе сборки генерируемый манифест: образ ALT Sisyphus, установка eepm и curl, затем epm play --auto <приложение> и поиск нового ярлыка в меню. Собирать можно только то, что есть в списке epm play --list-all.

Команды#

Сборка и обслуживание#

capsule build манифест.yaml # собрать капсулу capsule build -o ~/bin/app манифест.yaml # с другим путём результата capsule list # установленные капсулы capsule update # пересобрать капсулы из их исходных манифестов capsule clean-storage # очистить приватное хранилище сборки

Ключи capsule build: --config (-c) путь к манифесту, --output (-o) путь результата, --compression (zstd, lz4, gzip, xz), --verbose (-v).

Команды самой капсулы#

./имя-капсулы # запустить приложение ./имя-капсулы shell # shell внутри (изменения сохраняются) sudo ./имя-капсулы shell # с повышенными правами, для пакетных менеджеров ./имя-капсулы commit # зафиксировать изменения в образе ./имя-капсулы clean # сбросить незафиксированные изменения ./имя-капсулы export # вынести приложения и программы в систему ./имя-капсулы unexport # убрать их из системы ./имя-капсулы stop # остановить запущенные сессии ./имя-капсулы update # выполнить update-скрипт и зафиксировать результат ./имя-капсулы config # показать вшитый конфиг ./имя-капсулы remove # удалить капсулу: ярлыки, данные, файл

export и unexport принимают all, apps или binaries.

Ключи запуска#

КлючЧто делает
--bind ПУТЬ[:КУДА], -bподмонтировать путь хоста внутрь (можно повторять)
--env КЛЮЧ=ЗНАЧЕНИЕ, -eзадать переменную окружения
--unsetenv КЛЮЧ, -uубрать переменную окружения
--home ПУТЬдругой домашний каталог внутри капсулы
`--sandbox shared\isolated\strict`режим изоляции (главнее манифеста)
--no-overlayrootfs только для чтения
--no-nvidiaне пробрасывать драйверы NVIDIA
`--squashfuse auto\3\ll`бэкенд FUSE: 3 экономнее, ll быстрее
--verbose, -vподробные логи

Манифест#

image: registry.altlinux.org/sisyphus/base:latest # обязательно output: ~/.local/bin/имя # куда положить результат compression: zstd # zstd | lz4 | gzip | xz host_exec: true # мост к командам хоста sandbox: shared # shared | isolated | strict launch: google-chrome # что запускать по умолчанию files: # локальные файлы в образ до install - src: packages/foo.rpm dst: /tmp/packages/ export: # что показать в меню apps: - desktop: /usr/share/applications/google-chrome.desktop icon: google-chrome name_suffix: " (Capsule)" binaries: - /usr/bin/утилита install: # шаги сборки внутри образа - name: deps run: | apt-get update apt-get install -y eepm curl - name: app run: | epm -y play chrome

Дополнительно доступны постоянные подключения папок хоста (binds), команда при старте (on_start), переключатели no_overlay и no_nvidia, а также метаданные вендора. Подробности в документации пакета: /usr/share/doc/capsule-*/README.ru.md и примеры в examples/ (Chrome, VSCode, Steam с Proton и другие).

Оверрайды изнутри образа#

Установленный в процессе сборки пакет может положить файл /.capsule.overrides.yml в корень образа. После шагов установки Capsule объединит его с манифестом и удалит. Так, например, можно задать launch и export по результатам установки.

Режимы изоляции#

sharedisolatedstrict
/runобщий с хостомсвой (tmpfs)свой (tmpfs)
/mnt, /mediaобщие с хостомскрытыскрыты
/tmp, /var/tmpобщие с хостомобщие с хостомобщие с хостом
Сетьобщаяобщаяотключена
Процессыхостасвоисвои

shared это значение по умолчанию и максимальная совместимость: капсула по-прежнему работает в песочнице со своим корнем системы, но делит с хостом то, что нужно приложению. Единственный нюанс: /run принадлежит root, поэтому системные демоны в shared не могут писать туда свои pid-файлы и сокеты. Для демонов есть isolated.

В isolated и strict точечно возвращаются /run/user/$UID (Wayland, PipeWire, Pulse) и /run/dbus, поэтому окна и звук работают.

host_exec: команды на хосте#

Если в манифесте host_exec: true, внутрь капсулы пробрасывается клиент capsule-host-exec, который по запросу исполняет команды на хосте от вашего имени. Дополнительно под его именем работают:

Команда в капсулеЧто происходит
capsule-host-exec КОМАНДА ...прямой вызов команды на хосте
xdg-openссылки и файлы открываются в окружении хоста
gioоперации gio уходят на хост

Многострочные команды лучше разбивать на отдельные вызовы.

Типичные проблемы#

ПроблемаРешение
Сборка падает на could not find expected ':'В блоке `run: \ есть heredoc. Замените на printf` или скачайте файл по ссылке
wget и curl ругаются на сертификатыДобавьте установку ca-certificates
В Sisyphus нет пакета nodejsЭто виртуальный пакет, ставьте node и npm
Сборка из каталога eepm падаетСмотрите шаг, на котором произошла ошибка. Программы с Wine, системными службами и сложными установщиками могут не собираться
Сборка из каталога eepm: приложения нет в спискеСобирать можно только то, что есть в epm play --list-all
Нужно передать файл из капсулы на хостВнутри капсулы /tmp общий с хостом, а запись в домашнюю папку делайте через capsule-host-exec

Ограничения#

  • Капсула несёт своё окружение, поэтому занимает десятки и сотни мегабайт.
  • Формат и команды развиваются: сверяйтесь со справкой capsule --help и ./имя-капсулы --help.
  • Если у приложения несколько ярлыков, при сборке из каталога eepm берётся первый по алфавиту.

Смотрите также: установка программ, Atomic Booster, Distrobox.