71 lines
2.0 KiB
Bash
Executable File
71 lines
2.0 KiB
Bash
Executable File
#!/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"
|