Предварительный анализ#

Перед сборкой полезно понять, во что обойдётся упаковка: от каких пакетов зависит программа, какая среда выполнения покроет их лучше других, какие разрешения песочницы ей понадобятся. Команда 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 идентификатор.