#!/usr/bin/env bash # Deploy net_alerter to condo Pi # Usage: ./deploy.sh [access_token] set -euo pipefail SSH_ALIAS="condo" REMOTE_DIR="/opt/net_alerter" SCRIPT="$(dirname "$0")/net_alerter.py" # Matrix access token for net-alerter service account # Get fresh token if not passed — credentials stored in secrets file SECRETS_FILE="$(dirname "$0")/.secrets" if [[ -n "${1:-}" ]]; then TOKEN="$1" elif [[ -f "$SECRETS_FILE" ]]; then # shellcheck source=/dev/null source "$SECRETS_FILE" echo "[*] Fetching Matrix access token for net-alerter..." TOKEN=$(curl -s -X POST https://m.example.org/_matrix/client/v3/login \ -H "Content-Type: application/json" \ -d "{\"type\":\"m.login.password\",\"identifier\":{\"type\":\"m.id.user\",\"user\":\"net-alerter\"},\"password\":\"${NET_ALERTER_MATRIX_PASS}\"}" \ | python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])") else echo "[error] Pass a token as \$1 or create $(dirname "$0")/.secrets with NET_ALERTER_MATRIX_PASS=..." exit 1 fi echo "[*] Deploying to $SSH_ALIAS..." ssh -o StrictHostKeyChecking=no "$SSH_ALIAS" " sudo mkdir -p $REMOTE_DIR sudo chown \$USER: $REMOTE_DIR " scp -o StrictHostKeyChecking=no "$SCRIPT" "$SSH_ALIAS:$REMOTE_DIR/net_alerter.py" ssh -o StrictHostKeyChecking=no "$SSH_ALIAS" " if ! command -v nmap &>/dev/null; then sudo apt-get install -y nmap fi cat > $REMOTE_DIR/.env < $REMOTE_DIR/run.sh <<'WRAPPER' #!/usr/bin/env bash set -a; source /opt/net_alerter/.env; set +a exec python3 /opt/net_alerter/net_alerter.py WRAPPER chmod +x $REMOTE_DIR/run.sh CRON='*/5 * * * * /opt/net_alerter/run.sh >> /opt/net_alerter/net_alerter.log 2>&1' (crontab -l 2>/dev/null | grep -v net_alerter; echo \"\$CRON\") | crontab - echo '[ok] Deployed. Running first scan...' bash $REMOTE_DIR/run.sh && echo '[ok] First scan complete' " echo "[done] net_alerter deployed and cron set (every 5 min)"