diff --git a/NOTES.md b/NOTES.md
index fd2b6ab..49a0259 100644
--- a/NOTES.md
+++ b/NOTES.md
@@ -1,4 +1,4 @@
-# Ingest
+# Wurzelwerk — Ingest
Stufe 0 und 1 der Pipeline: Quellenregister und Roh-Erfassung. Keine
Kodierung — was hier landet, soll sich beliebig oft neu kodieren lassen.
@@ -10,54 +10,54 @@ Kodierung — was hier landet, soll sich beliebig oft neu kodieren lassen.
| `sources.toml` | Quellenregister, einzige Wahrheit ueber die Quellen |
| `schema.sql` | Postgres-Schema (`quellen`, `raw_items`, `codings`, `poll_laeufe`) |
| `poller.py` | Poller, zwei Senken: Postgres und gzip-JSONL |
-| `Containerfile` | Image fuer Bebop |
-| `lagebild-ingest.container`, `lagebild.network` | Quadlet-Units, rootless |
+| `Containerfile` | Image fuer den Produktivbetrieb |
+| `wurzelwerk-ingest.container`, `wurzelwerk.network` | Quadlet-Units, rootless |
| `ingest.env.example` | Vorlage fuer die Zugangsdaten |
-## Bebop
+## Deploy mit Postgres + Podman/Quadlet (rootless)
```sh
# 1. Schema einspielen
psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f schema.sql
# 2. Image bauen
-podman build -t localhost/lagebild-ingest:latest .
+podman build -t localhost/wurzelwerk-ingest:latest .
# 3. Konfiguration ablegen
-mkdir -p ~/.config/lagebild
-cp ingest.env.example ~/.config/lagebild/ingest.env
-cp sources.toml ~/.config/lagebild/sources.toml
-chmod 600 ~/.config/lagebild/ingest.env
-$EDITOR ~/.config/lagebild/ingest.env
+mkdir -p ~/.config/wurzelwerk
+cp ingest.env.example ~/.config/wurzelwerk/ingest.env
+cp sources.toml ~/.config/wurzelwerk/sources.toml
+chmod 600 ~/.config/wurzelwerk/ingest.env
+$EDITOR ~/.config/wurzelwerk/ingest.env
# 4. Quadlet installieren
mkdir -p ~/.config/containers/systemd
-cp lagebild-ingest.container lagebild.network ~/.config/containers/systemd/
+cp wurzelwerk-ingest.container wurzelwerk.network ~/.config/containers/systemd/
systemctl --user daemon-reload
-systemctl --user start lagebild-ingest
-journalctl --user -u lagebild-ingest -f
+systemctl --user start wurzelwerk-ingest
+journalctl --user -u wurzelwerk-ingest -f
# Damit der Dienst ohne offene Sitzung weiterlaeuft:
loginctl enable-linger "$USER"
```
`sources.toml` ist eingehaengt, nicht ins Image gebacken: eine neue Quelle ist
-ein `systemctl --user restart lagebild-ingest`, kein Neubau.
+ein `systemctl --user restart wurzelwerk-ingest`, kein Neubau.
-## Pi 5 — Schatten-Ingest
+## Schatten-Ingest auf einem Zweitgeraet
Ohne Postgres, ohne Container:
```sh
-python3 poller.py --sink jsonl:/var/lib/lagebild/schatten
+python3 poller.py --sink jsonl:/pfad/zu/deinem/ablageordner
```
Legt `
/YYYYMMDD/YYYYMMDDHHMMSS.jsonl.gz` an, dedupliziert ueber eine
SQLite daneben. Als `systemd --user`-Unit mit `Restart=always` einrichten.
Der Sinn ist nicht Redundanz um ihrer selbst willen: RSS-Feeds haben kein
-Archiv. Steht Bebops Poller einen Tag still, ist dieser Tag unwiederbringlich
-weg. Kodierungen lassen sich wiederholen, Rohdaten nie.
+Archiv. Steht der Produktiv-Poller einen Tag still, ist dieser Tag
+unwiederbringlich weg. Kodierungen lassen sich wiederholen, Rohdaten nie.
## Betrieb
@@ -130,5 +130,5 @@ spiegel | derstandard | 0.92 | Niederlage fuer Donald Trump - Gericht in Missou
- Telegram-Fetcher (Telethon/MTProto). Register ist vorbereitet, Eintraege
stehen auf `aktiv = false`. Die Bot-API kann fremde Kanaele nicht lesen.
- Ersatz-URL fuer den BR24-Feed (aktuell 404).
-- Quellenpool von 12 auf ~40 erweitern; Regionalzeitungen ueber SearXNG auf
- Debby suchen.
+- Quellenpool von 12 auf ~40 erweitern; Regionalzeitungen ueber SearXNG
+ suchen.
diff --git a/README.md b/README.md
index 13e98bb..ea86677 100644
--- a/README.md
+++ b/README.md
@@ -1,44 +1,48 @@
-# swp-01-ingest
+# swp-01-ingest — Wurzelwerk
-Stufe 0/1 der Lagebild-Pipeline: Quellenregister und Roh-Erfassung
-(RSS-Poller, Senken Postgres oder gzip-JSONL). Details zu Betrieb,
-Verhalten und offenen Punkten stehen in [`NOTES.md`](NOTES.md).
+Stufe 0/1 der Wurzelwerk-Pipeline (Stinkwurzpresse, SWP): Quellenregister
+und Roh-Erfassung (RSS-Poller, Senken Postgres oder gzip-JSONL). Details zu
+Betrieb, Verhalten und offenen Punkten stehen in [`NOTES.md`](NOTES.md).
-## Deploy (Bebop, Postgres + Podman/Quadlet)
+## Deploy (Server mit Postgres + Podman/Quadlet)
```sh
# 1. Schema einspielen
psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f schema.sql
# 2. Image bauen
-podman build -t localhost/lagebild-ingest:latest .
+podman build -t localhost/wurzelwerk-ingest:latest .
# 3. Konfiguration ablegen
-mkdir -p ~/.config/lagebild
-cp ingest.env.example ~/.config/lagebild/ingest.env
-cp sources.toml ~/.config/lagebild/sources.toml
-chmod 600 ~/.config/lagebild/ingest.env
-$EDITOR ~/.config/lagebild/ingest.env
+mkdir -p ~/.config/wurzelwerk
+cp ingest.env.example ~/.config/wurzelwerk/ingest.env
+cp sources.toml ~/.config/wurzelwerk/sources.toml
+chmod 600 ~/.config/wurzelwerk/ingest.env
+$EDITOR ~/.config/wurzelwerk/ingest.env
# 4. Quadlet installieren
mkdir -p ~/.config/containers/systemd
-cp lagebild-ingest.container lagebild.network ~/.config/containers/systemd/
+cp wurzelwerk-ingest.container wurzelwerk.network ~/.config/containers/systemd/
systemctl --user daemon-reload
-systemctl --user start lagebild-ingest
-journalctl --user -u lagebild-ingest -f
+systemctl --user start wurzelwerk-ingest
+journalctl --user -u wurzelwerk-ingest -f
# Damit der Dienst ohne offene Sitzung weiterlaeuft:
loginctl enable-linger "$USER"
```
`sources.toml` ist eingehaengt, nicht ins Image gebacken: eine neue Quelle
-ist ein `systemctl --user restart lagebild-ingest`, kein Neubau.
+ist ein `systemctl --user restart wurzelwerk-ingest`, kein Neubau.
-## Deploy (Pi 5, ohne Postgres/Container)
+## Deploy (Zweitgeraet ohne Postgres/Container, z. B. als Schatten-Ingest)
+
+Fuer ein schlankes Zweitsystem ohne Postgres und ohne Container genuegt
+Python 3.11+ mit den Paketen aus `requirements.txt`:
```sh
-python3 poller.py --sink jsonl:/var/lib/lagebild/schatten
+python3 poller.py --sink jsonl:/pfad/zu/deinem/ablageordner
```
Als `systemd --user`-Unit mit `Restart=always` einrichten (siehe
-`lagebild-robots.service` / `.timer` fuer den woechentlichen Robots-Check).
+`wurzelwerk-robots.service` / `.timer` fuer den woechentlichen
+Robots-Check).
diff --git a/ingest.env.example b/ingest.env.example
index daeae8b..763dcb6 100644
--- a/ingest.env.example
+++ b/ingest.env.example
@@ -1,10 +1,10 @@
-# Nach ~/.config/lagebild/ingest.env kopieren und ausfuellen (chmod 600).
+# Nach ~/.config/wurzelwerk/ingest.env kopieren und ausfuellen (chmod 600).
#
# Bei rootless Podman erreichen sich Container ueber ein gemeinsames Netz per
# Containername. Liegt Postgres bereits in einem Netz, dort denselben Namen
# eintragen wie in der Zeile Network= der Quadlet-Datei.
-DATABASE_URL=postgresql://lagebild:GEHEIM@lagebild-pg:5432/lagebild
+DATABASE_URL=postgresql://wurzelwerk:GEHEIM@wurzelwerk-pg:5432/wurzelwerk
# Kontaktadresse gehoert in den User-Agent: wer unsere Abrufe sieht, soll
# wissen, wen er anschreiben kann.
-INGEST_USER_AGENT=lagebild-ingest/0.1 (+https://DEINE-DOMAIN/lagebild; kontakt@DEINE-DOMAIN)
+INGEST_USER_AGENT=wurzelwerk-ingest/0.1 (+https://stinkwurzpresse.de/wurzelwerk; kontakt@stinkwurzpresse.de)
diff --git a/lagebild.network b/lagebild.network
deleted file mode 100644
index 26916bb..0000000
--- a/lagebild.network
+++ /dev/null
@@ -1,6 +0,0 @@
-# Ablegen unter ~/.config/containers/systemd/lagebild.network
-[Unit]
-Description=Lagebild internes Netz
-
-[Network]
-NetworkName=lagebild
diff --git a/poller.py b/poller.py
index 1014b45..17d3ee1 100755
--- a/poller.py
+++ b/poller.py
@@ -6,8 +6,8 @@ jedes neue Item roh ab. Bewusst ohne Kodierung: was hier landet, soll sich
beliebig oft neu kodieren lassen.
Zwei Senken:
- --sink postgres://... Bebop, die eigentliche Datenbank
- --sink jsonl:/pfad/dir Pi 5, Schatten-Ingest als gzip-JSONL pro Slot
+ --sink postgres://... Produktivbetrieb, die eigentliche Datenbank
+ --sink jsonl:/pfad/dir Schatten-Ingest als gzip-JSONL pro Slot
Aufrufe:
poller.py --sink "$DATABASE_URL" # Dauerbetrieb, 15-Minuten-Takt
@@ -38,7 +38,7 @@ from email.utils import parsedate_to_datetime
HIER = pathlib.Path(__file__).parent
USER_AGENT = os.environ.get(
"INGEST_USER_AGENT",
- "lagebild-ingest/0.1 (+https://example.org/lagebild; kontakt@example.org)",
+ "wurzelwerk-ingest/0.1 (+https://stinkwurzpresse.de/wurzelwerk; kontakt@stinkwurzpresse.de)",
)
TAKT = 15 * 60 # Slotlaenge in Sekunden, wie bei GDELT
VERSATZ = 30 # Sekunden nach der Slotgrenze, nicht exakt darauf
@@ -184,7 +184,7 @@ class JsonlSenke:
"""Schatten-Ingest fuer den Pi: gzip-JSONL, ein Verzeichnis pro Tag.
Kein Schema, keine Abfragen - nur die Garantie, dass die Rohdaten noch
- da sind, wenn Bebop einen Tag lang stillstand. Die SQLite daneben haelt
+ da sind, wenn der Produktiv-Poller einen Tag lang stillstand. Die SQLite daneben haelt
nur die gesehenen Schluessel, damit nicht bei jedem Slot der komplette
Feed erneut geschrieben wird.
"""
diff --git a/lagebild-ingest.container b/wurzelwerk-ingest.container
similarity index 66%
rename from lagebild-ingest.container
rename to wurzelwerk-ingest.container
index dd8d75a..155825b 100644
--- a/lagebild-ingest.container
+++ b/wurzelwerk-ingest.container
@@ -1,29 +1,29 @@
# Quadlet-Unit fuer rootless Podman.
-# Ablegen unter ~/.config/containers/systemd/lagebild-ingest.container,
-# danach: systemctl --user daemon-reload && systemctl --user start lagebild-ingest
+# Ablegen unter ~/.config/containers/systemd/wurzelwerk-ingest.container,
+# danach: systemctl --user daemon-reload && systemctl --user start wurzelwerk-ingest
#
# Der Poller laeuft dauerhaft und taktet sich selbst auf die 15-Minuten-Grenzen.
# Deshalb kein systemd-Timer: ein Timer wuerde den bedingten GET-Zustand
# (ETag/Last-Modified) bei jedem Start neu aufbauen muessen.
[Unit]
-Description=Lagebild Ingest-Poller
+Description=Wurzelwerk Ingest-Poller
After=network-online.target
Wants=network-online.target
[Container]
-Image=localhost/lagebild-ingest:latest
-ContainerName=lagebild-ingest
+Image=localhost/wurzelwerk-ingest:latest
+ContainerName=wurzelwerk-ingest
AutoUpdate=local
-EnvironmentFile=%h/.config/lagebild/ingest.env
+EnvironmentFile=%h/.config/wurzelwerk/ingest.env
# Quellenregister von aussen einhaengen: eine neue Quelle ist dann ein
# Neustart, kein Neubau des Images.
-Volume=%h/.config/lagebild/sources.toml:/app/sources.toml:ro,Z
+Volume=%h/.config/wurzelwerk/sources.toml:/app/sources.toml:ro,Z
# Dasselbe Netz wie der Postgres-Container.
-Network=lagebild.network
+Network=wurzelwerk.network
NoNewPrivileges=true
ReadOnly=true
diff --git a/lagebild-robots.service b/wurzelwerk-robots.service
similarity index 62%
rename from lagebild-robots.service
rename to wurzelwerk-robots.service
index 1e10e34..9d74b5d 100644
--- a/lagebild-robots.service
+++ b/wurzelwerk-robots.service
@@ -3,11 +3,11 @@
# damit systemd den Fehlerzustand sichtbar haelt.
[Unit]
-Description=Lagebild - robots.txt der Quellen pruefen
+Description=Wurzelwerk - robots.txt der Quellen pruefen
[Service]
Type=oneshot
ExecStart=/usr/bin/podman run --rm \
--network=host \
- -v %h/.config/lagebild/sources.toml:/app/sources.toml:ro \
- localhost/lagebild-ingest:latest --check-robots
+ -v %h/.config/wurzelwerk/sources.toml:/app/sources.toml:ro \
+ localhost/wurzelwerk-ingest:latest --check-robots
diff --git a/lagebild-robots.timer b/wurzelwerk-robots.timer
similarity index 57%
rename from lagebild-robots.timer
rename to wurzelwerk-robots.timer
index 41a9077..5e20f87 100644
--- a/lagebild-robots.timer
+++ b/wurzelwerk-robots.timer
@@ -1,8 +1,8 @@
# Nach ~/.config/systemd/user/ ablegen, dann:
-# systemctl --user enable --now lagebild-robots.timer
+# systemctl --user enable --now wurzelwerk-robots.timer
[Unit]
-Description=Lagebild - woechentliche robots.txt-Pruefung
+Description=Wurzelwerk - woechentliche robots.txt-Pruefung
[Timer]
OnCalendar=Mon 05:30
diff --git a/wurzelwerk.network b/wurzelwerk.network
new file mode 100644
index 0000000..437792a
--- /dev/null
+++ b/wurzelwerk.network
@@ -0,0 +1,6 @@
+# Ablegen unter ~/.config/containers/systemd/wurzelwerk.network
+[Unit]
+Description=Wurzelwerk internes Netz
+
+[Network]
+NetworkName=wurzelwerk