Raspberry Pi: XMPP-Server Prosody installieren

15 Aug
15. August 2015

Messenger gibt es inzwischen unglaublich viele. Die meisten haben gemeinsam, dass sie über einen von dem Hersteller bereitgestellten und kontrollierten Server die Nachrichten austauschen und diese dort so gespeichert sind, dass der Betreiber bei Bedarf in diese Einsicht hat. Dieses Verhalten ist nicht immer gewünscht. XMPP (Extensible Messaging and Presence Protocol, englisch für erweiterbares Nachrichten- und Anwesenheitsprotokoll; früher Jabber) ist ein offener Standard eines Kommunikationsprotokolles, das sich als Messenger benutzen lässt. Ein XMPP-Server ist dabei ein Server der selbst betrieben werden kann und über den die Kommunikation läuft. Er kann mit anderen XMPP-Servern kommunizieren – muss jedoch nicht unbedingt. Außerdem gibt es mit OTR (Off-the-Record Messaging) einen Standard zur clientseitigen Verschlüsselung der Nachrichten. Prosody (früher lxmppd) ist eine schlanke und plattformunabhängige XMPP-Server Anwendung, die auch auf dem Raspberry Pi läuft. Wie man einen Prosody XMPP-Server auf dem Raspberry Pi installiert und verwendet werde ich im folgenden Artikel erklären.

Voraussetzung: Raspbian oder vergleichbare Distribution installiert

XMPP Clients für alle erdenklichen Arten von Geräten finden sich in einer Liste der XMPP Standards Foundation. Die dort gelisteten Clients sind zwar nicht mehr alle aktuell, jedoch sollte bei deren Vielzahl dort jeder für seine Geräte fündig werden .

Step 1

Zunächst müssen wir den Paketlisten des Paketmangers APT das Prosody Repository und dessen Keyfile hinzufügen wie auch die Paketlisten aktualisieren, damit wir Prosody installieren können. Zuvor installieren wir noch die Anwendung lsb_release, damit automatisch die Paketliste für die richtige Version des Betriebssystems verwendet wird.

sudo apt-get install -y lsb-release
echo deb http://packages.prosody.im/debian $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
sudo apt-get update

Step 2

Nun können wir schon Prosody über den Paketmanager installieren. Dies bietet, im Gegensatz zu einer händischen Installation, den Vorteil, dass wir später mittels sudo apt-get upgrade den XMPP-Server auf dem Raspberry Pi ganz einfach updaten können.

sudo apt-get install prosody

Step 3

Damit wir den XMPP-Server später auch außerhalb des eigenen Netzwerkes erreichen können, sollten wir eine DynDNS Domain einrichten. Wie dies zu bewerkstelligen ist erklärte ich bereits in dem Artikel DynDNS einrichten. Im Beispiel verwende ich die DynDNS Domain jankarres.no-ip.org.

Step 4

Die Anwendung ist installiert und die DynDNS Domain eingerichtet. Außerdem wurde bereits während der Installation ein SSL-Zertifikat für localhost erstellt. Für die DynDNS Domain müssen wir jedoch noch einmal ein separates SSL-Zertifikat erzeugen.

Bei den Fragen in der Eingabeaufforderung, die beim vorletzten Befehl auftreten, geben wir lediglich bei Country Name den Wert DE für Deutschland und bei Common Name die DynDNS Domain deines Raspberry Pis an. Allen weiteren Fragen können wir mittels Enter den Standardwert zuweisen.

sudo su
cd /etc/prosody/certs/
sudo openssl genrsa -out prosody.key 4096
sudo openssl req -new -sha256 -key prosody.key -out prosody.csr
sudo openssl x509 -req -sha256 -days 3650 -in prosody.csr -signkey prosody.key -out prosody.crt
exit

Step 5

Nachdem alle nötigen Schritte der eigentlichen Installation absolviert sind, können wir die Konfiguration des XMPP-Servers Prosody anpassen. Dabei müssen wir mehrere Abschnitte bearbeiten. In dem Editor nano kann man mittels STRG + W suchen und mittels STRG + X, Y und Enter speichern.

sudo nano /etc/prosody/prosody.cfg.lua

Als erstes setzen wir in die Admin-Liste die E-Mail Adresse, die der Account des Admins später haben wird. Die XMPP E-Mail Adressen müssen mit der DynDNS Domain enden (in meinem Fall @jankarres.no-ip.org).

ersetzen durch z.B.

Falls sich jeder öffentlich einen Account bei dem XMPP-Server anlegen können soll, muss folgende Zeile abgeändert werden.

ersetzen durch

Außerdem müssen wir die in den vorherigen Schritten definierte DynDNS Domain und SSL-Zertifikate aktivieren.

ersetzen durch z.B. (DynDNS Domain, im Beispiel jankarres.de, ersetzen)

Step 6

Damit die geänderten Prosody Einstellungen ihre Wirkung entfalten, müssen wir die Anwendung neustarten.

sudo /etc/init.d/prosody restart

Step 7

Es ist an der Zeit Benutzer anzulegen. Dies ist über folgendes Kommando beliebig oft möglich, wobei die XMPP E-Mail Adresse (Leerzeichen anstatt @) und das Passwort angepasst werden muss. Die XMPP E-Mail Adressen, wie oben beschreiben, müssen mit der DynDNS Domain enden (in meinem Fall @jankarres.no-ip.org). Bei der E-Mail ist zu beachten, dass insbesondere der oben definierte Admin-Account angelegt werden sollte!

sudo prosodyctl register webmaster jankarres.no-ip.org super-secret1Password

Damit ist die Einrichtung des XMPP-Servers Prosody abgeschlossen. Nachdem die Ports (siehe unten) freigegeben sind kann man sich auf dem verwendeten Client mit der E-Mail Adresse und dem verwendeten Passwort anmelden und der Chat kann beginnen. Falls gewünscht muss die clientseitige Verschlüsselung der Nachrichten OTR (Off-the-Record Messaging) im verwendeten Client eingerichtet werden, wobei dies nicht Bestandteil des Tutorials sein soll, da es nur um den XMPP-Server Prosody auf dem Raspberry Pi gehen soll.

Zugriff außerhalb des eigenen Netzwerks
Portfreigabe im Router

Soll der soeben installierte Dienst auch außerhalb des eigenen Netzwerkes verfügbar sein, so müssen folgende Ports im Router freigegeben werden. Wie man freigibt, beschrieb ich in dem Artikel Portforwarding bei Fritz!Box und Speedport.

5222
5269
Dir hat der Artikel gefallen?
Teile ihn mit deinen Freunden!
30 Antworten
  1. Sebastian says:

    Moin!
    Guter Beitrag der das wesentliche Erklärt. Ich hab vor einem Jahr mit XMPP auf dem RPi rumprobiert. Leider funktionierte das schreiben von Nachrichten mit einem Account auf verschiedenen Geräten nicht richtig. Wie sieht das jetzt aus vezüglich Smartphone Nutzung?

    Antworten
    • Jan Karres says:

      Auf dem Smartphone kommt das immer auf den verwendeten Client an. Diesbezüglich müsstest du folglich selbst schauen, wie dieser das löst. In der Regel funktioniert es jedoch auch auf Smartphones einwandfrei.

      Antworten
  2. Joachim Mairböck says:

    Hallo Jan,

    nur als kleine Anregung, vielleicht hast du eh schon dran gedacht: Sobald Let’s Encrypt (https://letsencrypt.org) fertig ist, könntest du das selbst-signierte TLS-Zertifikat durch ein solches ersetzen bzw. als Alternative anbieten, wenn das möglich ist.

    Antworten
  3. Pidder123 says:

    Hallo zusammen,

    bekomme immer folgende Fehlermeldung: E: Typ »wget« in Zeile 2 der Quellliste /etc/apt/sources.list ist unbekannt .

    Ich hoffe man kann mir helfen es gibt ja auch noch andere nette Leute die dich bzw. den Blog hier unterstützen.

    Pidder123

    Antworten
  4. sesom42 says:

    Ich würde für prosody und apt eine eigene Sources-List erstellen. Das erhöht die Übersichtlichkeit bei vielen Quellen: „echo deb … | sudo tee /etc/apt/sources.list.d/prosody.list“.

    Antworten
  5. Findus23 says:

    Seltsamerweise gibt es das Prosody Repository unter jessie nicht für armhf
    (Vergleiche http://packages.prosody.im/debian/dists/jessie/InRelease mit http://packages.prosody.im/debian/dists/wheezy/InRelease )
    Aber die Version in den Debian-Paketquellen ist nicht so stark veraltert (0.9.7-2 im Vergleich zu 0.9.8-1~wheezy2)

    Daher empfehle ich allen mit Debian jessie einfach den Schritt 1 zu überspringen.

    Antworten
  6. perlian says:

    openssl x509 -req -sha256 -days 3650 -in prosody.csr -signkey prosody.key -out prosody.crt

    erzeugt einen Fehler

    „unknown option x509“

    Welcher Parameter ist falsch ?

    Antworten
    • Findus23 says:

      Bei mir funktioniert der Befehl sowohl unter wheezy als auch unter Jessie. Verwendest du Raspbian? Welche Version von OpenSSL ist installiert (Befehl: „openssl version“)?

      Antworten
      • perlian says:

        Ich habe Jessie benutzt, aber auf einem Cubietruck
        Kann ich leider nicht mehr testen weil ich die SD zwischenzeitlich schon für was anderes brauche (Odroid XU4)
        Werde es am Wochenende aber mal neu mit Raspbian versuchen
        Hat es bei Dir mir Raspbian geklappt ?

        Antworten
  7. perlian says:

    Gibt es keine Lösung ?

    Würde Prosody gerne verwenden

    Antworten
  8. perlian says:

    Es hat nun geklappt
    Obwohl der Restart des Servers mit der abgeänderten prosody.cfg.lua nicht funktionierte
    Habe eine funktionierende im Netz gefunden

    Antworten
  9. Peter says:

    Hi,

    ich bekomme diesen Fehler :Sep 28 19:12:27 c2s6b1e90 info Client disconnected: connection closed
    Sep 28 19:13:58 c2s777f10 info Client connected
    Sep 28 19:13:58 c2s777f10 info c2s stream for closed: This server does not serve DOMAIN

    IP und DOMAIN habe ich zum Schutz weg gemacht, ist aber wie im oben konfiguriert

    was ist die Fehler?

    Antworten
    • Ingo says:

      Bei mir kam diese Meldung, weil ich vergessen hatte, diese zwei Zeilen auszukommentieren:

      — VirtualHost „localhost“
      […]
      — enabled = false — Remove this line to enable this host

      Antworten
  10. Mike says:

    Hallo, Prosody lässt sich dank der guten Aleitung wirklich sehr einfach einrichten 🙂 Über dieses Tutorial hinaus stehe ich allerdings jetzt vor einem Problem, welches ich nicht gelöst bekomme. Ich möchte gerne in Prosody den Transport Gateway zu icq einrichten, bekomme aber das dazu benötigte Spectrum2 auf meinem RPi2 wheezy nicht installiert. Gibt es dazu eine Anleitung, bzw. was ist bei der Installation zu beachten?

    Antworten
  11. David says:

    Hallo, was auch ein Artikel wert wäre http_upload https://prosody.im/doc/http so einfach ist das ganze nicht eingerichtet…aber gerade mit Conversations sehr Interresant.

    Antworten
  12. Baal says:

    Gibt es auch eine Möglichkeit anstelle von Step 4 ein Zertifikat von Let’s Encrypt zu benutzen?

    Antworten
  13. Markus Schäfer says:

    Habe alles so installiert, wie es in dem Tutorial erklärt wird.
    Wie kann ich jetzt ein SSL-Zertifikat mit einem User verbinden, sodass sich nur User einloggen können die das „Gegen“-Zertifikat haben oder habe ich da was falsch verstanden?

    Antworten
  14. Kackfrosch says:

    Hallo, sehr gut beschriebenes Tutorial, jedoch scheint in der aktuellen Version von Rasperian Jessie zusammen mit der geladenen Prosodyversion ein Fehler produziert.

    Auch ein tauschen (laut anderer Blogs) der config bringt immer den gleichen Fehler.
    Kannst du das Tutorial noch einmal mit der aktuellen Version testen?

    Antworten
    • Kackfrosch says:

      Error: /etc/prosody/prosody.cfg.lua:23: ‚}‘ expected near ‚@‘
      kommt jedes mal als Fehler – kannst Du mir helfen?

      Antworten
      • OGF says:

        Auch ich scheitere an diesem Fehler. Hast Du dafür schon eine Lösung finden können?

        Antworten
      • sesom42 says:

        Das bedeutet, dass in der Zeile 23 in /etc/prosody/prosody.cfg.lua ein Syntaxfehler ist. Da es sich lt. obiger Anleitung um die Zeile mit der Admin-E-Mail-Adresse handelt, nehme ich an, dass diese nicht korrekt in Hochkommas gesetzt wurde. Wenn nicht, was steht denn in dieser Zeile?

        Antworten

Antworten

Kommentar verfassen

JanKarres.de © 2007-2018