cdist does not (yet) fully support OpenWrt

Posted on 2024-08-02 by ungleich networking team

cdist config management

As many of you know, we use cdist for configuration management at ungleich. And we try to manage everything that is not (yet) in kubernetes with it.

Today's short blog entry is about using cdist with openwrt.

OpenWrt at ungleich

[OpenWrt](https://openwrt.org] is a popular, open source operating system used on routers, switches, etc. We use it for providing IPv6 and IPv4 connectivity to customers world wide.

So far most of our devices are configured using shell scripts from our ungleich-tool git repository.

However as configurations get more complex, we thought about moving our configuration also into cdist.

OpenWrt is similar, but not the same

OpenWrt is, generally speaking, "just another Linux distribution", albeit with a very, very small footprint. It has to be, because the storage on a typical router can be in the size of a couple Megabytes. Right, not Gigabyte, not Terabyte.

For instance this "large" router has about 9 Megabytes of storage:

# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 4.0M      4.0M         0 100% /rom
tmpfs                   217.0M    240.0K    216.8M   0% /tmp
/dev/mtdblock6            9.1M    420.0K      8.7M   4% /overlay
overlayfs:/overlay        9.1M    420.0K      8.7M   4% /
tmpfs                   512.0K         0    512.0K   0% /dev

It does however have 512 MiB of RAM...:

# free -m
              total        used        free      shared  buff/cache   available
Mem:         444428       57120      370184         240       17124      354048
Swap:             0           0           0

So, openwrt is a Linux distribution, but its environment is a bit more challenging than a general purpose Linux distribution.

cdist & openwrt

Cdist uses so called "types" to configure systems idempotently. They usually require some shell support on the target system, but nothing fancy.

However in the case of openwrt, cdist is missing some support, as of version 7.0.0:

  • cdist uses the system default ssh and if that uses SFTP instead of SCP by default, it will fail, as openwrt, as of 23.05.3, only supports legacy scp (-O). Manually patching cdist source code to include "-O" fixes this issue for the moment.

  • the most basic cdist type __file uses "cksum" to create a checksum over files to decide whether or not to copy a file. cksum was chosen in the first place, as it is very basic and can be found everywhere. Well, everywhere but on openwrt...

Future of cdist & openwrt

Both above issues can in theory be addressed, but the __file type is very basic and needs some checksumming support. Without it, cdist lacks a major feature and can be considered not (yet) usable.

Let's see what the future brings.