KasperskyOS Community Edition 1.3

Сценарий использования компонента PackageManager

Компонент PackageManager предоставляет API для управления KPA-пакетами в решениях, построенных на базе KasperskyOS.

API компонента PackageManager представляет собой надстройку над IPC, которая позволяет упростить процесс разработки программ. PackageManager является отдельной системной программой, доступ к которой осуществляется через IPC, но при этом разработчикам предоставляется клиентская библиотека, которая скрывает необходимость использования IPC-вызовов напрямую.

Программный интерфейс компонента PackageManager описан в статье "Компонент PackageManager".

Добавление компонента PackageManager в решение на базе KasperskyOS

Здесь и далее клиентом называется программа, использующая API компонента PackageManager для управления KPA-пакетами.

Типовой сценарий использования компонента PackageManager включает следующие шаги:

  1. Добавление программы PackageManager в решение. Чтобы добавить PackageManager в решение, необходимо:
    find_package (package_manager REQUIRED) include_directories (${package_manager_INCLUDE}) add_subdirectory (package_manager)
    • Компонент PackageManager поставляется в составе SDK в виде набора библиотек и заголовочных файлов и собирается под конкретное решение с помощью CMake-команды create_package_manager_entity() из CMake-библиотеки package_manager.

      Чтобы собрать программу PackageManager, необходимо в корневой директории проекта создать директорию с именем package_manager, а в ней создать файл CMakeLists.txt, в котором содержится команда create_package_manager_entity().

      CMake-команда create_package_manager_entity() принимает следующие параметры:

      Обязательный параметр ENTITY, в котором указывается имя исполняемого файла для программы PackageManager.

      Опциональные параметры:

      • DEPENDS - дополнительные зависимости для сборки программы PackageManager.
      • MAIN_CONN_NAME - имя IPC-канала для соединения с процессом PackageManager. Должно совпадать со значением переменной mainConnection при обращении к API PackageManager в коде клиента.
      • ROOT_PATH - путь к корневой директории для служебных файлов программы PackageManager. значение по умолчанию: "/ROOT".
      • PKGS_DIR - путь к директории c KPA-пакетами для установки.
      • PKG_EXTENSION - расширение для файла KPA-пакета.
      • DB_PATH - полное имя файла базы данных SQLite в образе решения на базе KasperskyOS, которая содержит данные об установленных KPA-пакетах.
      • APPS_DIR - путь к директории, в которую будут устанавливаться KPA-пакеты.
      • VFS_CLIENT_LIB - имя клиентской транспортной библиотеки для подключения программы PackageManager к программе VFS.
      • NK_MODULE_NAME - путь установки заголовочных файлов компонента PackageManager в SDK относительно директории /opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/include/. Значение по умолчанию: kl/package_manager.
      • AUDIT_CONN_NAME - имя IPC-канала для соединения с процессом AuditStorage.
      • WITHOUT_SIGN_MODE - режим учета внешней подписи: true - отсутствие внешней подписи не считается ошибкой, false - отсутствие внешней подписи считается ошибкой. Значение по умолчанию: false.
      • MANIFEST_SCHEMA_BUILD_STORE - путь к директории сборки образа решения на базе KasperskyOS со схемой манифеста.
      • MANIFEST_SCHEMA_RUNTIME_PATH - путь к директории запущенного решения на базе KasperskyOS со схемой манифеста.
      • PATH_TO_ADDITIONAL_EXTENSIONS_SCHEMAS - путь к директории с дополнительными схемами манифестов для объектов произвольного формата, заданных в значении ключа extentions манифеста KPA-пакета.
      • CUSTOM_LAYOUT - полное имя файла формата JSON, который используется для переопределения путей установки компонентов KPA-пакета.
    include (package_manager/create_package_manager_entity) create_package_manager_entity( ENTITY PkgMgrEntity NK_MODULE_NAME "package_manager" MAIN_CONN_NAME "PkgMgrEntity" ROOT_PATH "/" PKGS_DIR "/packages" PKG_EXTENSION "kpa" DB_PATH "${DB_PATH}" APPS_DIR "${APPS_PATH}" MANIFEST_SCHEMA_BUILD_STORE "${CMAKE_BINARY_DIR}/rootdir/schema" MANIFEST_SCHEMA_RUNTIME_PATH "/schema" PATH_TO_ADDITIONAL_EXTENSIONS_SCHEMAS "${CMAKE_SOURCE_DIR}/resources/additional_extensions/" CUSTOM_LAYOUT "/custom_layout_schema.json" VFS_CLIENT_LIB vfs::client AUDIT_CONN_NAME "audit_storage" WITHOUT_SIGN_MODE TRUE)
  2. Компоновка исполняемого файла клиента с клиентской прокси-библиотекой PackageManager, для чего необходимо в файле CMakeLists.txt для сборки клиента добавить следующую команду:
    target_link_libraries (<имя CMake-цели для сборки клиента> ${package_manager_CLIENT_LIBS})
  3. Добавление разрешений для необходимых событий в описание политики безопасности решения:
    1. Чтобы программа PackageManager могла управлять KPA-пакетами, политика безопасности решения должна разрешать следующие взаимодействия для класса процессов package_manager.PkgMgrEntity:
      • Доступ ко всем службам программы VFS.
      • Доступ к службам ядра Sync, VMM, Thread, HAL, Handle, FS, Notice, CM и Profiler (их описания находятся в директории sysroot-*-kos/include/kl/core из состава SDK).
    2. Чтобы клиент мог обращаться к программе PackageManager, политика безопасности решения должна разрешать следующие взаимодействия для класса клиентского процесса:
      • Доступ к соответствующим службам программы PackageManager (их описания находятся в директории sysroot-*-kos/include/kl/package_manager из состава SDK).
  4. Использование API программы PackageManager в коде клиента.

    Для этого необходимо использовать заголовочный файл component/package_manager/kos_ipc/package_manager_proxy.h. Подробнее см. "Компонент PackageManager".