#!/usr/bin/env bash set -euo pipefail # Configuration CONTROL_NODE="${SYMCLAW_CONTROL:-pi5.tail}" WORKER_NODES="${SYMCLAW_WORKERS:-pi4-1.tail pi4-2.tail pi4-3.tail}" BINARY="target/aarch64-unknown-linux-gnu/release/symclaw-skill" CLI_BINARY="target/aarch64-unknown-linux-gnu/release/symclaw" REMOTE_DIR="/opt/symclaw" echo "=== SymClaw Pi Cluster Deployment ===" echo "Control: $CONTROL_NODE" echo "Workers: $WORKER_NODES" echo "" # Cross-compile for aarch64 echo "Cross-compiling for aarch64..." cross build --release --target aarch64-unknown-linux-gnu -p symclaw-skill -p symclaw-cli # Verify binaries exist for bin in "$BINARY" "$CLI_BINARY"; do if [[ ! -f "$bin" ]]; then echo "ERROR: Binary not found: $bin" exit 1 fi done # Deploy to each node for node in $CONTROL_NODE $WORKER_NODES; do echo "Deploying to $node..." ssh "$node" "sudo mkdir -p $REMOTE_DIR && sudo systemctl stop symclaw 2>/dev/null || true" scp "$BINARY" "$node:/tmp/symclaw-skill" scp "$CLI_BINARY" "$node:/tmp/symclaw" ssh "$node" "sudo mv /tmp/symclaw-skill /tmp/symclaw $REMOTE_DIR/ && sudo chmod +x $REMOTE_DIR/*" echo " ✓ $node" done # Deploy systemd service to control node echo "Installing systemd service on $CONTROL_NODE..." ssh "$CONTROL_NODE" "sudo tee /etc/systemd/system/symclaw.service > /dev/null" << 'EOF' [Unit] Description=SymClaw Symbolic Mathematics Engine After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/opt/symclaw/symclaw-skill Restart=on-failure RestartSec=5 Environment=RUST_LOG=info DynamicUser=yes ProtectSystem=strict ProtectHome=yes ReadWritePaths=/var/lib/symclaw NoNewPrivileges=yes PrivateTmp=yes [Install] WantedBy=multi-user.target EOF # Start service on control node ssh "$CONTROL_NODE" "sudo systemctl daemon-reload && sudo systemctl enable --now symclaw" echo "" echo "=== Deployment complete ===" echo "Control: $CONTROL_NODE" echo "Workers: $WORKER_NODES" echo "Check status: ssh $CONTROL_NODE sudo systemctl status symclaw"