#!/usr/bin/env bash # Deploy net_alerter daemon to target host # Usage: ./deploy-daemon.sh [user@host] [remote-dir] set -euo pipefail TARGET_HOST="${1:-root@10.0.0.0}" REMOTE_DIR="${2:-/opt/net_alerter}" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" SCRIPT="$SCRIPT_DIR/net_alerter.py" SERVICE="$SCRIPT_DIR/net_alerter.service" if [[ ! -f "$SCRIPT" ]]; then echo "[error] net_alerter.py not found at $SCRIPT" exit 1 fi if [[ ! -f "$SERVICE" ]]; then echo "[error] net_alerter.service not found at $SERVICE" exit 1 fi echo "[*] Deploying to $TARGET_HOST..." # Create directory ssh "$TARGET_HOST" "mkdir -p $REMOTE_DIR && ls -la $REMOTE_DIR" # Copy daemon script echo "[*] Copying daemon script..." scp "$SCRIPT" "$TARGET_HOST:$REMOTE_DIR/net_alerter.py" # Copy OUI database echo "[*] Copying OUI database..." scp "$SCRIPT_DIR/../data/oui.db" "$TARGET_HOST:$REMOTE_DIR/oui.db" # Copy systemd unit echo "[*] Copying systemd unit..." scp "$SERVICE" "$TARGET_HOST:/etc/systemd/system/net_alerter.service" # If .env doesn't exist, create a template echo "[*] Checking for .env..." ssh "$TARGET_HOST" " if [[ ! -f $REMOTE_DIR/.env ]]; then cat > $REMOTE_DIR/.env <<'EOF' MATRIX_HOMESERVER=https://m.example.org MATRIX_ACCESS_TOKEN= MATRIX_ROOM_ID= EOF chmod 600 $REMOTE_DIR/.env echo '[warn] Created .env template - update MATRIX_ACCESS_TOKEN and MATRIX_ROOM_ID' else echo '[ok] .env exists' fi " # Remove old cron if present echo "[*] Removing old cron entries..." ssh "$TARGET_HOST" "crontab -l 2>/dev/null | grep -v net_alerter | crontab - 2>/dev/null || true" # Enable and start service echo "[*] Enabling and starting service..." ssh "$TARGET_HOST" " systemctl daemon-reload systemctl enable net_alerter systemctl restart net_alerter sleep 3 systemctl status net_alerter --no-pager " # Verify OUI database echo "[*] Verifying OUI database on remote host..." ssh "$TARGET_HOST" "python3 -c \"import sqlite3; c=sqlite3.connect('/opt/net_alerter/oui.db'); print('OUI rows:', c.execute('SELECT COUNT(*) FROM oui').fetchone()[0])\"" echo "[*] Checking logs..." ssh "$TARGET_HOST" "journalctl -u net_alerter -n 20 --no-pager" echo "[done] net_alerter daemon deployed and running"