Yocto layer for Esper Device Management integration.
This Yocto layer adds Esper device management capabilities to your Linux builds. Simply add this layer to your existing Yocto project, and your devices will automatically register with Esper on first boot using their unique serial numbers.
What this layer does:
- Downloads and installs Esper agent binaries during runtime
- Creates a one-time provisioning service that runs on first boot
- Automatically registers devices with Esper cloud
- Starts device management services (telemetry, remote commands)
What this layer does NOT do:
- Does not manage users or passwords (that's your responsibility)
- Does not create a complete OS image (it's meant to be added to YOUR image)
- Does not handle security policies (customers manage their own security)
- meta (OE-Core)
- meta-openembedded/meta-networking
Compatible with Yocto releases: dunfell, kirkstone (LTS), langdale, mickledore, nanbield, scarthgap (LTS)
- Build Time: Layer adds provisioning script and systemd service to your image
- First Boot: Provisioning service runs automatically
- Runtime: Script downloads appropriate agent binaries for your architecture
- Registration: Device registers with Esper cloud using its serial number
- Activation: Agent services start and device becomes manageable
- Cleanup: Provisioning service disables itself after successful completion
- Immediate retry: If provisioning fails, service retries after 30 seconds
- Periodic checks: Timer runs every 5 minutes to retry unprovisioned devices
- Automatic recovery: Once network connectivity is restored, device will provision automatically
- No manual intervention: System handles temporary network outages gracefully
cd your-yocto-build
bitbake-layers add-layer /path/to/meta-esperIn your image recipe (e.g., your-custom-image.bb):
IMAGE_INSTALL += "esper-provisioner"bitbake your-custom-imageThat's it! Your devices will now automatically register with Esper on first boot.
- On first boot, the device reads its serial number
- It contacts Esper cloud to register itself
- Downloads configuration and starts agent services
- Device appears in your Esper dashboard ready for management
- Devices must be pre-registered in Esper dashboard with their serial numbers
- Internet connectivity required on first boot
- Serial number must be detectable (see Serial Number Sources below)
The provisioner automatically detects your target architecture and downloads the appropriate binaries:
| Architecture | Supported |
|---|---|
| amd64 (x86_64) | ✅ |
| arm64 (aarch64) | ✅ |
| arm (armv7l) | ✅ |
| x86 (i686) | ✅ |
The provisioner checks these locations in order:
/sys/class/dmi/id/product_serial/sys/firmware/devicetree/base/serial-number/proc/cpuinfo(Serial field)/tmp/esper.id(custom override for testing)
Devices need HTTPS access to:
- Esper cloud services for device registration
- Esper API endpoints for configuration
- MQTT services for device communication
- CDN for agent binary downloads
# Verify layer is recognized
bitbake-layers show-layers
# Test recipe builds
bitbake esper-provisioner
# Clean and rebuild if needed
bitbake -c cleanall esper-provisioner
bitbake esper-provisioner# Check available serial sources
cat /sys/class/dmi/id/product_serial
cat /proc/cpuinfo | grep Serial
cat /tmp/esper.id # if using custom override# Test connectivity
ping google.com
nslookup esper.io# Check provisioning logs
journalctl -u esper-provisioner
cat /var/log/esper-provisioning.log
# Manual provisioning for debugging
/usr/bin/esper-provisioner
# Check agent services after provisioning
systemctl status esper-cmse
systemctl status esper-telemetryMIT License