Шаблон product_init.yaml.in
Для запуска прикладных программ рекомендуется использовать KPA-пакеты и системную программу ServiceManager.
В составе KasperskyOS Community Edition SDK поставляется инициализирующая программа kl.ProductRomfsLoader, которая может использоваться для запуска программ, которые не упакованы в KPA-пакеты. Программа kl.ProductRomfsLoader запускает программы в соответствии с init-описанием (файлом product_init.yaml). Такой способ запуска программ не рекомендован и используется для запуска некоторых системных программ, не поддерживающих запуск из KPA-пакетов.
Шаблон product_init.yaml.in используется для автоматической генерации части файла product_init.yaml средствами CMake.
Использование шаблона product_init.yaml.in позволяет не добавлять описания системных программ и IPC-каналов для соединения с ними в файл product_init.yaml вручную.
Шаблон product_init.yaml.in должен содержать следующие данные:
- Корневой ключ
entities. - Для программ, использующих механизм IPC, необходимо указать список IPC-каналов, соединяющих эту программу с другими программами.
Для указания списка IPC-каналов, соединяющих эту программу с системными программами, входящими в состав KasperskyOS Community Edition SDK, используется макрос
@INIT_<имя программы>_ENTITY_CONNECTIONS@– при сборке заменяется на список IPC-каналов со всеми системными программами, с которыми скомпонована прикладная программа. Поляtargetиidзаполняются в соответствии с файламиconnect.yamlиз состава KasperskyOS Community Edition SDK, расположенными в/opt/KasperskyOS-Community-Edition-<platform>-<version>/sysroot-*-kos/include/<имя системной программы>). - Макрос
@INIT_<имя программы>_ENTITY_CONNECTIONS@также добавляют список соединений для каждой программы, заданный в свойствеEXTRA_CONNECTIONSпри сборке этой программы. - Если необходимо передать программе аргументы функции
main(), заданные в свойствеEXTRA_ARGSпри сборке этой программы, то необходимо использовать макрос@INIT_<имя программы>_ENTITY_ARGS@– при сборке заменяется на список аргументов функцииmain(), заданный в свойствеEXTRA_ARGS. - Если необходимо передать программе значения переменных окружения, заданные в свойстве
EXTRA_ENVпри сборке этой программы, то необходимо использовать макрос@INIT_<имя программы>_ENTITY_ENV@– при сборке заменяется на словарь переменных окружения и их значений, заданный в свойствеEXTRA_ENV. - Макрос
@INIT_EXTERNAL_ENTITIES@, который при сборке заменяется на список системных программ, с которыми скомпонована прикладная программа, и их IPC-каналов, аргументов функцииmain()и значений переменных окружения.
Пример шаблона product_init.yaml.in
product_init.yaml.in
entities:
- name: kl.drivers.DNetSrv
path: dnet_executable
wait_for: ready
- name: kl.VfsNet
path: VfsNet
wait_for: ready
after:
- kl.drivers.DNetSrv
env:
RUMP_NETEN_NAME_POLICY: @VFSENV_RUMP_NETEN_NAME_POLICY@
VFS_FILESYSTEM_BACKEND: "server:kl.VfsNet:relay:local:kl.VfsNet"
VFS_NETWORK_BACKEND: "server:kl.VfsNet:relay:local:kl.VfsNet"
VFS_RELAY_DESCENDANTS: "VfsFs=client:task:kl.VfsEntity"
ALLOWED_FS_PATHS: "/etc/hosts;/etc/resolv.conf"
args:
- '-l'
- 'devfs /dev devfs 0'