Капсулы
Капсула это один исполняемый файл с приложением и всем его окружением. Собирается инструментом Capsule из образа контейнера (OCI). Для запуска не нужны права root. В ALT Atomic установленная версия Capsule 0.5.x.
Короткий рассказ с картинками есть на странице сайта, а здесь справочник: команды, ключи манифеста, режимы изоляции и работа в Atomic Booster.
Когда нужна капсула#
| Что нужно | Что выбрать |
|---|---|
| Обычное графическое приложение, есть Flatpak | Flatpak |
| Приложения нет во 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» собирает капсулу для приложения с сайта производителя:
- Выберите приложение в списке (до 100 строк, поиск по названию).
- Нажмите «Создать капсулу» и задайте имя файла, папку (по умолчанию
~/.local/bin) и режим песочницы (по умолчаниюshared). - 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-overlay | rootfs только для чтения | ||
--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 по результатам установки.
Режимы изоляции#
shared | isolated | strict | |
|---|---|---|---|
/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.