If the BlobContainer
program is provided in the KasperskyOS SDK, it must be included into a solution in which dynamic libraries are used. To check whether the BlobContainer
program is included in the KasperskyOS SDK, you need to make sure that the sysroot-*-kos/bin/BlobContainer
executable file is available.
The BlobContainer
program can be included in a solution either automatically or manually. This program is automatically included in a solution by running the CMake
commands build_kos_qemu_image()
and build_kos_hw_image()
if at least one program in the solution is linked to a dynamic library. (To disable automatic inclusion of the BlobContainer
program in a solution, you need to add the NO_AUTO_BLOB_CONTAINER
value to the parameters of the CMake
commands build_kos_qemu_image()
and build_kos_hw_image()
.) If programs in a solution work with dynamic libraries using only a POSIX interface (the dlopen()
, dlsym()
, dlerror()
, and dlclose()
functions), the BlobContainer
program needs to be manually included in the solution.
When using the BlobContainer
program, you must create IPC channels from the processes using dynamic libraries to the process of the BlobContainer
program. These IPC channels can be created statically or dynamically. If a statically created IPC channel is not available, the client and server parts of the BlobContainer
program attempt to dynamically create an IPC channel using the name server.
If the BlobContainer
program is automatically included in a solution, the @INIT_EXTERNAL_ENTITIES@
, @INIT_<program name>_ENTITY_CONNECTIONS@
and @INIT_<program name>_ENTITY_CONNECTIONS+@
macros used in the init.yaml.in
file automatically create within the init description dictionaries of IPC channels that enable static creation of IPC channels between processes of programs linked to dynamic libraries and the process of the BlobContainer
program. (The process of the BlobContainer
program receives the name kl.bc.BlobContainer
, while the IPC channels receive the name kl.BlobContainer
.) However, dictionaries of IPC channels to the BlobContainer
program process are not automatically created for processes that work with dynamic libraries using only a POSIX interface. To ensure that the required IPC channels are statically created, these dictionaries must be manually created (these IPC channels must have the name kl.BlobContainer
).
If the BlobContainer
program is manually included in the solution and you need to statically create IPC channels from processes using dynamic libraries to the BlobContainer
program process, you must manually create dictionaries of the required IPC channels in the init description. By default, the IPC channel to the BlobContainer
program process has the name kl.BlobContainer
. However, this name can be changed through the environment variable _BLOB_CONTAINER_BACKEND
. This variable must be defined for the BlobContainer
process and for processes using dynamic libraries.
The environment variable _BLOB_CONTAINER_BACKEND
defines not only the name of statically created IPC channels to the BlobContainer
program process, but also defines the endpoint name that is published on the name server and used to dynamically create IPC channels to the BlobContainer
program process. This is convenient when multiple processes of the BlobContainer
program are running simultaneously (for example, to isolate its own dynamic libraries from external ones), and when different processes using dynamic libraries must interact over IPC with different processes of the BlobContainer
program. In this case, you need to define different values for the environment variable _BLOB_CONTAINER_BACKEND
for different processes of the BlobContainer
program, and then use these values for the environment variable _BLOB_CONTAINER_BACKEND
for processes using dynamic libraries. The specific value must be selected depending on the specific process of the BlobContainer
program that requires the dynamically created IPC channel.
Example use of the environment variable _BLOB_CONTAINER_BACKEND
in the init.yaml.in
file:
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@
Example use of the environment variable _BLOB_CONTAINER_BACKEND
in CMake
commands:
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")
If the BlobContainer
program is being used, the VFS working with files of dynamic libraries must be a separate process. An IPC channel must also be created from the process of the BlobContainer
program to the VFS process.