WendyOS Docs
AdvancedWendyos

WendyOS systemd Services

WendyOS is a Yocto-based Linux distribution managed entirely by systemd. This document covers what runs on a WendyOS device, the startup order, and how services depend on one anoth

WendyOS systemd Services

WendyOS is a Yocto-based Linux distribution managed entirely by systemd. This document covers what runs on a WendyOS device, the startup order, and how services depend on one another.

Service inventory

ServiceUnit filePurpose
wendyos-etc-binds.servicerecipes-core/wendyos-etc-bindsBind-mounts /data/etc/wendyos and /data/etc/NetworkManager/system-connections over their /etc counterparts so identity and WiFi credentials survive OTA updates
wendyos-uuid-generate.servicerecipes-core/wendyos-identityGenerates /etc/wendyos/device-uuid on first boot using uuidgen
wendyos-device-name-generate.servicerecipes-core/wendyos-identityGenerates /etc/wendyos/device-name (e.g. brave-dolphin) from word lists
wendyos-identity.servicerecipes-core/wendyos-identityUpdates the mDNS Avahi service record with the device UUID and name
wendyos-hostname.servicerecipes-connectivity/avahiDerives hostname from the persistent device name and sets it before Avahi starts
gadget-setup.servicerecipes-core/gadget-setupConfigures the USB gadget composite device (NCM or ECM network + ACM serial console) using Linux configfs
wendyos-usbgadget-unbind.servicerecipes-core/gadget-setupTears down the USB gadget on shutdown
wendyos-agent.servicerecipes-core/wendyos-agentRuns the wendy-agent binary; provides device management, gRPC API, WiFi control, and container orchestration
wendyos-agent-updater.servicerecipes-core/wendyos-agentOne-shot agent self-update (downloads from GitHub releases)
wendyos-agent-updater.timerrecipes-core/wendyos-agentTriggers the updater 5 min after boot, then daily at 03:00 with a random 30-min jitter
containerd.serviceupstream (meta-virtualization)Container runtime; wendy-agent requires it before starting
var-lib-containerd.mountrecipes-core/systemd-mount-containerdBind-mounts /data/containerd to /var/lib/containerd so container images persist on the data partition
home.mountrecipes-core/systemd-mount-homeBind-mounts /data/home to /home
var-log.mountrecipes-core/systemd-confBind-mounts /data/log to /var/log (only when WENDYOS_PERSIST_JOURNAL_LOGS=1)
swapfile-setup.servicerecipes-core/swapfile-setupCreates and activates a swap file on /data before swap.target
rpi5-eeprom-config.servicemeta-rpi-extensions/recipes-bsp/rpi-eepromOne-shot: sets PSU_MAX_CURRENT=3000 in the RPi 5 EEPROM for reliable USB gadget operation; reboots to apply, then never runs again
rpi5-eeprom-nvme-config.servicemeta-rpi-extensions/recipes-bsp/rpi-eepromOne-shot: sets PCIE_PROBE=1 and BOOT_ORDER=0xf461 in the RPi 5 EEPROM for NVMe boot
wendyos-mdns.servicerecipes-connectivity/avahiWrites the Avahi service definition for _wendyos._udp discovery on port 50051
systemd-resolved.serviceupstream (systemd)Optional stub DNS resolver; enabled by adding resolved to DISTRO_FEATURES at build time. When not enabled, NetworkManager manages /etc/resolv.conf directly.
systemd-networkdupstream (meta-networking)Manages all network interfaces (WiFi, USB gadget usb0)
avahi-daemonupstream (meta-connectivity)Publishes and resolves mDNS/DNS-SD records
serial-getty@ttyAMA0.service / serial-getty@ttyS0.servicerecipes-core/systemdProvides a login shell on the debug UART

Startup order

The diagram below shows the major ordering relationships. Solid arrows indicate After=/Requires=; dashed arrows indicate Before=/Wants=.

local-fs.target
   |
   +-- data.mount
   |      |
   |      +-- mender-systemd-growfs-data.service (Tegra only)
   |             |
   +-- wendyos-etc-binds.service ────────────────────────────────────+
          |                                                           |
          +-- wendyos-uuid-generate.service                          |
          |        |                                                  |
          +-- wendyos-device-name-generate.service                   |
                   |                                                  |
                   +-- (sysinit.target) ──────────────────────────────+
                                                                      |
                          var-lib-containerd.mount                    |
                          home.mount                    gadget-setup.service
                          [var-log.mount]                      |
                                |                              |
                          containerd.service            network.target
                                |                              |
                                +------------------------------+
                                             |
                                     wendyos-agent.service
                                      (multi-user.target)

wendyos-uuid-generate.service
wendyos-device-name-generate.service
      |
      +-- wendyos-hostname.service --> avahi-daemon.service
      +-- wendyos-identity.service

systemd target dependencies

TargetWendyOS additions
sysinit.targetwendyos-etc-binds.service, wendyos-uuid-generate.service, wendyos-device-name-generate.service
local-fs.targetvar-lib-containerd.mount, home.mount, [var-log.mount]
swap.targetswapfile-setup.service
multi-user.targetwendyos-agent.service, wendyos-agent-updater.service, gadget-setup.service, wendyos-hostname.service, wendyos-identity.service, rpi5-eeprom-config.service, rpi5-eeprom-nvme-config.service
timers.targetwendyos-agent-updater.timer

Key ordering rules

  1. /data must be mounted before any bind mount or identity service runs.
  2. wendyos-etc-binds.service must complete before UUID and device-name generation so the generated files land on the persistent /data volume.
  3. gadget-setup.service runs before systemd-networkd so the usb0 interface exists when networkd starts.
  4. containerd.service must be running and /var/lib/containerd must be bind-mounted before wendyos-agent.service starts.
  5. EEPROM services (RPi 5 only) run after multi-user.target and use a flag file (/var/lib/wendyos/eeprom-updated, /var/lib/wendyos/eeprom-nvme-updated) to guarantee they execute at most once.

Checking service status

# Overview of all WendyOS-specific services
systemctl status wendyos-*.service gadget-setup.service rpi5-eeprom-config.service

# Live journal for the agent
journalctl -fu wendyos-agent.service

# Check mount targets
systemctl status var-lib-containerd.mount home.mount

On this page