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>
- Sprach-Abfrage pro Instanz (Default-Vorschlag deu+eng), bewusst
instanz-lokal: ein Hotfolder kann mit "deu" laufen, ein anderer mit
"deu+eng+fra". Hinweis im Prompt, dass jede zusaetzliche Sprache
Laufzeit und Erkennungsqualitaet kostet.
- Jeder Sprachcode wird gegen "tesseract --list-langs" geprueft, fehlende
Pakete (tesseract-ocr-<code>) werden zur Installation angeboten; lehnt
der User ab oder scheitert apt, wird gewarnt und erneut gefragt.
- Abfrage "Original archivieren?" mit $BASE/archive als Default; Archiv
ausserhalb von $BASE wird eigens angelegt und gechownt. Ein Pfad auf
incoming/outgoing/working/error wird abgewiesen.
- sed-Kette der Config-Erzeugung jetzt verankert (^key =) und escaped,
setzt zusaetzlich languages, original_on_success und archive_dir;
die erzeugte Config wird gegen die Eingabe nachgeprueft.
- README und Briefing um "Sprachen pro Instanz" ergaenzt
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Bei fehlgeschlagener veraPDF-Validierung wurde das Original bisher
bedingungslos geloescht. Es folgt jetzt derselben
[output].original_on_success-Regel wie im Erfolgsfall, damit "archive"
das Original nicht ausgerechnet im Fehlerfall verliert.
- Das nie benutzte Logverzeichnis /var/log/pdf-ocr-hotfolder/ wird nicht
mehr angelegt; der Dienst loggt ausschliesslich nach journald.
README und Briefing nennen stattdessen die journalctl-Kommandos.
- 3 neue Tests (95 gesamt)
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>
- config.example.toml: pdfa_level="" als sicherer Default
- check_preflight(pdfa_level) erkennt betroffene GS-Versionen und bricht ab
- install.sh warnt bei betroffenen GS-Versionen
- 19 neue Tests (parametrisiert über Versions-Matrix)
Closes#3
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>
Komplettes Rewrite des alten Bash-Tools `pdf-tool` in Python.
- ocrmypdf als Library, watchdog für Hotfolder, ThreadPool für Parallelität
- Upload-Targets: folder, Nextcloud (WebDAV), SFTP
- E-Mail-Notify, optional veraPDF
- Interaktiver Installer mit Service-User-Support (lokal + AD via SSSD)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>