#!/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. # # SSH usage: # toes-matter/scripts/provision-device.sh user@device-host [device-id] # # 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/creds # 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. # SSH_OPTS Extra ssh/scp options, e.g. '-p 2222' # 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 [[ -n "${SERIAL_PORT:-}" ]]; then if [[ $# -gt 1 ]]; then echo "Usage with SERIAL_PORT: 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") else if [[ $# -lt 1 || $# -gt 2 ]]; then echo "Usage: $0 user@device-host [device-id]" >&2 echo " or: SERIAL_PORT=/dev/cu.* $0 [device-id]" >&2 exit 2 fi TARGET="$1" DEVICE_ID="${2:-$(date +%Y%m%d-%H%M%S)}" TARGET_ARGS=("$TARGET" "$DEVICE_ID") fi CREDS_DIR="${CREDS_DIR:-$CRATE_DIR/manufacturing/$DEVICE_ID/creds}" REMOTE_CREDS_DIR="${REMOTE_CREDS_DIR:-/var/lib/toes-matter/creds}" 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-provision -- "${args[@]}" "${TARGET_ARGS[@]}"