Add article about cdist/openwrt

This commit is contained in:
Nico Schottelius 2024-08-02 12:50:16 +02:00
parent 44589e79f4
commit 481b05abcf

View file

@ -0,0 +1,96 @@
title: cdist does not (yet) fully support OpenWrt
---
pub_date: 2024-08-02
---
author: ungleich networking team
---
twitter_handle: ungleich
---
_hidden: no
---
_discoverable: yes
---
abstract:
How we try to use cdist on openwrt and fail
---
body:
## cdist config management
As many of you know, we use
[cdist](https://cdi.st) 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](https://code.ungleich.ch/ungleich-public/ungleich-tools).
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.