noproxy: sofort wirksam machen, und Ziele fuer Dienste

Zwei Luecken im vorherigen Stand.

Erstens war der Eintrag erst in einer neuen Sitzung wirksam. Ein
Programm kann die Umgebung seiner Elternshell nicht aendern - dafuer
gibt es jetzt "noproxy --export", das nur die beiden Zeilen ausgibt:

  eval "$(cmk-manage.sh noproxy --export)"

Danach gilt es sofort; nachgemessen mit curl -v (vorher "Uses proxy env
variable http_proxy", danach "Trying 127.0.0.1"). Der Wert wird dabei
aus denselben Regeln gebildet wie beim Schreiben in eine Datei -
Vorhandenes zuerst, unsere Adressen dahinter, ohne Doppelte.

Zweitens lesen Systemdienste weder profile.d noch .bashrc noch
/etc/environment. Dafuer gibt es zwei weitere Ziele:

  noproxy --fix --environment   ergaenzt /etc/environment, ohne die
                                uebrigen Zeilen anzuruehren
  noproxy --fix --service       schreibt eine Ergaenzung der systemd-Unit
                                des Stacks; der Proxy selbst kommt mit
                                hinein, sonst kaeme der Dienst beim Holen
                                von Images nicht mehr ins Internet

Findet sich keine passende Unit, zeigt der Befehl den Abschnitt zum
Einfuegen von Hand. Die Schreibpfade sind ueber NOPROXY_ENV_FILE und
NOPROXY_UNIT_DIR ueberschreibbar - damit liessen sie sich pruefen, ohne
/etc dieses Rechners anzufassen.

In der Oberflaeche stehen alle vier Ziele zur Auswahl, dazu der
Menuepunkt fuer die laufende Sitzung, der den eval-Befehl zum Kopieren
zeigt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-20 23:20:56 +02:00
co-authored by Claude Opus 5
parent 467796e23a
commit 20eceda183
3 changed files with 223 additions and 32 deletions
+34 -6
View File
@@ -2569,6 +2569,7 @@ Eine Dateiauswahl mit Verzeichnisnavigation ist eingebaut.
| `firewall [check\|open\|close]` | prüfen, öffnen und nicht mehr Benötigtes wieder schließen (firewalld, ufw, nftables, iptables); `close --keep-admin` lässt den Adminport offen |
| `shell` | Root-Shell im Checkmk-Container |
| `omd …` | beliebiges `omd`-Kommando im Container |
| `noproxy [--export\|--fix]` | prüfen, ob lokale Adressen am HTTP-Proxy vorbeigehen; eintragen in profile.d, `.bashrc`, `/etc/environment` oder die systemd-Unit |
Globale Optionen: `--env-file DATEI`, `-y/--yes` (keine Rückfragen, z. B. für
Cronjobs), `-v/--verbose`.
@@ -2664,13 +2665,40 @@ Erkannt wird das nicht geraten, sondern an dem, was `curl -v` selbst sagt
(`Uses proxy env variable http_proxy == …`) – dafür muss auf der Zieladresse
nichts laufen.
Dauerhaft eintragen:
**In der laufenden Sitzung** – ein Programm kann die Umgebung seiner Elternshell
nicht ändern, deshalb der Umweg über `eval`:
```bash
sudo ./scripts/cmk-manage.sh noproxy --fix # /etc/profile.d/cmk-noproxy.sh
./scripts/cmk-manage.sh noproxy --fix --user # ~/.bashrc
eval "$(./scripts/cmk-manage.sh noproxy --export)"
```
**Dauerhaft** – die Ziele schließen einander nicht aus, je nach Rechner braucht
es mehrere:
| Befehl | wirkt für |
|---|---|
| `sudo … noproxy --fix` | Anmeldeshells (`/etc/profile.d/cmk-noproxy.sh`) |
| `… noproxy --fix --user` | nur diesen Benutzer (`~/.bashrc`) |
| `sudo … noproxy --fix --environment` | Anmeldungen ohne Shell (`/etc/environment`) |
| `sudo … noproxy --fix --service` | **Systemdienste** – Ergänzung der systemd-Unit |
Der letzte Punkt ist der, den man leicht übersieht: **Systemdienste lesen weder
`profile.d` noch `.bashrc` noch `/etc/environment`.** Läuft der Stack über
systemd, schreibt `--service` eine Ergänzung nach
`/etc/systemd/system/checkmk-stack.service.d/cmk-noproxy.conf`:
```ini
[Service]
Environment=no_proxy=localhost,127.0.0.1,::1,checkmk-host,172.0.250.82
Environment=NO_PROXY=localhost,127.0.0.1,::1,checkmk-host,172.0.250.82
Environment=http_proxy=http://proxy.kunde.local:3128
Environment=https_proxy=http://proxy.kunde.local:3128
```
Der Proxy selbst kommt dabei mit hinein – ohne ihn käme der Dienst beim Holen
von Images nicht ins Internet. Gibt es keine passende Unit, zeigt der Befehl
den Abschnitt zum Einfügen von Hand.
**Was schon dasteht, bleibt – und zwar vorn.** Der Eintrag sammelt beide
Schreibweisen ein (`no_proxy` *und* `NO_PROXY`; manche Systeme setzen nur die
große), hängt die lokalen Adressen hinten an und wirft Doppelte heraus:
@@ -2698,9 +2726,9 @@ Ein zweiter Aufruf schreibt nichts doppelt. In der Oberfläche liegt das unter
> CGI-Umgebungen eine eingehende Kopfzeile `Proxy:` sie setzen könnte. Der
> Bericht weist darauf hin, wenn nur diese gesetzt ist.
> **Dienste lesen keine Profildateien.** Läuft der Stack über systemd und steht
> dort ein Proxy, gehört die Ausnahme zusätzlich nach `/etc/environment` oder
> in die Unit: `Environment=no_proxy=localhost,127.0.0.1,…`
> **Reihenfolge:** Erst `noproxy` zum Nachsehen, dann eintragen, dann mit
> `eval "$(… noproxy --export)"` in der laufenden Sitzung wirksam machen –
> sonst wundert man sich, warum sich nichts ändert.
---