SWMODD
Software Module(swmodd
) Daemon manages the lxc and OCI based containers(using liblxc and crun) and provides the Backend for Software Modules as defined in
TR181 data model parameter exposed using bbf DotSO Plugin.
It is written in C programming language and depends on a number of libraries of OpenWrt for building and running.
Good to Know
It currently has support for LXC containers and OCI specification based application containers.
Application containers has all the dependencies internally resolved, so it does not required further modification inside the container. An OCI based application container can be installed using du_install
ubus method. After successful installation, the OCI container will be visible in du_list
and eu_list
ubus method.
LXC based containers might requires further addition of packages on top of the base container, currently procd based lxc containers along with opkg only supported. Addition of new service/packages done using opkg
, so all the opkg
limitations can be considered as limitation for swmodd
as well with respect to listing/installing/upgrading packages/services.
NOTE: - Installation of lxc base container is out of scope of swmodd - ExecEnv.1 is Virtual environment used for installation of application containers - Installation of
opkg
based DU not supported on ExecEnv.1 - Application containers support installation from tar ball or container registry - In lxc ExecEnv, only addon package/services shall be visible indu_list/eu_list
Concepts and Workflow
SWMODD
usages lxc
library to interact with the lxc containers and opkg
system utilities to manage the services running inside that lxc container, for OCI application containers it usages crun
to maintain the life cycle of the container.
Installation of application container from image registry work as a add-on feature, and is dependent on external modules skopeo
and umoci
.
swmodd
is used to manage the software modules and exposes the functionality over ubus, whereas libswmodd.so
is bbf
plugin which exposes the SoftwareModules functionality over TR181 using libbbf_api
.
swmodd uci
Below is the uci for swmodd
config globals 'globals'
option enabled '1'
option lan_bridge 'br-lan'
option oci_bundle_root '/data/crun'
option lxc_bundle_root '/data/lxc'
- For installation of oci based application containers, bundle path need to defined in above uci in 'oci_bundle_root' option.
- For installation of lxc based containers, bundle path need to defined in above uci in 'lxc_bundle_root' option.
- It is suggested to configure a non-volatile secondary memory location in this options. Also 'lan_bridge' need to point to a valid bridge where application containers network namespace shall be attached.
Note: For more details about UCI schema click here
Important topics
Dependencies
swmodd
compile time and run time dependencies.
Build-Time Dependencies
To successfully build swmodd
, the following libraries are needed:
Dependency | Link | License |
---|---|---|
libuci | https://git.openwrt.org/project/uci.git | LGPL 2.1 |
libubox | https://git.openwrt.org/project/libubox.git | BSD |
ubus | https://git.openwrt.org/project/ubus.git | LGPL 2.1 |
liblxc | https://linuxcontainers.org/downloads/lxc/ | LGPL-2.1-or-later BSD-2-Clause GPL-2.0 |
opkg | https://git.openwrt.org/project/opkg-lede.git | GPL-2.0 |
libuuid | util-linux | GPL-2.0 |
libcurl | https://dl.uxnr.de/mirror/curl | MIT |
Run-Time Dependencies
In order to run the swmodd
, following dependencies are needed to be running/available before swmodd
.
Dependency | Link | License |
---|---|---|
ubusd | https://git.openwrt.org/project/ubus.git | LGPL 2.1 |
bbfdm | https://dev.iopsys.eu/bbf/bbfdm.git | BSD-3 |
opkg | https://git.openwrt.org/project/opkg-lede.git | GPL-2.0 |
libcurl | https://dl.uxnr.de/mirror/curl | MIT |
umoci | https://github.com/opencontainers/umoci.git | Apache-2.0 |
Skopeo | https://github.com/containers/skopeo.git | Apache-2.0 |
Apart from these dependencies, LXC-4.0 > also requires cgroup functionalities to be mounted separately, to do so, swmodd-cgroup
package is used.
uspd
along withbbf
is used to expose the SoftwareModule datamodel objects. umoci and skopeo required to pull images from container registries