Пример демонстрирует работу с KPA-пакетами в решении на базе KasperskyOS:
Директория примера в SDK
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<platform>-<version>/examples/kpa_example
Список программ
Client – прикладная программа, которая выполняет работу с тремя KPA-пакетами: DownloadedApp.kpa (скачивается с HTTP-сервера), Application.kpa (собирается из исходных компонентов и устанавливается в работающее решение), PreinstalledApp.kpa (собирается из исходных компонентов и предварительно устанавливается в собираемый образ решения).Server – системная программа, реализующая сервер журналирования, которому другие программы передают сообщения. Для отправки сообщений серверу журналирования программы используют библиотеку logrr_cpp, которая фильтрует сообщения по уровню журналирования. Сервер журналирования передаёт полученные сообщения каналу вывода FsOutputChannel.FsOutputChannel – системная программа, реализующая канал вывода для программы Server. Канал вывода сохраняет полученные от сервера журналирования сообщения в файл.PkgMgrEntity – системная программа, предоставляющая функциональность для управления KPA-пакетами.ExecMgrEntity – системная программа, управляющая жизненным циклом процессов через IPC-механизмы.BlobContainer – системная программа, предназначенная для загрузки бинарных данных в память и используемая программой Execution Manager для запуска процессов.EntropyEntity – системная программа, реализующая генератор случайных чисел.Dhcpcd – системная программа, реализующая DHCP-клиент, который в фоновом режиме получает параметры сетевых интерфейсов от внешнего DHCP-сервера и передает их виртуальной файловой системе.VfsSdCardFs – системная программа, поддерживающая файловую систему SD-карт.VfsNet – системная программа, поддерживающая сетевые протоколы.DCM – системная программа, позволяющая динамически создавать IPC-каналы.SDCard – драйвер SD-карты.DNetSrv – драйвер сетевой карты.При сборке примера для целевой аппаратной платформы в решение автоматически включаются платформенно-зависимые драйверы:
BSP – пакет поддержки аппаратной платформы (англ. Board Support Package). Обеспечивает кросс-платформенную настройку периферии для Radxa ROCK 3A и Raspberry Pi 4 B.Bcm2711MboxArmToVc – драйвер для работы с сопроцессором VideoCore (VC6) через технологию mailbox для Raspberry Pi 4 B.Описание инициализации
Файл описания инициализации решения init.yaml генерируется в процессе сборки решения на основе шаблона ./einit/src/init.yaml.in. Макросы вида @INIT_*@, которые содержатся в шаблоне, автоматически раскрываются в итоговом файле init.yaml. Подробнее см. "Шаблон init.yaml.in".
Описание политики безопасности
Файл security.psl содержит описание политики безопасности решения на базе KasperskyOS и находится в директории ./einit/src. Декларации в PSL-файле снабжены комментариями, которые поясняют назначение этих деклараций.
Описание политики безопасности решения в этом примере разрешает любые взаимодействия процессов между собой и ядром. Эту политику можно использовать только в качестве заглушки на ранних стадиях разработки решения, чтобы модуль безопасности не препятствовал взаимодействиям. В реальном решении на KasperskyOS применять такую политику недопустимо.
Ресурс
./resources/xdl/kpa_example расположены файлы Application.edl, Client.edl, DownloadedApp.edl и PreinstalledApp.edl – EDL-описания программ../resources/hdd/etc расположены файлы конфигурации для программ VfsNet и Dhcpcd: hosts и dhcpcd.conf соответственно../resources/packages/application/files расположен файл text.txt. Этот файл является ресурсом для KPA-пакета Application.kpa.Сценарий работы
Программа Client выполняет следующие действия:
DownloadedApp.kpa с HTTP-сервера.Application.kpa и DownloadedApp.kpa. Сборка KPA-пакета Application.kpa выполняется при сборке решения в файле ./application/CMakeLists.txt.CreatePackageManager() и GetPackageController() указатели на экземпляры интерфейсов IPackageManager и IPackageController соответственно, необходимые для работы с компонентом PackageManager.Application.kpa с использованием функции InstallPackage() интерфейса IPackageController.kpa_example.application и kpa_example.preinstalled_app. Сборка KPA-пакета PreinstalledApp.kpa и его предварительная установка в собираемый образ решения выполняется в файле ./preinstalled_app/CMakeLists.txt.Application.kpa с использованием функции GetManifest() интерфейса IPackageController.DcmConnect() указатель на экземпляр интерфейса IExecutionManager. Для соединения с процессом ExecutionManager используется системная программа DCM.IExecutionManager получает доступ к интерфейсу IProcessControl.Application.kpa. В цикле получает состояния запущенного процесса с использованием функции GetProcessState() интерфейса IProcessControl и отправляет сообщения о полученных состояниях в журнал. Процесс самостоятельно завершает свою работу.Application.kpa.IExecutionManager получает доступ к интерфейсу ISystemController. Получает сведения о процессах, запущенных с использованием компонента ExecutionManager, с использованием функции GetSystemInfo() интерфейса ISystemController и отправляет сообщения с полученными сведениями в журнал. Через 5 сек принудительно завершает работу запущенного процесса с использованием функции StopProcess() интерфейса IProcessControl.Сборка и запуск примера
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Для эмулятора QEMU после сборки примера, но перед его запуском, необходимо:
DownloadedApp.kpa. (Исходный код для сборки находится в файле ./downloaded_kpa/CMakeLists.txt.) Для сборки KPA-пакета выполните команду:cmake --build build --target DownloadedKpa
./build/kpa/ на порту 8080. Для этого в отдельном сеансе терминала выполните команду:python3 -m http.server -d ./build/kpa/ 8080
Чтобы проверить доступность KPA-пакета DownloadedApp.kpa, откройте в браузере страницу по адресу http://localhost:8080 и убедитесь, что файл присутствует в списке.
Для целевых аппаратных платформ необходимо запустить HTTP-сервер до запуска образа, содержащего пример.
См. "Сборка и запуск примеров".
В начало