feat: add diagnostic and maintenance scripts for Pi-hole, Technitium, and Nginx Proxy Manager

This commit is contained in:
2026-11-07 13:43:11 -05:00
parent 4e8f93173e
commit 34cfece0b0
11 changed files with 123 additions and 0 deletions

View File

@@ -19,3 +19,4 @@ out, err = exec_cmd('k3s kubectl exec -n dns deploy/pihole -c pihole -- pihole-F
print("Integrity:", out, "Err:", err)
client.close()

View File

@@ -0,0 +1,10 @@
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("140.44.4.41", username="root", key_filename=r"C:\Users\Snarf\.ssh\id_ed25519_snarfnet", timeout=10)
cmd = 'k3s kubectl exec -n dns deploy/pihole -c pihole -- grep -A 10 "Database version is 22" /var/log/pihole/FTL.log'
stdin, stdout, stderr = client.exec_command(cmd)
print("Spaceport:\n", stdout.read().decode())
client.close()

View File

@@ -0,0 +1,11 @@
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("140.44.4.11", username="root", key_filename=r"C:\Users\Snarf\.ssh\id_ed25519_snarfnet", timeout=10)
cmd = 'k3s kubectl exec -n dns deploy/pihole -c pihole -- grep -B 20 "CRIT: Cannot initialize in-memory database" /var/log/pihole/FTL.log'
stdin, stdout, stderr = client.exec_command(cmd)
print(stdout.read().decode())
client.close()

View File

@@ -0,0 +1,11 @@
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("140.44.4.11", username="root", key_filename=r"C:\Users\Snarf\.ssh\id_ed25519_snarfnet", timeout=10)
cmd = 'k3s kubectl exec -n dns deploy/pihole -c pihole -- pihole-FTL sqlite3 /etc/pihole/pihole-FTL.db "SELECT * FROM ftl;"'
stdin, stdout, stderr = client.exec_command(cmd)
print(stdout.read().decode())
client.close()

View File

@@ -0,0 +1,11 @@
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("140.44.4.41", username="root", key_filename=r"C:\Users\Snarf\.ssh\id_ed25519_snarfnet", timeout=10)
cmd = 'k3s kubectl exec -n dns deploy/pihole -c pihole -- pihole-FTL sqlite3 /etc/pihole/pihole-FTL.db "SELECT * FROM ftl;"'
stdin, stdout, stderr = client.exec_command(cmd)
print("Spaceport:", stdout.read().decode())
client.close()

View File

@@ -0,0 +1,13 @@
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("140.44.4.11", username="root", key_filename=r"C:\Users\Snarf\.ssh\id_ed25519_snarfnet", timeout=10)
for tbl in ["network", "network_addresses"]:
cmd = f'k3s kubectl exec -n dns deploy/pihole -c pihole -- pihole-FTL sqlite3 /etc/pihole/pihole-FTL.db "SELECT count(*) FROM {tbl};"'
stdin, stdout, stderr = client.exec_command(cmd)
print(f"{tbl} count:", stdout.read().decode().strip(), stderr.read().decode().strip())
client.close()

View File

@@ -0,0 +1,11 @@
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("140.44.4.71", username="root", key_filename=r"C:\Users\Snarf\.ssh\id_ed25519_snarfnet", timeout=10)
cmd = 'python3 -c "import sqlite3; conn=sqlite3.connect(\'/var/lib/docker/volumes/nginx-proxy-manager_nginx-data/_data/database.sqlite\'); print(conn.execute(\'SELECT id, domain_names, forward_host, forward_port, enabled FROM proxy_host;\').fetchall())"'
stdin, stdout, stderr = client.exec_command(cmd)
print(stdout.read().decode())
print(stderr.read().decode())
client.close()

View File

@@ -0,0 +1,14 @@
import requests
import paramiko
# Let's inspect the technitium zone via SSH or API
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("140.44.4.11", username="root", key_filename=r"C:\Users\Snarf\.ssh\id_ed25519_snarfnet", timeout=10)
cmd = 'k3s kubectl exec -n dns deploy/technitium-dns -c technitium-dns -- find /etc/dns/zones -type f -exec grep -H "shipyardcontrol" {} + || true'
stdin, stdout, stderr = client.exec_command(cmd)
print("Zone file check:", stdout.read().decode())
client.close()

View File

@@ -0,0 +1,28 @@
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("140.44.4.11", username="root", key_filename=r"C:\Users\Snarf\.ssh\id_ed25519_snarfnet", timeout=10)
# Check current version
cmd = 'k3s kubectl exec -n dns deploy/pihole -c pihole -- pihole-FTL sqlite3 /etc/pihole/pihole-FTL.db "SELECT * FROM ftl WHERE id=0;"'
stdin, stdout, stderr = client.exec_command(cmd)
print("Before:", stdout.read().decode().strip())
# Update version to 21
cmd = 'k3s kubectl exec -n dns deploy/pihole -c pihole -- pihole-FTL sqlite3 /etc/pihole/pihole-FTL.db "UPDATE ftl SET value=21 WHERE id=0;"'
stdin, stdout, stderr = client.exec_command(cmd)
print("Updated:", stdout.read().decode().strip(), stderr.read().decode().strip())
# Verify
cmd = 'k3s kubectl exec -n dns deploy/pihole -c pihole -- pihole-FTL sqlite3 /etc/pihole/pihole-FTL.db "SELECT * FROM ftl WHERE id=0;"'
stdin, stdout, stderr = client.exec_command(cmd)
print("After:", stdout.read().decode().strip())
# Restart FTL or reload
cmd = 'k3s kubectl exec -n dns deploy/pihole -c pihole -- pihole restartdns'
stdin, stdout, stderr = client.exec_command(cmd)
print("Restart output:", stdout.read().decode().strip())
client.close()

View File

@@ -20,3 +20,4 @@ stdin, stdout, stderr = client.exec_command(cmd)
print("Nginx reload:", stdout.read().decode().strip(), stderr.read().decode().strip())
client.close()

View File

@@ -0,0 +1,12 @@
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("140.44.4.11", username="root", key_filename=r"C:\Users\Snarf\.ssh\id_ed25519_snarfnet", timeout=10)
cmd = 'k3s kubectl exec -n dns deploy/pihole -c pihole -- su -s /bin/sh pihole -c "pihole-FTL sqlite3 /etc/pihole/pihole-FTL.db \'SELECT count(*) FROM query_storage;\'"'
stdin, stdout, stderr = client.exec_command(cmd)
print("Output:", stdout.read().decode())
print("Error:", stderr.read().decode())
client.close()