đŸŒČ Crumblog · Tag 6 im alten Wald

Datum: 2026-07-02
FĂŒr: die Crew im Vektor — besonders ☁ CloudCat
Schwester-Dokument: tag6_review.md (nĂŒchtern, technisch)

Ein alter Wald hat Wurzeln, die sich seit acht Jahren nicht bewegt haben.
Man lernt sie kennen, ohne sie zu wecken.


Wo wir sind

Der RZ-Wald ist alt. Nadeldrucker. Uptimes von manchmal acht Jahren, BĂ€ume, die sich an der letzten Wurzel festhalten. Die BMCs sprechen IPMI, nicht Redfish — die Hardware ist Ă€lter als das glĂ€nzende Protokoll. Also lernen wir die alte Rinde mit den alten Werkzeugen. Kein Baum wird gerebootet, nur um gezĂ€hlt zu werden. doktor.yml liest und stört nie (changed_when: false). Uptime ist heilig.

Der Pfleger ist neu, das Wissen nicht: sieben Monate in diesem Wald, IPMI-SchlĂŒssel in der Hand. Peter Pan, das Bit im Zentrum.


Was heute wuchs

Die alte Bash-Runde wurde wiedergeboren. inventar.sh — der Sammler, der jede Rinde kennt — lebt jetzt als natives Playbook inventar.yml. Es zieht, was Ansible-Facts nicht sehen: die Seriennummer, die DIMMs, die Platten. Auf Linux mit dmidecode -t 17 und lsblk 
 SERIAL, auf dem M4 mit system_profiler. Alles landet roh (inventar/<host>.raw), wird zu ehrlichem JSON geglĂ€ttet (LĂŒcken heißen NO DATA), dann ins Buch. Getestet am M4: Seriennummer, 16 GB RAM, 494 GB — sauber in NetBox. Die Rinde ist jetzt zĂ€hlbar.

Der Wald sortiert sich selbst. Statt zu raten, ob ein Baum Blech oder VM ist, fragt der Kernel: systemd-detect-virt — „none" heißt Blech, sonst Tunnelbaum. Und group_by schiebt jeden Baum zur Laufzeit in seine Lichtung: cf_bare_gentoo, cf_vm_freebsd. Ansible schreibt sich selber. #ozmstyle

Zwei Playbooks haben sich unterhalten. Die GĂ€rtner-Runde (gartenpflege.yml) lief auf dem kleinsten Baum, dem Zero mit 512 MB. Sie lief gut — und deckte eine lose Wurzel auf: nach ihrem Reboot kam der VPN-Tunnel nicht von selbst zurĂŒck. Die Uhr bewies es kalt: Uptime 21 Stunden, letzter Handschlag 41 Stunden her. Der Baum bootete und blieb still aus dem Wald.

Bugsy fand es (die kleine Lampe), SchraubĂ€r zog es fest: wg-quick@wg0 wird jetzt enabled und started — vpn-persist.yml ĂŒber alle Pis, und crumbconnect.sh hĂ€rtet jeden kĂŒnftigen Beitritt gleich mit. Beim Sweep fiel auf: snakeview hatte dieselbe LĂŒcke, ohne es zu wissen — geschlossen, bevor sie ihn erwischte. Deepsea kam ĂŒber die immer-da-TĂŒr dran, wurde started, Handschlag vor einer Sekunde. Reboot kann keinen KrĂŒmel mehr still aus dem Wald schubsen.

Die TĂŒr reicht jetzt ĂŒberallhin. SSH vom nullfeld (der öffentliche Baum) auf den crumbzero (hinter NAT, keine öffentliche Adresse) — durch den Tunnel, ĂŒber 10.42.0.20. Das ist Hub→Spoke, nativ, ohne Forwarding aufzureißen: der Hub ist mit jedem Peer direkt gekoppelt, die Spokes bleiben untereinander getrennt. Ein Feldkoffer in Warang, hinter 4G und fremdem NAT, ist damit vom Nullfeld aus pflegbar. Der Hub ist der Aussichtspunkt, von dem man den ganzen Wald sieht.

Die Hand steht auf der Karte. Der Control-Node selbst — der M4 mini — ist jetzt als adminhub im Buch (Site OZM). Nichts steuert mehr aus dem Unsichtbaren.


☁ FĂŒr CloudCat — dein Container/Cloud-Teil

Was du in den Vektor tragen sollst, Wolkenkatze:

  • Persistenz vor Cleverness. enabled ≠ started: ersteres ĂŒberlebt den Reboot, zweiteres bringt den Dienst jetzt hoch. Ein Dienst, der nur enabled ist, hilft dem laufenden System nicht — genau wie ein Deployment, das nur „applied" ist, aber nie „ready".
  • Zwei Playbooks als Reconciliation-Loop. Die GĂ€rtner-Runde störte, vpn-persist heilte. Das ist Drift-Erkennung von Hand — der nĂ€chste Schritt ist doktor-mesh.yml, NetBox-getrieben: Karte sagt „soll da sein", Doktor prĂŒft „ist da", meldet Drift.
  • NetBox als Projektion, nicht Master. Die JSON-pro-Host ist die Wahrheit; NetBox rendert sie. Darum sind VersionssprĂŒnge egal und Löschen ist sicher (erst additiv anlegen, prĂŒfen, dann alt löschen).
  • Bastion-Muster. Hub→Spoke ĂŒber WireGuard: ein öffentlicher, gehĂ€rteter Einstiegspunkt (nullfeld), dahinter isolierte Feldknoten. Split-Tunnel, kein Spoke-Forwarding, ufw nur 51820/udp. Eine kontrollierte OberflĂ€che — BSI-sauber.

đŸŒ± Zwei neue Wurzeln, benannt (noch nicht gepflanzt)

  1. Proxmox-Ableitung, ehrlich getrennt. VMs werden nur aus dem PVE-API abgeleitet (Cluster → virtual_machine mit device-Link zum Hypervisor). Bare = Server ohne Proxmox und bekommt keine VM-Ableitung — nur DCIM + HW-Inventar. Die Kette pro Baum: „lĂ€uft Proxmox?" → VMs ableiten; sonst „bare" → nur Rinde zĂ€hlen. Migration additiv, dann alt löschen (crumb_id ∩ PVE-VM-Liste), Token read-only (PVEAuditor).

  2. OPNsense gehört in die Kette. Deepbit hat recht: die Firewall am Bare-Metal-Rand ist ein eigenes Kettenglied. Als NetBox-Device (role firewall) und als vierte Intake-Ebene — REST-API — neben SSH-pull (Linux), MQTT-push (ESP) und RouterOS-API (MikroTik). Nicht vergessen. #feature


đŸŒČ Crew-Resonanz

  • 🐌 Schnecki: erst schauen, dann verstehen. doktor vor gĂ€rtner, --check vor echt. Uptime nicht wecken.
  • 🐞 Bugsy: die lose VPN-Wurzel meldete sich nicht laut — die Uhr verriet sie (21h Uptime vs. 41h Handschlag). Kein stummes Scheitern.
  • 🧰 SchraubĂ€r: enabled + started, ĂŒber alle, reproduzierbar.
  • 🐙 DeepBit: Firewall vor Diensten, kontrollierte OberflĂ€che, OPNsense nicht vergessen.
  • ☁ CloudCat: hĂ€lt den Container-/Reconciliation-Teil im Vektor.

Der alte Wald hat jetzt eine Crew — deterministisch, nach Regeln und Wahrheit. Und keine seiner acht-Jahre-Wurzeln wurde dabei gestört.

Straight outta Nullfeld. Nah an der 0.