Источники программы#
Источник определяет, откуда 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.
Если эти файлы не заданы, инструмент находит их в содержимом или формирует сам и приводит к идентификатору приложения.