Справочник манифеста aft-app#
Манифест aft-app — YAML-файл, описывающий все параметры сборки
Flatpak-приложения из deb-пакета. Манифест передаётся команде aft-app build
и определяет метаданные, источник, зависимости, разрешения, параметры подписи
и экспорта.
Файл поддерживает многодокументный формат YAML: несколько манифестов в одном файле,
разделённых символами ---.
Корневые поля#
version: "1.0"
metadata: { }
runtime: { }
source: { }
dependencies: { }
files: { }
permissions: { }
extensions: [ ]
commands: { }
build: { }
export: { }
standalone: { }
versionВерсия формата манифеста. Обязательное поле. Текущее значение:
"1.0".
Секция metadata#
Определяет идентификационные данные приложения.
metadata:
id: org.example.MyApp
name: My Application
version: 1.0.0
arch: amd64
branch: stable
tags:
- proprietary
- network
Поле |
Тип |
Обязательное |
Описание |
|---|---|---|---|
|
строка |
Да |
Идентификатор в формате обратного DNS ( |
|
строка |
Да |
Отображаемое имя приложения. |
|
строка |
Да |
Версия приложения. |
|
строка |
Да |
Архитектура. Допустимые значения: |
|
строка |
Нет |
Ветка в репозитории. По умолчанию: |
|
массив строк |
Нет |
Теги AppStream ( |
Секция runtime#
Определяет рантайм, на котором будет работать приложение.
runtime:
id: org.example.Platform
version: stable
sdk: org.example.Sdk
Поле |
Тип |
Обязательное |
Описание |
|---|---|---|---|
|
строка |
Да |
Идентификатор рантайма. |
|
строка |
Да |
Версия (ветка) рантайма. |
|
строка |
Нет |
Идентификатор SDK. Если не указан, формируется автоматически:
к идентификатору рантайма добавляется суффикс |
Примечание
Секция runtime обязательна, если не включён автономный режим
(standalone.enabled: true).
Секция source#
Определяет источник файлов приложения. Структура секции зависит от значения
поля type.
Тип repository (по умолчанию)#
source:
type: repository
repository:
package: myapp
version: latest
components:
- main
Поле |
Тип |
Обязательное |
Описание |
|---|---|---|---|
|
строка |
Да |
Имя deb-пакета в репозитории. |
|
строка |
Нет |
Версия пакета. По умолчанию: |
|
массив строк |
Нет |
Компоненты APT-репозитория. По умолчанию: |
Тип local#
source:
type: local
local:
path: /path/to/myapp_1.0_amd64.deb
Поле |
Тип |
Обязательное |
Описание |
|---|---|---|---|
|
строка |
Да |
Абсолютный путь к |
Тип url#
source:
type: url
url:
address: https://example.com/downloads/myapp_1.0_amd64.deb
Поле |
Тип |
Обязательное |
Описание |
|---|---|---|---|
|
строка |
Да |
URL для загрузки файла. |
Тип tar#
source:
type: tar
tar:
path: /path/to/app.tar.xz
packages:
- libc6
- libssl3
layout:
- pattern: "*.so*"
dest: lib/
- pattern: myapp
dest: bin/
Поле |
Тип |
Обязательное |
Описание |
|---|---|---|---|
|
строка |
Да |
Путь к tar-архиву. Поддерживаются форматы |
|
массив строк |
Нет |
Перечень имён пакетов для записи в SBOM. Автоматический анализ
зависимостей для типа |
|
массив объектов |
Нет |
Правила размещения файлов из архива. Каждый элемент содержит
поля |
Секция dependencies#
Управляет анализом зависимостей deb-пакета.
dependencies:
analyze: true
includeRecommends: false
includeSuggests: false
exclude:
- some-unwanted-package
additional:
- extra-needed-lib
force:
- specific-version-lib
Поле |
Тип |
По умолчанию |
Описание |
|---|---|---|---|
|
булево |
|
Включить автоматический анализ зависимостей через |
|
булево |
|
Включить рекомендуемые пакеты ( |
|
булево |
|
Включить предлагаемые пакеты ( |
|
массив строк |
|
Пакеты, исключаемые из списка зависимостей. Применяется после анализа. |
|
массив строк |
|
Пакеты, добавляемые к списку зависимостей принудительно. |
|
массив строк |
|
Пакеты, загружаемые даже при их наличии в рантайме. Используется, когда приложению требуется версия библиотеки, отличная от версии в рантайме. |
Секция files#
Определяет команду запуска и файлы интеграции с рабочим столом.
files:
command: myapp
desktop: /usr/share/applications/myapp.desktop
metainfo: /usr/share/metainfo/org.example.MyApp.metainfo.xml
icons-dir: share/icons
icons:
- size: 128x128
path: share/icons/hicolor/128x128/apps/myapp.png
- size: 64x64
path: share/icons/hicolor/64x64/apps/myapp.png
cleanPatterns:
- share/doc/*
- share/man/*
Поле |
Тип |
Обязательное |
Описание |
|---|---|---|---|
|
строка |
Да |
Команда запуска приложения (имя исполняемого файла или путь
относительно |
|
строка |
Нет |
Путь к файлу |
|
строка |
Нет |
Путь к файлу AppStream-метаданных ( |
|
строка |
Нет |
Каталог с иконками (альтернатива массиву |
|
массив объектов |
Нет |
Список иконок с указанием размера и пути. Каждый элемент содержит
|
|
массив строк |
Нет |
Glob-шаблоны файлов, удаляемых из |
Примечание
Поля icons-dir и icons взаимоисключающие. Если указаны оба,
приоритет имеет icons.
Секция permissions#
Определяет разрешения песочницы. Все поля являются необязательными.
permissions:
sockets:
- x11
- wayland
- pulseaudio
devices:
- dri
shares:
- network
- ipc
filesystems:
- home
- xdg-documents:ro
persist:
- .config
- .cache
env:
- LANG=ru_RU.UTF-8
- QT_QPA_PLATFORM=wayland
unset-env:
- DISPLAY
own-name:
- org.example.MyApp
talk-name:
- org.freedesktop.Notifications
system-own-name:
- org.example.SystemService
system-talk-name:
- org.freedesktop.UDisks2
no-talk-name: []
no-system-talk-name: []
allow:
- bluetooth
inherit-extensions: []
Поле |
Тип |
Описание |
|---|---|---|
|
массив строк |
Доступ к сокетам: |
|
массив строк |
Доступ к устройствам: |
|
массив строк |
Разделяемые ресурсы: |
|
массив строк |
Доступ к файловой системе. Значения: |
|
массив строк |
Персистентные каталоги в |
|
массив строк |
Переменные окружения в формате |
|
массив строк |
Имена переменных окружения, удаляемых из песочницы. |
|
массив строк |
Имена на сессионной шине D-Bus, занимаемые приложением. |
|
массив строк |
Имена на сессионной шине D-Bus, к которым приложение обращается. |
|
массив строк |
Имена на системной шине D-Bus (own). |
|
массив строк |
Имена на системной шине D-Bus (talk). |
|
массив строк |
Запрет обращения к именам на сессионной шине. |
|
массив строк |
Запрет обращения к именам на системной шине. |
|
массив строк |
Дополнительные разрешения: |
|
массив строк |
Расширения рантайма, наследуемые приложением. |
Предупреждение
Если в манифесте не указаны sockets, devices и filesystems,
валидатор выведет предупреждение: приложение может не работать без доступа
к графической подсистеме и устройствам.
Секция extensions#
Определяет точки расширений приложения (массив объектов).
extensions:
- name: org.example.MyApp.Plugin
directory: share/app-plugins
version: "1.0"
autodelete: false
no-autodownload: false
subdirectories: false
Поле |
Тип |
Обязательное |
Описание |
|---|---|---|---|
|
строка |
Да |
Имя расширения (обратный DNS). |
|
строка |
Да |
Каталог монтирования расширения внутри приложения. |
|
строка |
Нет |
Версия расширения. |
|
строка |
Нет |
Несколько версий через точку с запятой: |
|
булево |
Нет |
Удалять расширение при удалении приложения. По умолчанию: |
|
булево |
Нет |
Не загружать расширение автоматически. По умолчанию: |
|
булево |
Нет |
Расширение является подмножеством локализации. По умолчанию: |
|
булево |
Нет |
Создавать подкаталоги для вариантов расширения. По умолчанию: |
|
строка |
Нет |
Путь, добавляемый в |
|
строка |
Нет |
Условие загрузки расширения. |
|
строка |
Нет |
Условие активации расширения. |
|
строка |
Нет |
Условие, предотвращающее автоматическое удаление. |
|
строка |
Нет |
Каталоги для объединения с родительским (через точку с запятой). |
|
строка |
Нет |
Суффикс подкаталогов вариантов. |
Секция commands#
Определяет команды, выполняемые на различных этапах сборки.
commands:
pre-export:
- sed -i 's/oldstring/newstring/g' files/bin/wrapper.sh
- rm -rf files/share/doc
- chmod +x files/bin/helper.sh
Поле |
Тип |
Описание |
|---|---|---|
|
массив строк |
Команды, выполняемые в сборочном каталоге ( |
Секция build#
Управляет параметрами процесса сборки.
build:
sbom: true
cache: true
cacheDir: ~/.cache/aft-app
parallel: 4
bsign:
enabled: false
key: ""
passphraseFile: ""
detached: false
detachedPath: ""
elfOnly: true
exportKey: true
useBsignIntegrator: false
password: ""
Параметры верхнего уровня#
Поле |
Тип |
По умолчанию |
Описание |
|---|---|---|---|
|
булево |
|
Генерировать SBOM (Software Bill of Materials) в формате CycloneDX. |
|
булево |
|
Использовать кеш загруженных пакетов. |
|
строка |
|
Каталог для хранения кеша. |
|
число |
|
Количество параллельных загрузок пакетов. |
Подсекция bsign#
Управляет подписью ELF-файлов.
Поле |
Тип |
По умолчанию |
Описание |
|---|---|---|---|
|
булево |
|
Включить подпись ELF-файлов. |
|
строка |
|
Идентификатор GPG-ключа для bsign. |
|
строка |
|
Путь к файлу с паролем ключа (для пакетного режима). |
|
булево |
|
Использовать отделённые подписи (флаг |
|
строка |
|
Каталог для сохранения отделённых подписей (флаг |
|
булево |
|
Встраивать подпись в ELF-секцию файла (флаг |
|
булево |
|
Экспортировать публичный GPG-ключ в рантайм
( |
|
булево |
|
Использовать |
|
строка |
|
Пароль для |
Секция export#
Определяет параметры экспорта в OSTree-репозиторий.
export:
repository: ./repo
gpgSign: ""
gpgHomedir: ~/.gnupg
stable: true
collection-id: ""
generate-static-deltas: false
prune: false
Поле |
Тип |
По умолчанию |
Описание |
|---|---|---|---|
|
строка |
|
Путь к OSTree-репозиторию. Создаётся автоматически при отсутствии. |
|
строка |
|
Идентификатор GPG-ключа для подписи коммита. Пустая строка — без подписи. |
|
строка |
|
Каталог с GPG-ключами. |
|
булево |
|
Использовать ветку |
|
строка |
|
Collection ID репозитория. Защищает от подмены репозитория. |
|
булево |
|
Генерировать статические дельты для эффективных обновлений. |
|
булево |
|
Удалить устаревшие объекты из репозитория после экспорта. |
Секция standalone#
Управляет автономным режимом (встроенный рантайм). При включении aft-app
автоматически создаёт фиктивный рантайм и SDK с символическими ссылками
на /app/, а содержимое rootfs импортирует в приложение.
Подробнее — в разделе aft-app: сборка приложений из deb-пакетов.
standalone:
enabled: false
rootfs: /path/to/rootfs
Поле |
Тип |
По умолчанию |
Описание |
|---|---|---|---|
|
булево |
|
Включить автономный режим. |
|
строка |
|
Путь к корневой файловой системе. Обязательно при |
Примечание
Секция runtime при включённом автономном режиме необязательна.
Если она не указана, идентификаторы формируются автоматически:
<metadata.id>.Platform (рантайм) и <metadata.id>.Sdk (SDK),
версия берётся из metadata.branch или stable.
Полный пример манифеста#
version: "1.0"
metadata:
id: org.example.TextEditor
name: Text Editor
version: 2.4.1
arch: amd64
branch: stable
tags:
- gui
- editor
runtime:
id: org.example.Platform
version: stable
source:
type: repository
repository:
package: texteditor
version: latest
components:
- main
dependencies:
analyze: true
includeRecommends: false
includeSuggests: false
exclude:
- texteditor-dbg
additional:
- libhunspell-dev
force: []
files:
command: texteditor
desktop: /usr/share/applications/texteditor.desktop
metainfo: /usr/share/metainfo/org.example.TextEditor.metainfo.xml
icons-dir: share/icons
cleanPatterns:
- share/doc/*
- share/man/*
permissions:
sockets:
- x11
- wayland
- pulseaudio
devices:
- dri
shares:
- ipc
- network
filesystems:
- home
persist:
- .config/texteditor
env:
- LANG=ru_RU.UTF-8
own-name:
- org.example.TextEditor
talk-name:
- org.freedesktop.Notifications
commands:
pre-export:
- chmod +x files/bin/texteditor-wrapper.sh
build:
sbom: true
cache: true
parallel: 4
bsign:
enabled: true
key: ABCDEF1234567890
elfOnly: true
exportKey: true
export:
repository: ./repo
gpgSign: ABCDEF1234567890
generate-static-deltas: true
Правила валидации#
Валидация манифеста выполняется при вызове aft-app validate и автоматически
перед сборкой. Ниже перечислены проверяемые правила.
Ошибки (прерывают сборку)#
Поле
versionдолжно быть указано.Поле
metadata.idдолжно быть указано и содержать минимум одну точку.Поля
metadata.name,metadata.version,metadata.archдолжны быть указаны.Значение
metadata.archдолжно быть одним из:amd64,x86_64,arm64,aarch64,i386,armhf.Поля
runtime.idиruntime.versionдолжны быть указаны (кроме автономного режима).Поле
files.commandдолжно быть указано.Поле
export.repositoryдолжно быть указано.Для
source.type: repository— обязательно полеsource.repository.package.Для
source.type: local— обязательно полеsource.local.path.Для
source.type: url— обязательно полеsource.url.address.Для
source.type: tar— обязательно полеsource.tar.path.При
standalone.enabled: true— обязательно полеstandalone.rootfs.
Предупреждения (не прерывают сборку)#
Не указаны разрешения
sockets,devicesилиfilesystems— приложение может не работать без доступа к графической подсистеме.Включена генерация SBOM при отключённом анализе зависимостей.