Создание расширений (aft-extension)#
Расширение Flatpak - это дополнительный набор файлов, который подключается к приложению или среде выполнения в заранее объявленной точке. Так добавляют, например, кодеки, языковые пакеты, плагины или тулчейны для SDK, не пересобирая сам хост.
Инструмент aft-extension собирает расширение из бинарных пакетов - по той же логике, что aft-app для приложений и aft-runtime для сред. Он берёт содержимое из deb-пакетов или tar-архива, формирует описание расширения с указанием расширяемого хоста и экспортирует результат в репозиторий как runtime-ref. Работать можно через YAML-манифест (команда build) или через флаги (команда package).
Из чего состоит раздел#
Расширяемый хост и среда сборки - расширяемый хост и среда, относительно которой собрано расширение.
Источники содержимого - откуда брать содержимое: пакет, локальные файлы, ссылки, архив, и дополнительные пакеты.
Раскладка содержимого - как разложить содержимое и доложить свои файлы.
Подпись, состав ПО и экспорт расширения - подпись, состав ПО, поиск уязвимостей и экспорт.
Манифест расширения - полный справочник YAML-манифеста: все секции и поля.
Команды#
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.