Предварительный анализ#
Перед сборкой полезно понять, во что обойдётся упаковка: от каких пакетов зависит программа, какая среда выполнения покроет их лучше других, какие разрешения песочницы ей понадобятся. Команда analyze отвечает на эти вопросы, ничего не собирая и не меняя в системе. Права администратора ей не нужны.
Результат анализа удобно использовать как черновик: подобранная среда, список недостающих пакетов и предложенные разрешения переносятся в флаги команды package или в манифест.
Как это применяется#
Анализ запускается по источнику. Тип источника задаётся тем же флагом, что и при сборке, и для одного запуска берётся ровно один:
--package <имя>(или-p) - пакет из репозитория APT.--local <файл.deb>(-l) - готовый deb-файл с диска.--url <адрес>(-u) - deb по ссылке.--tar <архив>(-t) - архив с собранными файлами.--system <бинарь>(-s) - установленная в системе программа: путь к ней или имя в PATH.
Простейший запуск:
aft-app analyze --package thunderbird
Остальные флаги настраивают анализ:
--arch <арх>(-a) - архитектура, для которой считать покрытие (по умолчанию amd64).--runtime <id>(-r) - предпочесть конкретную среду выполнения. Без этого флага среда подбирается сама.--no-remotes- искать среды только среди установленных, не обращаясь к подключённым репозиториям. Заметно быстрее.--runtime-version <в>(-R) - версия среды, с которой сравнивать зависимости.--recommends- учитывать пакеты из Recommends.--suggests- учитывать пакеты из Suggests.--use-model- уточнять предложенные разрешения моделью вместо одних правил. Нужен пакетaft-ml-model; без него анализ выдаёт предупреждение и продолжается на правилах.--model-cmd <команда>- команда предсказания вместо стандартнойaft-ml-predict.--json(-j) - выдать результат целиком в машиночитаемом виде, для конвейеров и сторонних инструментов.--verbose(-v) - подробный вывод.
Что показывает анализ#
Разбор источника#
Первое, что выводится: определённый тип источника, угаданные метаданные приложения (имя, идентификатор, команда запуска) и объём найденного - сколько насчитано deb-зависимостей и сколько разделяемых библиотек требуют исполняемые файлы.
Метаданные берутся из содержимого: из desktop-файлов и описания пакета. Это
заготовка для флагов --id, --name и --command, а не окончательное
решение.
Подбор среды выполнения#
Дальше идёт список сред-кандидатов, отсортированный по покрытию зависимостей. По каждой видно, сколько зависимостей приложения она закрывает, сколько остаётся доложить, и откуда она известна: установлена в системе, доступна в подключённом репозитории или и то и другое. Выбранный кандидат отмечен сдвигом влево.
Кандидаты собираются из установленных сред и из сред в подключённых репозиториях; отбираются подходящие по архитектуре. Служебные ветки сред (локали, отладочные символы, исходники) в список не попадают. Покрытие считается по составу ПО среды, поэтому среда без вложенного состава покрытия не покажет.
Разбор зависимостей#
Зависимости раскладываются на три группы относительно выбранной среды: покрытые средой, доступные из репозитория APT и ненайденные. Последняя группа - это то, что придётся решать вручную: подложить пакет файлом, добавить репозиторий или отказаться от зависимости.
Предложенные разрешения#
Анализ предлагает разрешения песочницы и объясняет каждое: например, доступ к
графике потому, что программа линкуется с библиотекой X11. Разрешения с высокой
уверенностью помечены звёздочкой как рекомендованные, остальные приведены для
сведения. Предложения переносятся во флаги --socket, --share,
--device и им подобные (см. Разрешения песочницы).
Что можно закрыть через astra-shim#
Отдельным разделом выводится то, что мешает программе работать в песочнице, но решается без правки бинарника: зашитые абсолютные пути и вызовы команд хоста. По каждому найденному пути показывается предлагаемый ремап и файл, в котором путь встретился; по каждой команде - предлагаемая замена.
Строки переносятся в файл правил как есть: формат вывода совпадает с форматом конфига. Как подключить astra-shim к приложению и что он умеет - в разделе Совместимость с песочницей (astra-shim).
Если выбранная среда выполнения не из семейства org.astra, раздел
помечается как справочный: расширение с обёрткой к такой среде не подключается.
Имена D-Bus и ключ подписи#
Если в содержимом нашлись описания служб D-Bus, их имена выводятся с пометкой
шины: сессионная или системная. Это готовые значения для --own-name и
--talk-name.
Последней строкой, если в системе настроен ключ GPG по умолчанию, выводится его идентификатор - тот, которым логично подписать сборку.
Тонкости#
Анализ работает только на чтение: содержимое распаковывается во временный каталог, который затем удаляется. Установленную систему команда не трогает, и запускать её от администратора не требуется.
Опрос подключённых репозиториев занимает время, потому что для каждой среды
нужно получить её состав ПО. Если среды уже установлены локально, флаг
--no-remotes сокращает анализ до них.
Для источников tar и system deb-зависимости не разбираются: состав задаёт сам источник. Разрешения, библиотеки и имена D-Bus для них определяются как обычно, по содержимому.
Угаданный идентификатор приложения почти всегда требует правки: он выводится из имени пакета и не заменяет осмысленный reverse-DNS идентификатор.