diff --git a/AGENTS.md b/AGENTS.md index fef6758..964b653 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -42,7 +42,9 @@ Das Projekt besteht aus zwei Hälften: - Kernfeatures: Multi-Exit-Bandbreiten-Pooling, segmentierte Downloads, Fairness-Scheduler, Nachbarschafts-Cache, **Leech-Modus** (Empfangen ohne Exit-Bereitstellung ist ausdrücklich erlaubt — Netz unter Nachbarn) -- Status: Konzeptphase, Details in `server/README.md` +- Status: Code existiert und ist getestet (`sn-fetch`, `sn-node` inkl. + Daemon, `sn-exit`, `sn-fair`; Deployment via Docker/Nix) — Details in + `server/README.md` ## Git / Gitea diff --git a/README.md b/README.md index 07b3b64..7b89d6a 100644 --- a/README.md +++ b/README.md @@ -55,9 +55,14 @@ Prototyp (Konzeptphase + erster Code): mit `sn-fetch` gegen einen echten Server verifiziert - **`sn-fair` v0** funktioniert: Fairness-Engine (gewichtetes Max-Min, Leech-Politik) + Demo-CLI — die Soll-Aufteilung für den Piloten +- **`sn-node` Daemon** funktioniert: ein Befehl orchestriert Yggdrasil- + Sidecar + Exit-Dienst (`sn-node daemon --config node.toml`, TOML-Konfig, + Kill-Switch-Semantik) +- **Deployment:** Docker-Image (gebaut + getestet) und Nix-Flake + (unverifiziert) — Details in [server/README.md](server/README.md) - **Nächste Schritte:** Pilot mit 2–3 Haushalten (Yggdrasil-Overlay verkabeln, Messwerte — Handbuch: - [pilot.md](documentation/ideen/pilot.md)), `sn-node`-Daemon — siehe + [pilot.md](documentation/ideen/pilot.md)) — siehe [Roadmap](documentation/ideen/roadmap.md) ## Doku lesen (Obsidian) diff --git a/documentation/README.md b/documentation/README.md index 4d2f53f..c58984b 100644 --- a/documentation/README.md +++ b/documentation/README.md @@ -30,11 +30,13 @@ ist — ohne Mehrkosten und mit besserer Versorgung schwacher Haushalte. ## Status Prototypphase (siehe [[Roadmap]]): `sn-fetch` (segmentierter Multi-Exit- -Download mit Retry + Egress), `sn-node` v0 (Yggdrasil-Config + Status), -`sn-exit` v0 (kontingentierter Uplink-Proxy mit SSRF-Schutz) und `sn-fair` -v0 (Fairness-Engine + Demo-CLI) sind implementiert und getestet — -Details in [`server/README.md`](../server/README.md). Nächster -Meilenstein: Pilot mit 2–3 Haushalten (Handbuch: [[Pilot]]). +Download mit Retry + Egress), `sn-node` v0 + Daemon (Yggdrasil-Config, +Status, Sidecar-/Exit-Orchestrierung), `sn-exit` v0 (kontingentierter +Uplink-Proxy mit SSRF-Schutz) und `sn-fair` v0 (Fairness-Engine + +Demo-CLI) sind implementiert und getestet — Details in +[`server/README.md`](../server/README.md), Deployment via Docker/Nix +(`server/docker/`, `flake.nix`). Nächster Meilenstein: Pilot mit +2–3 Haushalten (Handbuch: [[Pilot]]). ## Verwandte Projekte (Prior Art) diff --git a/documentation/ideen/pilot.md b/documentation/ideen/pilot.md index 806e6ef..dc8fe9e 100644 --- a/documentation/ideen/pilot.md +++ b/documentation/ideen/pilot.md @@ -51,6 +51,14 @@ cargo build --release --workspace # → target/release/sn-node, sn-exit, sn-fetch, sn-fair ``` +Alternativ (bequemer ab dem zweiten Haushalt): **Docker** — +`server/docker/README.md` (Image mit allen Binaries + Yggdrasil, +Compose-Beispiel) — oder **Nix** via `flake.nix`. Der Node-Daemon +(`sn-node daemon --config node.toml`, siehe `server/README.md`) +orchestriert Overlay + Exit in einem Befehl; die manuellen Schritte +unten zeigen trotzdem erst den Geräteweg, damit man sieht, was +gepoolt wird. + ### Vor dem Termin (Checkliste) - [ ] ISP-AGB der Teilnehmenden geprüft (Weitergabe an Dritte, diff --git a/documentation/ideen/roadmap.md b/documentation/ideen/roadmap.md index 6f918a7..32fbdee 100644 --- a/documentation/ideen/roadmap.md +++ b/documentation/ideen/roadmap.md @@ -24,8 +24,11 @@ Handbuch mit Messprotokoll: [[Pilot]]. end-to-end getestet - [x] `sn-node` v0: Yggdrasil-Config-Generierung (`genconf`) + Admin-Socket- Client (`status`) — die Overlay-Anbindung beginnt +- [x] `sn-node` Daemon v1: ein Befehl orchestriert Yggdrasil-Sidecar + + Exit-Dienst (TOML-Konfig, Node-Key-Persistenz, Kill-Switch-, + Supervisor-Semantik) — Deployment via Docker/Nix vorhanden - [ ] Yggdrasil-Overlay zwischen 2 Haushalten (Kabel oder Kurzstrecke - WLAN/60-GHz), `sn-node`-Daemon orchestriert den Node + WLAN/60-GHz) aufsetzen - [x] `sn-exit` v0: HTTP-Proxy auf der Yggdrasil-Adresse (Kontingente, SSRF-Schutz, Kill-Switch = Prozess stoppen) - [x] `sn-fair` v0: Fairness-Engine (gewichtetes Max-Min über zwei diff --git a/server/README.md b/server/README.md index 9f1ef35..32e24b7 100644 --- a/server/README.md +++ b/server/README.md @@ -75,8 +75,40 @@ SHA-256 entspricht der offiziellen `SHA256SUMS`). - Runtime-Integration in `sn-fetch` (echte gleichzeitige Downloads drosseln) ist Phase 2, siehe [[Roadmap]] -**Noch nicht drin:** `sn-node`-Daemon (Supervisor, der yggdrasil + -sn-exit + sn-fetch orchestriert), Freenet-Integration, Cache. +**`sn-node` Daemon v1 ist implementiert** (`sn-node daemon`, siehe +`crates/sn-node/src/daemon.rs`): + +- **Ein Befehl pro Haushalt:** `sn-node daemon --config node.toml` + orchestriert den Node — Yggdrasil-Sidecar (generierte Config + + persistenter Node-Key im `state_dir`, Identität bleibt über Neustarts + stabil: `PrivateKeyPath` hat Vorrang vor dem eingebetteten Key, siehe + [Config-Referenz](https://yggdrasil-network.github.io/configurationref.html)) + + optional den in-process `sn-exit`-Dienst +- **TOML-Konfiguration, validiert beim Laden** (`deny_unknown_fields`, + wiederverwendete validierte Typen; `sn-node daemon --check` prüft + ohne Start — für Packaging/Ops) +- **Leech-Modus per Konfig** (`[exit] enabled = false`): Overlay läuft, + kein Exit-Angebot; enabled + leere Allowlist = Start verweigert + (Ausnahme: Loopback-Dev-Bind) +- **Kill-Switch-Semantik:** SIGINT/SIGTERM → Accept-Loop stoppt, + Sidecar bekommt SIGTERM (5 s Gnade, dann SIGKILL); stirbt Yggdrasil + unerwartet, fährt der Daemon mit Fehler herunter (Supervisor-Pflicht) +- Getestet mit Fake-Yggdrasil (Script-Binary) und Fake-Admin-Socket: + Key-Persistenz, Exit-Bind, Shutdown, Sidecar-Tod + +**Deployment: Docker & Nix** (siehe `server/docker/README.md` und +`flake.nix`): + +- `server/docker/`: Multi-Stage-Image (alle 4 Binaries + Yggdrasil + v0.5.14, SHA-256-verifiziert), Compose-Beispiel pro Haushalt + (`network_mode: host`, `NET_ADMIN`, `/dev/net/tun`, `init: true`) — + Image gebaut und geraucht-getestet +- `flake.nix`: `nix build` baut das Workspace als ein Paket + (+ experimentelles NixOS-Modul) — **nicht lokal verifiziert** + (Nix nicht installiert), Feedback willkommen + +**Noch nicht drin:** Freenet-Integration, Cache, Metriken/Onboarding +(Phase 2). Details zum Overlay: [[Overlay]]. Pilot-Handbuch mit Messprotokoll: [[Pilot]]. @@ -109,7 +141,7 @@ Einplatinenrechner), der: | Crate/Binary | Zweck | |---|---| -| `sn-node` | Node-Glue: Yggdrasil-Config (`genconf`), Overlay-Status (`status`), später Daemon/Supervisor | +| `sn-node` | Node-Glue: Yggdrasil-Config (`genconf`), Overlay-Status (`status`), Node-Daemon (`daemon`: Sidecar + Exit-Orchestrierung) | | `sn-exit` | Exit-Dienst: kontingentierter Uplink-Proxy auf der Yggdrasil-Adresse (v0: Byte-Relay + Quota + SSRF-Schutz) | | `sn-fetch` | Segmentierter Multi-Exit-Downloader (HTTP-API + CLI) | | `sn-fair` | Fairness-Scheduler (max-min, Exit-Kontingente, Karma, Leech-Modus) — v0: zwei-Klassen-Max-Min-Engine + Demo-CLI |