#!/usr/bin/env bash set -euo pipefail # Compatibility wrapper for the Rust host provisioning command. # Works from Linux/macOS as long as cargo is available. # # Serial usage: # SERIAL_PORT=/dev/cu.usbserial-0001 toes-matter/scripts/provision-device.sh [device-id] # SERIAL_PORT=/dev/cu.usbserial-0001 SERIAL_LOGIN=root SERIAL_PASSWORD=... toes-matter/scripts/provision-device.sh [device-id] # # Environment: # CREDS_DIR Local output dir. Default: toes-matter/manufacturing//creds # REMOTE_CREDS_DIR Remote creds dir. Default: /var/lib/toes-matter # REMOTE_STATE_DIR Remote Matter state dir. Default: /var/lib/toes-matter/state # SERVICE Optional service to restart. Default: toes-matter.service # Set SERVICE= to skip restart. # SERIAL_PORT Serial device, e.g. /dev/cu.usbserial-0001 or /dev/tty.usbserial-0001 # SERIAL_LOGIN Optional serial login username # SERIAL_PASSWORD Optional serial login password SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" CRATE_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" if [[ -z "${SERIAL_PORT:-}" ]]; then echo "Error: set SERIAL_PORT=/dev/cu.* (or /dev/tty.*)" >&2 exit 2 fi if [[ $# -gt 1 ]]; then echo "Usage: SERIAL_PORT=/dev/cu.* $0 [device-id]" >&2 exit 2 fi DEVICE_ID="${1:-$(date +%Y%m%d-%H%M%S)}" TARGET_ARGS=(--serial "$SERIAL_PORT" --device-id "$DEVICE_ID") CREDS_DIR="${CREDS_DIR:-$CRATE_DIR/manufacturing/$DEVICE_ID/creds}" REMOTE_CREDS_DIR="${REMOTE_CREDS_DIR:-/var/lib/toes-matter}" REMOTE_STATE_DIR="${REMOTE_STATE_DIR:-/var/lib/toes-matter/state}" SERVICE="${SERVICE-toes-matter.service}" args=( --creds-dir "$CREDS_DIR" --remote-creds-dir "$REMOTE_CREDS_DIR" --remote-state-dir "$REMOTE_STATE_DIR" ) if [[ -z "$SERVICE" ]]; then args+=(--no-restart) else args+=(--service "$SERVICE") fi exec cargo run --quiet --no-default-features --manifest-path "$CRATE_DIR/Cargo.toml" --bin toes-matter-credentials -- "${args[@]}" "${TARGET_ARGS[@]}"