psyopsOS grew out of kubernasty, a Kubernetes cluster I’m building for my home lab.
If I’m being honest with myself, I might say that it is simply more fun to build a custom Linux distribution than it is to configure Kubernetes.
If I’m being generous with myself, I might say that it’s an experiment to make maintenance of a fleet of personal servers easier on a single person.
Experimental goals
- OS is small and fully in RAM, and a single image is used for all nodes.
- The OS is easy to keep in your head and modify as needed.
- Upgrading the OS is easy.
- Nodes can boot and configure themselves over the network.
- Configuration is kept in source control.
- Drift is kept in check because machines do not keep state except for explicitly mounted directories.
Implementation
- It’s built in mrled/psyops in the psyopsOS subdirectory, which includes a few more docs.
- It is a customization of the excellent Alpine Linux. Alpine has a powerful and simple way to build reliable livecd ISO images, an extremely fast package manager, and very low overhead. It’s a small layer that’s easy to understand and build something else on top of.
- It uses some custom scripts to work with aports which builds the ISO, including a simple overlay of the livecd filesystem.
- It relies on a
psyopsOS-base
package for early system configuration - It uses progfiguration, another experimental project designed for configuration management, for configuration after boot.
- An overlay network called psynet which allows nodes to communicate with one another no matter what physical networks they’re on
- Easy upgrades, just build a new ISO, copy to the node, and run
psyopsOS-write-bootmedia