veroeffentliche_04.py: Upload mit rsync --delete und Nachpruefung
Der Anlass war messbar. Der Live-Stand vor dem Skript:
/OR/ 200
/OR/anhang-glossar-literatur.html 200 <- Leiche des vorigen Stands
/OR/anhang-glossar.html 404
/OR/notebooks.html 404
/OR/Notebooks_04.zip 404
/OR/Notebooks_04/ 403
scp -r ueberschreibt nur, es loescht nie - die alte Glossar-Seite bliebe
dauerhaft erreichbar. Das Zielverzeichnis vorher zu leeren waere die grobe
Antwort: Bricht die Uebertragung von 23 MB in 213 Dateien ab, ist die Website
tot. rsync --delete uebertraegt nur Geaendertes und entfernt genau das, was
verschwunden ist.
Der zweite Grund wiegt schwerer: Die Website hing wochenlang einen Bau
zurueck, ohne dass es auffiel. Vier Schritte:
1. Vorpruefung - ist eine Quelldatei neuer als die gebaute Website, Abbruch.
Ebenso: PDF der Website byte-genau wie das gebaute, Verzeichnis-
Weiterleitungen vorhanden (der Grund fuer den 403).
2. Probelauf - zaehlt Uebertragungen und Loeschungen. Mehr als 30 Loeschungen
brechen ab; das ist der Schutz gegen einen falschen Zielpfad, mit dem
--delete sonst ein fremdes Verzeichnis ausraeumt. --loeschgrenze hebt an.
3. Uebertragung (rsync -rltz --chmod=D755,F644 ueber ssh).
4. Nachpruefung - 14 Adressen per HTTP, Statuscode gegen Erwartung. Darunter
die Probe, dass die entfernte Seite wirklich 404 liefert.
Anmeldung per SSH-Schluessel, nicht per Passwort in der .env: rsync und scp
haben keine Passwort-Option, ein Passwort braeuchte sshpass und staende
waehrend der Uebertragung in der Prozessliste. Die .env (in .gitignore,
Vorlage .env.beispiel) enthaelt nur Host, Benutzer, Zielpfad und URL.
Beim ersten Test lief die Pruefung in eine irrefuehrende Meldung ("kein rsync
installiert"), waehrend in Wahrheit schon die Anmeldung fehlschlug. Die
Pruefung unterscheidet die Faelle jetzt am ssh-Rueckgabewert 255 und nennt
ssh-copy-id.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
567bfa799a
commit
d566cf8dac
5 changed files with 450 additions and 2 deletions
39
PROGRESS.md
39
PROGRESS.md
|
|
@ -2078,6 +2078,45 @@ Gegenprobe: drei Läufe mit `PYTHONHASHSEED=random` liefern dieselbe Prüfsumme
|
|||
`3da5b9b2…`. Keine Hauptzeile trägt mehr einen doppelten Link; die 219 Fachbegriffe und 328
|
||||
Indexmarken bleiben unverändert.
|
||||
|
||||
### ✅ `veroeffentliche_04.py` — der Upload wird nachprüfbar
|
||||
|
||||
Der Anlass war messbar. Der Live-Stand vor dem Skript:
|
||||
|
||||
```
|
||||
/OR/ 200
|
||||
/OR/anhang-glossar-literatur.html 200 <- Leiche des vorigen Stands
|
||||
/OR/anhang-glossar.html 404
|
||||
/OR/notebooks.html 404
|
||||
/OR/Notebooks_04.zip 404
|
||||
/OR/Notebooks_04/ 403
|
||||
```
|
||||
|
||||
**`scp -r` überschreibt nur, es löscht nie.** Die alte Glossar-Seite bliebe nach einem
|
||||
`scp`-Upload dauerhaft erreichbar. Das Zielverzeichnis vorher zu leeren wäre die grobe
|
||||
Antwort: Bricht die Übertragung von 23 MB in 213 Dateien ab, ist die Website tot.
|
||||
`rsync --delete` überträgt nur Geändertes und entfernt genau das, was verschwunden ist.
|
||||
|
||||
Der zweite Grund wiegt schwerer: **Die Website hing wochenlang einen Bau zurück**, ohne dass
|
||||
es auffiel. Deshalb prüft das Skript vorher, ob eine Quelldatei neuer ist als die gebaute
|
||||
Website, ob das PDF der Website byte-genau dem gebauten entspricht und ob die
|
||||
Verzeichnis-Weiterleitungen vorhanden sind (der Grund für den 403). Und es prüft
|
||||
**hinterher per HTTP** vierzehn Adressen nach — einschließlich der Probe, dass die entfernte
|
||||
Seite wirklich 404 liefert.
|
||||
|
||||
Dazwischen ein Probelauf, der zählt: Mehr als 30 Löschungen brechen ab. Das ist der Schutz
|
||||
gegen einen falschen Zielpfad — mit `--delete` räumt ein Tippfehler sonst ein fremdes
|
||||
Verzeichnis aus.
|
||||
|
||||
**Anmeldung per SSH-Schlüssel, nicht per Passwort in der `.env`.** `rsync` und `scp` haben
|
||||
keine Passwort-Option; ein Passwort bräuchte `sshpass` und stünde während der Übertragung in
|
||||
der Prozessliste. Die `.env` (in `.gitignore`, Vorlage `.env.beispiel`) enthält deshalb nur
|
||||
Host, Benutzer, Zielpfad und URL.
|
||||
|
||||
**Beim ersten Test lief die Prüfung in eine irreführende Meldung:** „Auf dem Server ist kein
|
||||
rsync installiert" — tatsächlich schlug schon die Anmeldung fehl, weil der öffentliche
|
||||
Schlüssel noch nicht auf `jamulix.de` liegt. Die Prüfung unterscheidet die Fälle jetzt am
|
||||
ssh-Rückgabewert 255 und nennt `ssh-copy-id`.
|
||||
|
||||
---
|
||||
|
||||
## 8. Commit-Historie des V04-Strangs
|
||||
|
|
|
|||
Loading…
Reference in a new issue