Капсулы: приложение в одном файле
Программа вместе со всем, что ей нужно, упакована в один исполняемый файл. Ничего не ставится в систему, а удалить можно одним файлом.
Что такое капсула
Capsule это инструмент, который собирает из образа контейнера (OCI) один исполняемый файл с приложением и всем его окружением: библиотеками и нужными утилитами. Такой файл можно положить куда угодно, хоть на флешку, и запустить. Для запуска не нужны права root.
Внутри файла работает песочница bubblewrap со своим корнем системы. Системные пакеты при этом остаются нетронутыми, а это ровно то, что нужно в неизменяемой ALT Atomic.
Один файл
Скачали или собрали и запустили. Для запуска ничего не ставится и не нужен root.
Система остаётся чистой
Приложение работает со своими библиотеками и не засоряет систему.
Ваш $HOME на месте
Приложения читают и хранят настройки в вашей домашней папке, как будто установлены обычным способом.
Набор приложений
В одну капсулу можно упаковать не одну программу, а целый набор утилит.
Зачем это в ALT Atomic
В неизменяемой системе есть четыре способа получить программу. Капсулы закрывают случай, когда программы нет во Flatpak и не хочется заводить контейнер:
| Способ | Когда подходит |
|---|---|
| Flatpak | обычные графические приложения, у которых есть Flatpak |
| Капсула | нужной программы нет во Flatpak, она нужна как отдельный файл, нужна своя версия библиотек или изоляция |
| Distrobox | среда разработки или программа из другого дистрибутива с доступом к домашней папке |
| Встроить в образ | системный компонент, который нужен всем навсегда |
Как пользоваться в Atomic Booster
Вкладка «Capsules» в Atomic Booster состоит из трёх частей:
- Мои капсулыСписок установленных капсул. У каждой есть кнопки «Запустить», «Экспортировать» (сохранить капсулу в выбранное место), «Удалить» и «Открыть папку с капсулой». В подробностях видны данные внутри капсулы (с кнопкой «Сбросить данные…»: капсула вернётся к состоянию после сборки), список зависимостей и последние ошибки. Внизу показано место на диске: кэш сборки, данные приложений внутри капсул и сами капсулы. Кэш можно очистить безопасно: капсулы и их данные не затрагиваются.
- Официальный каталогПоле «имя-capsule» ищет рецепты в каталоге Aides. Booster загружает проверенный манифест и собирает капсулу командой
capsule build, а в списке рядом с найденным рецептом кнопка «Установить». - Каталог 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.
| shared | isolated | strict | |
|---|---|---|---|
/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 покажет шаг, на котором произошла ошибка.
Документация
Подробный справочник с командами, ключами и разбором типичных проблем:


