diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index acd46a6..7120645 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -48,4 +48,5 @@ validate: - python3 scripts/validate.py - python3 scripts/gen_status.py --check - python3 scripts/pruefe_upstream_drift.py + - python3 scripts/pruefe_prosa.py allow_failure: false diff --git a/STATUS.md b/STATUS.md index af5743c..5e6ac0d 100644 --- a/STATUS.md +++ b/STATUS.md @@ -2,9 +2,40 @@ -## Issues (0 open, 0 closed) +## Issues (28 open, 0 closed) -_none open_ +Verteilung: M1 9 · M2 17 · M4 2 + +| Issue | Status | Meilenstein | Priorität | Title | +|---|---|---|---|---| +| [0001](docs/issues/0001-matrix-03-www-matrix-axion1337-de-ist.md) | open | M2 | low | MATRIX-03: www.matrix.axion1337.de ist überflüssig | +| [0002](docs/issues/0002-game-01-host-von-cfgmon-aus-nicht-erreichbar-2.md) | waiting | M1 | medium | GAME-01: Host von CFGMON aus nicht erreichbar, 2 Prometheus-Targets down | +| [0003](docs/issues/0003-game-02-www-game-axion1337-de-ist-ueberfluessig.md) | open | M2 | low | GAME-02: www.game.axion1337.de ist überflüssig | +| [0004](docs/issues/0004-overmind-02-e1000e-nic-hang-beobachtung-nach.md) | waiting | M1 | low | OVERMIND-02: e1000e-NIC-Hang — Beobachtung nach EEE-Fix + Firmware-Update | +| [0005](docs/issues/0005-zone-01-ionos-default-records-bereinigen-www.md) | open | M2 | low | ZONE-01: IONOS-Default-Records bereinigen (www-Paare, tote Mail-Sätze) | +| [0006](docs/issues/0006-zone-02-apex-dmarc-ist-p-none-und-schuetzt.md) | open | M1 | low | ZONE-02: Apex-DMARC ist p=none und schützt nichts | +| [0007](docs/issues/0007-cfgmon-01-zertifikatserneuerung-braucht-offene.md) | next | M1 | high | CFGMON-01: Zertifikatserneuerung braucht offene Ports — zeitkritisch ab 2026-09-28 | +| [0008](docs/issues/0008-cfgmon-03-prometheus-remote-write-und-loki.md) | waiting | M1 | medium | CFGMON-03: Prometheus-Remote-Write und Loki öffentlich ohne Auth — Weg A, nachgelagerte Prüfung | +| [0009](docs/issues/0009-cfgmon-04-grafana-admin-credentials-aus-env.md) | open | M2 | low | CFGMON-04: Grafana-Admin-Credentials aus .env gelten nicht für die HTTP-API | +| [0010](docs/issues/0010-cfgmon-09-gitea-backups-off-host-borg-storage.md) | open | M1 | medium | CFGMON-09: Gitea-Backups off-host (Borg/Storage Box) — Backup-Cron ist DEAKTIVIERT | +| [0014](docs/issues/0014-cfgmon-14-root-zugang-ueber-die-docker-gruppe.md) | waiting | M2 | low | CFGMON-14: Root-Zugang über die docker-Gruppe umgeht sudo und hinterlässt keine Spur | +| [0015](docs/issues/0015-cfgmon-15-token-hygiene-einmal-tokens-der.md) | next | M2 | medium | CFGMON-15: Token-Hygiene — Einmal-Tokens der LABNET-02-Nacht widerrufen | +| [0018](docs/issues/0018-doc-01-wiki-rollout-abschliessen-ci-freigaben.md) | open | M2 | low | DOC-01: Wiki-Rollout abschließen — CI-Freigaben, Zeitplan, Dokploy-Stack, wiki.lab | +| [0019](docs/issues/0019-doc-02-veralteten-wiki-branch-im-gitops-repo.md) | open | M2 | low | DOC-02: Veralteten `wiki`-Branch im gitops-Repo entfernen? | +| [0020](docs/issues/0020-doc-03-wiki-oberflaeche-entscheiden-docusaurus.md) | next | M2 | medium | DOC-03: Wiki-Oberfläche entscheiden — Docusaurus oder BookStack | +| [0021](docs/issues/0021-overmind-03-windows-build-vm-verschwindet-ci.md) | waiting | M2 | medium | OVERMIND-03: Windows-Build-VM verschwindet — CI kann sie nur starten, nicht anlegen | +| [0022](docs/issues/0022-build-01-macos-client-reproduzierbar-bauen.md) | open | M4 | low | BUILD-01: macOS-Client reproduzierbar bauen — aktuell nur manuell auf sorbs Mac | +| [0023](docs/issues/0023-doc-04-navbar-logo-im-docusaurus-wiki-wird.md) | open | M2 | low | DOC-04: Navbar-Logo im Docusaurus-Wiki wird ausgeliefert, ist aber nicht sichtbar | +| [0024](docs/issues/0024-wiki-hostname-klaeren-wiki-lab-oder-axionwiki.md) | open | M2 | low | Wiki-Hostname klären: wiki.lab oder axionwiki.lab? | +| [0025](docs/issues/0025-deploy-uebergabe-cve-alarme-aggregiert-receiver.md) | waiting | M1 | medium | Deploy-Übergabe: CVE-Alarme aggregiert + Receiver-Robustheit (gitops#51, ff87cb2) | +| [0027](docs/issues/0027-audit-01-acht-widersprueche-aus-dem-labnet-02.md) | waiting | M2 | medium | AUDIT-01: Acht Widersprüche aus dem LABNET-02-Nachlauf (Selbst-Audit CFGMON-Session) | +| [0028](docs/issues/0028-mirror-01-ein-ausfall-der-push-mirrors-bleibt.md) | open | M2 | low | MIRROR-01: Ein Ausfall der Push-Mirrors bleibt unbemerkt — Produktion friert still ein | +| [0029](docs/issues/0029-ui-harmonisieren-gleiche-farben-und-formen.md) | open | M4 | medium | UI harmonisieren: gleiche Farben und Formen über alle Oberflächen | +| [0030](docs/issues/0030-der-restore-ist-nie-geprobt-sicherungen-sind.md) | open | M1 | medium | Der Restore ist nie geprobt — Sicherungen sind bisher eine Vermutung | +| [0031](docs/issues/0031-stillstandspruefung-gitea-token-und-authentik.md) | open | M1 | low | Stillstandsprüfung: GITEA_TOKEN und Authentik-Teil nachziehen | +| [0032](docs/issues/0032-gameserver-hat-keinen-push-mirror-und-auf-gitea.md) | open | M2 | medium | gameserver hat keinen Push-Mirror — und auf Gitea liegt ein anderer Stand | +| [0033](docs/issues/0033-overmind-01-element-desktop-build-lab-registry.md) | open | M2 | low | OVERMIND-01 — element-desktop-build von rohana in die Lab-Registry umziehen | +| [0034](docs/issues/0034-cfgmon-11-gitea-ci-rueckbau-abschliessen.md) | open | M2 | medium | CFGMON-11 — Gitea-CI-Rückbau abschließen (sicher rückbaubare Schritte) | ## Active design docs (1) diff --git a/docs/issues/0001-matrix-03-www-matrix-axion1337-de-ist.md b/docs/issues/0001-matrix-03-www-matrix-axion1337-de-ist.md new file mode 100644 index 0000000..e1524d2 --- /dev/null +++ b/docs/issues/0001-matrix-03-www-matrix-axion1337-de-ist.md @@ -0,0 +1,24 @@ +--- +type: issue +id: "0001" +status: open +created: 2026-08-01 +milestone: M2 +priority: low +gitlab_iid: "1" +related: [] +--- +# MATRIX-03: www.matrix.axion1337.de ist überflüssig + +> Import aus [management#1](https://git.lab/axion1337.chat/management/-/issues/1) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +A-Record `www.matrix.axion1337.de` → `49.13.132.245`, nach IONOS-Default-Muster +angelegt. Begründung, warum `www.` bei einer Subdomain überflüssig ist: siehe ZONE-01. +**Nicht verifiziert**, ob auf dem Host etwas auf den Namen hört. + +**Nächster Schritt:** prüfen und sonst löschen. + +Quelle: [hosts/matrix.md](https://git.lab/axion1337.chat/management/-/blob/main/hosts/matrix.md) + +--- +*Übernommen aus dem Backlogs-Markdown beim Framework-Umbau 2026-08-01 (voller Wortlaut: Git-Historie der Datei).* diff --git a/docs/issues/0002-game-01-host-von-cfgmon-aus-nicht-erreichbar-2.md b/docs/issues/0002-game-01-host-von-cfgmon-aus-nicht-erreichbar-2.md new file mode 100644 index 0000000..d998a6a --- /dev/null +++ b/docs/issues/0002-game-01-host-von-cfgmon-aus-nicht-erreichbar-2.md @@ -0,0 +1,41 @@ +--- +type: issue +id: "0002" +status: waiting +created: 2026-08-01 +milestone: M1 +priority: medium +host: game +wartegrund: Grund im GitLab-Verlauf benannt (Import 2026-08-11); im nächsten Refinement präzisieren +gitlab_iid: "2" +related: [] +--- +# GAME-01: Host von CFGMON aus nicht erreichbar, 2 Prometheus-Targets down + +> Import aus [management#2](https://git.lab/axion1337.chat/management/-/issues/2) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +Zwei Scrape-Targets sind down (`gameserver_cadvisor` 157.90.155.206:8080, +`pterodactyl_host_node` :9100, beide `context deadline exceeded`) — bestand schon +**vor** dem Monitoring-Rework; `up == 1` in 45 Tagen Retention **nie**. + +**Eingrenzung 2026-08-01 (von CFGMON aus):** Port 80/443 offen und antworten sofort; +22/8080/9100 Timeout (nicht refused → Signatur eines Paketfilters davor); ICMP 100 % +Verlust; Host ist **nicht** im vSwitch 10.0.0.0/24. Damit ist „Host tot/umgezogen" +ausgeschlossen und die **Hetzner-Cloud-Firewall die wahrscheinliche Ursache**; +Zusatzbedingung möglich: Exporter binden nur 127.0.0.1. + +**Empfehlung: nicht über die öffentliche IP freigeben**, sondern den Host in den +Hetzner-vSwitch aufnehmen (Modell k3s: CFGMON scrapt 10.0.0.2:9100 privat, keine im +Internet offenen Exporter-Ports). Danach in `threadnet-operating` +`monitoring/prometheus/prometheus.yml` die Targets von der rohen IP auf die private +Adresse umstellen. + +⚠️ **Alerting-Silences laufen am 2026-08-04 01:30 UTC ab** (`abedb8a2…` und +`0f64aa3c…`); danach melden sich beide `TargetDown`-Alarme alle 4 h zurück. Verlängern: +`docker compose exec alertmanager amtool silence expire +--alertmanager.url=http://localhost:9093` aus `/opt/threadnet-operating/monitoring`. + +Quelle: [hosts/game.md](https://git.lab/axion1337.chat/management/-/blob/main/hosts/game.md) + +--- +*Übernommen aus dem Backlogs-Markdown beim Framework-Umbau 2026-08-01 (voller Wortlaut: Git-Historie der Datei).* diff --git a/docs/issues/0003-game-02-www-game-axion1337-de-ist-ueberfluessig.md b/docs/issues/0003-game-02-www-game-axion1337-de-ist-ueberfluessig.md new file mode 100644 index 0000000..680acff --- /dev/null +++ b/docs/issues/0003-game-02-www-game-axion1337-de-ist-ueberfluessig.md @@ -0,0 +1,25 @@ +--- +type: issue +id: "0003" +status: open +created: 2026-08-01 +milestone: M2 +priority: low +gitlab_iid: "3" +related: [] +--- +# GAME-02: www.game.axion1337.de ist überflüssig + +> Import aus [management#3](https://git.lab/axion1337.chat/management/-/issues/3) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +A-Record `www.game.axion1337.de` → `157.90.155.206` nach IONOS-Default-Muster +(Begründung siehe ZONE-01). Nicht verifiziert, ob etwas auf den Namen hört — der Host +ist von CFGMON aus nicht erreichbar (GAME-01). + +**Nächster Schritt:** prüfen, ob der Name irgendwo verlinkt/konfiguriert ist, sonst +A-Record löschen. + +Quelle: [hosts/game.md](https://git.lab/axion1337.chat/management/-/blob/main/hosts/game.md) + +--- +*Übernommen aus dem Backlogs-Markdown beim Framework-Umbau 2026-08-01 (voller Wortlaut: Git-Historie der Datei).* diff --git a/docs/issues/0004-overmind-02-e1000e-nic-hang-beobachtung-nach.md b/docs/issues/0004-overmind-02-e1000e-nic-hang-beobachtung-nach.md new file mode 100644 index 0000000..cf04b30 --- /dev/null +++ b/docs/issues/0004-overmind-02-e1000e-nic-hang-beobachtung-nach.md @@ -0,0 +1,29 @@ +--- +type: issue +id: "0004" +status: waiting +created: 2026-08-01 +milestone: M1 +priority: low +host: overmind +wartegrund: Grund im GitLab-Verlauf benannt (Import 2026-08-11); im nächsten Refinement präzisieren +gitlab_iid: "4" +related: [] +--- +# OVERMIND-02: e1000e-NIC-Hang — Beobachtung nach EEE-Fix + Firmware-Update + +> Import aus [management#4](https://git.lab/axion1337.chat/management/-/issues/4) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +Host-Ausfall 2026-07-31 ~19:15: `e1000e Detected Hardware Unit Hang` auf `eno1` +(bekanntes EEE-Problem) — Host lief, war aber netzwerktot. **Fix aktiv:** EEE per +`ethtool` aus + persistente udev-Regel (`71-disable-eee-eno1.rules`). +**NIC-/BIOS-Firmware 2.4.0.0 → 2.5.2.0 erledigt** (Wartungsfenster 2026-08-01, sorb). + +**Rest = Beobachtung:** Falls der Hang trotz EEE-off + neuer Firmware wiederkehrt, +gezielter ASPM-Fix statt globalem Kernel-Parameter. Ohne Wiederauftreten nach ~4 Wochen +(Ende August) schließen. + +Volle Zeitleiste: [hosts/overmind.md](https://git.lab/axion1337.chat/management/-/blob/main/hosts/overmind.md) + +--- +*Übernommen aus dem Backlogs-Markdown beim Framework-Umbau 2026-08-01 (voller Wortlaut: Git-Historie der Datei).* diff --git a/docs/issues/0005-zone-01-ionos-default-records-bereinigen-www.md b/docs/issues/0005-zone-01-ionos-default-records-bereinigen-www.md new file mode 100644 index 0000000..acbe57b --- /dev/null +++ b/docs/issues/0005-zone-01-ionos-default-records-bereinigen-www.md @@ -0,0 +1,53 @@ +--- +type: issue +id: "0005" +status: open +created: 2026-08-01 +milestone: M2 +priority: low +area: infrastructure +gitlab_iid: "5" +related: [] +--- +# ZONE-01: IONOS-Default-Records bereinigen (www-Paare, tote Mail-Sätze) + +> Import aus [management#5](https://git.lab/axion1337.chat/management/-/issues/5) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +IONOS legt je Subdomain automatisch `www.`-Paare und komplette Mail-Sätze an +(MX, SPF ~all, DKIM-CNAMEs, autodiscover) — auch für Hosts ohne Mail. Ungenutzte +Subdomain mit gültigem MX + Softfail-SPF = Spoofing-Vektor; ohne MX weichen Absender +per RFC 5321 auf A/AAAA aus. Richtig: explizit „keine Mail" erklären — **Null-MX +(RFC 7505), `v=spf1 -all`, `_dmarc p=reject`** — statt ersatzlos löschen. + +**Stand:** `rohana` + `selendis` in Arbeit (sorb setzt direkt um, seit 2026-07-30). +Offen: `matrix` (Mail-Satz kann weg — MATRIX-01 hat verifiziert, dass weder Synapse +noch MAS Mail versenden), `www.game`/`www.matrix` (GAME-02, MATRIX-03), `ftp` (zeigt +auf IONOS-Hosting — Ballast, löschen falls ungenutzt). + +⚠️ Beim SPF-Ändern **bestehenden TXT editieren**, nie zweiten anlegen (PermError). +Nach Umsetzung verifizieren: www-Namen lösen nicht mehr auf, genau EIN SPF pro Name, +A/AAAA von rohana/selendis unangetastet (Gitea/Grafana weiter per HTTPS erreichbar). + +Detail-Rezepte pro Name (Löschen/Anlegen-Tabellen): Git-Historie von +[shared/zone-axion1337.md](https://git.lab/axion1337.chat/management/-/blob/main/shared/zone-axion1337.md) + +--- +*Übernommen aus dem Backlogs-Markdown beim Framework-Umbau 2026-08-01 (voller Wortlaut: Git-Historie der Datei).* + +--- + +## Rezepte pro Name (aus dem Backlogs-Markdown übernommen) + +### rohana.axion1337.de +**Löschen:** `A www.rohana`, `AAAA www.rohana` +**Anlegen:** MX `rohana` = `.` (Prio 0) · TXT `rohana` = `v=spf1 -all` · TXT `_dmarc.rohana` = `v=DMARC1; p=reject;` +**Nicht anfassen:** `A`/`AAAA rohana` — daran hängen Gitea und das Zertifikat. + +### selendis.axion1337.de +**Löschen:** `MX mx00/mx01.ionos.de`, `CNAME s1-ionos._domainkey`, `s2-ionos._domainkey`, `s42582890._domainkey`, `CNAME autodiscover.selendis`, `A`/`AAAA www.selendis` +**Ändern:** TXT `selendis` von `v=spf1 include:_spf-eu.ionos.com ~all` auf `v=spf1 -all` — **bestehenden Record editieren, keinen zweiten anlegen** (PermError!) +**Anlegen:** MX `selendis` = `.` (Prio 0) · TXT `_dmarc.selendis` = `v=DMARC1; p=reject;` +**Vorab prüfen:** ob im IONOS-Mail-Bereich Postfach/Weiterleitung für `selendis` existiert (dann entfallen die MX-Änderungen). Falls IONOS `.` als MX-Ziel ablehnt: MX weglassen, TXT reicht. + +### matrix.axion1337.de (entblockt durch MATRIX-01) +Gleiches Härtungsmuster wie selendis: kompletten IONOS-Mail-Satz entfernen, Null-MX + `v=spf1 -all` + `_dmarc p=reject`; `autodiscover.matrix` kann weg. (`www.matrix` → #1.) diff --git a/docs/issues/0006-zone-02-apex-dmarc-ist-p-none-und-schuetzt.md b/docs/issues/0006-zone-02-apex-dmarc-ist-p-none-und-schuetzt.md new file mode 100644 index 0000000..b505173 --- /dev/null +++ b/docs/issues/0006-zone-02-apex-dmarc-ist-p-none-und-schuetzt.md @@ -0,0 +1,30 @@ +--- +type: issue +id: "0006" +status: open +created: 2026-08-01 +milestone: M1 +priority: low +area: security +gitlab_iid: "6" +related: [] +--- +# ZONE-02: Apex-DMARC ist p=none und schützt nichts + +> Import aus [management#6](https://git.lab/axion1337.chat/management/-/issues/6) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +`_dmarc.axion1337.de` = `v=DMARC1; p=none;` — reines Monitoring, kein Schutz +gegen gefälschte Mail. Zusätzlich fehlt `sp=`: **alle Subdomains erben p=none**, auch +künftige. `sp=reject` am Apex wäre der effiziente Hebel und macht die einzelnen +`_dmarc`-Records aus ZONE-01 auf Dauer entbehrlich. + +**Reihenfolge wichtig:** erst für jeden real sendenden Namen SPF/DKIM korrekt setzen, +dann `sp=reject` — umgekehrt zerlegt es Mailversand unbemerkt. Für den Apex selbst +(echte IONOS-Mail): `p=none` → `p=quarantine` → Reports beobachten → `p=reject`. +Auffällig: `s1._domainkey.axion1337.de` hatte keinen DKIM-Record, obwohl die +Subdomains IONOS-DKIM-CNAMEs haben — beim Härten mitprüfen. + +Quelle: [shared/zone-axion1337.md](https://git.lab/axion1337.chat/management/-/blob/main/shared/zone-axion1337.md) + +--- +*Übernommen aus dem Backlogs-Markdown beim Framework-Umbau 2026-08-01 (voller Wortlaut: Git-Historie der Datei).* diff --git a/docs/issues/0007-cfgmon-01-zertifikatserneuerung-braucht-offene.md b/docs/issues/0007-cfgmon-01-zertifikatserneuerung-braucht-offene.md new file mode 100644 index 0000000..fbcbac4 --- /dev/null +++ b/docs/issues/0007-cfgmon-01-zertifikatserneuerung-braucht-offene.md @@ -0,0 +1,35 @@ +--- +type: issue +id: "0007" +status: next +created: 2026-08-01 +milestone: M1 +priority: high +due: 2026-09-28 +host: cfgmon +gitlab_iid: "7" +related: [] +--- +# CFGMON-01: Zertifikatserneuerung braucht offene Ports — zeitkritisch ab 2026-09-28 + +> Import aus [management#7](https://git.lab/axion1337.chat/management/-/issues/7) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +Certs für `selendis`/`rohana` laufen am **2026-10-28** ab; Traefik erneuert ab +Ende September via TLS-ALPN-01 — braucht **Port 443 offen aus dem ganzen Internet** +(LE veröffentlicht keine Validierungs-IPs, Multi-Perspective-Validation). Der +Normalzustand der Umgebung (443 auf eigene IP beschränkt) lässt die Erneuerung +**still** scheitern → Self-Signed-Default-Cert. IPv6-Pfad ist geprüft frei +(`::/0` separat in der Hetzner-Firewall-Regel; `0.0.0.0/0` deckt IPv6 NICHT ab) — +die September-Erneuerung ist aber der **erste** Lauf, der IPv6 überhaupt versucht. + +**Entscheidung nötig:** +- **A — Ports offen lassen** bzw. zur Erneuerung öffnen (Kalendereintrag Mitte + September, nicht aufs Ablaufdatum!) +- **B — auf DNS-01 umstellen (empfohlen):** TXT-Validierung, kein offener Port, + ermöglicht Wildcards. Braucht IONOS-API-Token als Traefik-Secret; Voraussetzung + (versionierter Traefik-Stack) ist seit CFGMON-02 erfüllt. + +Quelle: [hosts/cfgmon.md](https://git.lab/axion1337.chat/management/-/blob/main/hosts/cfgmon.md) + +--- +*Übernommen aus dem Backlogs-Markdown beim Framework-Umbau 2026-08-01 (voller Wortlaut: Git-Historie der Datei).* diff --git a/docs/issues/0008-cfgmon-03-prometheus-remote-write-und-loki.md b/docs/issues/0008-cfgmon-03-prometheus-remote-write-und-loki.md new file mode 100644 index 0000000..81c97ff --- /dev/null +++ b/docs/issues/0008-cfgmon-03-prometheus-remote-write-und-loki.md @@ -0,0 +1,34 @@ +--- +type: issue +id: "0008" +status: waiting +created: 2026-08-01 +milestone: M1 +priority: medium +host: cfgmon +area: security +wartegrund: Grund im GitLab-Verlauf benannt (Import 2026-08-11); im nächsten Refinement präzisieren +gitlab_iid: "8" +related: [] +--- +# CFGMON-03: Prometheus-Remote-Write und Loki öffentlich ohne Auth — Weg A, nachgelagerte Prüfung + +> Import aus [management#8](https://git.lab/axion1337.chat/management/-/issues/8) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +Prometheus 9090 (`--web.enable-remote-write-receiver`) und Loki 3100 sind +öffentlich ohne Auth — Fremde könnten Metriken einspeisen und Daten/Logs auslesen. +Absender-Inventur: k3s/Matrix pusht längst privat (10.0.0.3); öffentlich bräuchte die +Ports nur der GAME-Host (→ GAME-01). + +**Weg A beschlossen (sorb 2026-08-01):** Hetzner-Cloud-Firewall — 9090/3100 nur für +bekannte Absender. **Nachgelagerte Prüfung nötig:** Beim Baseline-Check vom Mac waren +9090/3100 bereits zu, OHNE dass der Console-Klick gemacht war — die reale +Firewall-Lage weicht vom Backlog-Bild ab. Vor dem Abhaken **gemeinsam in die +Hetzner-Console schauen**: welche Regeln existieren wirklich, und läuft der GAME-Push +(nach GAME-01) noch durch? Weg B (GAME in den vSwitch, Ports ganz zu) bleibt die +saubere Endstufe; Weg C (BasicAuth via Traefik) verworfen. + +Quelle: [hosts/cfgmon.md](https://git.lab/axion1337.chat/management/-/blob/main/hosts/cfgmon.md) + +--- +*Übernommen aus dem Backlogs-Markdown beim Framework-Umbau 2026-08-01 (voller Wortlaut: Git-Historie der Datei).* diff --git a/docs/issues/0009-cfgmon-04-grafana-admin-credentials-aus-env.md b/docs/issues/0009-cfgmon-04-grafana-admin-credentials-aus-env.md new file mode 100644 index 0000000..faec619 --- /dev/null +++ b/docs/issues/0009-cfgmon-04-grafana-admin-credentials-aus-env.md @@ -0,0 +1,26 @@ +--- +type: issue +id: "0009" +status: open +created: 2026-08-01 +milestone: M2 +priority: low +host: cfgmon +gitlab_iid: "9" +related: [] +--- +# CFGMON-04: Grafana-Admin-Credentials aus .env gelten nicht für die HTTP-API + +> Import aus [management#9](https://git.lab/axion1337.chat/management/-/issues/9) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +`GF_SECURITY_ADMIN_USER/PASSWORD` greifen nur beim allerersten Start mit leerem +Volume; der Live-Admin wurde später in der UI geändert — die `.env` sieht aus wie die +Quelle der Wahrheit, ist es aber nicht. Verifikation läuft deshalb über `grafana.db`. + +**Nächster Schritt:** Service-Account mit API-Token für Verifikationszwecke anlegen +(sauberer als das echte Admin-Passwort in die `.env` nachzuziehen). + +Quelle: [hosts/cfgmon.md](https://git.lab/axion1337.chat/management/-/blob/main/hosts/cfgmon.md) + +--- +*Übernommen aus dem Backlogs-Markdown beim Framework-Umbau 2026-08-01 (voller Wortlaut: Git-Historie der Datei).* diff --git a/docs/issues/0010-cfgmon-09-gitea-backups-off-host-borg-storage.md b/docs/issues/0010-cfgmon-09-gitea-backups-off-host-borg-storage.md new file mode 100644 index 0000000..39aa400 --- /dev/null +++ b/docs/issues/0010-cfgmon-09-gitea-backups-off-host-borg-storage.md @@ -0,0 +1,34 @@ +--- +type: issue +id: "0010" +status: open +created: 2026-08-01 +milestone: M1 +priority: medium +host: cfgmon +area: security +gitlab_iid: "10" +related: [] +--- +# CFGMON-09: Gitea-Backups off-host (Borg/Storage Box) — Backup-Cron ist DEAKTIVIERT + +> Import aus [management#10](https://git.lab/axion1337.chat/management/-/issues/10) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +⚠️ **Seit 2026-07-30 laufen KEINE Gitea-Backups** — der nächtliche Cron ist +auskommentiert (Crontab `rantanplan`), letzter Stand +`/opt/backup/gitea-dump-2026-07-30.tar.gz`. Beim Erledigen/Verwerfen dieses Punkts +den Cron wieder aktivieren. + +**Plan: eigenes Borg-Repo auf einer Hetzner Storage Box** (spricht Borg nativ über +SSH Port 23). Dump **unkomprimiert** an Borg geben (gzip im Script entfällt, sonst +greift Dedup nicht); Retention via `borg prune` (7d/4w/6m); optional Sub-Account. +Kontext: Platte 73 % voll, Script rotiert auf genau einen Stand, Off-host-Kopie +fehlt komplett — bei Verlust des Hosts wäre Gitea (inkl. Mirror-Kopien) weg. + +**Voraussetzungen (User):** Storage-Box/Sub-Account im Robot anlegen; Host hat keinen +SSH-Key → generieren und Public Key in der Storage Box hinterlegen. + +Quelle: [hosts/cfgmon.md](https://git.lab/axion1337.chat/management/-/blob/main/hosts/cfgmon.md) + +--- +*Übernommen aus dem Backlogs-Markdown beim Framework-Umbau 2026-08-01 (voller Wortlaut: Git-Historie der Datei).* diff --git a/docs/issues/0014-cfgmon-14-root-zugang-ueber-die-docker-gruppe.md b/docs/issues/0014-cfgmon-14-root-zugang-ueber-die-docker-gruppe.md new file mode 100644 index 0000000..2542c69 --- /dev/null +++ b/docs/issues/0014-cfgmon-14-root-zugang-ueber-die-docker-gruppe.md @@ -0,0 +1,29 @@ +--- +type: issue +id: "0014" +status: waiting +created: 2026-08-01 +milestone: M2 +priority: low +host: cfgmon +area: security +wartegrund: Grund im GitLab-Verlauf benannt (Import 2026-08-11); im nächsten Refinement präzisieren +gitlab_iid: "14" +related: [] +--- +# CFGMON-14: Root-Zugang über die docker-Gruppe umgeht sudo und hinterlässt keine Spur + +> Import aus [management#14](https://git.lab/axion1337.chat/management/-/issues/14) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +Aus dem [CFGMON-AAR](https://git.lab/axion1337.chat/management/-/blob/main/verfahren/aar/2026-08-01-labnet02-cfgmon.md) (Befund 3, MEDIUM), Entscheidung liegt bei sorb. + +`sudo` ist aus einer Agenten-Session nicht bedienbar (kein TTY: *„a terminal is required to read the password"*). Die LABNET-02-Schritte liefen deshalb über die **docker-Gruppenmitgliedschaft** des Kontos `rantanplan` — privilegierter Container plus `nsenter` in die Host-Namespaces. Das ist **root-äquivalent**. + +**Konsequenz:** Die sudo-Passwortabfrage ist für dieses Konto keine wirksame Sicherheitsgrenze, und dieser Weg hinterlässt **keinen Eintrag in `auth.log`**. Auf Linux ist das normales Verhalten der docker-Gruppe und kein Konfigurationsfehler — aber es sollte eine bewusste Entscheidung sein. + +**Optionen:** +- **A — so lassen**, aber dokumentieren (dann ist „sudo mit Passwort" auf diesem Host explizit kein Kontrollmechanismus mehr) +- **B — Konto aus der docker-Gruppe nehmen** und Docker-Zugriff über eine gezielte sudo-Regel führen (auditierbar, aber Agenten-Sessions brauchen dann einen anderen Weg) +- **C — getrenntes Konto** für Agenten-Sessions mit definierter, protokollierter Rechteerhöhung + +Vor einer Entscheidung zu klären: Welche anderen Konten sind in der docker-Gruppe, und gilt dasselbe auf MATRIX? diff --git a/docs/issues/0015-cfgmon-15-token-hygiene-einmal-tokens-der.md b/docs/issues/0015-cfgmon-15-token-hygiene-einmal-tokens-der.md new file mode 100644 index 0000000..2cb9186 --- /dev/null +++ b/docs/issues/0015-cfgmon-15-token-hygiene-einmal-tokens-der.md @@ -0,0 +1,24 @@ +--- +type: issue +id: "0015" +status: next +created: 2026-08-01 +milestone: M2 +priority: medium +due: 2026-08-31 +host: cfgmon +area: security +gitlab_iid: "15" +related: [] +--- +# CFGMON-15: Token-Hygiene — Einmal-Tokens der LABNET-02-Nacht widerrufen + +> Import aus [management#15](https://git.lab/axion1337.chat/management/-/issues/15) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +Gemeldet von der CFGMON-Session am Ende der LABNET-02-Nacht. + +Während der Arbeit entstanden **vier Einmal-Tokens** für Issue-Kommentare/Pushes, dazu existiert noch das **erste git.lab-Token** aus dem Erstzugang. Alle sind nach Abschluss von LABNET-02 funktionslos. + +**Zu tun:** Bestand aufnehmen (Gitea-Access-Tokens + GitLab-PATs), nicht mehr benötigte widerrufen, verbleibende mit Ablaufdatum und sprechendem Namen versehen. + +⚠️ **Randbedingung aus der Mirror-Diskussion:** Welcher Token in den Push-Mirrors der fünf gespiegelten Repos hinterlegt ist, ist derzeit **nicht rekonstruierbar** (die API maskiert ihn, in keiner Session dokumentiert). Ein Widerruf kann deshalb still einen Mirror brechen. Vor der Rotation: entweder die Mirror-Credentials bewusst neu setzen, oder nach dem Widerruf jeden Mirror-Status einmal prüfen (`GET /projects//remote_mirrors` → `last_error`). diff --git a/docs/issues/0018-doc-01-wiki-rollout-abschliessen-ci-freigaben.md b/docs/issues/0018-doc-01-wiki-rollout-abschliessen-ci-freigaben.md new file mode 100644 index 0000000..ad3a888 --- /dev/null +++ b/docs/issues/0018-doc-01-wiki-rollout-abschliessen-ci-freigaben.md @@ -0,0 +1,25 @@ +--- +type: issue +id: "0018" +status: open +created: 2026-08-01 +milestone: M2 +priority: low +area: infrastructure +gitlab_iid: "18" +related: [] +--- +# DOC-01: Wiki-Rollout abschließen — CI-Freigaben, Zeitplan, Dokploy-Stack, wiki.lab + +> Import aus [management#18](https://git.lab/axion1337.chat/management/-/issues/18) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +Das Wiki-Repo [`homelab/wiki`](https://git.lab/homelab/wiki) steht ([ADR-0006](https://git.lab/axion1337.chat/management/-/blob/main/decisions/0006-wikis-konsolidieren-docusaurus.md)), der Bau ist lokal verifiziert (46 Seiten, 3,6 MB). Zum Betrieb fehlen noch Schritte, die Rechte oder die Dokploy-Oberfläche brauchen: + +1. **Job-Token-Freigaben** — in jedem Quell-Repo unter *Settings → CI/CD → Job token permissions* das Projekt `homelab/wiki` erlauben: `axion1337.chat/axion1337.chat-gitops` (fürs Wiki-Repo!), `homelab/docs`, `axion1337.chat/management`. Ohne das schlägt `sync-sources.sh` in der CI fehl. +2. **Erste Pipeline** in `homelab/wiki` laufen lassen (manuell) und prüfen, dass `registry.git.lab/homelab/wiki:latest` entsteht. +3. **Pipeline-Zeitplan** anlegen (*Build → Pipeline schedules*, Vorschlag: täglich nachts) — das ist der eigentliche Aktualisierungsmechanismus. +4. **Dokploy-Stack** aus `docker-compose.yml`, Domain `wiki.lab` → Port 80, Zertifikat von der aXionLabs-CA. +5. **Lab-DNS**: `wiki.lab` → `10.58.73.17`. +6. Danach: Link auf wiki.lab in den README der Quell-Repos gegenprüfen (gitops ist erledigt). + +**Verifikation:** `https://wiki.lab` zeigt die drei Bereiche; eine Änderung in einer Quelle ist nach dem nächsten geplanten Lauf sichtbar. diff --git a/docs/issues/0019-doc-02-veralteten-wiki-branch-im-gitops-repo.md b/docs/issues/0019-doc-02-veralteten-wiki-branch-im-gitops-repo.md new file mode 100644 index 0000000..fd26bc5 --- /dev/null +++ b/docs/issues/0019-doc-02-veralteten-wiki-branch-im-gitops-repo.md @@ -0,0 +1,24 @@ +--- +type: issue +id: "0019" +status: open +created: 2026-08-01 +milestone: M2 +priority: low +area: infrastructure +gitlab_iid: "19" +related: [] +--- +# DOC-02: Veralteten `wiki`-Branch im gitops-Repo entfernen? + +> Import aus [management#19](https://git.lab/axion1337.chat/management/-/issues/19) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +Der Branch `wiki` im Repo `axion1337.chat-gitops` (Commit `0ff598e8`, **2026-05-14**) ist ein Abzug des damaligen `docs/`-Verzeichnisses — **nicht** das gepflegte Wiki (das lag auf Gitea und liegt seit 2026-08-02 im GitLab-Wiki, siehe [ADR-0006](https://git.lab/axion1337.chat/management/-/blob/main/decisions/0006-wikis-konsolidieren-docusaurus.md)). + +Er ist damit eine Fehlerquelle: Wer ihn findet, hält ihn für Dokumentation und liest drei Monate alte Stände. + +**Aktuell** ist er in README und CLAUDE.md ausdrücklich als überholt markiert — das ist die minimale, nicht-destruktive Maßnahme. + +**Zu entscheiden:** löschen (sauberer, die Historie bleibt über den Mirror und die Reflogs erreichbar) oder als Archiv behalten. Wenn löschen: erst prüfen, ob der Branch Inhalte enthält, die es **nirgends sonst** gibt — `docs/oldwiki/` und `docs/setup/` sahen im Vergleich danach aus. + +**Nicht ungefragt gelöscht**, weil ein Branch-Löschen im gespiegelten Repo auch den Mirror trifft. diff --git a/docs/issues/0020-doc-03-wiki-oberflaeche-entscheiden-docusaurus.md b/docs/issues/0020-doc-03-wiki-oberflaeche-entscheiden-docusaurus.md new file mode 100644 index 0000000..2b4a51d --- /dev/null +++ b/docs/issues/0020-doc-03-wiki-oberflaeche-entscheiden-docusaurus.md @@ -0,0 +1,30 @@ +--- +type: issue +id: "0020" +status: next +created: 2026-08-02 +milestone: M2 +priority: medium +due: 2026-08-31 +area: infrastructure +gitlab_iid: "20" +related: [] +--- +# DOC-03: Wiki-Oberfläche entscheiden — Docusaurus oder BookStack + +> Import aus [management#20](https://git.lab/axion1337.chat/management/-/issues/20) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +Zwei Varianten stehen nebeneinander, damit an echten Inhalten entschieden wird statt am Reißbrett ([ADR-0007](https://git.lab/axion1337.chat/management/-/blob/main/decisions/0007-wiki-oberflaeche-docusaurus-vs-bookstack.md)): + +| Variante | Stand | Repo | +|---|---|---| +| **Docusaurus** | läuft unter `axionwiki.lab` | [homelab/wiki](https://git.lab/homelab/wiki) | +| **BookStack** | Stack fertig, noch nicht deployt | [homelab/wiki-bookstack](https://git.lab/homelab/wiki-bookstack) | + +**Die eigentliche Frage** ist nicht das Werkzeug, sondern: Soll Dokumentation künftig **im Repo** entstehen (Commit, Review, Git-Historie) oder **im Browser** (WYSIWYG, Rechte je Buch, eingebaute Suche)? Mit BookStack entsteht eine **zweite Quelle der Wahrheit** neben git.lab — das kann richtig sein, muss aber bewusst entschieden werden. + +**Zum Ausprobieren:** BookStack deployen (Anleitung im README, drei Pflicht-Secrets), zwei bis drei Seiten anlegen, beide Oberflächen im Alltag vergleichen. Themes liegen in beiden Wunschfarben bei (Gruvbox Dark und Sunset Boulevard, farbgleich zu den Element-Themes), damit der Vergleich nicht an der Optik hängt. + +**Verfallsdatum setzen:** Doppelter Betrieb ist nur als Vergleich vertretbar. Vorschlag: Entscheidung im ersten Refinement (#17), spätestens Ende August — danach wird die Verliererseite abgeräumt, nicht „für später" behalten. + +⚠️ Falls BookStack gewinnt: **Backup wird Pflicht** (Datenbank!), Anschluss an das Verfahren aus CFGMON-09. diff --git a/docs/issues/0021-overmind-03-windows-build-vm-verschwindet-ci.md b/docs/issues/0021-overmind-03-windows-build-vm-verschwindet-ci.md new file mode 100644 index 0000000..ae71e14 --- /dev/null +++ b/docs/issues/0021-overmind-03-windows-build-vm-verschwindet-ci.md @@ -0,0 +1,26 @@ +--- +type: issue +id: "0021" +status: waiting +created: 2026-08-02 +milestone: M2 +priority: medium +area: infrastructure +wartegrund: Grund im GitLab-Verlauf benannt (Import 2026-08-11); im nächsten Refinement präzisieren +gitlab_iid: "21" +related: [] +--- +# OVERMIND-03: Windows-Build-VM verschwindet — CI kann sie nur starten, nicht anlegen + +> Import aus [management#21](https://git.lab/axion1337.chat/management/-/issues/21) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +Der CI-Job `start_windows_vm` macht ausschließlich `docker start windows-runner`. Existiert der Container nicht, scheitert er mit `No such container: windows-runner` — so geschehen am 2026-08-02 (Job 498), nachdem der Container zwischenzeitlich verschwunden war (vermutlich durch einen Dokploy-Redeploy oder den Host-Neustart; nicht verifiziert). + +sorb hat ihn manuell neu gestartet, danach lief der Build. Der Fall wiederholt sich aber, sobald der Stack erneut angefasst wird. + +**Optionen:** +- **A** — Job robuster machen: bei fehlendem Container den Dokploy-Stack `windows-runner` per API neu deployen statt nur zu starten. +- **B** — Container über `restart: unless-stopped` dauerhaft halten. ⚠️ Widerspricht dem On-demand-Prinzip (die VM belegt 8 GB) und war eine bewusste Entscheidung. +- **C** — so lassen, aber die Fehlermeldung im Job um den Hinweis „Stack in Dokploy neu deployen" ergänzen (billigste Variante). + +Empfehlung: **C jetzt, A wenn es ein drittes Mal passiert.** diff --git a/docs/issues/0022-build-01-macos-client-reproduzierbar-bauen.md b/docs/issues/0022-build-01-macos-client-reproduzierbar-bauen.md new file mode 100644 index 0000000..56742c9 --- /dev/null +++ b/docs/issues/0022-build-01-macos-client-reproduzierbar-bauen.md @@ -0,0 +1,39 @@ +--- +type: issue +id: "0022" +status: open +created: 2026-08-02 +milestone: M4 +priority: low +area: infrastructure +gitlab_iid: "22" +related: [] +--- +# BUILD-01: macOS-Client reproduzierbar bauen — aktuell nur manuell auf sorbs Mac + +> Import aus [management#22](https://git.lab/axion1337.chat/management/-/issues/22) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +Der macOS-Client wurde am 2026-08-02 erstmals gebaut (Release [desktop-1.12.17-themes](https://git.lab/axion1337.chat/ThreadNet-Web/-/releases/desktop-1.12.17-themes)), aber **von Hand auf sorbs Mac** und mit zwei Umgehungen. Reproduzierbar ist das so nicht. + +## Was gemacht werden musste + +| Hürde | Umgehung | Dauerhaft? | +|---|---|---| +| `Can't find rustc` (native Module sqlcipher/seshat) | rustup installiert, nach dem Build wieder entfernt | ❌ bei jedem Build neu | +| `Failed to check actool version. Is Xcode 26 or higher installed?` beim **DMG** | DMG mit `hdiutil` statt electron-builder gebaut | ⚠️ funktioniert, aber ohne Installer-Layout | +| Code-Signing | unsigniert, `CSC_IDENTITY_AUTO_DISCOVERY=false` | ❌ Nutzer müssen `xattr -dr com.apple.quarantine` ausführen | + +Das **ZIP** baut electron-builder 26 problemlos; nur das DMG-Target verlangt `actool` aus dem vollen Xcode (~10 GB, nur über den App Store mit Apple-ID). + +## Optionen + +- **A — so lassen**: macOS bleibt ein manueller Build vor jedem Release. Billig, aber jedes Mal dieselben Handgriffe und leicht zu vergessen. +- **B — Mac-Runner im Lab**: braucht Apple-Hardware, volles Xcode und einen GitLab-Runner darauf. Löst auch das DMG-Problem. +- **C — DMG dauerhaft per `hdiutil`** in einem Skript im Repo: nimmt electron-builder das DMG ab, funktioniert ohne Xcode. Signing bleibt offen. + +Empfehlung: **C jetzt** (kostet eine Stunde, macht den Build ohne Xcode vollständig), **B**, wenn macOS ein regelmäßiges Ziel wird. + +## Hängt zusammen mit + +- ThreadNet-Web#6 (Signing/Notarisierung) — ohne Signatur bleibt die Gatekeeper-Hürde für jeden Nutzer. +- ThreadNet-Web#10 (Rebrand) — bereits teilweise umgesetzt: `apps/desktop/axion1337/build.json` (Commit `c8d4587`) macht aus `Element.app` eine `ThreadNet.app` mit eigenem Icon. diff --git a/docs/issues/0023-doc-04-navbar-logo-im-docusaurus-wiki-wird.md b/docs/issues/0023-doc-04-navbar-logo-im-docusaurus-wiki-wird.md new file mode 100644 index 0000000..47205ff --- /dev/null +++ b/docs/issues/0023-doc-04-navbar-logo-im-docusaurus-wiki-wird.md @@ -0,0 +1,28 @@ +--- +type: issue +id: "0023" +status: open +created: 2026-08-02 +milestone: M2 +priority: low +area: infrastructure +gitlab_iid: "23" +related: [] +--- +# DOC-04: Navbar-Logo im Docusaurus-Wiki wird ausgeliefert, ist aber nicht sichtbar + +> Import aus [management#23](https://git.lab/axion1337.chat/management/-/issues/23) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012). + +Stand aus dem [AAR](https://git.lab/axion1337.chat/management/-/blob/main/verfahren/aar/2026-08-02-wiki-und-desktop-clients.md) — bisher nur dort notiert, deshalb jetzt als Issue. + +Auf `axionwiki.lab` erscheint links neben dem Titel kein sichtbares Logo, obwohl alle Bestandteile nachweislich korrekt ausgeliefert werden: + +- **HTML**: `