From 705e1a223c35e7d94dbdd3699cfad2a23ab21755 Mon Sep 17 00:00:00 2001 From: Oliver Braasch Date: Tue, 21 Apr 2026 17:54:21 +0200 Subject: [PATCH] Dateien nach "scripts" hochladen --- scripts/proxmox-vpn-install.sh | 69 +++++++++++++++------------------- 1 file changed, 31 insertions(+), 38 deletions(-) diff --git a/scripts/proxmox-vpn-install.sh b/scripts/proxmox-vpn-install.sh index 806ca8a..1ea0b7a 100644 --- a/scripts/proxmox-vpn-install.sh +++ b/scripts/proxmox-vpn-install.sh @@ -380,15 +380,19 @@ start_and_verify() { img_exists=$(pct exec "$SEL_ID" -- bash -c "docker image inspect gluetun-custom:latest 2>/dev/null | grep -c 'Id' || echo 0" 2>/dev/null | tr -d '\n\r ' || echo "0") if [[ "${img_exists:-0}" -gt 0 ]] 2>/dev/null; then - # Prüfen ob der Hostname schon drin ist - local host_in_img - host_in_img=$(pct exec "$SEL_ID" -- bash -c "docker run --rm --entrypoint sh gluetun-custom:latest -c 'cat /gluetun/servers.json 2>/dev/null | grep -c ${VPN_HOSTNAME} || echo 0'" 2>/dev/null | tr -d '\n\r ' || echo "0") - if [[ "${host_in_img:-0}" -gt 0 ]] 2>/dev/null; then - success "gluetun-custom:latest bereits vorhanden und enthält ${VPN_HOSTNAME}" + # Prüfen ob Image für diesen Hostname gebaut wurde + local built_for + built_for=$(pct exec "$SEL_ID" -- bash -c \ + "docker inspect gluetun-custom:latest --format=\"{{json .Config.Labels}}\" 2>/dev/null" \ + 2>/dev/null | grep -o '["]built_for["]:["]' | cut -d'"' -f4 2>/dev/null | tr -d '\n' || echo "") + if [[ "$built_for" == "${VPN_HOSTNAME}" ]]; then + success "gluetun-custom:latest bereits für ${VPN_HOSTNAME} gebaut" GLUETUN_IMAGE="gluetun-custom:latest" + pct exec "$SEL_ID" -- bash -c \ + "sed -i 's|image: .*gluetun.*|image: gluetun-custom:latest|' ${FT_DIR}/docker-compose.yml" return 0 2>/dev/null || true fi - info "Image vorhanden, aber ${VPN_HOSTNAME} fehlt – baue neu..." + info "Image vorhanden, aber nicht für ${VPN_HOSTNAME} – baue neu..." fi # git installieren falls nötig @@ -398,42 +402,31 @@ start_and_verify() { pct exec "$SEL_ID" -- bash -c "rm -rf /tmp/gluetun-build && git clone --depth 1 https://github.com/qdm12/gluetun.git /tmp/gluetun-build 2>&1 | tail -3" info "Füge ${VPN_HOSTNAME} (${server_ip}) in servers.json ein..." - pct exec "$SEL_ID" -- bash -c "python3 << PYEOF + # Python-Script lokal erstellen und in Container pushen + cat > /tmp/add_nordvpn_server.py << 'PYEOF' import json, copy, sys - -path = '/tmp/gluetun-build/internal/storage/servers.json' -hostname = '${VPN_HOSTNAME}' -ip = '${server_ip}' - -with open(path) as f: - db = json.load(f) - -servers = db.get('nordvpn', {}).get('servers', []) - -if any(s.get('hostname') == hostname for s in servers): - print(f'Bereits vorhanden: {hostname}') +path, hostname, ip = sys.argv[1], sys.argv[2], sys.argv[3] +db = json.load(open(path)) +servers = db.get("nordvpn", {}).get("servers", []) +if any(s.get("hostname") == hostname for s in servers): sys.exit(0) - -# Deutschen OpenVPN-Eintrag als Template klonen -template = next( - (s for s in servers if s.get('country','').lower() == 'germany' and s.get('vpn') == 'openvpn'), - servers[0] -) -entry = copy.deepcopy(template) -entry['hostname'] = hostname -entry['ips'] = [ip] - -servers.append(entry) -db['nordvpn']['servers'] = servers - -with open(path, 'w') as f: - json.dump(db, f, indent=2) -print(f'Eingetragen: {hostname} ({ip}) – Gesamt NordVPN-Server: {len(servers)}') -PYEOF" +tmpl = next((s for s in servers if s.get("country","").lower()=="germany" and s.get("vpn")=="openvpn"), servers[0]) +e = copy.deepcopy(tmpl) +e["hostname"] = hostname +e["ips"] = [ip] +servers.append(e) +db["nordvpn"]["servers"] = servers +json.dump(db, open(path,"w"), indent=2) +print("Eingetragen: " + hostname + " (" + ip + ") - Server: " + str(len(servers))) +PYEOF + pct push "$SEL_ID" /tmp/add_nordvpn_server.py /tmp/add_nordvpn_server.py + pct exec "$SEL_ID" -- python3 /tmp/add_nordvpn_server.py \ + /tmp/gluetun-build/internal/storage/servers.json \ + "${VPN_HOSTNAME}" "${server_ip}" info "Kompiliere Gluetun Docker Image (dauert ~3-5 Minuten)..." echo -e " ${YELLOW}Bitte warten – Go Multi-Stage Build...${NC}" - pct exec "$SEL_ID" -- bash -c "cd /tmp/gluetun-build && docker build -t gluetun-custom:latest . 2>&1 | grep -E '^Step|Successfully|error|Error|=>|RUN|COPY' | tail -30" && success "gluetun-custom:latest erfolgreich gebaut!" || error "Docker Build fehlgeschlagen. Prüfe: pct exec ${SEL_ID} -- docker build /tmp/gluetun-build" + pct exec "$SEL_ID" -- bash -c "cd /tmp/gluetun-build && docker build --label built_for=${VPN_HOSTNAME} -t gluetun-custom:latest . 2>&1 | grep -E '^Step|Successfully|error|Error|=>|RUN|COPY' | tail -30" && success "gluetun-custom:latest erfolgreich gebaut!" || error "Docker Build fehlgeschlagen. Prüfe: pct exec ${SEL_ID} -- docker build /tmp/gluetun-build" GLUETUN_IMAGE="gluetun-custom:latest" info "Aufräumen..." @@ -469,7 +462,7 @@ PYEOF" ${CYAN}[INFO]${NC} ${proto^^} – ${elapsed}s..." local log_snippet - log_snippet=$(pct exec "$SEL_ID" -- bash -c "docker logs gluetun 2>&1 | tail -80" 2>/dev/null || echo "") + log_snippet=$(timeout 8 pct exec "$SEL_ID" -- bash -c "docker logs gluetun 2>&1 | tail -80" 2>/dev/null || echo "") # Jeden 3. Zyklus (15s) relevante Log-Zeilen anzeigen if (( tries % 3 == 0 )); then