Dateien nach "scripts" hochladen
This commit is contained in:
@@ -348,69 +348,81 @@ start_and_verify() {
|
|||||||
local vpn_ok=false
|
local vpn_ok=false
|
||||||
VPN_IP=""
|
VPN_IP=""
|
||||||
|
|
||||||
# Bei Hostname-Modus: Gluetun Server-Datenbank aktualisieren + fehlende Server eintragen
|
# Bei Hostname-Modus: Server in Gluetun-DB eintragen (Dedicated-IP Support)
|
||||||
if [[ -n "${VPN_HOSTNAME:-}" ]]; then
|
if [[ -n "${VPN_HOSTNAME:-}" ]]; then
|
||||||
info "Aktualisiere Gluetun Server-Datenbank..."
|
info "Lade aktuelle Gluetun Server-Datenbank von GitHub..."
|
||||||
pct exec "$SEL_ID" -- bash -c "docker run --rm -v freqtrade_gluetun_data:/gluetun qmcgaw/gluetun update -enduser-pprof -providers nordvpn 2>&1 | tail -3" 2>/dev/null && success "Server-Datenbank aktualisiert" || warn "Update fehlgeschlagen – fahre trotzdem fort"
|
|
||||||
|
|
||||||
# Prüfen ob der Hostname in der DB ist – falls nicht: manuell eintragen
|
local DB_PATH="/var/lib/docker/volumes/freqtrade_gluetun_data/_data/servers.json"
|
||||||
local host_in_db
|
local SERVERS_URL="https://raw.githubusercontent.com/qdm12/gluetun/refs/heads/master/internal/storage/servers.json"
|
||||||
host_in_db=$(pct exec "$SEL_ID" -- bash -c "docker run --rm -v freqtrade_gluetun_data:/gluetun alpine grep -c '${VPN_HOSTNAME}' /gluetun/servers.json 2>/dev/null || echo 0" 2>/dev/null || echo "0")
|
|
||||||
|
|
||||||
if [[ "$host_in_db" == "0" ]]; then
|
# Volume-Verzeichnis anlegen falls noch nicht vorhanden
|
||||||
warn "${VPN_HOSTNAME} nicht in Gluetun-DB – trage Server manuell ein..."
|
pct exec "$SEL_ID" -- bash -c "mkdir -p /var/lib/docker/volumes/freqtrade_gluetun_data/_data" 2>/dev/null || true
|
||||||
|
|
||||||
|
# Aktuelle servers.json von GitHub laden (immer aktuell, richtiges Format)
|
||||||
|
if pct exec "$SEL_ID" -- bash -c \
|
||||||
|
"curl -fsSL '${SERVERS_URL}' -o ${DB_PATH} 2>/dev/null"; then
|
||||||
|
local srv_count
|
||||||
|
srv_count=$(pct exec "$SEL_ID" -- bash -c \
|
||||||
|
"python3 -c \"import json; d=json.load(open('${DB_PATH}')); print(len(d.get('nordvpn',{}).get('servers',[])))\" 2>/dev/null" || echo "?")
|
||||||
|
success "Server-Datenbank geladen (${srv_count} NordVPN-Server)"
|
||||||
|
else
|
||||||
|
warn "GitHub-Download fehlgeschlagen – fahre trotzdem fort"
|
||||||
|
fi
|
||||||
|
|
||||||
# IP per DNS auflösen
|
# IP per DNS auflösen
|
||||||
local server_ip
|
local server_ip
|
||||||
server_ip=$(pct exec "$SEL_ID" -- bash -c "getent hosts ${VPN_HOSTNAME} | awk '{print \$1}' | head -1" 2>/dev/null || echo "")
|
server_ip=$(pct exec "$SEL_ID" -- bash -c "getent hosts ${VPN_HOSTNAME} 2>/dev/null | awk '{print \$1}' | head -1" 2>/dev/null || echo "")
|
||||||
|
[[ -z "$server_ip" ]] && server_ip=$(pct exec "$SEL_ID" -- bash -c "nslookup ${VPN_HOSTNAME} 2>/dev/null | awk '/Address:/ && !/#/{print \$2}' | head -1" 2>/dev/null || echo "")
|
||||||
|
|
||||||
if [[ -z "$server_ip" ]]; then
|
if [[ -z "$server_ip" ]]; then
|
||||||
# Fallback: nslookup
|
warn "DNS-Auflösung für ${VPN_HOSTNAME} fehlgeschlagen – Hostname trotzdem versuchen"
|
||||||
server_ip=$(pct exec "$SEL_ID" -- bash -c "nslookup ${VPN_HOSTNAME} 2>/dev/null | grep -oP '(?<=Address: )[0-9.]+' | tail -1" 2>/dev/null || echo "")
|
else
|
||||||
fi
|
info "DNS: ${VPN_HOSTNAME} → ${server_ip}"
|
||||||
|
|
||||||
if [[ -n "$server_ip" ]]; then
|
# Eintrag mit korrektem Gluetun-Format hinzufügen
|
||||||
info "IP aufgelöst: ${VPN_HOSTNAME} → ${server_ip}"
|
# Format: {"vpn":"openvpn","country":"Germany","region":"Europe","city":"Frankfurt",
|
||||||
# Eintrag in servers.json via Python3
|
# "hostname":"de1370.nordvpn.com","tcp":true,"udp":true,"ips":["1.2.3.4"]}
|
||||||
pct exec "$SEL_ID" -- bash -c "python3 - << 'PYEOF'
|
pct exec "$SEL_ID" -- bash -c "python3 << PYEOF
|
||||||
import json, sys
|
import json, sys, copy
|
||||||
|
|
||||||
|
path = '${DB_PATH}'
|
||||||
|
hostname = '${VPN_HOSTNAME}'
|
||||||
|
ip = '${server_ip}'
|
||||||
|
|
||||||
path = '/var/lib/docker/volumes/freqtrade_gluetun_data/_data/servers.json'
|
|
||||||
try:
|
try:
|
||||||
with open(path) as f:
|
with open(path) as f:
|
||||||
db = json.load(f)
|
db = json.load(f)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f'Fehler beim Lesen: {e}', file=sys.stderr)
|
print(f'Lesefehler: {e}'); sys.exit(1)
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
new_entry = {
|
|
||||||
'vpn_sp': 'nordvpn',
|
|
||||||
'country': 'Germany',
|
|
||||||
'region': '',
|
|
||||||
'city': '',
|
|
||||||
'hostname': '${VPN_HOSTNAME}',
|
|
||||||
'ip': '${server_ip}',
|
|
||||||
'tcp': True,
|
|
||||||
'udp': True
|
|
||||||
}
|
|
||||||
|
|
||||||
# Doppelten Eintrag vermeiden
|
|
||||||
servers = db.get('nordvpn', {}).get('servers', [])
|
servers = db.get('nordvpn', {}).get('servers', [])
|
||||||
if not any(s.get('hostname') == '${VPN_HOSTNAME}' for s in servers):
|
|
||||||
servers.append(new_entry)
|
# Bereits vorhanden?
|
||||||
db.setdefault('nordvpn', {})['servers'] = servers
|
if any(s.get('hostname') == hostname for s in servers):
|
||||||
|
print(f'Bereits vorhanden: {hostname}')
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
# Vorhandenen deutschen OpenVPN-Eintrag als Template klonen (garantiert richtiges Format)
|
||||||
|
template = next(
|
||||||
|
(s for s in servers if s.get('country','').lower() == 'germany'
|
||||||
|
and s.get('vpn') == 'openvpn'),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
if template is None:
|
||||||
|
template = next((s for s in servers if s.get('vpn') == 'openvpn'), None)
|
||||||
|
if template is None:
|
||||||
|
print('Kein Template gefunden'); sys.exit(1)
|
||||||
|
|
||||||
|
entry = copy.deepcopy(template)
|
||||||
|
entry['hostname'] = hostname
|
||||||
|
entry['ips'] = [ip] # Format ist immer ips:[] laut GitHub-Quelle
|
||||||
|
|
||||||
|
servers.append(entry)
|
||||||
|
db['nordvpn']['servers'] = servers
|
||||||
with open(path, 'w') as f:
|
with open(path, 'w') as f:
|
||||||
json.dump(db, f)
|
json.dump(db, f, indent=2)
|
||||||
print('Eintrag hinzugefügt: ${VPN_HOSTNAME} (${server_ip})')
|
print(f'Eingetragen: {hostname} ({ip})')
|
||||||
else:
|
PYEOF" 2>&1 && success "${VPN_HOSTNAME} (${server_ip}) in Gluetun-DB eingetragen" || { warn "DB-Eintrag fehlgeschlagen"; }
|
||||||
print('Eintrag bereits vorhanden: ${VPN_HOSTNAME}')
|
|
||||||
PYEOF" 2>&1 && success "Server ${VPN_HOSTNAME} (${server_ip}) in DB eingetragen" || warn "DB-Eintrag fehlgeschlagen – versuche trotzdem"
|
|
||||||
else
|
|
||||||
warn "IP für ${VPN_HOSTNAME} konnte nicht aufgelöst werden"
|
|
||||||
warn "Stelle sicher dass der Hostname korrekt ist"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
success "${VPN_HOSTNAME} bereits in Gluetun-DB vorhanden"
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user