Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Get OCI_Image
  2. Parse the subset of OCI_Image_config to get the DAC subsection
  3. Filter by architecture (remove all libs and bins that aren't for our arch.
  4. Lib matching: lib is in template then remove lib and put in bind mount
  5. Config App storage. Write the plugin for storage to oci_bundle_config. (AppID is unique across RDK-M.)
  6. Write the plugin ram FS to bundle config if needed
  7. Add the devices and bindmount to that required to output config (inc. networking)
  8. Copy across the layer for architecture independent assets (images, configs, certificates)
  9. Copy across the executable compiles to the correct architecture
  10. Translate the the remaining parts of OCI_Image_Config to OCI_Bundle_Config
PlantUML Render Macro

@startuml
start
:Parse STB config file and operator config for syntax errors;
:Determine arch of selected device;
if (Image contains suitable manifest for platform arch?) then (Yes)
:Determine image type
(""imageLayout"" / ""image"" / ""imageZip"");
:Unpack OCI image based on manifest for required platform/arch;
:Read application requirements and STB platform config;
if (Target STB can support app?) then (Yes)
:Begin lib matching algorithm;
:Run ""ldd"" on application to find dependencies;
note left
How would we manually loaded libs
with ""dlopen"" - ldd won't show these?
end note
repeat
if (Platform already contains same (major) version of library?) then (Yes)
:Add bind mount for library to ""config.json"";
:Delete library from ""rootfs"" directory in bundle;
else (No)
:Do nothing - use version in rootfs;
endif
repeat while (More dependencies?) is (Yes)
:Add bind mounts for platform specific GPU libraries;
:Add additional bind mounts specified in platform config;
:Add bind mounts for any devices in platform config;
:Add devices to ""devices"" array in config;
:Add environment variables specified in platform/operator config;
:Process application capabilites;
:Add ""rdkPlugins"" section to the config accordingly;
:Write any remaining config sections;
:Create tarball of ""rootfs"" directory and ""config.json"" file;
stop
else (No)
#PaleVioletRed:ReturnError
====
Platformcannotsupportapplication
Apprequiressomethingplatformcannotprovide;
stop
endif
else (No)
#PaleVioletRed:ReturnError
====
Appdoesnotsupporttargetarchitecture;
stop
endif
@enduml


Library matching

Options:

  • https://en.wikipedia.org/wiki/Soname
  • Full Name matching
  • Base name matching, exclude version numbering
  • Hash of the lib
    • how to handle to handle compiler option diffs e.g. strip?
  • Are LD commands to get version number?

...