Пример kpa_example
Пример демонстрирует работу с KPA-пакетами в решении на базе KasperskyOS:
- скачивание KPA-пакета с HTTP-сервера;
- сборка KPA-пакета из исходных компонентов с использованием функций библиотеки kpa;
- предварительная установка KPA-пакета в собираемый образ решения на базе KasperskyOS с использованием утилиты cas-pm;
- установка KPA-пакета в работающее решение на базе KasperskyOS с использованием компонента PackageManager;
- получение данных о манифесте KPA-пакета;
- запуск процесса из исполняемого файла, установленного из KPA-пакета, а также получение сведений о процессе и его остановка с использованием компонента ExecutionManager.
Директория примера в 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 выполняет следующие действия:
- Проверяет доступность сети. Если сеть не доступна, отправляет сообщение в журнал с использованием макроса LOG компонента LogRR и завершает работу.
- Загружает KPA-пакет
DownloadedApp.kpaс HTTP-сервера. - Отправляет сообщение в журнал со списком доступных KPA-пакетов:
Application.kpaиDownloadedApp.kpa. Сборка KPA-пакетаApplication.kpaвыполняется при сборке решения в файле./application/CMakeLists.txt. - Получает с использованием функций
CreatePackageManager()иGetPackageController()указатели на экземпляры интерфейсовIPackageManagerиIPackageControllerсоответственно, необходимые для работы с компонентом PackageManager. - Устанавливает KPA-пакет
Application.kpaс использованием функцииInstallPackage()интерфейсаIPackageController. - Отправляет сообщение в журнал со списком уникальных идентификаторов установленных KPA-пакетов:
kpa_example.applicationиkpa_example.preinstalled_app. Сборка KPA-пакетаPreinstalledApp.kpaи его предварительная установка в собираемый образ решения выполняется в файле./preinstalled_app/CMakeLists.txt. - Отправляет сообщение в журнал о получении данных о манифесте KPA-пакета
Application.kpaс использованием функцииGetManifest()интерфейсаIPackageController. - Получает с использованием функции
DcmConnect()указатель на экземпляр интерфейса IExecutionManager. Для соединения с процессом ExecutionManager используется системная программа DCM. - Используя указатель на экземпляр интерфейса
IExecutionManagerполучает доступ к интерфейсу IProcessControl. - Запускает процесс из исполняемого файла, поставляемого в KPА-пакете
Application.kpa. В цикле получает состояния запущенного процесса с использованием функцииGetProcessState()интерфейсаIProcessControlи отправляет сообщения о полученных состояниях в журнал. Процесс самостоятельно завершает свою работу. - Запускает с задержкой 60 сек процесс из исполняемого файла, поставляемого в KPА-пакете
Application.kpa. - Используя указатель на экземпляр интерфейса
IExecutionManagerполучает доступ к интерфейсу ISystemController. Получает сведения о процессах, запущенных с использованием компонента ExecutionManager, с использованием функцииGetSystemInfo()интерфейсаISystemControllerи отправляет сообщения с полученными сведениями в журнал. Через 5 сек принудительно завершает работу запущенного процесса с использованием функцииStopProcess()интерфейсаIProcessControl.
Сборка и запуск примера
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Для эмулятора QEMU после сборки примера, но перед его запуском, необходимо:
- Дополнительно собрать KPA-пакет
DownloadedApp.kpa. (Исходный код для сборки находится в файле./downloaded_kpa/CMakeLists.txt.) Для сборки KPA-пакета выполните команду:cmake --build build --target DownloadedKpa
- Запустить HTTP-сервер, который будет предоставлять доступ к файлам из директории
./build/kpa/на порту8080. Для этого в отдельном сеансе терминала выполните команду:python3 -m http.server -d ./build/kpa/ 8080
Чтобы проверить доступность KPA-пакета
DownloadedApp.kpa, откройте в браузере страницу по адресуhttp://localhost:8080и убедитесь, что файл присутствует в списке.
Для целевых аппаратных платформ необходимо запустить HTTP-сервер до запуска образа, содержащего пример.
См. "Сборка и запуск примеров".