LXC Based container migration
SWMODD in release-6.5 branch based releases only has support for LXC based containers, but in devel now it has support support for OCI based containers and LXC based containers both.
OCI based containers being preferred option for LCM in devel. This document aims to provide guidance for migrating LXC containers from release-6.5 to devel.
Bit inside on lxc container handling
- LXC build root defined in '/etc/lxc/lxc.conf' with "lxc.lxcpath" option
- Each LXC container mapped to 'Device.SoftwareModules.ExecEnv.' datamodel parameter
- Additional Installed DU's installed in a container stored in
/etc/swmod/map_du_<container_name>file
config deployment
option name 'bbk_cli'
option version '7b810a69'
option uuid '477a210f-9ed1-401a-b028-717a726e5296'
option duid '9zz0000'
option environment 'test'
option eeid '1'
list service 'bbk_cli'
option description 'To measure connection speed in an environment that is missing a web browser, '
- Auto-start of LXC based containers managed with the help of
lxc-autopackage and is stored in/etc/config/lxcautofile - LXC based container configuration stored in a
configfile inside build root path
So, the information is bit scattered and had too many dependencies on external modules, also some information does not persists across factory reset.
Bit inside on devel changes
- Defining the bundle root now moved to swmodd uci (In deployment, its a best practice use a non-root persistent storage path for this option)
config globals 'globals'
option lxc_bundle_root '/mnt/container/'
option oci_bundle_root '/mnt/container/'
- But it still has preference on
lxc.confconfiguration, it works like - If lxcpath is set in /etc/config/swmodd then swmodd configures the same in lxc.conf through uci-default script
- If not defined in /etc/config/swmodd but lxcpath is present in lxc.conf then uci-default script writes the lxc_bundle_root with the same in swmodd uci
-
If not defined in /etc/config/swmodd and also in lxc.conf then uci-default set it with "/srv/" in both lxc.conf and /etc/config/swmodd
-
LXC containers still mapped to
Device.SoftwareModules.ExecEnv., but it start with instance id 2 Device.SoftwareModules.ExecEnv.1mapped to system and used for OCI based containers- OCI containers mapped to
Device.SoftwareModules.DeploymentUnits. - To make the LXC and OCI containers information persistent across factory reset, now its stored in lxc_bundle_root path in "lxccontainer" (for lxc info) file.
- auto-boot dependency now moved to swmodd it self based on mappings present in "lxccontainer" uci file.
config container
option name '<container_name>'
option type 'lxc'
option autostart '1'
- All DU and EU details are stored in lxccontainer uci file as well for LXC based containers
Migration notes
- lxc-auto must not be present as now lxc containers handled by swmodd itself.
- uci-default script '02-migrate-lxc' added to migrate the lxcauto to new uci file
Summary
Moving forward lxc based container will be deprecated, so its good to update the lxc/config to oci/config.json, so that the lxc container can be run as oci containers.