Riorganizzazione struttura repository: separazione servizi e script
This commit is contained in:
57
scripts/pi1-master/dhcp-alert.sh
Normal file
57
scripts/pi1-master/dhcp-alert.sh
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/bin/bash
|
||||
|
||||
# --- CONFIGURAZIONE TELEGRAM ---
|
||||
# 👇👇 INSERISCI I TUOI DATI VERI QUI 👇👇
|
||||
BOT_TOKEN="8155587974:AAF9OekvBpixtk8ZH6KoIc0L8edbhdXt7A4"
|
||||
CHAT_ID="64463169"
|
||||
# 👆👆 FINE MODIFICHE 👆👆
|
||||
|
||||
# --- FILE DI STATO ---
|
||||
KNOWN_MACS_FILE="/etc/pihole/known_macs.txt"
|
||||
|
||||
# Dati ricevuti da dnsmasq
|
||||
ACTION=$1
|
||||
MAC=$2
|
||||
IP=$3
|
||||
HOSTNAME=$4
|
||||
|
||||
# Se l'hostname è vuoto, mettiamo un placeholder
|
||||
if [ -z "$HOSTNAME" ]; then HOSTNAME="[Nessun Hostname]"; fi
|
||||
|
||||
# Ci interessano solo le azioni di assegnazione IP ('add' o 'old')
|
||||
if [[ "$ACTION" == "add" || "$ACTION" == "old" ]]; then
|
||||
|
||||
# Assicura che il file dei MAC esista e sia scrivibile
|
||||
if [ ! -f "$KNOWN_MACS_FILE" ]; then
|
||||
touch "$KNOWN_MACS_FILE" && chmod 666 "$KNOWN_MACS_FILE"
|
||||
fi
|
||||
|
||||
# Cerca il MAC address nel file dei conosciuti
|
||||
if ! grep -q "$MAC" "$KNOWN_MACS_FILE"; then
|
||||
# === NUOVO DISPOSITIVO RILEVATO! ===
|
||||
|
||||
# --- NOVITÀ: Lookup Vendor ---
|
||||
# Usiamo un'API esterna gratuita per trovare il produttore.
|
||||
# Impostiamo un timeout stretto (3s connessione, 5s totale) per non bloccare il DHCP se l'API è lenta.
|
||||
VENDOR=$(curl -s --connect-timeout 3 --max-time 5 "https://api.macvendors.com/$MAC")
|
||||
|
||||
# Se l'API fallisce, è vuota o restituisce errore, mettiamo un default.
|
||||
# (Nota: alcune API restituiscono "Not Found" come testo puro se non trovano il vendor)
|
||||
if [ -z "$VENDOR" ] || [[ "${VENDOR,,}" == *"not found"* ]] || [[ "${VENDOR,,}" == *"error"* ]]; then
|
||||
VENDOR="[Sconosciuto / API Timeout]"
|
||||
fi
|
||||
|
||||
# 1. Invia notifica Telegram (silenziosa)
|
||||
# Aggiunta la riga 🏭 **Vendor:**
|
||||
MSG="🚨 **NUOVO DISPOSITIVO IN RETE!**%0A%0A💻 **Host:** $HOSTNAME%0A📟 **MAC:** \`$MAC\`%0A🏭 **Vendor:** $VENDOR%0A🌐 **IP:** $IP"
|
||||
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d chat_id="$CHAT_ID" -d text="$MSG" -d parse_mode="Markdown" > /dev/null 2>&1
|
||||
|
||||
# 2. Aggiungi il MAC alla lista dei conosciuti
|
||||
# Salviamo anche il vendor nel file di testo per comodità futura
|
||||
{
|
||||
flock -x 200
|
||||
echo "$MAC # Aggiunto il $(date) - Vendor: $VENDOR - Host: $HOSTNAME" >> "$KNOWN_MACS_FILE"
|
||||
} 200>"$KNOWN_MACS_FILE.lock"
|
||||
|
||||
fi
|
||||
fi
|
||||
57
scripts/pi1-master/sync-npm-full.sh
Executable file
57
scripts/pi1-master/sync-npm-full.sh
Executable file
@@ -0,0 +1,57 @@
|
||||
#!/bin/bash
|
||||
|
||||
# --- CONFIGURAZIONE ---
|
||||
REMOTE_IP="192.168.128.81"
|
||||
REMOTE_USER="daniely"
|
||||
# Cartella che contiene 'data' e 'letsencrypt'
|
||||
SOURCE_BASE="/home/daniely/docker/npm"
|
||||
TEMP_FILE="/tmp/npm_full_clone.tar.gz"
|
||||
|
||||
echo "[$(date)] Avvio clonazione totale NPM (Master -> Backup)..."
|
||||
|
||||
# 1. Crea un archivio compresso di TUTTO (Database SQL + Certificati)
|
||||
# Usiamo sudo per leggere i file di root senza permessi negati
|
||||
# Escludiamo i log per risparmiare spazio
|
||||
sudo tar --exclude='*.log' -czf "$TEMP_FILE" -C "$SOURCE_BASE" data letsencrypt
|
||||
|
||||
# 2. Assegna l'archivio all'utente corrente (per poterlo spedire via SCP)
|
||||
sudo chown $USER:$USER "$TEMP_FILE"
|
||||
|
||||
# 3. Spedisce l'archivio al Pi-2
|
||||
echo "Invio archivio al Pi-2 ($REMOTE_IP)..."
|
||||
scp -o ConnectTimeout=10 "$TEMP_FILE" "$REMOTE_USER@$REMOTE_IP:/tmp/"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Trasferimento riuscito. Applicazione sul Backup..."
|
||||
|
||||
# 4. Comanda al Pi-2 di:
|
||||
# a) Arrestare NPM (per sbloccare il database)
|
||||
# b) Scompattare sovrascrivendo tutto
|
||||
# c) Ripristinare i permessi di root
|
||||
# d) Riavviare NPM
|
||||
ssh "$REMOTE_USER@$REMOTE_IP" "
|
||||
echo ' ...Stop NPM...';
|
||||
docker stop npm;
|
||||
|
||||
echo ' ...Estrazione dati...';
|
||||
# Pulisce la cartella di destinazione prima di estrarre per evitare residui
|
||||
sudo rm -rf /home/daniely/docker/npm/data/*
|
||||
sudo rm -rf /home/daniely/docker/npm/letsencrypt/*
|
||||
sudo tar -xzf /tmp/npm_full_clone.tar.gz -C /home/daniely/docker/npm/;
|
||||
|
||||
echo ' ...Fix Permessi...';
|
||||
sudo chown -R root:root /home/daniely/docker/npm/;
|
||||
|
||||
echo ' ...Start NPM...';
|
||||
docker start npm;
|
||||
|
||||
# Pulizia remota
|
||||
rm /tmp/npm_full_clone.tar.gz
|
||||
"
|
||||
echo "[$(date)] Sincronizzazione Completata con Successo."
|
||||
else
|
||||
echo "[$(date)] ERRORE CRITICO: Trasferimento fallito."
|
||||
fi
|
||||
|
||||
# 5. Pulizia locale
|
||||
rm "$TEMP_FILE"
|
||||
47
scripts/pi1-master/watchdog_pi2.sh
Executable file
47
scripts/pi1-master/watchdog_pi2.sh
Executable file
@@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ================================================
|
||||
# SENTINELLA DI BACKUP (Gira su Pi-1 Master)
|
||||
# Controlla solo che il Pi-2 sia vivo.
|
||||
# ================================================
|
||||
|
||||
# --- CONFIGURAZIONE ---
|
||||
# 👇👇 INSERISCI I TUOI DATI VERI QUI 👇👇
|
||||
BOT_TOKEN="8155587974:AAF9OekvBpixtk8ZH6KoIc0L8edbhdXt7A4"
|
||||
CHAT_ID="64463169"
|
||||
# 👆👆 FINE MODIFICHE 👆👆
|
||||
|
||||
# Il bersaglio da controllare (Pi-2 Backup)
|
||||
TARGET_IP="192.168.128.81"
|
||||
TARGET_NAME="🍓 Pi-2 (Backup & Monitor)"
|
||||
|
||||
# File di stato specifico per questo controllo
|
||||
STATE_FILE="/tmp/pi2_watchdog.state"
|
||||
|
||||
# Funzione per inviare messaggi Telegram con timeout breve
|
||||
send_telegram() {
|
||||
MSG="$1"
|
||||
curl -s --max-time 5 -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d chat_id="$CHAT_ID" -d text="$MSG" -d parse_mode="Markdown" > /dev/null 2>&1
|
||||
}
|
||||
|
||||
# Inizializza stato se non esiste
|
||||
if [ ! -f "$STATE_FILE" ]; then echo "UP" > "$STATE_FILE"; fi
|
||||
LAST_STATE=$(cat "$STATE_FILE")
|
||||
|
||||
# --- IL PING ---
|
||||
# 3 tentativi, 2 secondi di timeout l'uno.
|
||||
# Basta che uno risponda per considerare il bersaglio UP.
|
||||
if ping -c 3 -W 2 "$TARGET_IP" > /dev/null 2>&1; then
|
||||
# === È ONLINE ===
|
||||
if [ "$LAST_STATE" == "DOWN" ]; then
|
||||
send_telegram "✅ **RISOLTO: $TARGET_NAME è tornato ONLINE!**%0AIl monitoraggio di rete è di nuovo attivo."
|
||||
echo "UP" > "$STATE_FILE"
|
||||
fi
|
||||
else
|
||||
# === È OFFLINE ===
|
||||
if [ "$LAST_STATE" == "UP" ]; then
|
||||
# Usiamo un'icona diversa per distinguerlo subito
|
||||
send_telegram "🛡️ **ALLARME SICUREZZA: $TARGET_NAME è OFFLINE!**%0A%0AAttenzione: Il sistema di monitoraggio principale (Super Watchdog) non sta funzionando."
|
||||
echo "DOWN" > "$STATE_FILE"
|
||||
fi
|
||||
fi
|
||||
Reference in New Issue
Block a user