Install Veirox Connect on an edge / arm device

Target: Low-spec Linux hosts without systemd (Raspberry Pi,
OpenWRT, BusyBox-based IoT gateways). The same Rust binary as the
systemd/OCI targets, built for aarch64-unknown-linux-musl or
armv7-unknown-linux-musleabihf with the bundled-roots Cargo
feature so it doesn't need /etc/ssl/certs.

Prerequisites

  • root on the edge device
  • ~10 MB free disk, ~32 MB free RAM
  • Outbound TCP 443 to the Veirox backend
  • An Veirox enrollment token

Install

1. Build the edge binary (on a dev host, not the edge device)

cd agent/veirox-connector
rustup target add aarch64-unknown-linux-musl
cargo build --release --locked \
  --target aarch64-unknown-linux-musl \
  --features bundled-roots
# → target/aarch64-unknown-linux-musl/release/veirox-connector (~5 MB)

For ARMv7 (older Raspberry Pis, 32-bit):

rustup target add armv7-unknown-linux-musleabihf
cargo build --release --locked \
  --target armv7-unknown-linux-musleabihf \
  --features bundled-roots

2. Copy to the edge device + run the edge installer

scp veirox-connector pi@edge-gateway:/tmp/
ssh pi@edge-gateway "sudo \
  VEIROX_BACKEND_URL=https://veirox.customer.com \
  VEIROX_ENROLLMENT_TOKEN=veirox_enr_REPLACE_ME \
  sh -c 'cd /tmp && sh install-edge.sh ./veirox-connector'"

The install-edge.sh script detects whether OpenRC is available and
installs a proper init script if so; otherwise it launches the agent
under nohup.

3. Corporate CA bundle (optional)

ssh pi@edge-gateway "sudo mkdir -p /etc/ssl && sudo cp corp-ca.pem /etc/ssl/"
# re-run install-edge.sh with the env var:
VEIROX_CONNECTOR_EXTRA_CA_BUNDLE=/etc/ssl/corp-ca.pem

Verify

ssh pi@edge-gateway "tail -f /var/log/veirox-connector.log"

Then run the verification checklist.

Upgrade

Re-run the build + scp + install-edge.sh sequence. The existing cert
triple is preserved — the installer only overwrites the binary and
restarts the service.

See upgrade.md.

Uninstall

OpenRC hosts

ssh pi@edge-gateway "sudo rc-service veirox-connector stop"
ssh pi@edge-gateway "sudo rc-update del veirox-connector default"
ssh pi@edge-gateway "sudo rm -f /etc/init.d/veirox-connector /etc/conf.d/veirox-connector"
ssh pi@edge-gateway "sudo rm -rf /etc/veirox-connector /var/lib/veirox-connector /usr/local/bin/veirox-connector"
ssh pi@edge-gateway "sudo deluser veirox-connector"

nohup hosts

ssh pi@edge-gateway "sudo pkill -f veirox-connector"
ssh pi@edge-gateway "sudo rm -rf /etc/veirox-connector /var/lib/veirox-connector /usr/local/bin/veirox-connector /var/log/veirox-connector.log"

Troubleshooting

Symptom Fix
executor_spawn_failed with no such file or directory The edge device uses a shell other than sh at /bin/sh. BusyBox's ash is supported; a broken symlink is not.
TLS handshake fails without /etc/ssl/certs Confirm you built with --features bundled-roots. The resulting binary should be ~200 KB larger than the non-bundled one.
cpu_usage_percent always zero Kernel is too old for cgroupv2 metric sources. Cosmetic — the agent still works.
Agent gets killed by OOM on first start Lower the heartbeat tick cost by setting RUST_LOG=warn to suppress debug logging.