Источники программы#

Источник определяет, откуда aft-app берёт содержимое будущего приложения. Поддерживаются семь вариантов: пакет из репозитория, локальные deb-файлы, deb по ссылке, tar-архив с готовыми бинарниками, перенос установленного ПО, сборка из исходников и standalone со встроенной средой.

Тип источника задаётся флагом команды package; для одной сборки берётся ровно один источник. В манифесте источник описывается секцией source с полем type (см. Манифест приложения).

Пакет из репозитория APT#

Основной и самый частый источник. Пакет и его зависимости берутся из APT-репозитория системы.

  • --package <имя> (или -p) - имя пакета.

Версию по умолчанию берут последнюю доступную; зафиксировать конкретную можно в манифесте (source.repository.version). Компоненты репозитория по умолчанию - один компонент main. Зависимости для этого источника разбираются автоматически, подробнее в Зависимости.

Закрепление версии пакета#

Без закрепления берётся то, что репозиторий отдаёт как последнее по своим приоритетам. Значит, одна и та же сборка через месяц может дать другой пакет. Поле source.repository.version фиксирует версию и делает сборку воспроизводимой:

source:
  type: repository
  repository:
    package: diffuse
    version: 0.7.5

Закрепляется версия только основного пакета; зависимости берутся по обычным правилам репозитория. Если закреплённой версии в репозитории нет, сборка останавливается на шаге скачивания. Ранее скачанный пакет другой версии из кэша при этом не подставляется: версия сверяется по содержимому файла, а не по его имени.

sudo aft-app package --id org.example.MyApp --package myapp \
    --command myapp --runtime org.astralinux.Platform \
    --runtime-version 1.8 --socket x11 --device dri

Локальные deb-файлы#

Готовые deb-файлы с диска.

  • --local <путь> - основной deb-файл.

  • --add-deb <путь> - дополнительный deb-файл (повторяемо).

Все указанные файлы распаковываются в одно приложение. Зависимости основного пакета разбираются автоматически.

deb по ссылке#

deb-файлы, скачиваемые по HTTP или HTTPS.

  • --url <адрес> - основная ссылка.

  • --add-url <адрес> - дополнительная ссылка (повторяемо).

Скачанные файлы проверяются на корректность deb и кэшируются. Для этого источника нужен curl в системе.

Пакет скачивается до разбора зависимостей, поэтому его зависимости разбираются и сравниваются со средой выполнения так же, как для пакета из репозитория и локального deb.

Готовые бинарники из tar-архива#

Архив с уже собранными файлами. Поддерживаются форматы .tar.xz, .tar.gz, .tgz, .txz.

  • --tar <путь> (или --archive) - путь к архиву.

  • --tar-package <пакет> - дополнительный пакет из репозитория (повторяемо).

  • --tar-layout <правило> - правило раскладки файлов архива (повторяемо).

Если внутри архива всё лежит в одном обёрточном каталоге, он снимается автоматически. Раскладка задаётся правилами вида шаблон=каталог: файлы, подходящие под шаблон, копируются в указанный каталог приложения. Например, библиотеки направляют в каталог lib, а исполняемые файлы в bin. Зависимости для этого источника автоматически не разбираются - нужные пакеты добавляют через --tar-package или дополнительные зависимости (см. Зависимости).

Перенос установленного ПО из живой системы#

Перенос уже работающей в системе программы вместе с её файлами.

  • --system <бинарь> - путь к программе или её имя в PATH.

  • --pattern <шаблон> - дополнительные файлы по шаблону пути (повторяемо).

Инструмент находит библиотеки программы, определяет пакеты-владельцы и переносит их в приложение; дополнительно собираются файлы по указанным шаблонам. Для этого источника нужны ldd и dpkg.

sudo aft-app package --system /usr/bin/myapp \
    --pattern '/usr/share/myapp/*' --id org.astra.MyApp \
    --name MyApp --runtime org.astra.Platform \
    --runtime-version 1.8 --command myapp

Сборка из исходников#

Сборка приложения из каталога с исходным кодом (или с уже собранными бинарями).

  • --source-dir <каталог> - каталог с исходниками.

  • --build-cmd <команда> - команда сборки (повторяемо).

Команды выполняются в песочнице сборки, где /app - префикс приложения; туда и устанавливается результат. Если команд нет, содержимое каталога просто переносится в приложение. Заголовки и библиотеки, которых нет в SDK, подключают сборочными зависимостями (см. Зависимости).

sudo aft-app package --source-dir /path/to/src \
    --build-cmd "cmake -S . -B /tmp/b -DCMAKE_INSTALL_PREFIX=/app" \
    --build-cmd "cmake --build /tmp/b -j && cmake --install /tmp/b" \
    --id org.astra.MyApp --name MyApp --command myapp \
    --runtime org.astra.Platform --runtime-version 1.8

Standalone со встроенной средой#

Приложение со встроенной системой: всё необходимое берётся из готового rootfs.

  • --standalone - включить режим.

  • --rootfs <каталог> - каталог с системой.

Среда выполнения и SDK создаются автоматически на основе идентификатора приложения, поэтому --runtime и --runtime-version указывать не нужно. В манифесте этому источнику соответствует секция standalone (см. Манифест приложения).

sudo aft-app package --standalone --rootfs /opt/myapp-rootfs \
    --id org.astra.MyApp --name MyApp --command myapp --socket wayland

Метаданные приложения#

Независимо от источника задаются метаданные приложения:

  • --id <id> (или -i) - идентификатор в формате reverse-DNS. Если не задан, к имени пакета добавляется префикс org.flatpak.: для пакета thunderbird получится org.flatpak.thunderbird. Такой идентификатор годится для пробной сборки, но не для публикации, поэтому его задают явно.

  • --name <имя> (-n) - понятное имя приложения.

  • --version <версия> (-V) - версия сборки (по умолчанию 1.0).

  • --arch <арх> (-a) - архитектура: amd64 (по умолчанию), arm64, i386 или armhf; приводится к формату Flatpak автоматически.

  • --branch <ветка> - ветка выпуска (по умолчанию stable).

  • --tag <метка> - метка для каталога приложений (повторяемо).

  • --command <команда> (-c) - исполняемый файл для запуска внутри песочницы. Обязателен.

Среда выполнения задаётся флагами --runtime (-r), --runtime-version (-R) и при необходимости --sdk (-s); по умолчанию SDK берётся как <идентификатор среды>.Sdk.

Готовые AppStream-метаданные, desktop-файл и иконки можно подставить явно:

  • --metainfo <путь> - файл AppStream (.metainfo.xml или .appdata.xml).

  • --desktop <путь> - готовый desktop-файл.

  • --icons-dir <каталог> - каталог иконок со структурой <размер>/<имя>.png.

Если эти файлы не заданы, инструмент находит их в содержимом или формирует сам и приводит к идентификатору приложения.