Den Fotoautomaten-Dienst veröffentlichen und nutzen

LinuxBeginner
Jetzt üben

Einführung

Bei Maple Yard möchten Besucher eine kleine Fotovorschau oder das vollständige Album des Fotoautomaten erhalten. Die Fotoserver funktionieren bereits, aber Besucher sollten keine ausgedruckte IP-Adresse mit Port benötigen. Du veröffentlichst zwei benannte Dienste, entdeckst sie von Clients aus und speicherst die passenden Bildsammlungen, ohne den Infopunkt zu beeinträchtigen.

Du solltest IPv4-Adressen, Hostnamen, Ports, Pfade und Terminalrollen erkennen und schon vollständige Befehle für HTTP-Downloads ausgeführt haben. Das vorherige Projekt zum Veranstaltungsnetz wird empfohlen. DNS-Administration, XML-Erfahrung und Programmierung sind nicht erforderlich. Die geschätzten 60 Minuten umfassen Lesen und gewöhnliche Fehler; es ist eine Schätzung des Autors und keine mit Anfängern gemessene Dauer.

Publisher, Client und New Client sind isolierte Linux-Netzwerkknoten in einem vorbereiteten LAN und teilen sich einen Kernel. Photo Shelf zeigt heruntergeladene Dateien an. Dieses Lab vermittelt mDNS und DNS-SD auf dem lokalen Link, nicht öffentliches DNS, Erkennung über Router hinweg, automatische Autorisierung oder Kompatibilität mit jedem physischen Gerät oder Browser. Die Beispielbilder sind eigene synthetische Illustrationskarten, keine Fotografien echter Teilnehmer.

Einen funktionierenden Dienst entdecken

In diesem Schritt nutzt du den funktionierenden Infopunkt, bevor du etwas veröffentlichst. Beginne in Client. Das Terminal startet in /home/labex/project/photo-network/client; dieses Verzeichnis und seine Shell sind von den anderen Tabs getrennt. pwd zeigt das aktuelle Verzeichnis:

pwd

Multicast DNS (mDNS) ermöglicht benachbarten Geräten den Austausch von Namensinformationen auf demselben lokalen Link. Hier verwenden die Pakete die IPv4-Multicast-Adresse 224.0.0.251 und UDP-Port 5353. Die Endung .local gehört zu diesem lokalen Erkennungsverfahren; ergänze sie nicht in der hosts-Datei der Plattform und behandle sie nicht als öffentliche DNS-Zone.

DNS-basierte Diensterkennung (DNS-SD) beschreibt benannte Dienstinstanzen. Ein Diensttyp sagt, wonach ein Client sucht: _http._tcp bedeutet HTTP über TCP. Ein Instanzname wie Information Desk bezeichnet einen angebotenen Dienst. Der Zielhostname bezeichnet den bereitstellenden Knoten. Ein Port wählt die lauschende Anwendung aus; die Metadaten path wählen eine Ressource darin. Einen Namen zu finden ist erst der Anfang der Dienstnutzung.

avahi-browse fordert den nativen Avahi-Daemon zur Diensterkennung auf. -r löst jede Instanz in Verbindungsdaten auf, -t beendet die Suche nach ihrem Abschluss, -p gibt durch Semikolons getrennte Felder aus und -k behält die ursprünglichen Diensttypnamen statt lesefreundlicher Übersetzungen bei:

avahi-browse -rtpk _http._tcp

Erwarte eine aufgelöste Zeile, die mit = beginnt und diese Felder enthält:

=;eth0;IPv4;Information\032Desk;_http._tcp;local;desk.local;10.93.0.10;8080;"path=/welcome/index.json"

Avahi kann zusätzlich +-Zeilen für neu erkannte Instanzen ausgeben. In seiner auswertbaren Ausgabe steht \032 für ein Leerzeichen. Lies die aufgelöste Zeile in dieser Reihenfolge: Instanz, Typ, Domäne, Zielhostname, Adresse, Port und TXT-Metadaten. Reihenfolge und Maskierung können variieren. Der native Daemon empfängt diese Einträge über dieses LAN; es gibt keine vorbereitete Erkennungsliste.

Mit dem bereitgestellten Client photo-get speicherst du eine Sammlung anhand ihres Instanznamens. Anführungszeichen halten einen Namen mit Leerzeichen als ein einziges Argument zusammen. Das zweite Argument ist ein Ausgabeordner im Arbeitsbereich dieses Terminals:

photo-get "Information Desk" desk

photo-get führt erneut eine echte Avahi-Suche aus, löst genau diese Instanz auf, zeigt ihr Verbindungsziel an, lädt den angekündigten JSON-Index und jede darin aufgeführte PNG-Datei, dekodiert alle Bilder und speichert anschließend die empfangenen Bytes. IP, Port und Pfad werden nicht aus dem Stationsplan entnommen. Der Index nennt die Bilddateien; das ist eine Anwendungskonvention dieser Dienste und kein universelles DNS-SD-Format. Erwarte Saved 1 real images im Ordner desk.

Wechsle zu Photo Shelf und wähle Client. Lade die gespeicherten Dateien neu. Du solltest die Karte Welcome to Maple Yard sehen. Die Vorschau liest ausschließlich Dateien aus dem Arbeitsbereich dieses Clients; sie lädt nichts vom Server und ergänzt keine fehlenden Bilder. Der Link Download image liefert genau diese gespeicherte Datei.

Die gespeicherte Infopunkt-Karte in Photo Shelf

Die Auswahl Client kennzeichnet diesen Arbeitsbereich. Die Infopunkt-Karte ist die funktionierende Referenz, die beim Hinzufügen des Fotoautomaten erhalten bleiben soll.

Ist die Suche leer, prüfe den genauen Diensttyp und ob du dich in Client befindest, und wiederhole sie. Daemon not running bedeutet, dass der Erkennungsclient seinen vorbereiteten Daemon nicht erreicht; das unterscheidet sich von einem leeren Ergebnis. Kann photo-get den Namen nicht auflösen, vergleiche Schreibweise und Anführungszeichen mit der aufgelösten Zeile. Eine abgelehnte Verbindung bedeutet, dass eine Adresse gefunden wurde, aber nichts den Port annimmt. HTTP 404 bedeutet, dass der Server erreicht wurde, der Ressourcenpfad aber fehlt. Ein JSON- oder Bilddekodierungsfehler bedeutet ungeeigneten Inhalt. Ersetze die Behebung dieser Probleme nicht durch einen hosts-Eintrag oder ein manuell kopiertes Bild.

Den Fotoautomaten mit einer vollständigen Vorlage veröffentlichen

In diesem Schritt kündigst du den vorhandenen Vorschauserver an. Wechsle zu Publisher. Das Terminal startet in /home/labex/project/photo-network/services. cat zeigt eine Textdatei an; ../ bezeichnet ihr übergeordnetes Verzeichnis:

cat ../stations.tsv

Dieser Geschäftsplan beschreibt die tatsächlich vorbereiteten Listener. Photo Booth Preview gehört zu publisher.local, Port 8081 und Ressource /preview/index.json. Das vollständige Album verwendet einen anderen Listener und eine andere Ressource. Der Infopunkt liegt auf einem anderen Knoten und muss unverändert bleiben.

Lies die unvollständige Vorschaudefinition:

cat preview.service

Eine .service-Datei verwendet hier XML: Öffnende und schließende Tags umgeben jeden Wert. service-group enthält den angezeigten name; sein Element service liefert type, port und txt-record. Eine Definition zu veröffentlichen erstellt weder einen Webserver noch eine Sammlung oder Zugriffsberechtigung. Diese Anwendungen laufen bereits.

Das folgende Here-Dokument schreibt die vollständige kleine Datei. > ersetzt ihren bisherigen Inhalt. Das in Anführungszeichen gesetzte 'XML' erhält den Text wörtlich; das abschließende XML muss allein am Anfang seiner Zeile stehen. Kopiere den gesamten Block:

cat > preview.service <<'XML'
<?xml version="1.0" standalone="no"?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name>Photo Booth Preview</name>
  <service>
    <type>_http._tcp</type>
    <port>8081</port>
    <txt-record>path=/preview/index.json</txt-record>
  </service>
</service-group>
XML

Lies deine gespeicherte Definition:

cat preview.service

Der Kursbefehl photo-load prüft beide bearbeitbaren XML-Dateien und fordert anschließend ausschließlich den Avahi-Daemon von Publisher zum Neuladen auf. Er startet weder den Infopunkt noch die Geschäftsserver neu:

photo-load

Erwarte Reload requested for the photo publisher. Warte einige Sekunden auf Namensprüfung und Registrierung. Eine erfolgreiche Analyse bestätigt die XML-Struktur, nicht die Richtigkeit des angekündigten Ports oder Pfads. Fehlt ein schließendes Tag, meldet photo-load Dateiname und Analysefehler, ohne ein Neuladen anzufordern. Lies die Datei, stelle den vollständigen Block wieder her und führe photo-load erneut aus. Die Umgebung muss nicht zurückgesetzt werden.

Wechsle zu Client und suche erneut:

avahi-browse -rtpk _http._tcp

Suche Photo Booth Preview, das Ziel publisher.local, Port 8081 und /preview/index.json. Speichere und dekodiere die tatsächliche Sammlung:

photo-get "Photo Booth Preview" preview

Erwarte ein Vorschaubild. Wähle in Photo Shelf den Client, lade neu und betrachte die Vorschaukarte neben der vorhandenen Infopunkt-Karte. Ein Dienst in der Liste ohne das richtige Bild wäre weiterhin unvollständig.

Zwei Dienste unterscheiden

In diesem Schritt veröffentlichst du das vollständige Album auf demselben Knoten und unterscheidest die beiden Instanzen. Wechsle zu Publisher. Beide verwenden _http._tcp und publisher.local, aber das Album nutzt Port 8082 und /album/index.json. Seine drei Bilder unterscheiden sich von der Vorschau mit einem Bild.

Schreibe seine eigene Definition mit der bereits erlernten Here-Dokument-Syntax:

cat > album.service <<'XML'
<?xml version="1.0" standalone="no"?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name>Photo Booth Full Album</name>
  <service>
    <type>_http._tcp</type>
    <port>8082</port>
    <txt-record>path=/album/index.json</txt-record>
  </service>
</service-group>
XML
photo-load

Wechsle zu Client. Suche und lies jede aufgelöste Zeile einzeln:

avahi-browse -rtpk _http._tcp

Die beiden Instanznamen sollten verschieden sein. Ein gemeinsamer Hostname bedeutet nicht denselben Port oder dieselbe Ressource. Lade das Album in seinen eigenen Ordner herunter und behalte die Vorschau:

photo-get "Photo Booth Full Album" album

Erwarte drei dekodierte PNG-Dateien und Saved 3 real images. Wähle in Photo Shelf den Client und lade neu. Album und Vorschau sollten jeweils ihre eigenen gespeicherten Dateien zeigen.

Übe nun das Erkennen einer falschen Ressource, ohne deine richtigen Sammlungen zu ändern oder zu löschen. Der absichtlich nicht vorhandene Instanzname soll vor jedem Download scheitern:

photo-get "Photo Booth Missing" missing

Erwarte Download stopped: Expected one resolved instance und einen Rückgabewert ungleich null. Das ist beabsichtigt. Verwende zur Wiederherstellung erneut den tatsächlich aufgelösten Albumnamen:

photo-get "Photo Booth Full Album" album

Hast du einen falschen Port oder Pfad angekündigt, vergleiche die aufgelöste Zeile dieser Instanz mit stations.tsv. Korrigiere nur die entsprechende .service-Datei in Publisher anhand ihres vollständig gezeigten Blocks, führe photo-load aus und suche und lade anschließend in Client erneut herunter. Ein falscher Listener-Port kann die Verbindung ablehnen; ein falscher Pfad kann HTTP 404 liefern; eine erreichbare andere Sammlung kann erfolgreich dekodiert werden und trotzdem fachlich falsch sein. Prüfe Sammlungstitel und Dateinamen, nicht nur einen Rückgabewert von null.

Avahi kündigt Änderungen und Rücknahmen an. Während eine Aktualisierung verteilt wird, kann ein Client kurz alte Einträge behalten. Warte nach dem Laden einige Sekunden und wiederhole die Suche; verwende keine kopierten alten Verbindungsziele weiter. Der nächste Schritt prüft von einem unabhängigen Client-Daemon und Arbeitsbereich aus.

Das Ergebnis von einem anderen Client nutzen

In diesem Schritt nutzt du eine andere Netzwerkidentität und einen unabhängigen Avahi-Daemon. Wechsle zu New Client. Er startet in /home/labex/project/photo-network/new-client; standardmäßig teilt er weder Shellvariablen noch gespeicherte Sammlungen mit dem ersten Client. Einen Tab zu öffnen setzt den Publisher nicht zurück und erstellt keine Ankündigungen.

Suche von diesem Client aus, statt die Zeilen des ersten Clients zu kopieren:

avahi-browse -rtpk _http._tcp

Lies alle drei aufgelösten Instanzzuordnungen. Vorschau und vollständiges Album haben dasselbe Ziel, aber unterschiedliche Ports und Pfade. Der Infopunkt hat ein eigenes Ziel. Lade alle drei von diesem Client herunter:

photo-get "Photo Booth Preview" preview
photo-get "Photo Booth Full Album" album
photo-get "Information Desk" desk

Erwarte ein Vorschaubild, drei Albumbilder und eine Infopunkt-Karte. Jeder Aufruf löst die benannte Instanz erneut auf und zeigt das tatsächlich verwendete Verbindungsziel an. Diese Befehle konfigurieren keine statische IP-Erkennung.

Wechsle zu Photo Shelf, wähle New Client und lade neu. Prüfe jedes Bild und jeden Sammlungstitel. Wähle Download image auf einer Karte mit einem gespeicherten Bild; das heruntergeladene Bild muss der angezeigten gespeicherten Karte entsprechen. Die Vorschau kopiert nicht stillschweigend die Arbeit des ersten Clients und ergänzt keine fehlenden Dateien. Wechsle zwischen Client und New Client, um ihre getrennten Sammlungen zu sehen.

Der unabhängige Client besitzt alle drei gespeicherten Sammlungen

Achte auf die Auswahl New Client, drei Albumkarten, die Infopunkt-Karte und die separate Vorschaukarte. Jeder Link Download image gehört zu einer tatsächlich gespeicherten Datei.

Fehlt eine Sammlung, kehre zu New Client zurück und wiederhole ihren Download nach Prüfung der aktuellen Ankündigung. Fehlt eine gespeicherte PNG-Datei oder ist sie unlesbar, meldet die Vorschau dies, statt sie zu ersetzen. Korrigiere zuerst Veröffentlichung oder Verbindung und führe dann photo-get erneut aus, um die vollständige Originalsammlung zu erhalten. Ein Download ist erst erfolgreich, wenn der gesamte Index und alle Bilder abgerufen und dekodiert wurden.

Du hast Veröffentlichung und Nutzung verbunden: drei unterscheidbare Instanzen, korrekte aktuelle Verbindungsziele, echte Dateien auf zwei Clients und einen weiterhin nutzbaren Infopunkt. Diensterkennung liefert Verbindungsdaten, keine Authentifizierung und keine Zusicherung, dass ein entdeckter Dienst vertrauenswürdig ist.

Zusammenfassung

Du hast native mDNS/DNS-SD-Einträge durchsucht, Instanznamen von Hostnamen unterschieden und zwei HTTP-Dienste mit getrennten Ports und Pfadmetadaten veröffentlicht. Du hast jedes echte Erkennungsergebnis zum Herunterladen dekodierbarer Bilder verwendet, den Ablauf von einem unabhängigen Client wiederholt und den Infopunkt verfügbar gehalten. Eine Erkennungszeile und eine erfolgreiche Verbindung sind unterschiedliche Nachweise; erst der richtige gespeicherte Inhalt vervollständigt das Ergebnis.