Services reference login required
Everything that runs on a box, as systemd units. All run as user kal unless noted.
| Service | Port | Purpose |
|---|---|---|
crodie.service | 50271 (TCP/JSON) | Recording state machine — camera/LiDAR subprocesses, phone-link protocol, remote shutdown. |
crodie-upload.service | 80 (HTTP) | Web UI: data upload (Aspera), network, config, logs, download pages. |
crodie-phone-sync.service | 8081 (HTTP) | Receives the phone's own segment uploads. |
bikebox-hotspot.service | — | Brings up the AP interface as a hostapd+dnsmasq hotspot at boot; falls back to the other WiFi interface if the primary AP fails. |
bikebox-hotspot-watchdog.timer | — | Periodically re-checks the hotspot is actually healthy, not just "started." |
filebrowser.service | 8080 (HTTP) | Raw browse/download of /mnt/storage. Deliberately unauthenticated — same trust boundary as the rest of the on-box web UI (the box's own WiFi/LAN). |
picockpit-* (4 units) | — | Third-party fleet monitoring agent (picockpit.com) — not part of the crodie codebase. |
mnt-storage.mount | — | Mounts the NVMe by UUID, nofail (boots fine even if the drive is missing). |
Common commands
systemctl status crodie.service crodie-upload.service crodie-phone-sync.service
journalctl -u crodie.service -f # follow live logs
sudo systemctl restart crodie.service # after deploying new main.py/camera.py/etc.
Full detail (including known gotchas and boot ordering) lives in arcteryxpi/docs/services.md in the repo — this page is the quick-reference version.
Upload pipeline
Uploads go through IBM Aspera (ascp), installed at
/usr/local/bin/ascp → /home/kal/.aspera/sdk/.
Files are staged via symlink (not copied) before transfer, so a large
session doesn't double local disk usage.
Fan / thermal status
The Config page's fan/temperature readout is display-only — it reads
/sys/class/thermal/ and the NVMe's own hwmon sensor
directly, no separate service involved.