Манифест расширения#
Манифест - это YAML-файл, который полностью описывает сборку расширения. Он собирает в одном месте всё то же, что задаётся флагами команды package. Манифест собирают командой build, проверяют командой validate и могут получить из флагов командой generate-yaml.
В одном файле можно описать несколько расширений, разделив документы строкой
---; они собираются по очереди.
Манифест разбирается строго: одиночное значение вместо списка, значение неподходящего типа, неизвестное поле и поле, указанное дважды, отклоняются с указанием пути до поля и номера строки. Правила разбора те же, что у приложений, и подробно описаны в блоке Манифест приложения.
Ниже разобрана каждая секция и каждое поле: назначение и, где есть, значение по умолчанию.
version#
Строка версии формата манифеста. По умолчанию 1.0.
version: "1.0"
metadata#
Метаданные расширения.
id- идентификатор в формате reverse-DNS (например, org.foo.App.Extension.Codecs). Обязателен.name- понятное имя.version- версия расширения. По умолчанию 1.0.arch- архитектура: amd64 или arm64. По умолчанию amd64.branch- ветка ref. По умолчанию stable. Должна совпадать с версией точки расширения хоста, если та задана.tags- список меток для каталога приложений.
metadata:
id: org.foo.App.Extension.Codecs
arch: amd64
branch: stable
extends#
Расширяемый хост (см. блок Расширяемый хост и среда сборки).
ref- ссылка на хост. Принимается полный ref или короткая форма. Обязательна.directory- каталог монтирования.tag- дополнительный тег.
extends:
ref: app/org.foo.App/x86_64/stable
directory: lib/codecs
buildRuntime#
Среда, относительно которой собрано расширение (см. блок Расширяемый хост и среда сборки).
id- идентификатор среды.version- её версия.sdk- идентификатор SDK.
buildRuntime:
id: org.foo.Platform
version: "1.8"
sdk: org.foo.Sdk
source#
Источник содержимого. Поле type выбирает один из вариантов; заполняется
соответствующая вложенная секция. Подробно про источники - в блоке
Источники содержимого.
Допустимые значения type: deb, url, tar, repository. По умолчанию deb. Тип
repository принимается и в кратком написании repo.
deb#
Для типа deb заполняется секция local:
path- основной deb-файл.additionalPaths- список дополнительных deb-файлов.
source:
type: deb
local:
path: /var/cache/apt/archives/codec.deb
additionalPaths:
- /path/to/dep.deb
url#
address- основная ссылка на deb.additionalUrls- список дополнительных ссылок.
source:
type: url
url:
address: https://example.com/codec.deb
additionalUrls:
- https://example.com/dep.deb
tar#
path- путь к архиву (.tar.xz,.tar.gz).packages- дополнительные пакеты из репозитория.layout- список правил раскладки; у каждого поляpatternиdest(см. блок Раскладка содержимого).
source:
type: tar
tar:
path: /opt/plugin.tar.xz
layout:
- { pattern: "bin/plugin", dest: bin }
repository#
package- имя пакета.version- версия пакета. По умолчанию latest.components- компоненты репозитория.
source:
type: repository
repository:
package: clang-19
dependencies#
Дополнительные пакеты из репозитория (см. блок Источники содержимого).
additional- доложить пакеты с отсечением того, что есть в среде сборки.force- включить пакеты всегда.exclude- не включать пакеты.
dependencies:
force:
- libgl1-mesa-dri
- mesa-vulkan-drivers
layout#
Список правил раскладки содержимого (см. блок Раскладка содержимого). У каждого правила
поля from (путь в извлечённом дереве) и to (путь относительно корня
содержимого; пусто - корень). Секция применяется к источникам deb, url и
repository; для tar-архива раскладка задаётся полем source.tar.layout.
layout:
- { from: usr/lib/llvm-19, to: "" }
- { from: usr/lib/x86_64-linux-gnu, to: lib }
files#
Дополнительные файлы расширения (см. блок Раскладка содержимого).
write- список файлов, записываемых из заданного содержимого; у каждого поляpath,contentиexecutable(по умолчанию false).copy- список файлов и каталогов, копируемых с хоста; у каждого поляsrcиdest.
files:
write:
- path: enable.sh
executable: true
content: |
export PATH="/usr/lib/sdk/llvm-19/bin${PATH:+:${PATH}}"
build#
Параметры сборки, подписи и поиска уязвимостей.
sbom- генерировать состав ПО. По умолчанию true.cache- использовать кэш. По умолчанию true.cacheDir- каталог кэша. По умолчанию~/.cache/aft-extension.parallel- число параллельных загрузок. По умолчанию 4.pruneBrokenSymlinks- удалять битые символьные ссылки после раскладки. По умолчанию false.
Вложенная секция bsign - подпись ELF по ГОСТ:
enabled- включить подпись. По умолчанию false.key- идентификатор ключа.passphraseFile- файл с паролем для пакетной подписи.detached- отсоединённые подписи. По умолчанию false.detachedPath- каталог для отсоединённых подписей.elfOnly- встраиваемая подпись в ELF. По умолчанию true.exportKey- выложить публичный ключ. По умолчанию false.useBsignIntegrator- использовать bsign-integrator. По умолчанию false.password- пароль для bsign-integrator.
Вложенная секция scan - поиск уязвимостей после экспорта:
enabled- включить проверку. По умолчанию false.ovalDir- каталог с базой определений.failOn- уровень, начиная с которого сборка считается неуспешной.strict- строгий режим. По умолчанию false.severities- список проверяемых уровней.ignoreCves- список исключаемых уязвимостей.ignorePackages- список исключаемых пакетов.
build:
sbom: true
pruneBrokenSymlinks: true
bsign:
enabled: false
export#
Параметры экспорта в репозиторий OSTree.
repository- путь к репозиторию. По умолчанию./repo.gpgSign- ключ GPG для подписи репозитория.gpgHomedir- каталог GPG. Пусто - определяется автоматически.collection-id- идентификатор набора репозитория.generate-static-deltas- генерировать статические дельты. По умолчанию false.prune- удалять старые объекты при обновлении. По умолчанию false.
export:
repository: ./repo
Полный пример#
version: "1.0"
metadata:
id: org.foo.App.Extension.Codecs
arch: amd64
branch: stable
extends:
ref: app/org.foo.App/x86_64/stable
directory: lib/codecs
buildRuntime:
id: org.foo.Platform
version: "1.8"
sdk: org.foo.Sdk
source:
type: url
url:
address: https://example.com/codec.deb
additionalUrls:
- https://example.com/dep.deb
build:
sbom: true
export:
repository: ./repo
Несколько расширений описываются в одном файле через разделитель ---.