toes-matter/scripts/provision-device.sh

58 lines
2.1 KiB
Bash
Executable File

#!/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]
#
# The tool waits for either a shell prompt or login:. If it sees login:, set
# SERIAL_LOGIN and, if required by the image, SERIAL_PASSWORD.
#
# Environment:
# CREDS_DIR Local output dir. Default: toes-matter/manufacturing/<device-id>/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[@]}"