Создание расширений (aft-extension)#

Расширение Flatpak - это дополнительный набор файлов, который подключается к приложению или среде выполнения в заранее объявленной точке. Так добавляют, например, кодеки, языковые пакеты, плагины или тулчейны для SDK, не пересобирая сам хост.

Инструмент aft-extension собирает расширение из бинарных пакетов - по той же логике, что aft-app для приложений и aft-runtime для сред. Он берёт содержимое из deb-пакетов или tar-архива, формирует описание расширения с указанием расширяемого хоста и экспортирует результат в репозиторий как runtime-ref. Работать можно через YAML-манифест (команда build) или через флаги (команда package).

Из чего состоит раздел#

Команды#

build#

aft-extension build <файл.yaml> - сборка по манифесту. В одном файле можно описать несколько расширений, разделив документы строкой ---; они собираются по очереди. Нужны права администратора.

package#

aft-extension package [опции] - сборка по флагам. Обязательны идентификатор и расширяемый хост. Нужны права администратора. Флаги разобраны в блоках Расширяемый хост и среда сборки, Источники содержимого, Раскладка содержимого и Подпись, состав ПО и экспорт расширения.

generate-yaml#

aft-extension generate-yaml [опции] - собрать манифест из тех же флагов, что и package, и вывести его на экран или записать в файл через --out-yaml. Сборка не выполняется, права администратора не нужны.

validate#

aft-extension validate <файл.yaml> - проверить манифест на ошибки. Код возврата 0 означает, что ошибок нет.

generate-manifest#

aft-extension generate-manifest - открыть интерактивный генератор манифеста в браузере. Тот же генератор вызывается глобальным флагом -G.

clean#

aft-extension clean - очистить кэш скачанных пакетов (по умолчанию ~/.cache/aft-extension).

help#

aft-extension help [тема] - справка, при необходимости по конкретной теме.

Как это применяется#

Расширение собирается командой package с указанием идентификатора, расширяемого хоста, среды сборки и источника содержимого:

sudo aft-extension package \
    --id org.foo.App.Extension.Codecs \
    --extends-ref app/org.foo.App/x86_64/stable \
    --build-runtime org.foo.Platform --build-runtime-version 1.8 \
    --url https://example.com/codec.deb \
    --add-url https://example.com/dep.deb -o ./repo

Те же параметры можно зафиксировать в манифесте и собрать командой build.

Процесс сборки#

При сборке инструмент проверяет окружение, разбирает источник и дополнительные пакеты (отсекая то, что уже есть в среде сборки), раскладывает содержимое по правилам, дополняет своими файлами, формирует описание расширения с секциями о расширяемом хосте и среде сборки, при необходимости подписывает бинарники и формирует состав ПО, после чего экспортирует расширение в репозиторий как runtime-ref и обновляет репозиторий. Если включён поиск уязвимостей, он запускается последним.

Ход сборки виден в журнале. В отличие от приложений, пути внутри содержимого расширения не переписываются: расширение монтируется в объявленную хостом точку, а не в /app, поэтому пути в пакете должны быть уже пригодны для монтирования.

Права и журналирование#

Сборка (build и package) требует прав администратора. Построение и проверка манифеста прав администратора не требуют. Подробность вывода настраивается флагами --verbose (-v), --quiet (-q) и --log-level.