Skip to content

Build server sn1-1f0ccb

referenceobservedEvidence reviewed 2026-10-06

sn1-1f0ccb is an appliance-class x86 box on the home LAN used as a general worker. Today it has two roles: it is the camera-stream source for the edge appliance (a simulator that loops clips as RTSP cameras) and the host for Rust builds of the appliance search-engine. It also runs the webhook receiver that the appliance’s agents post to. The hostname is its identity; the roles can change. Registered roles: camera-stream-source, appliance-builder.

Connect as pi with the Mac’s key: ssh pi@192.168.1.12. The mDNS name sn1-1f0ccb.local resolves only when the Mac is on the same subnet; scripts use the reserved address. pi has passwordless sudo and is in the docker group. The address 192.168.1.12 comes from DHCP with a reservation for the box’s MAC in the home router; the reservation has not been proved by a lease lapse. The appliance stores camera streams as raw addresses, so this address must not move.

Observed on 6 October: Ubuntu 22.04.5, kernel 6.8.0, Intel i3-8130U (4 threads), 7 GB RAM, 1.7 TB disk with 1.7 TB free, Intel UHD 620 with VAAPI at /dev/dri/renderD128, one wired interface enp2s0. Docker 29.1.3 from Ubuntu’s package, enabled at boot. No Mender, no Tailscale, no ffmpeg on the host. rsync and python3 are present. Nothing here is managed by this repository.

ComponentRecorded facts
Camera simulatorStatus: observed
Container: camera-simulator
Image: gcr.io/test-ai-243511/camera-simulator:1.0.19
Ports: 80 dashboard and API, 554 RTSP, 8554 legacy RTSP, on all interfaces
Supervision: Docker restart always; Docker enabled at boot
Network: host; /dev/dri passed in; library mounted at /videos
Reboot: Seen running after the 6 October reboot
Webhook receiverStatus: observed
Unit: webhook-receiver.service
Port: 8090 on all interfaces
Supervision: systemd, enabled at boot since 2026-10-06, Restart=always
Source: webhook-receiver.py in the appliance repository notes folder; not maintained here
User: pi
Reboot: Enabled at boot; not yet verified across a reboot
Search-engine build (cargo on the host)Status: reported
Toolchain: rustup in /home/pi/.cargo (stable 1.94.1 present; the script installs 1.89.0 to match the product Dockerfile)
Source copy: /home/pi/appliance-build (rsync of app/svc/search-engine and app/shared/shared-rs from the Mac)
Runtime: Invoked over SSH; no resident service or listening port
Source size: 7 MB on 6 October 2026

The simulator seeds one path per file in the library on first start and keeps the path list in .cam-sim-state.json inside the library directory. A path’s ffmpeg runs only while it has readers, with the copy encoder, so seven cameras cost little. The dashboard is http://192.168.1.12/; GET /api/paths lists paths and readers; the RTSP credentials are the simulator’s defaults and are not written here.

The receiver answers 200 to every request and appends one JSON line per call to /home/pi/webhooks/received.jsonl. Its source is webhook-receiver.py in the appliance repository’s notes folder (see source map); this repository does not maintain it.

ComponentRecorded facts
Video library copy and simulator stateStatus: observed
Persistence: Copied from the appliance on 2026-10-05 (24 files, 24 GB). The simulator keeps its path definitions in .cam-sim-state.json inside this directory; deleting the directory loses the seven configured paths.
Path: /home/pi/camera_simulator/videos
Receiver logStatus: observed
Persistence: Append-only JSON lines. Each run renames the current file to received-before-<run>.jsonl and the run copies its own lines into the appliance repository notes. Old files can be deleted when no longer wanted.
Path: /home/pi/webhooks/received.jsonl
Cargo build directoryStatus: observed
Persistence: Build cache only (7.6 GB on 2026-10-06, from a 1 September debug build). Safe to delete; the next build takes longer.
Path: /home/pi/search-engine-target

Earlier working directories /home/pi/sheets, /home/pi/search-engine and /home/pi/tracker-bench-target remain on the host; their purpose and size were not re-verified.

Runs of the test bed restart the simulator on purpose; see run a baseline. Building and swapping the search-engine is a separate workflow. Recovery recipes, including a dead receiver and a moved address, are in the test bed runbook.

Do not run a heavy build during a measurement run: the simulator shares the four threads. Do not delete the library directory to free space; the path definitions live inside it.

Facts above were read on 5 and 6 October. The only measurement run so far (run 1) was interrupted by the power loss. Not verified: the DHCP reservation across a lease lapse, the receiver unit across a reboot, the release build on this host. The 6 October reboot at 08:55 UTC was a house power loss that also rebooted the appliance; the journal shows no shutdown line.