fix: Ghostscript-Angebot log nicht mehr, fehlende Voraussetzungen dokumentiert (v0.7.1)

Befunde aus dem ersten echten Erstinstallations-Test auf frischen Debian-12-
und Debian-13-Containern. Der Weg selbst hat getragen (Basis-Install,
Instanz-Anlage, zweite Instanz, Update mit Rauchtest, Rollback) — diese
Stellen haben gelogen oder gefehlt:

- Das Ghostscript-Backports-Angebot auf Debian 12 war ein garantierter
  Leerlauf, der "aktualisiert ✓" meldete: bookworm-backports enthaelt gar
  kein ghostscript (am Paketindex verifiziert). Die Routine sucht jetzt den
  echten Kandidaten, vergleicht vorher/nachher und raeumt eine nur zur Probe
  angelegte Quelle wieder weg.
- Derselbe untaugliche Rat stand in der Preflight-Meldung, der
  pdfa_level-Warnung, config.example.toml und vier Doku-Dateien — ueberall
  ersetzt durch die echten Optionen.
- Mehrzeilige Log-Hinweise waren durch "echo -e" zerrissen und nicht
  kopierbar; log_* nutzt jetzt printf mit %s.
- pip-freeze.txt landete beim Rollback als /pip-freeze.txt im
  Wurzelverzeichnis, liegt jetzt unter opt/pdf-ocr-hotfolder/.
- git und sudo fehlen auf dem Proxmox-Debian-Template; "sudo ./install.sh"
  scheitert dort. Beide Wege dokumentiert, git als Voraussetzung ergaenzt,
  HTTPS-Clone als Normalfall.
- Rollback: systemctl start kann kein Glob. journald-Reparatur: Instanzen
  danach neu starten, sonst bleibt das Journal leer.

254 Tests gruen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-23 01:36:42 +02:00
parent cd803a3dfe
commit 465ff8873f
15 changed files with 611 additions and 101 deletions
+30 -4
View File
@@ -137,13 +137,39 @@ def test_healthy_gs_passes_on_ocrmypdf_16() -> None:
# ---------------- Meldungstext ----------------
def test_error_message_names_both_remedies() -> None:
"""Der Admin muss aus der Meldung heraus handeln können."""
"""Der Admin muss aus der Meldung heraus handeln können.
Die Wege sind die **echten**: `pdfa_level = ""` (Default), `skip_text =
false` oder eine Distribution mit neuerem Ghostscript (Debian 13: 10.05.1).
Bis v0.7.0 stand hier „Ghostscript aus bookworm-backports" als Weg 1 — das
konnte nie funktionieren, denn bookworm-backports führt gar kein
Ghostscript-Paket (am echten Paketindex verifiziert: 2606 Pakete,
`ghostscript` nicht darunter). Der Rat darf nicht zurückkommen.
"""
# Fall A: ocrmypdf 16.x ohne PDF/A — Weg 1 ist hier, ocrmypdf anzuheben.
with _env("10.0.0", "16.13.0"):
with pytest.raises(PreflightError) as exc_info:
check_preflight(pdfa_level="", skip_text=True)
msg = str(exc_info.value)
assert "backports" in msg, "Weg 1: Ghostscript aus bookworm-backports"
assert "skip_text = false" in msg, "Weg 2: skip_text abschalten"
msg_no_pdfa = str(exc_info.value)
assert "ocrmypdf >= 17" in msg_no_pdfa, "Weg 1: ocrmypdf anheben"
assert "skip_text = false" in msg_no_pdfa, "Weg 2: skip_text abschalten"
assert "Debian 13" in msg_no_pdfa, "Weg 3: neuere Distribution"
# Fall B: PDF/A gewünscht — Weg 1 ist hier, PDF/A aufzugeben.
with _env("10.0.0", "17.4.1"):
with pytest.raises(PreflightError) as exc_info:
check_preflight(pdfa_level="2", skip_text=True)
msg_pdfa = str(exc_info.value)
assert 'pdfa_level = ""' in msg_pdfa, "Weg 1: PDF/A abschalten"
assert "skip_text = false" in msg_pdfa, "Weg 2: skip_text abschalten"
assert "Debian 13" in msg_pdfa, "Weg 3: neuere Distribution"
# Und in keiner der beiden Meldungen der widerlegte Backports-Rat.
for msg in (msg_no_pdfa, msg_pdfa):
assert "apt install -t bookworm-backports" not in msg
assert "sources.list.d/bookworm-backports.list" not in msg
# Erwähnt werden darf es — aber nur als ausdrückliche Absage.
assert "NICHT" in msg and "kein Ghostscript-Paket" in msg
def test_default_config_pdfa_level_is_empty() -> None: