Vor dem Rollout durchgesehen und die verbliebenen Stellen geschlossen, an
denen etwas schiefgehen konnte, ohne dass es irgendwo sichtbar wurde.
Datenverlust:
- veraPDF: das in [verapdf].binary konfigurierte Programm wird im Preflight
geprueft. Bisher galt bei falschem Pfad JEDE Datei als "nicht konform" —
Ergebnis nach error/, Original geloescht (Default delete). run_verapdf()
trennt jetzt ausserdem ein echtes FAIL-Urteil von einer Stoerung
(VeraPdfUnavailable: nicht startbar, abgestuerzt, kein PASS/FAIL in der
Ausgabe). Bei Stoerung wandern Original UND Ergebnis nach error/, das
Original wird nicht entsorgt.
- Gleichnamige Dateien wurden in outgoing/, error/ und beim Ordner-Upload
mit abweichendem target kommentarlos ueberschrieben. Jetzt Zeitstempel
daneben, mit Warnung; ProcessResult.output traegt den echten Pfad.
Robustheit:
- Kaputtes oder nicht lesbares TOML beim Start: Exit 2 statt Traceback.
- RestartPreventExitStatus=2 in der Unit — Exit 2 (Config/Preflight) laeuft
nicht mehr endlos neu, die Instanz bleibt sichtbar failed stehen.
- Toter watchdog-Observer wird erkannt: Exit 3, systemd setzt den Watch neu
auf. Vorher blieb die Unit "active" und verarbeitete nichts mehr.
- Relative Pfade in [paths]/archive_dir/target sind ein Config-Fehler statt
still unter /opt zu landen.
- Fehler beim Archivieren entwertet den Durchlauf nicht mehr: Upload und
Mail laufen, Sichtbarkeit ueber log.error + "OK mit Warnung"-Mail.
- Nicht-PDFs in incoming/ werden beim Start-Scan gesammelt gemeldet.
- Logging explizit nach stdout (die Doku versprach das schon).
Struktur:
- Neue lib/common.sh, von install.sh und update.sh gesourct. Die doppelte
venv_is_healthy() gibt es nur noch einmal, in der gruendlichen Fassung —
die schlanke in install.sh haette eine nach einem Distro-Sprung kaputte
venv als gesund durchgewunken (nachgewiesen).
- install.sh warnt in Containern, wenn systemd-journald nicht laeuft.
Doku: Dateisystem-Festlegung (ext4/xfs/zfs, kein CIFS/NFS wegen inotify),
Debian 13 in LXC auf Proxmox scheitert an journald (243/CREDENTIALS,
AppArmor blockiert sd-mkdcreds) inkl. Abhilfe, echte Speicher-Messwerte,
Exit-Code-Tabelle.
254 Tests gruen (vorher 152).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Datenverlust behoben:
- Nach hartem Stopp blieb das Original in working/ liegen und wurde nie
wieder angefasst (_scan_existing sah nur incoming/). Es wird jetzt beim
Start an Ort und Stelle wieder aufgegriffen, mit Kollisionsschutz gegen
gleichnamige neue Scans; angefangene __ocr_-Fragmente werden geloescht.
- TimeoutStopSec 30 -> 300, damit laufendes OCR zu Ende laufen darf.
Config-Drift sichtbar gemacht:
- Neues --check-config (Exit 0 sauber / 1 Warnungen / 2 Fehler), das
update.sh vor dem Neustart ueber alle Instanz-Configs laufen laesst.
- Warnungen fuer [ocr].timeout >= 900 (seit 0.4.0 pro SEITE) und gesetztes
pdfa_level, beim Dienststart wie im Check.
- Unbekannte Config-Keys werden nicht mehr still verworfen, sondern genannt.
Updater feldtauglich:
- venv-Health-Check erkennt toten Symlink UND Versions-Drift gegen das
System-Python; --rebuild-venv als ausdruecklicher Weg nach einem Debian-
Major-Upgrade. Neubau ist ganz-oder-gar-nicht mit Rollback.
- apt-Pakete werden auch beim Update synchronisiert (Quelle: install.sh).
- Instanz-Erfassung inkl. activating/failed, Verifikation prueft is-failed
und NRestarts statt sleep 1 + is-active.
- Backup enthaelt Configs, Unit, Drop-ins und pip-freeze.txt, liegt auf
0600 und rotiert auf 5; schlaegt es fehl, bricht das Update vorher ab.
- ERR-Trap faehrt die vorher laufenden Instanzen wieder hoch.
- lxc-compat.conf wird beim Update nachgezogen.
- requirements.txt gepinnt (ocrmypdf 16.13.0, geprueft fuer Python 3.11+3.13).
Doku in Installation / Update / OS-Upgrade aufgeteilt (docs/).
135 Tests gruen.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- #4: LXC/Container Drop-in (lxc-compat.conf) deaktiviert systemd-Hardening;
Installer erkennt Container automatisch und bietet Drop-in an
- #5: WorkingDirectory=/opt/pdf-ocr-hotfolder in Template-Unit ergänzt
- #6: Installer bietet auf Debian 12 bei betroffenen GS-Versionen
automatisch bookworm-backports Upgrade an (statt nur Warnung)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- pdf-ocr-hotfolder@<name>.service mit Config pro Instanz
- install.sh als Instanz-Manager: erkennt bestehende, fragt nach weiteren
- Optional eigener Service-User pro Instanz (systemd drop-in)
- update.sh stoppt/startet alle aktiven Instanzen automatisch
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>