The below table contains all possible runtime configuration properties, prepared based on https://github.com/opencontainers/runtime-spec/blob/master/config.md.

parent:propertyimage configuration counterparttype, (whether optional for DAC on Linux)meaningDAC constraintssourceremarks
:root
object



root:path
stringrootfs path (in a bundle)relative within the bundlegenerator (bundle generator), constant: rootfs
root:readonly
bool, optionalrootfs is read-onlyalways truegenerator, constant: true

security constraints:

  • protection for self-modified code
  • persistent storage available in the designated location
  • dm-verity limitations
mounts
array of objectsadditional mounts beyond root
generator, platform-specific (from platform's template config), runtime

used for:

  • persistent storage
  • bind-mount of required libraries from host (wayland-egl)
  • Unix domain sockets for IPC

mounts:destination

mounts:type

mounts:source

mount:options

Config.Volumes


see mounts
process
objectspecifies the container process


process:terminal

process:consoleSize:height

process:consoleSize:width


bool

uint

uint


consoleSize: default to w80xh24

generator or runtime (rel/dbg)


false for production/release, true for debug/development config
process:cwdConfig.WorkingDirstring

developer/sdk
process:envConfig.EnvstringEnvironment variables, only additions allowed
developer/sdk, appended by generator and runtime
process:args

Config.Entrypoint

Config.Cmd


If both Config.Entrypoint and Config.Cmd are specified, the converter MUST append the value of Config.Cmd to the value of Config.Entrypoint and set process.args to that combined value.

Config.Entrypoint contains executable

Config.Cmd contains params of executables

developer/sdk
process:commandLine
stringfull command line to be executed on Windows. not used (use process:args instead)developer/sdk
process:rlimits
array of objects

allows setting resource limits for the process, see https://man7.org/linux/man-pages/man2/getrlimit.2.html

TBD: soft and hard limits provided by the app developer should be validated/limited by generator based on provided platform configuration.developer/sdk, validated (ceiled) by generator and runtime
process:apparmorProfile 
stringMAC mandatory access controlNot used (future)

process:capabilities 
objectarrays that specifies the sets of capabilities for the processTBD: caps provided by the app developer should be validated/limited by generator based on provided platform configuration.developer/sdk, validated (ceiled) by generator and runtime
process:noNewPrivileges 
boolprevents the process from gaining additional privilegestrue

process:oomScoreAdj 
intadjusts the oom-killer score in [pid]/oom_score_adj for the process's [pid] in a proc pseudo-filesystemTBD

process:selinuxLabel
string SELinux label for the processNot used (future)

hostname
stringspecifies the container's hostname as seen by processes running inside the containerTBD (locally-generated?)

hooks
objectcustom actions related to the lifecycle of the containerhandled by Dobbygenerator and runtime
namespaces
object

configuration of the namespaces (visibility of the resources)

https://man7.org/linux/man-pages/man7/namespaces.7.html

TBD:

  • for standard apps the namespaces should be fully isolated and unique (apart of network, which depends on networking config)
  • generated by generator on in runtime?
generator and runtime

uidMappings

gidMappings


array of objects

array of objects

describes the user namespace uid mappings from the host to the container

TBD (see process:user.uid). May be generated based on platform configurationgenerator and runtime
devices
array of objectslists devices that MUST be available in the container. The runtime MAY supply them however it likes (with mknod, by bind mounting from the runtime mount namespace, using symlinks, etc.)

TBD: populated by generator based on platform configuration


generator and runtime

cgroupsPath

resources (memory, devices, CPU, BlockIO, hugePageLimits, network, pigs, rdma),


string

object

configuration of the groups (limits on the resources usage)

https://man7.org/linux/man-pages/man7/cgroups.7.html

TBD

interRdt
object-Not used

sysctl
objectkernel parameters modificationTBD

seccomp
object application sandboxing mechanism  (restrictions on syscalls)TBD (additional security)

rootfsPropagation


string
TBD

maskedPaths
array of strings
not used

readonlyPaths
array of strings
TBD (maybe /proc ?) - set be the generator

mountLabel
string
not used

personality
string
not used

process:user.uid

process:user.gid

process:user.umask

process:user.additionalGids 

Config.Userstring

user (group) which the process run as (in container namespace)

useruiduser:groupuid:giduid:groupuser:gid

TBD:

  • initial values may be provided by image config
  • runtime uid and gid should be in line with host's config
  • what about filesystem files ownership and access rights in case of any conversions?
  • uidMappings and gidMappings may be used for normalization of it per-platform


annotations:

org.opencontainers.image.os

osstring

linux



annotations:

org.opencontainers.image.architecture

architecturestring

386

amd64

arm

arm64

mips

mips64



annotations:

org.opencontainers.image.author

authorstringperson or entity which created and is responsible for maintaining the image.

Whoever was responsible for creating the image manifest:

  • App developer
  • RDK-M
  • operator


annotations:

org.opencontainers.image.created

createdstringAn combined date and time at which the image was created, https://tools.ietf.org/html/rfc3339#section-5.6date of creation 

annotations: *

Config.Labels.*annotations

TBD, required annotations:

  • what should be image-specific,
  • what is runtime specific


annotations:

org.opencontainers.image.stopSignal

Config.StopSignalstringsystem call signal that will be sent to the container to exitTBD: Dobby should be able to send the proper signal

annotations:

org.opencontainers.image.exposedPorts

Config.ExposedPortsobject

set of ports to expose from a container running this image

port/tcpport/udpport

TBD: use case and how to handle:

  • expose these ports to local
  • expose these ports to internet (bridge or port forwarding required)


  • No labels