Skip to content

feat: add CoreOS-based immutable image for remote test labs#213

Open
aparcar wants to merge 7 commits intomainfrom
claude/analyze-codebase-6PJ8P
Open

feat: add CoreOS-based immutable image for remote test labs#213
aparcar wants to merge 7 commits intomainfrom
claude/analyze-codebase-6PJ8P

Conversation

@aparcar
Copy link
Owner

@aparcar aparcar commented Jan 24, 2026

Add containerized infrastructure for running labgrid coordinator and
exporter on Fedora CoreOS with automatic updates.

Components:

  • Container images for labgrid, pdudaemon, dnsmasq, ser2net
  • Quadlet systemd units for container management
  • Butane/Ignition configuration generator
  • Simple YAML config template for lab setup
  • GitHub Actions workflow for container builds

Features:

  • Immutable OS with automatic updates via Zincati
  • Container auto-updates via Podman
  • VLAN-based device isolation
  • USB serial device passthrough
  • TFTP/DHCP for device provisioning

Add containerized infrastructure for running labgrid coordinator and
exporter on Fedora CoreOS with automatic updates.

Components:
- Container images for labgrid, pdudaemon, dnsmasq, ser2net
- Quadlet systemd units for container management
- Butane/Ignition configuration generator
- Simple YAML config template for lab setup
- GitHub Actions workflow for container builds

Features:
- Immutable OS with automatic updates via Zincati
- Container auto-updates via Podman
- VLAN-based device isolation
- USB serial device passthrough
- TFTP/DHCP for device provisioning
Add simplified lab node setup for Raspberry Pi using Docker Compose:

- docker-compose.yml with all services (labgrid, pdudaemon, dnsmasq)
- cloud-init user-data for automatic first-boot configuration
- setup.sh for manual installation
- Watchtower for automatic container updates

This provides an easier alternative to Fedora CoreOS for Raspberry Pi
based lab nodes, with the same containerized architecture.
Add flash-coreos.sh that:
- Downloads Fedora CoreOS aarch64 image
- Installs RPi4 UEFI firmware automatically
- Generates Ignition from lab-config.yaml
- Handles all setup in one command

Update README to make CoreOS the primary approach for Raspberry Pi,
with Docker/RPi OS as fallback option.
- Add flash-sd.sh: simpler script that just flashes + adds ignition
- Update README with multiple methods (coreos-installer, script, manual)
- Add -o flag to build-ignition.sh for output file
- Remove overcomplicated flash-coreos.sh

The key insight: just flash the official image and drop ignition file
into /mnt/ignition/config.ign - no complex tooling needed.
No need to install coreos-installer - run it via container:
  podman run quay.io/coreos/coreos-installer:release install ...

flash-sd.sh now:
- Uses podman (or docker) to run coreos-installer
- Downloads CoreOS image automatically
- Adds UEFI firmware for Raspberry Pi
- Only requires: podman + unzip + curl
Split into two steps:
1. build-image.sh - generates .img file (no root needed)
2. dd - user flashes manually (only root operation)

Image manipulation runs inside fedora container via podman,
so no root/sudo needed on the host for building.

User workflow:
  ./build-image.sh config.ign -o labnode.img
  sudo dd if=labnode.img of=/dev/sdX bs=4M status=progress
build-image.sh now just downloads files to a directory:
- fcos.raw.xz (CoreOS image)
- uefi/ (RPi firmware)
- config.ign (if provided)
- flash.sh (simple script user can inspect)

No containers, no --privileged. User runs sudo only on
flash.sh which they can review first.

Workflow:
  ./build-image.sh config.ign    # no root
  cd coreos-rpi
  cat flash.sh                   # inspect if desired
  sudo ./flash.sh /dev/sdX       # user controls this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants