Капсулы: приложение в одном файле

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

Atomic Booster: официальный каталог капсул
Каталог капсул в Atomic Booster: «Мои капсулы», «Официальный каталог» и «EPM каталог».

Что такое капсула

Capsule это инструмент, который собирает из образа контейнера (OCI) один исполняемый файл с приложением и всем его окружением: библиотеками и нужными утилитами. Такой файл можно положить куда угодно, хоть на флешку, и запустить. Для запуска не нужны права root.

Внутри файла работает песочница bubblewrap со своим корнем системы. Системные пакеты при этом остаются нетронутыми, а это ровно то, что нужно в неизменяемой ALT Atomic.

Один файл

Скачали или собрали и запустили. Для запуска ничего не ставится и не нужен root.

Система остаётся чистой

Приложение работает со своими библиотеками и не засоряет систему.

Ваш $HOME на месте

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

Набор приложений

В одну капсулу можно упаковать не одну программу, а целый набор утилит.

Зачем это в ALT Atomic

В неизменяемой системе есть четыре способа получить программу. Капсулы закрывают случай, когда программы нет во Flatpak и не хочется заводить контейнер:

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

Как пользоваться в Atomic Booster

Вкладка «Capsules» в Atomic Booster состоит из трёх частей:

  1. Мои капсулыСписок установленных капсул. У каждой есть кнопки «Запустить», «Экспортировать» (сохранить капсулу в выбранное место), «Удалить» и «Открыть папку с капсулой». В подробностях видны данные внутри капсулы (с кнопкой «Сбросить данные…»: капсула вернётся к состоянию после сборки), список зависимостей и последние ошибки. Внизу показано место на диске: кэш сборки, данные приложений внутри капсул и сами капсулы. Кэш можно очистить безопасно: капсулы и их данные не затрагиваются.
  2. Официальный каталогПоле «имя-capsule» ищет рецепты в каталоге Aides. Booster загружает проверенный манифест и собирает капсулу командой capsule build, а в списке рядом с найденным рецептом кнопка «Установить».
  3. Каталог eepmРаздел «Создать капсулу из каталога eepm»: выбираете приложение с сайта производителя, задаёте имя файла, папку (по умолчанию ~/.local/bin) и режим песочницы, и Booster собирает капсулу. Список приложений берётся из каталога eepm, который кэшируется вкладкой Distrobox. Если каталога ещё нет, Booster подскажет открыть эту вкладку.

Если пакета capsule в системе нет, на вкладке есть кнопка «Установить через APM» (права запрашиваются через polkit). Из терминала то же: sudo apm s install capsule.

Из терминала

Команда capsule собирает и обслуживает капсулы:

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

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

Файл капсулы это и есть программа: запустите его без аргументов, чтобы открыть приложение, или добавьте команду:

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

Полезные ключи запуска: --bind ПУТЬ подмонтировать папку хоста внутрь, --env КЛЮЧ=ЗНАЧЕНИЕ задать переменную окружения, --sandbox выбрать режим изоляции, --no-overlay запретить запись изменений.

Ещё два способа поставить готовое: aides-install пакет берёт капсулу из каталога Aides, а приложения из списка epm play Booster сразу собирает в капсулу (вкладка «Каталог eepm»).

Изоляция

Режим задаётся в манифесте (ключ sandbox) или флагом --sandbox при запуске. Флаг главнее манифеста. По умолчанию используется shared.

sharedisolatedstrict
/runобщий с хостомсвойсвой
/mnt, /mediaобщие с хостомскрытыскрыты
Сетьобщаяобщаяотключена
Процессывидны процессы хостасвоисвои
Для чегографические приложения и браузерыдемоны и серверымаксимальная изоляция

Даже в shared капсула работает в песочнице со своим корнем системы, но делит с хостом то, что нужно приложению. В режимах isolated и strict точечно возвращаются сокеты графики, звука и D-Bus, чтобы окна и звук продолжали работать.

Доступ к системе: host_exec

С ключом host_exec: true в манифесте приложение может по запросу выполнять команды на хосте от вашего имени. Через этот мост работают открытие ссылок (xdg-open) и операции gio: например, браузер из капсулы откроет ссылку в системном просмотрщике.

Что с изменениями

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

Как собрать свою капсулу

Капсула описывается YAML-манифестом: из какого образа взять систему, что установить и что показать в меню. Так выглядит рабочий пример (сборка Chrome из поставки capsule, в сокращении):

image: registry.altlinux.org/sisyphus/base:latest output: ~/.local/bin/chrome compression: zstd launch: google-chrome export: apps: - desktop: /usr/share/applications/google-chrome.desktop icon: google-chrome name_suffix: " (Capsule)" install: - name: deps run: | apt-get update apt-get install -y eepm curl - name: app run: | epm -y play chrome

Готовые манифесты (Chrome, VSCode, Steam с Proton, Яндекс Музыка и другие) лежат в /usr/share/doc/capsule-*/examples/.

На что обратить внимание

  • Локальные файлы можно скопировать в образ до шагов установки ключом files: src файл или папка на хосте, dst путь внутри.
  • Внутри блока run: | не пишите heredoc: по опыту сборки YAML-разбор на них ломается. Файлы вставляйте через printf или скачивайте по ссылке.
  • Для загрузки по HTTPS нужен пакет ca-certificates.
  • В Sisyphus nodejs виртуальный пакет, ставьте node и npm.
  • Постоянные подключения папок хоста описываются ключом binds, а команда при старте ключом on_start.

Ограничения

  • Размер. Капсула несёт с собой окружение, поэтому небольшая занимает десятки мегабайт, а с крупным приложением сотни (капсула с распознаванием речи Voxtype, например, около 110 МБ).
  • Молодая технология. Сейчас в системе версия 0.5.x. Формат и команды развиваются, поэтому сверяйтесь со справкой: capsule --help и ./имя-капсулы --help.
  • Не всё упаковывается. Программы со своими системными службами или сложными установщиками (в том числе приложения под Wine) могут не собраться. Если сборка из каталога eepm падает, Booster покажет шаг, на котором произошла ошибка.

Документация

Подробный справочник с командами, ключами и разбором типичных проблем: