implement warn on dnssd name collisions

This commit is contained in:
juergen committed 2026-10-20 11:11:45 +02:00
1 parent 3910ab974c
commit f15ea07f44
3 files changed
+159 -16

No files matched your search

@@ -2,7 +2,7 @@
## 1. entrypoint: Erkennung von DNS-SD-Namenskollisionen
- [ ] 1.1 `entrypoint.sh`: Funktion `check_dnssd_name_collisions` ergänzen,
- [x] 1.1 `entrypoint.sh`: Funktion `check_dnssd_name_collisions` ergänzen,
aufgerufen nach dem TCP-631-Check und vor
`log "ready: CUPS on 631/tcp, mDNS on 5353/udp"`. Queue-Namen und
Descriptions via `LC_ALL=C lpstat -l -p` lesen (Locale-fest, live aus
@@ -13,7 +13,7 @@
Verifikation: `sh -n entrypoint.sh` läuft fehlerfrei,
`grep -n 'check_dnssd_name_collisions' entrypoint.sh` zeigt Definition
und Aufruf an der vorgesehenen Stelle.
- [ ] 1.2 Bei gleichen abgeleiteten Namen pro Kollisionsgruppe über den
- [x] 1.2 Bei gleichen abgeleiteten Namen pro Kollisionsgruppe über den
bestehenden `log()`-Stil warnen (Mehrzeiler, analog zum TCP-631-Block):
kollidierender Anzeigename `<basis> @ <host>`, betroffene Queue-Namen,
Abhilfe (einzigartige Description je Queue per `lpadmin -D` oder
@@ -23,7 +23,7 @@
Verifikation: `grep -n 'warning:' entrypoint.sh` findet die neuen
Warnzeilen inkl. `lpadmin -D`-Remedies; das Verhalten selbst prüfen die
Aufgaben 3.2 (Kollision) und 3.3 (keine Kollision).
- [ ] 1.3 Alle Parseschritte abfangen, ohne dass `set -eu` den Start abbricht
- [x] 1.3 Alle Parseschritte abfangen, ohne dass `set -eu` den Start abbricht
(`|| true` / geblockte Substitutionen): fehlendes oder unlesbares
`printers.conf`,
fehlerhaftes `lpstat` → Prüfung still überspringen oder als geteilt
@@ -33,7 +33,7 @@
## 2. README: Troubleshooting und PRINTER_NAME-Korrektur
- [ ] 2.1 `README.md`: neuen Troubleshooting-Abschnitt
- [x] 2.1 `README.md`: neuen Troubleshooting-Abschnitt
„macOS shows the printer offline after some time" (englisch, Stil der
bestehenden `###`-Abschnitte) einfügen: Symptom (Queue existiert,
Status offline, erst nach Stunden/Wechseln sichtbar), Ursache
@@ -46,7 +46,7 @@
Hinweis, warum Restart allein nicht hilft: Kollision ist deterministisch).
Verifikation: jeder im Abschnitt stehende Befehl läuft unverändert gegen
den laufenden Container (lokal aus 3.1 bzw. gegen podp).
- [ ] 2.2 `PRINTER_NAME`-Wording korrigieren: README-Tabelle („Also used as
- [x] 2.2 `PRINTER_NAME`-Wording korrigieren: README-Tabelle („Also used as
the name advertised via AirPrint/DNS-SD") und Fließtext unter
*Environment variables* sowie die Kopfkommentarzeile in
`entrypoint.sh` („advertised (DNS-SD) name") präzisieren: Der
@@ -57,23 +57,23 @@
## 3. Integrationstests (podman, lokal)
- [ ] 3.1 Image bauen und ohne Kollision starten.
- [x] 3.1 Image bauen und ohne Kollision starten.
Verifikation: `podman build -t printserver:latest .` endet ohne Fehler;
`podman run …` erreicht „ready: CUPS on 631/tcp, mDNS on 5353/udp";
`podman logs` enthält KEINE Kollisions-Warnung (falls 631 nicht bindet:
`podman machine ssh -- sudo sysctl -w net.ipv4.ip_unprivileged_port_start=631`
wie bei der Vorgängeränderung).
- [ ] 3.2 Kollision erzeugen und Warnung nachweisen.
- [x] 3.2 Kollision erzeugen und Warnung nachweisen.
Verifikation: zweite Queue mit der Description des ersten Queues anlegen
(`podman exec printserver lpadmin -p dup -E -v socket://192.0.2.1:9100
-D "<identische Description>"`), danach `podman restart printserver`:
`podman logs` enthält die Warnung mit Anzeigename, beiden Queue-Namen und
Remedie, und der Start endet trotzdem mit „ready" (Warnung nicht fatal).
- [ ] 3.3 Kollision beheben → Warnung verschwindet.
- [x] 3.3 Kollision beheben → Warnung verschwindet.
Verifikation: `podman exec printserver lpadmin -p dup -D "Dup Queue"`
(eindeutige Description), `podman restart printserver`: das Log enthält
keine Kollisions-Warnung mehr und endet mit „ready".
- [ ] 3.4 Fehlendes `printers.conf` darf den Start nicht brechen.
- [x] 3.4 Fehlendes `printers.conf` darf den Start nicht brechen.
Verifikation: `podman exec printserver sh -c 'cp /etc/cups/printers.conf /tmp/pc.bak && rm /etc/cups/printers.conf'`
danach `podman restart printserver`: der Container erreicht „ready";
anschließend Status wiederherstellen