5.4 KiB
5.4 KiB
Tasks
1. entrypoint: Erkennung von DNS-SD-Namenskollisionen
- 1.1
entrypoint.sh: Funktioncheck_dnssd_name_collisionsergänzen, aufgerufen nach dem TCP-631-Check und vorlog "ready: CUPS on 631/tcp, mDNS on 5353/udp". Queue-Namen und Descriptions viaLC_ALL=C lpstat -l -plesen (Locale-fest, live aus cupsd), Shared-Flag je Queue aus/etc/cups/printers.conf(<Printer …>-Block,Shared yes); unbekannter Shared-Status zählt als geteilt. Pro Queue den Anzeigenamen ableiten: Description, sonst Queue-Name. Verifikation:sh -n entrypoint.shläuft fehlerfrei,grep -n 'check_dnssd_name_collisions' entrypoint.shzeigt Definition und Aufruf an der vorgesehenen Stelle. - 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 perlpadmin -Doder redundante Queue entfernen perlpadmin -x, danach Client-Queue auf dem Mac entfernen und neu hinzufügen — Details im README). Bei eindeutigen Namen keine Warnung ausgeben. Verifikation:grep -n 'warning:' entrypoint.shfindet 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 -euden Start abbricht (|| true/ geblockte Substitutionen): fehlendes oder unlesbaresprinters.conf, fehlerhafteslpstat→ Prüfung still überspringen oder als geteilt annehmen, niemalsexitund niemals Abbruch der Queue-Einrichtung. Verifikation:sh -n entrypoint.shfehlerfrei; Startverhalten mit fehlendemprinters.confist in 3.4 abgedeckt.
2. README: Troubleshooting und PRINTER_NAME-Korrektur
- 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 (macOS pinnt den exakten DNS-SD-Instanznamen"<Description> @ <host>"in diednssd://-Device-URI; zwei Queues mit gleicher Description kollidieren, Avahi registriert nur eine, CUPS 2.4 benennt nicht um), Diagnose-Befehle (podman logsWarnung,dns-sd -B _ipp._tcp,avahi-browse -rt _ipp._tcp,lpstat -l -p,ipptool -tv), Heilung (eindeutige Description bzw.-x, dann Remove/Re-add auf macOS — mit dem 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 the name advertised via AirPrint/DNS-SD") und Fließtext unter Environment variables sowie die Kopfkommentarzeile inentrypoint.sh(„advertised (DNS-SD) name") präzisieren: Der Queue-Name ist nur die Basis, solange keine Description gesetzt ist —PRINTER_DESCRIPTION(bzw.-D) hat Vorrang für den Anzeigenamen. Verifikation:grep -n 'PRINTER_NAME' README.md entrypoint.shzeigt an allen drei Stellen die korrigierte Formulierung mit Description-Vorrang.
3. Integrationstests (podman, lokal)
- 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 logsenthält KEINE Kollisions-Warnung (falls 631 nicht bindet:podman machine ssh -- sudo sysctl -w net.ipv4.ip_unprivileged_port_start=631wie bei der Vorgängeränderung). - 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>"), danachpodman restart printserver:podman logsenthä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.
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.confdarf den Start nicht brechen. Verifikation:podman exec printserver sh -c 'cp /etc/cups/printers.conf /tmp/pc.bak && rm /etc/cups/printers.conf'danachpodman restart printserver: der Container erreicht „ready"; anschließend Status wiederherstellen (podman exec … cp /tmp/pc.bak /etc/cups/printers.conf) bzw. den Testcontainer verwerfen.
Workflow follow-up
- README-Abschnitt und Warnung gegen die echte Konstellation auf
podpprüfen: nach Deploy (Image neu bauen, Quadlet-Restart) muss die Warnung fürlaser/laserdrucker-im-bueroerscheinen, bis die Descriptions eindeutig gemacht oder die redundante Queue entfernt ist — danach muss sie weg sein. - Nach Review und grünem Durchlauf die Änderung mit
/opsx-archivearchivieren und das Ergebnis prüfen.