diff --git a/content/u/blog/2024-08-02-openwrt-no-cdist-yet/contents.lr b/content/u/blog/2024-08-02-openwrt-no-cdist-yet/contents.lr new file mode 100644 index 0000000..9c9b864 --- /dev/null +++ b/content/u/blog/2024-08-02-openwrt-no-cdist-yet/contents.lr @@ -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.