Terminal-Browser: nicht erreichbare Startseite wird vorab gemeldet
Symptom war ein scheinbar haengender Browsh: Logo, "Waiting for Firefox to connect...", danach schwarz. Ursache ist nicht der Browser - Browsh laeuft (Strg+Q kehrt ins Menue zurueck) - sondern die Startseite. Auf http://127.0.0.1:81 antwortet nichts, solange der Proxy-Manager-Container nicht laeuft, und ein Terminal-Browser zeigt dann keine Fehlerseite, sondern gar nichts. cmd_browser prueft die Startseite deshalb vorher und nennt die Ursache statt stumm zu starten. Unterschieden werden: Proxy Manager abgeschaltet (NPM_ENABLED=off), Container fehlt, Container gestoppt, Container laeuft aber antwortet nicht, tote Checkmk-Oberflaeche auf Port 5000 und externe Adressen. Jeweils mit dem passenden naechsten Kommando. Ueberspringen mit --no-check; in der Oberflaeche erscheint dieselbe Diagnose als Dialog mit der Wahl, trotzdem zu starten. Dabei gefunden und behoben - an drei Stellen dieselbe Falle: curl gibt mit -w '%{http_code}' im Fehlerfall selbst schon "000" aus. Das zusaetzliche "|| echo 000" haengte einen zweiten Wert an, sodass der Vergleich nie zutraf. Betroffen waren die neue Erreichbarkeits- pruefung sowie http_code() und die Registry-Erreichbarkeit im Zugangsdaten-Test ("image test") - dort waere ein nicht erreichbarer Endpunkt als "unerwartete Antwort" statt als "nicht erreichbar" gemeldet worden. Jetzt wird der Fehler der Zuweisung abgefangen. Alle vier Diagnosezweige im Terminal durchgespielt, der Zugangsdaten-Test zur Gegenprobe erneut gegen Docker Hub gelaufen. Dokumentiert als Abschnitt 11.3 in beiden Sprachfassungen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+88
-5
@@ -702,7 +702,9 @@ http_code() { # url [netrc] [extra-header]
|
||||
local -a a=(-sS -o /dev/null -w '%{http_code}' --max-time 30)
|
||||
[ -n "$netrc" ] && a+=(--netrc-file "$netrc")
|
||||
[ -n "$hdr" ] && a+=(-H "$hdr")
|
||||
curl "${a[@]}" "$url" 2>/dev/null || echo "000"
|
||||
local code
|
||||
code="$(curl "${a[@]}" "$url" 2>/dev/null)" || code=000
|
||||
printf '%s\n' "${code:-000}"
|
||||
}
|
||||
|
||||
test_result() { # status text [detail]
|
||||
@@ -744,7 +746,8 @@ test_registry_login() { # reg repo user pass needs_login -> 0 = alles gut
|
||||
# 1) Erreichbarkeit
|
||||
local hdrf; hdrf="$(mktemp)"
|
||||
local code
|
||||
code="$(curl -sS -o /dev/null -D "$hdrf" -w '%{http_code}' --max-time 30 "https://$api/v2/" 2>/dev/null || echo 000)"
|
||||
code="$(curl -sS -o /dev/null -D "$hdrf" -w '%{http_code}' --max-time 30 "https://$api/v2/" 2>/dev/null)" || code=000
|
||||
code="${code:-000}"
|
||||
if [ "$code" = "000" ]; then
|
||||
test_result fail "nicht erreichbar" "Netzwerk/Proxy/DNS pruefen: https://$api/v2/"
|
||||
rm -f "$hdrf"; return 1
|
||||
@@ -2343,9 +2346,66 @@ browser_ensure_tools() {
|
||||
image_exists_local "$img" || browser_build_tools
|
||||
}
|
||||
|
||||
# Antwortet die Startseite ueberhaupt? Ein Terminal-Browser zeigt sonst
|
||||
# nur eine schwarze Seite - ohne jede Fehlermeldung.
|
||||
browser_url_reachable() {
|
||||
command -v curl >/dev/null 2>&1 || return 0 # ohne curl nicht pruefbar
|
||||
local code
|
||||
# ACHTUNG: curl gibt bei einem Fehler selbst schon "000" aus. Ein
|
||||
# zusaetzliches "|| echo 000" wuerde einen zweiten Wert anhaengen und
|
||||
# jeden Vergleich verfaelschen - deshalb den Zuweisungsfehler abfangen.
|
||||
code="$(curl -sS -o /dev/null -w '%{http_code}' --max-time 6 -L "$1" 2>/dev/null)" || code=000
|
||||
[ -n "$code" ] && [ "$code" != "000" ]
|
||||
}
|
||||
|
||||
# Erklaert, warum nichts antwortet, und nennt den passenden naechsten Schritt
|
||||
browser_diagnose_url() { # url -> mehrzeiliger Text auf stdout
|
||||
local url="$1" host port
|
||||
host="$(printf '%s' "$url" | sed -E 's|^[a-z]+://([^/:]+).*|\1|')"
|
||||
port="$(printf '%s' "$url" | sed -nE 's|^[a-z]+://[^/:]+:([0-9]+).*|\1|p')"
|
||||
|
||||
printf 'Auf %s antwortet nichts.\n' "$url"
|
||||
printf 'Ein Terminal-Browser zeigt dann nur eine schwarze Seite.\n\n'
|
||||
|
||||
case "$host" in
|
||||
127.0.0.1|localhost|::1)
|
||||
if [ "${port:-81}" = "${NPM_ADMIN_PORT:-81}" ]; then
|
||||
printf 'Das ist die Oberflaeche des NGINX Proxy Managers.\n'
|
||||
if ! npm_enabled; then
|
||||
printf 'Er ist abgeschaltet (NPM_ENABLED=off):\n'
|
||||
printf ' %s npm-enable on\n' "$SELF"
|
||||
elif ! container_exists "$NPM_CONTAINER_NAME"; then
|
||||
printf 'Sein Container existiert nicht:\n'
|
||||
printf ' %s up\n' "$SELF"
|
||||
elif ! container_running "$NPM_CONTAINER_NAME"; then
|
||||
printf 'Sein Container ist gestoppt:\n'
|
||||
printf ' %s up\n' "$SELF"
|
||||
else
|
||||
printf 'Der Container laeuft, antwortet aber nicht auf Port %s.\n' "${port:-81}"
|
||||
printf ' %s logs %s\n' "$SELF" "$NPM_CONTAINER_NAME"
|
||||
printf ' %s npm-port (eingestellten Port pruefen)\n' "$SELF"
|
||||
fi
|
||||
elif [ "${port:-}" = 5000 ]; then
|
||||
printf 'Das ist die Checkmk-Oberflaeche.\n'
|
||||
if ! container_running "$CMK_CONTAINER_NAME"; then
|
||||
printf 'Der Checkmk-Container laeuft nicht:\n %s up\n' "$SELF"
|
||||
else
|
||||
printf 'Der Container laeuft - Site gestartet?\n %s sites\n' "$SELF"
|
||||
fi
|
||||
else
|
||||
printf 'Auf diesem Host lauscht nichts auf Port %s.\n' "${port:-80}"
|
||||
printf ' ss -tlnp | grep %s\n' "${port:-80}"
|
||||
fi ;;
|
||||
*)
|
||||
printf 'Externe Adressen brauchen Netzzugang vom Host aus\n'
|
||||
printf '(der Container nutzt dessen Netzwerk direkt).\n'
|
||||
printf ' curl -I %s\n' "$url" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
cmd_browser() {
|
||||
local engine="${BROWSER_ENGINE:-browsh}"
|
||||
local url="" build="" build_only="" pull="" mono=""
|
||||
local url="" build="" build_only="" pull="" mono="" nocheck=""
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-e|--engine) engine="$2"; shift 2 ;;
|
||||
@@ -2354,6 +2414,7 @@ cmd_browser() {
|
||||
--build-only) build=1; build_only=1; shift ;;
|
||||
--pull) pull=1; shift ;;
|
||||
--monochrome) mono=1; shift ;;
|
||||
--no-check) nocheck=1; shift ;;
|
||||
-h|--help)
|
||||
cat <<'EOF'
|
||||
cmk-manage.sh browser - Terminal-Browser im Container
|
||||
@@ -2370,6 +2431,7 @@ cmk-manage.sh browser - Terminal-Browser im Container
|
||||
--build-only Werkzeug-Image nur bauen (ohne Terminal, z.B. im Skript)
|
||||
--pull Image der gewaehlten Engine neu laden
|
||||
--monochrome nur bei browsh: einfarbige Darstellung
|
||||
--no-check Startseite nicht vorab auf Erreichbarkeit pruefen
|
||||
|
||||
Bedienung browsh: Strg+L Adresszeile, Strg+T neuer Tab,
|
||||
Strg+W Tab schliessen, Strg+Q beenden
|
||||
@@ -2437,6 +2499,15 @@ EOF
|
||||
Dafuer: $SELF browser --engine browsh" ;;
|
||||
esac
|
||||
|
||||
# Nicht erreichbare Startseite ist die haeufigste Ursache fuer eine
|
||||
# scheinbar haengende, schwarze Anzeige.
|
||||
if [ -z "$nocheck" ] && ! browser_url_reachable "$url"; then
|
||||
echo
|
||||
warn "$(browser_diagnose_url "$url")"
|
||||
echo
|
||||
confirm "Trotzdem starten?" || die "Abgebrochen."
|
||||
fi
|
||||
|
||||
log "Starte $engine im Host-Netzwerk -> $url"
|
||||
[ "$engine" = browsh ] && log "Beenden mit Strg+Q, Adresszeile mit Strg+L."
|
||||
|
||||
@@ -3201,8 +3272,20 @@ Oberflaeche des Proxy Managers darstellen." \
|
||||
[ -n "$u" ] && NPM_ADMIN_URL="$u" ;;
|
||||
build) ui_run "Werkzeug-Image bauen" bash -c "cd '$PROJECT_DIR' && '$SELF' browser --build-only" || true ;;
|
||||
back) return 0 ;;
|
||||
*) gui_run_interactive cmd_browser --engine "$sel" \
|
||||
--url "${NPM_ADMIN_URL:-http://127.0.0.1:81}" ;;
|
||||
*) local burl="${NPM_ADMIN_URL:-http://127.0.0.1:81}"
|
||||
if ! browser_url_reachable "$burl"; then
|
||||
if ui_yesno "Startseite antwortet nicht" \
|
||||
"$(browser_diagnose_url "$burl")
|
||||
|
||||
Trotzdem starten?
|
||||
|
||||
<Nein> kehrt ins Menue zurueck - dort laesst sich unter
|
||||
'Andere Startseite eingeben' auch eine andere Adresse waehlen."; then
|
||||
gui_run_interactive cmd_browser --engine "$sel" --url "$burl" --no-check
|
||||
fi
|
||||
continue
|
||||
fi
|
||||
gui_run_interactive cmd_browser --engine "$sel" --url "$burl" ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user