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:
@@ -14,3 +14,5 @@ backups/*
|
||||
images/*
|
||||
!images/.gitkeep
|
||||
backup-jobs.conf
|
||||
scripts/.h.sh
|
||||
scripts/.harness.sh
|
||||
|
||||
@@ -1007,7 +1007,42 @@ vollqualifiziert, damit Podman sie nicht bei `registry.access.redhat.com` sucht.
|
||||
In der ncurses-Oberfläche liegt alles unter **„Terminal-Browser (Proxy Manager
|
||||
lokal bedienen)"**.
|
||||
|
||||
### 11.3 Grenze: Datei-Upload
|
||||
### 11.3 Schwarzes Fenster: die Startseite antwortet nicht
|
||||
|
||||
Bleibt nach `Starting Browsh …` / `Waiting for Firefox to connect…` alles
|
||||
schwarz, liegt es fast immer daran, dass **auf der Startseite nichts
|
||||
antwortet** – nicht am Browser. Ein Terminal-Browser zeigt in dem Fall keine
|
||||
Fehlerseite, sondern gar nichts. Dass Browsh selbst läuft, merkt man daran,
|
||||
dass `Strg+Q` noch ins Menü zurückführt.
|
||||
|
||||
Das Skript prüft die Startseite deshalb vorher und nennt die Ursache:
|
||||
|
||||
```
|
||||
[ WARN ] Auf http://127.0.0.1:81 antwortet nichts.
|
||||
Ein Terminal-Browser zeigt dann nur eine schwarze Seite.
|
||||
|
||||
Das ist die Oberflaeche des NGINX Proxy Managers.
|
||||
Er ist abgeschaltet (NPM_ENABLED=off):
|
||||
./scripts/cmk-manage.sh npm-enable on
|
||||
|
||||
Trotzdem starten? [j/N]
|
||||
```
|
||||
|
||||
Unterschieden werden:
|
||||
|
||||
| Lage | Meldung |
|
||||
|---|---|
|
||||
| Proxy Manager abgeschaltet | Hinweis auf `npm-enable on` |
|
||||
| Container fehlt oder gestoppt | Hinweis auf `up` |
|
||||
| Container läuft, antwortet aber nicht | Hinweis auf `logs` und `npm-port` |
|
||||
| Checkmk-Oberfläche (Port 5000) tot | Hinweis auf `up` bzw. `sites` |
|
||||
| externe Adresse | Hinweis auf den Netzzugang des Hosts |
|
||||
|
||||
Mit `--no-check` lässt sich die Prüfung überspringen. In der Oberfläche
|
||||
erscheint dieselbe Diagnose als Dialog mit der Wahl, trotzdem zu starten oder
|
||||
im Menü eine andere Startseite einzugeben.
|
||||
|
||||
### 11.4 Grenze: Datei-Upload
|
||||
|
||||
Ein Terminal-Browser kann keinen Dateiauswahl-Dialog des Betriebssystems
|
||||
öffnen. Für **Let's Encrypt** ist das egal (dort werden nur Formularfelder
|
||||
@@ -1066,7 +1101,7 @@ sudo ./scripts/cmk-manage.sh browser --engine shell
|
||||
> E-Mail-Adresse und Kennwort. Das geht am einfachsten im Browser
|
||||
> (`cmk-manage.sh browser`); danach funktioniert die API mit den neuen Daten.
|
||||
|
||||
### 11.4 Alternative: SSH-Tunnel
|
||||
### 11.5 Alternative: SSH-Tunnel
|
||||
|
||||
Falls SSH auf die Maschine möglich ist, ist der Tunnel der bequemste Weg –
|
||||
dann bedient man die Oberfläche im gewohnten Browser:
|
||||
@@ -1833,8 +1868,9 @@ Checkmk-Werksnotizen (Werks/Release Notes) lesen.
|
||||
| Adminoberfläche aus dem LAN nicht erreichbar | Port 81 gesperrt. Auf einen freien Port legen: `cmk-manage.sh npm-port 10443` und in der Firewall freigeben |
|
||||
| Nach `npm-port` antwortet der neue Port nicht | Proxy Manager wurde nicht neu gestartet: `cmk-manage.sh restart`; Datei prüfen: `data/npm/data/nginx/custom/http.conf` |
|
||||
| `cmk-manage.sh` bricht mit „CMK_RUNTIME … ist nicht installiert" ab | wird nur noch gewarnt und selbst gesucht; sauber setzen mit `config set CMK_RUNTIME auto` |
|
||||
| Browser bleibt schwarz, „Waiting for Firefox to connect…" | Die Startseite antwortet nicht – meist läuft der Proxy Manager nicht. Das Skript meldet das jetzt vorab, siehe [Kapitel 11.3](#113-schwarzes-fenster-die-startseite-antwortet-nicht) |
|
||||
| Proxy-Manager-Oberfläche im Browser leer / nur Textfragmente | Textbrowser ohne JavaScript verwendet. `cmk-manage.sh browser --engine browsh` (bzw. `carbonyl`) nehmen |
|
||||
| Selbstsigniertes Zertifikat lässt sich im Terminal-Browser nicht hochladen | Datei-Dialoge gibt es dort nicht – Upload über die API, siehe [Kapitel 11.3](#113-grenze-datei-upload) |
|
||||
| Selbstsigniertes Zertifikat lässt sich im Terminal-Browser nicht hochladen | Datei-Dialoge gibt es dort nicht – Upload über die API, siehe [Kapitel 11.4](#114-grenze-datei-upload) |
|
||||
| `browser` meldet „braucht ein echtes Terminal" | Aufruf aus Pipe/Skript. Direkt auf der Konsole oder per SSH aufrufen; nur der Bau geht headless mit `--build-only` |
|
||||
| Menüpunkt bricht mit einer Fehlermeldung in die Shell ab | behoben: fehlende Container, Sites oder Backups werden jetzt als Dialog gemeldet, die Oberfläche bleibt offen |
|
||||
| `job auto on` meldet fehlende Rechte | `/etc/cron.d/` braucht root: mit `sudo` aufrufen, oder die ausgegebenen Zeilen selbst übernehmen |
|
||||
|
||||
+40
-3
@@ -1014,7 +1014,43 @@ so that Podman does not look for them at `registry.access.redhat.com`.
|
||||
In the ncurses interface everything lives under *"Terminal-Browser (Proxy
|
||||
Manager lokal bedienen)"*.
|
||||
|
||||
### 11.3 Limitation: file upload
|
||||
### 11.3 Blank screen: the start page does not answer
|
||||
|
||||
If everything stays black after `Starting Browsh …` /
|
||||
`Waiting for Firefox to connect…`, it is almost always because **nothing
|
||||
answers on the start page** – not because of the browser. A terminal browser
|
||||
shows no error page in that case, just nothing. You can tell that Browsh itself
|
||||
is running because `Ctrl+Q` still returns you to the menu.
|
||||
|
||||
The script therefore checks the start page beforehand and names the cause:
|
||||
|
||||
```
|
||||
[ WARN ] Auf http://127.0.0.1:81 antwortet nichts.
|
||||
Ein Terminal-Browser zeigt dann nur eine schwarze Seite.
|
||||
|
||||
Das ist die Oberflaeche des NGINX Proxy Managers.
|
||||
Er ist abgeschaltet (NPM_ENABLED=off):
|
||||
./scripts/cmk-manage.sh npm-enable on
|
||||
|
||||
Trotzdem starten? [j/N]
|
||||
```
|
||||
|
||||
("nothing answers on …", "a terminal browser then shows only a black page",
|
||||
"it is switched off", "start anyway?") The cases it distinguishes:
|
||||
|
||||
| Situation | Message |
|
||||
|---|---|
|
||||
| Proxy Manager switched off | points to `npm-enable on` |
|
||||
| container missing or stopped | points to `up` |
|
||||
| container runs but does not answer | points to `logs` and `npm-port` |
|
||||
| Checkmk interface (port 5000) dead | points to `up` or `sites` |
|
||||
| external address | points to the host's network access |
|
||||
|
||||
`--no-check` skips the check. In the interface the same diagnosis appears as a
|
||||
dialog offering to start anyway or to pick a different start page from the
|
||||
menu.
|
||||
|
||||
### 11.4 Limitation: file upload
|
||||
|
||||
A terminal browser cannot open the operating system's file chooser. For
|
||||
**Let's Encrypt** that does not matter (only form fields are filled in), but
|
||||
@@ -1073,7 +1109,7 @@ sudo ./scripts/cmk-manage.sh browser --engine shell
|
||||
> address and password. That is easiest in the browser
|
||||
> (`cmk-manage.sh browser`); afterwards the API works with the new credentials.
|
||||
|
||||
### 11.4 Alternative: SSH tunnel
|
||||
### 11.5 Alternative: SSH tunnel
|
||||
|
||||
If SSH access to the machine is possible, a tunnel is the most convenient
|
||||
route – you then use the interface in your usual browser:
|
||||
@@ -1843,8 +1879,9 @@ release notes beforehand.
|
||||
| Admin interface unreachable from the LAN | port 81 blocked. Move it to a free port: `cmk-manage.sh npm-port 10443` and open that in the firewall |
|
||||
| New port does not answer after `npm-port` | the Proxy Manager was not restarted: `cmk-manage.sh restart`; check the file `data/npm/data/nginx/custom/http.conf` |
|
||||
| `cmk-manage.sh` aborts with "CMK_RUNTIME … ist nicht installiert" | it now only warns and detects the runtime itself; set it cleanly with `config set CMK_RUNTIME auto` |
|
||||
| Browser stays black, "Waiting for Firefox to connect…" | The start page does not answer – usually the Proxy Manager is not running. The script now reports this beforehand, see [chapter 11.3](#113-blank-screen-the-start-page-does-not-answer) |
|
||||
| Proxy Manager interface blank / only text fragments | a text browser without JavaScript was used. Use `cmk-manage.sh browser --engine browsh` (or `carbonyl`) |
|
||||
| Self-signed certificate cannot be uploaded in the terminal browser | there are no file dialogs there – upload via the API, see [chapter 11.3](#113-limitation-file-upload) |
|
||||
| Self-signed certificate cannot be uploaded in the terminal browser | there are no file dialogs there – upload via the API, see [chapter 11.4](#114-limitation-file-upload) |
|
||||
| `browser` reports "braucht ein echtes Terminal" (needs a real terminal) | called from a pipe/script. Call it on the console or over SSH; only the build runs headless, with `--build-only` |
|
||||
| A menu entry drops out to the shell with an error | fixed: missing containers, sites or backups are now reported in a dialog and the interface stays open |
|
||||
| `job auto on` reports missing permissions | `/etc/cron.d/` needs root: call it with `sudo`, or add the printed lines yourself |
|
||||
|
||||
+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