diff --git a/CHANGELOG.md b/CHANGELOG.md index afca8b9..60ab2fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## [0.3.1] - 2026-04-10 + +### Fixed +- **Issue #4**: LXC/Container-Kompatibilität — systemd-Hardening (`PrivateTmp`, `ProtectSystem`, etc.) + verursacht Error 226/NAMESPACE in LXC-Containern. Installer erkennt Container-Umgebung automatisch + und bietet ein Drop-in an. Zusätzlich liegt `systemd/lxc-compat.conf` als Vorlage im Repo. +- **Issue #5**: `WorkingDirectory=/opt/pdf-ocr-hotfolder` in der systemd Template-Unit ergänzt — + ohne diesen Eintrag konnte das Python-Modul nicht gefunden werden. +- **Issue #6**: Auf Debian 12 bietet der Installer bei betroffenen Ghostscript-Versionen (10.0.0–10.02.0) + jetzt automatisch an, bookworm-backports zu aktivieren und GS zu upgraden (statt nur zu warnen). + ## [0.3.0] - 2026-04-09 ### Added diff --git a/README.md b/README.md index 4bffa1c..b901708 100644 --- a/README.md +++ b/README.md @@ -190,6 +190,24 @@ Service-User braucht **rw** auf alle vier Verzeichnisse unter `/var/lib/pdf-ocr- sudo chown -R DOMAIN\\scanuser:DOMAIN\\scangroup /var/lib/pdf-ocr-hotfolder ``` +### LXC/Container: Error 226/NAMESPACE +In LXC-Containern schlagen systemd-Hardening-Optionen fehl. Der Installer erkennt Container automatisch und bietet ein Drop-in an. Manuell: +```bash +sudo mkdir -p /etc/systemd/system/pdf-ocr-hotfolder@.service.d/ +sudo cp /opt/pdf-ocr-hotfolder/systemd/lxc-compat.conf \ + /etc/systemd/system/pdf-ocr-hotfolder@.service.d/ +sudo systemctl daemon-reload +sudo systemctl restart 'pdf-ocr-hotfolder@*' +``` + +### Ghostscript PDF/A-Bug auf Debian 12 +GS 10.00.0–10.02.0 (Debian 12 Default) zerstört OCR bei `pdfa_level` + `skip_text=true`. Der Installer bietet automatisch bookworm-backports an. Manuell: +```bash +echo 'deb http://deb.debian.org/debian bookworm-backports main' | \ + sudo tee /etc/apt/sources.list.d/bookworm-backports.list +sudo apt update && sudo apt install -t bookworm-backports ghostscript +``` + ### veraPDF-Validierung schlägt immer fehl veraPDF binary prüfen (`[verapdf].binary`). Wenn nicht zwingend gebraucht: `enabled = false`. @@ -221,5 +239,5 @@ MIT — © Sonith UG --- -**Version:** 0.2.0 +**Version:** 0.3.1 **Repo:** https://gitea.sonith.de/sonith_ug/pdf-ocr-hotfolder diff --git a/VERSION b/VERSION index 0d91a54..9e11b32 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.3.0 +0.3.1 diff --git a/install.sh b/install.sh index 634fe95..e85ab07 100755 --- a/install.sh +++ b/install.sh @@ -52,7 +52,7 @@ install_base() { icc-profiles-free ca-certificates curl log_info "System-Pakete ok ✓" - # Ghostscript-Versions-Check (Issue #3) + # Ghostscript-Versions-Check (Issue #3 + Issue #6) if command -v gs >/dev/null 2>&1; then GS_VER="$(gs --version 2>/dev/null || echo 0.0)" log_info "Ghostscript: $GS_VER" @@ -62,16 +62,50 @@ install_base() { log_warn "═══════════════════════════════════════════════════════════════" log_warn "Ghostscript $GS_VER ist vom PDF/A-Bug betroffen (10.0.0–10.02.0)." log_warn "Mit pdfa_level + skip_text=true kann ocrmypdf KEINE PDFs verarbeiten." - log_warn "" - log_warn "Workarounds:" - log_warn " 1. ghostscript aus bookworm-backports installieren (>=10.02.1)" - log_warn " 2. In der Config [ocr].pdfa_level = \"\" setzen (Default ab v0.2.2)" log_warn "═══════════════════════════════════════════════════════════════" echo + # Prüfe ob Debian bookworm (12) — Backports anbieten + if grep -q 'bookworm' /etc/os-release 2>/dev/null; then + read -r -p "Ghostscript via bookworm-backports upgraden? [J/n]: " UPGRADE_GS + UPGRADE_GS="${UPGRADE_GS:-J}" + if [[ "$UPGRADE_GS" =~ ^[JjYy]$ ]]; then + log_info "Aktiviere bookworm-backports..." + if ! grep -q 'bookworm-backports' /etc/apt/sources.list /etc/apt/sources.list.d/*.list 2>/dev/null; then + echo 'deb http://deb.debian.org/debian bookworm-backports main' \ + > /etc/apt/sources.list.d/bookworm-backports.list + apt-get update -qq + fi + apt-get install -y -t bookworm-backports ghostscript + GS_VER_NEW="$(gs --version 2>/dev/null || echo '?')" + log_info "Ghostscript aktualisiert: $GS_VER → $GS_VER_NEW ✓" + else + log_warn "Workaround: In der Config [ocr].pdfa_level = \"\" setzen (Default ab v0.2.2)" + fi + else + log_warn "Kein Debian bookworm erkannt — manuelles Upgrade nötig." + log_warn "Workaround: In der Config [ocr].pdfa_level = \"\" setzen (Default ab v0.2.2)" + fi + echo ;; esac fi + # LXC/Container-Erkennung (Issue #4) + if systemd-detect-virt --container -q 2>/dev/null; then + VIRT_TYPE="$(systemd-detect-virt --container 2>/dev/null || echo 'container')" + log_warn "Container-Umgebung erkannt ($VIRT_TYPE)." + log_warn "systemd-Hardening kann in Containern fehlschlagen (Error 226/NAMESPACE)." + read -r -p "LXC-Kompatibilitäts-Drop-in installieren? [J/n]: " LXC_FIX + LXC_FIX="${LXC_FIX:-J}" + if [[ "$LXC_FIX" =~ ^[JjYy]$ ]]; then + local LXC_DROPIN_DIR="/etc/systemd/system/pdf-ocr-hotfolder@.service.d" + mkdir -p "$LXC_DROPIN_DIR" + cp "$REPO_DIR/systemd/lxc-compat.conf" "$LXC_DROPIN_DIR/lxc-compat.conf" + systemctl daemon-reload + log_info "LXC-Kompatibilitäts-Drop-in installiert ✓" + fi + fi + log_step "Default-User '$DEFAULT_USER' prüfen" if id "$DEFAULT_USER" &>/dev/null; then log_info "'$DEFAULT_USER' existiert bereits" diff --git a/pdf_ocr_hotfolder/__init__.py b/pdf_ocr_hotfolder/__init__.py index 2bf9449..098b8ad 100644 --- a/pdf_ocr_hotfolder/__init__.py +++ b/pdf_ocr_hotfolder/__init__.py @@ -1,3 +1,3 @@ """PDF OCR Hotfolder — Scanner-PDFs automatisch durchsuchbar machen.""" -__version__ = "0.1.0" +__version__ = "0.3.1" diff --git a/systemd/lxc-compat.conf b/systemd/lxc-compat.conf new file mode 100644 index 0000000..69827c9 --- /dev/null +++ b/systemd/lxc-compat.conf @@ -0,0 +1,10 @@ +# Drop-in für LXC/Container-Betrieb +# Kopieren nach: /etc/systemd/system/pdf-ocr-hotfolder@.service.d/lxc-compat.conf +# Danach: systemctl daemon-reload && systemctl restart 'pdf-ocr-hotfolder@*' + +[Service] +PrivateTmp=false +ProtectSystem=false +ProtectKernelTunables=false +ProtectKernelModules=false +ProtectControlGroups=false diff --git a/systemd/pdf-ocr-hotfolder@.service b/systemd/pdf-ocr-hotfolder@.service index 7d43a8c..5d7652b 100644 --- a/systemd/pdf-ocr-hotfolder@.service +++ b/systemd/pdf-ocr-hotfolder@.service @@ -7,6 +7,7 @@ Wants=network-online.target Type=simple User=pdfocr Group=pdfocr +WorkingDirectory=/opt/pdf-ocr-hotfolder ExecStart=/opt/pdf-ocr-hotfolder/venv/bin/python -m pdf_ocr_hotfolder --config /etc/pdf-ocr-hotfolder/%i.toml Restart=on-failure RestartSec=5