Если программа BlobContainer
поставляется в составе KasperskyOS SDK, ее необходимо включить в решение, в котором используются динамические библиотеки. Чтобы проверить, поставляется ли программа BlobContainer
в составе KasperskyOS SDK, нужно убедиться в наличии исполняемого файла sysroot-*-kos/bin/BlobContainer
.
Программа BlobContainer
может быть включена в решение автоматически или вручную. Автоматическое включение этой программы в решение выполняется CMake
-командами build_kos_qemu_image()
и build_kos_hw_image()
, если как минимум одна программа в решении скомпонована с динамической библиотекой. (Чтобы отключить автоматическое включение программы BlobContainer
в решение, нужно добавить значение NO_AUTO_BLOB_CONTAINER
в параметры CMake
-команд build_kos_qemu_image()
и build_kos_hw_image()
.) Если программы в решении работают с динамическими библиотеками, используя только интерфейс POSIX (функции dlopen()
, dlsym()
, dlerror()
, dlclose()
), то программу BlobContainer
нужно включить в решение вручную.
В случае применения программы BlobContainer
должны быть созданы IPC-каналы от процессов, использующих динамические библиотеки, к процессу программы BlobContainer
. Эти IPC-каналы могут быть созданы как статически, так и динамически. Если статически созданный IPC-канал отсутствует, клиентская и серверная части программы BlobContainer
пытаются создать IPC-канал динамически, используя сервер имен.
Если программа BlobContainer
включена в решение автоматически, то макросы @INIT_EXTERNAL_ENTITIES@
, @INIT_<имя программы>_ENTITY_CONNECTIONS@
и @INIT_<имя программы>_ENTITY_CONNECTIONS+@
, используемые в файле init.yaml.in
, автоматически создают в init-описании словари IPC-каналов, которые обеспечивают статическое создание IPC-каналов от процессов программ, скомпонованных с динамическими библиотеками, к процессу программы BlobContainer
. (Процесс программы BlobContainer
получает имя kl.bc.BlobContainer
, а IPC-каналы получают имя kl.BlobContainer
.) При этом для процессов, которые работают с динамическими библиотеками, используя только интерфейс POSIX, словари IPC-каналов к процессу программы BlobContainer
автоматически не создаются, и, чтобы требуемые IPC-каналы были созданы статически, нужно создать эти словари вручную (эти IPC-каналы должны иметь имя kl.BlobContainer
).
Если программа BlobContainer
включена в решение вручную, и требуется статически создать IPC-каналы от процессов, использующих динамические библиотеки, к процессу программы BlobContainer
, то нужно вручную создать словари необходимых IPC-каналов в init-описании. По умолчанию IPC-канал к процессу программы BlobContainer
имеет имя kl.BlobContainer
, но это имя можно изменить через переменную окружения _BLOB_CONTAINER_BACKEND
. Эту переменную нужно задать как для процесса BlobContainer
, так и для процессов, использующих динамические библиотеки.
Переменная окружения _BLOB_CONTAINER_BACKEND
задает не только имя статически создаваемых IPC-каналов к процессу программы BlobContainer
, но и имя службы, публикуемое на сервере имен, которое используется для динамического создания IPC-каналов к процессу программы BlobContainer
. Это удобно использовать, когда запущено одновременно несколько процессов программы BlobContainer
(например, с целью изоляции собственных динамических библиотек от сторонних), и разные процессы, использующие динамические библиотеки, должны взаимодействовать через IPC с разными процессами программы BlobContainer
. В таком случае для разных процессов программы BlobContainer
нужно задать разные значения переменной окружения _BLOB_CONTAINER_BACKEND
, а затем использовать эти значения для переменной окружения _BLOB_CONTAINER_BACKEND
процессов, использующих динамические библиотеки, выбирая конкретное значение в зависимости того, с каким именно процессом программы BlobContainer
требуется динамически создать IPC-канал.
Пример использования переменной окружения _BLOB_CONTAINER_BACKEND
в файле init.yaml.in
:
entities:
- name: example.BlobContainer
path: example_blob_container
args:
- "-v"
env:
_BLOB_CONTAINER_BACKEND: kl.custombc
@INIT_example_blob_container_ENTITY_CONNECTIONS@
- name: client.Client
path: client
env:
_BLOB_CONTAINER_BACKEND: kl.custombc
@INIT_client_ENTITY_CONNECTIONS@
@INIT_EXTERNAL_ENTITIES@
Пример использования переменной окружения _BLOB_CONTAINER_BACKEND
в CMake
-командах:
set_target_properties (ExecMgrEntity PROPERTIES
EXTRA_ENV
" _BLOB_CONTAINER_BACKEND: kl.custombc")
set_target_properties (dump_collector::entity PROPERTIES
EXTRA_ENV
" _BLOB_CONTAINER_BACKEND: kl.custombc")
Если используется программа BlobContainer
, то VFS, работающая с файлами динамических библиотек, должна быть отдельным процессом. Также должен быть создан IPC-канал от процесса программы BlobContainer
к процессу VFS.