Сценарий использования компонента PackageManager
Компонент PackageManager предоставляет API для управления KPA-пакетами в решениях, построенных на базе KasperskyOS.
API компонента PackageManager представляет собой надстройку над IPC, которая позволяет упростить процесс разработки программ. PackageManager является отдельной системной программой, доступ к которой осуществляется через IPC, но при этом разработчикам предоставляется клиентская библиотека, которая скрывает необходимость использования IPC-вызовов напрямую.
Программный интерфейс компонента PackageManager описан в статье "Компонент PackageManager".
Добавление компонента PackageManager в решение на базе KasperskyOS
Здесь и далее клиентом называется программа, использующая API компонента PackageManager для управления KPA-пакетами.
Типовой сценарий использования компонента PackageManager включает следующие шаги:
- Добавление программы PackageManager в решение. Чтобы добавить PackageManager в решение, необходимо:
- Добавить следующие команды в корневой файл CMakeLists.txt:
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)- При сборке решения (файл CMakeLists.txt для программы Einit) добавить исполняемый файл программы PackageManager в образ решения на базе KasperskyOS:
- Компоновка исполняемого файла клиента с клиентской прокси-библиотекой PackageManager, для чего необходимо в файле
CMakeLists.txt
для сборки клиента добавить следующую команду:target_link_libraries (<имя CMake-цели для сборки клиента> ${package_manager_CLIENT_LIBS}) - Добавление разрешений для необходимых событий в описание политики безопасности решения:
- Чтобы программа PackageManager могла управлять KPA-пакетами, политика безопасности решения должна разрешать следующие взаимодействия для класса процессов
package_manager.PkgMgrEntity
:- Доступ ко всем службам программы
VFS
. - Доступ к службам ядра
Sync
,VMM
,Thread
,HAL
,Handle
,FS
,Notice
,CM
иProfiler
(их описания находятся в директорииsysroot-*-kos/include/kl/core
из состава SDK).
- Доступ ко всем службам программы
- Чтобы клиент мог обращаться к программе PackageManager, политика безопасности решения должна разрешать следующие взаимодействия для класса клиентского процесса:
- Доступ к соответствующим службам программы PackageManager (их описания находятся в директории
sysroot-*-kos/include/kl/package_manager
из состава SDK).
- Доступ к соответствующим службам программы PackageManager (их описания находятся в директории
- Чтобы программа PackageManager могла управлять KPA-пакетами, политика безопасности решения должна разрешать следующие взаимодействия для класса процессов
- Использование API программы PackageManager в коде клиента.
Для этого необходимо использовать заголовочный файл
component/package_manager/kos_ipc/package_manager_proxy.h
. Подробнее см. "Компонент PackageManager".