From 0618e21cb0769be247e9a72c99f400a281b863b9 Mon Sep 17 00:00:00 2001 From: Wolfgang Date: Sun, 18 Jan 2026 17:03:16 +0100 Subject: [PATCH] Proxy Setup Init --- install.sh | 77 +++++++++++++++++++++++++++++++++----------------- libsupabase.sh | 43 +++++++++++++++++++++++++--- 2 files changed, 90 insertions(+), 30 deletions(-) diff --git a/install.sh b/install.sh index 7254957..f14afff 100755 --- a/install.sh +++ b/install.sh @@ -1,7 +1,41 @@ #!/usr/bin/env bash set -Eeuo pipefail +# Debug mode: 0 = nur JSON, 1 = Logs auf stderr +DEBUG="${DEBUG:-0}" +export DEBUG + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Log-Verzeichnis +LOG_DIR="${SCRIPT_DIR}/logs" +mkdir -p "${LOG_DIR}" + +# Temporäre Log-Datei (wird später umbenannt nach Container-Hostname) +TEMP_LOG="${LOG_DIR}/install_$$.log" +FINAL_LOG="" + +# Funktion zum Aufräumen bei Exit +cleanup_log() { + # Wenn FINAL_LOG gesetzt ist, umbenennen + if [[ -n "${FINAL_LOG}" && -f "${TEMP_LOG}" ]]; then + mv "${TEMP_LOG}" "${FINAL_LOG}" + fi +} +trap cleanup_log EXIT + +# Alle Ausgaben in Log-Datei umleiten +# Bei DEBUG=1: auch auf stderr ausgeben (tee) +# Bei DEBUG=0: nur in Datei +if [[ "$DEBUG" == "1" ]]; then + # Debug-Modus: Ausgabe auf stderr UND in Datei + exec > >(tee -a "${TEMP_LOG}") 2>&1 +else + # Normal-Modus: Nur in Datei, stdout bleibt für JSON frei + exec 3>&1 # stdout (fd 3) für JSON reservieren + exec > "${TEMP_LOG}" 2>&1 +fi + source "${SCRIPT_DIR}/libsupabase.sh" setup_traps @@ -27,6 +61,7 @@ Domain / n8n options: --base-domain (default: userman.de) -> FQDN becomes sb-.domain --n8n-owner-email (default: admin@) --n8n-owner-pass Optional. If omitted, generated (policy compliant). + --debug Enable debug mode (show logs on stderr) --help Show help Notes: @@ -74,6 +109,7 @@ while [[ $# -gt 0 ]]; do --base-domain) BASE_DOMAIN="${2:-}"; shift 2 ;; --n8n-owner-email) N8N_OWNER_EMAIL="${2:-}"; shift 2 ;; --n8n-owner-pass) N8N_OWNER_PASS="${2:-}"; shift 2 ;; + --debug) DEBUG="1"; export DEBUG; shift 1 ;; --help|-h) usage; exit 0 ;; *) die "Unknown option: $1 (use --help)" ;; esac @@ -124,6 +160,9 @@ UNIXTS="$(date +%s)" CT_HOSTNAME="sb-${UNIXTS}" FQDN="${CT_HOSTNAME}.${BASE_DOMAIN}" +# Log-Datei nach Container-Hostname benennen +FINAL_LOG="${LOG_DIR}/${CT_HOSTNAME}.log" + # CTID selection if [[ -n "$CTID" ]]; then [[ "$CTID" =~ ^[0-9]+$ ]] || die "--ctid must be integer" @@ -393,29 +432,15 @@ info "n8n intern: ${N8N_INTERNAL_URL}" info "n8n extern (geplant via OPNsense): ${N8N_EXTERNAL_URL}" # Machine-readable JSON output (for your downstream automation) -emit_json </dev/null || echo "$JSON_OUTPUT" +else + # Normal-Modus: JSON auf ursprüngliches stdout (fd 3) - kompakt + echo "$JSON_OUTPUT" >&3 +fi diff --git a/libsupabase.sh b/libsupabase.sh index 88c22be..0bb8c98 100755 --- a/libsupabase.sh +++ b/libsupabase.sh @@ -1,13 +1,48 @@ #!/usr/bin/env bash set -Eeuo pipefail +# Debug mode: 0 = nur JSON ausgeben, 1 = Logs auf stderr +DEBUG="${DEBUG:-0}" + log_ts() { date "+[%F %T]"; } -info() { echo "$(log_ts) INFO: $*" >&2; } -warn() { echo "$(log_ts) WARN: $*" >&2; } -die() { echo "$(log_ts) ERROR: $*" >&2; exit 1; } + +info() { + [[ "$DEBUG" == "1" ]] && echo "$(log_ts) INFO: $*" >&2 + return 0 +} + +warn() { + [[ "$DEBUG" == "1" ]] && echo "$(log_ts) WARN: $*" >&2 + return 0 +} + +die() { + if [[ "$DEBUG" == "1" ]]; then + echo "$(log_ts) ERROR: $*" >&2 + else + # JSON-Fehler auf fd 3 ausgeben (falls verfügbar), sonst stdout + if { true >&3; } 2>/dev/null; then + echo "{\"error\": \"$*\"}" >&3 + else + echo "{\"error\": \"$*\"}" + fi + fi + exit 1 +} setup_traps() { - trap 'rc=$?; [[ $rc -ne 0 ]] && echo "$(log_ts) ERROR: Failed at line ${BASH_LINENO[0]}: ${BASH_COMMAND} (exit=$rc)" >&2; exit $rc' ERR + trap 'rc=$?; if [[ $rc -ne 0 ]]; then + if [[ "$DEBUG" == "1" ]]; then + echo "$(log_ts) ERROR: Failed at line ${BASH_LINENO[0]}: ${BASH_COMMAND} (exit=$rc)" >&2 + else + # JSON-Fehler auf fd 3 ausgeben (falls verfügbar), sonst stdout + if { true >&3; } 2>/dev/null; then + echo "{\"error\": \"Failed at line ${BASH_LINENO[0]}: ${BASH_COMMAND} (exit=$rc)\"}" >&3 + else + echo "{\"error\": \"Failed at line ${BASH_LINENO[0]}: ${BASH_COMMAND} (exit=$rc)\"}" + fi + fi + fi; exit $rc' ERR } need_cmd() {