• Blog
  • Raspberry Pi
  • Über mich
  • Projekte
  • devowl.io

Raspberry Pi: XMPP-Server Prosody installieren

15. August 2015
Raspberry Pi
31 Kommentare

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).

admins = { }

ersetzen durch z.B.

admins = { "[email protected]" }

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

allow_registration = false;

ersetzen durch

allow_registration = true;

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

VirtualHost "example.com"
        enabled = false -- Remove this line to enable this host

        -- Assign this host a certificate for TLS, otherwise it would use the one
        -- set in the global section (if any).
        -- Note that old-style SSL on port 5223 only supports one certificate, and will always
        -- use the global one.
        ssl = {
                key = "/etc/prosody/certs/example.com.key";
                certificate = "/etc/prosody/certs/example.com.crt";
        }

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

VirtualHost "jankarres.no-ip.org"
        ssl = {
                key = "/etc/prosody/certs/prosody.key";
                certificate = "/etc/prosody/certs/prosody.crt";
        }
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

31 Kommentare. Hinterlasse eine Antwort

  • Sebastian
    August 15, 2015 5:01 pm

    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
      August 15, 2015 5:04 pm

      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
  • Joachim Mairböck
    August 16, 2015 10:08 am

    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
    • Findus23
      August 17, 2015 6:40 pm

      Wobei ich mich da frage, ob das mit DynDNS (no-ip.org) funktionieren wird.

      Vor allem bei der kostenlosen Subdomain habe ich da Zweifel.

      Antworten
      • Rainer Rainfall
        Dezember 1, 2017 1:48 pm

        Also mit LE funktionieren auch DynDNS Adressen. Anleitung zum einbinden: http://trikks.de/2017/11/14/xmpp-server-auf-raspberry-pi3/

        Antworten
    • Jan Karres
      August 25, 2015 6:14 pm

      Wenn das Projekt online ist könnte man durchaus überlegen ob man dieses stattdessen empfiehlt. Wobei ich glaube, dass Findus23 den Knackpunkt angesprochen hat. Mal sehen 😉

      Antworten
  • Pidder123
    August 16, 2015 6:35 pm

    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
    • Jan Karres
      August 25, 2015 6:17 pm

      Du hast, wieso auch immer, in der Datei /etc/apt/sources.list in Zeile 2 ein wget, dass dort nicht rein gehört. Kannst du mit z.B. mit dem Editor nano bearbeiten.

      Antworten
  • sesom42
    August 17, 2015 3:49 pm

    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
    • Jan Karres
      August 25, 2015 6:22 pm

      Ich denke das ist eine Frage des Stiles – funktioniert ja beides 😉

      Antworten
  • Findus23
    August 26, 2015 1:04 pm

    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
    • RJ45
      Oktober 8, 2015 7:28 pm

      In dem Zusammenhang ist vielleicht der Kommentar eines Enwicklers zu der Geschichte interessant:

      https://prosody.im/issues/issue/522

      Antworten
  • perlian
    September 2, 2015 8:09 am

    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
      September 6, 2015 2:54 pm

      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
        September 7, 2015 5:21 pm

        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
        • Findus23
          September 7, 2015 7:33 pm

          Ja, unter Jessie (Pi2) läuft es ohne Probleme. Unter wheezy habe ich nur schnell die drei openssl-Befehle getestet.

          Antworten
  • perlian
    September 6, 2015 2:20 pm

    Gibt es keine Lösung ?

    Würde Prosody gerne verwenden

    Antworten
  • perlian
    September 11, 2015 12:42 am

    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
  • Peter
    September 28, 2015 9:20 pm

    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
      Oktober 16, 2016 2:22 pm

      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
  • Mike
    Oktober 29, 2015 9:06 pm

    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
  • David
    Januar 10, 2016 5:15 pm

    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
  • Baal
    Januar 18, 2016 10:20 pm

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

    Antworten
  • Markus Schäfer
    Januar 25, 2016 9:44 pm

    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
  • Kackfrosch
    Dezember 10, 2016 12:41 am

    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
      Dezember 10, 2016 11:52 am

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

      Antworten
      • OGF
        Dezember 31, 2016 2:14 pm

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

        Antworten
      • sesom42
        Dezember 31, 2016 3:07 pm

        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
        • OGF
          Januar 2, 2017 2:09 pm

          Bei mir ist die Zeile exakt formatiert wie bei Jan: admins = { „[email protected]“ }

          Trotzdem habe ich leider kein Glück.

          Antworten
          • Jh
            Februar 16, 2017 7:04 pm

            Wurden die hochkommas vielleicht kopiert? Ist ein typisches Problem. Bitte mal selbst setzen.

            Gruß

  • k4lb
    Dezember 27, 2021 11:26 pm

    Wirklich tolle Tutorials. Ich habe ein Problem: beim verbinden mit meinem Pi bekomme ich jedesmal „Stream Error“. Ich habe alles mehrmals nach der Anleitung gemacht. Könnten Sie mir da vielleicht weiterhelfen?

    Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Jan Karres
Jan Karres
Wirtschaftsinformatiker
Facebook
Twitter
YouTube
LinkedIn
Xing
GitHub

Themen

  • Blogging
  • Debian (Linux)
  • Eine Geschichte aus dem Leben des Jan
  • Fotos
  • Gaming
  • Gedanken
  • Linksammlungen
  • Privates
  • Projekte
  • Raspberry Pi
    • Einplatinencomputer (außer Raspberry Pi)
  • Schule und Studium
  • Tipps und Tricks
  • Videos
  • Vorgestellt
  • WordPress

Projekte

Dieser Blog ist meine kleine Base im Internet, in der ich über Themen schreibe, die mich persönlich beschäftigen. Abseits davon habe ich weitere Projekte im Netz, die teils aus Spaß entstanden, jedoch zum Teil auch meinen Kühlschrank füllen.

Alle Projekte

JanKarres.de © 2007-2022

Neueste Beiträge

  • Raspberry Pi: WLAN Access Point mit NordVPN (VPN Router) einrichten Dezember 5, 2020
  • Real Cookie Banner: Wie das Opt-in Cookie Banner für WordPress entstand November 18, 2020
  • Blog Setup erneut: Aufräumen einer kleinen Historie Oktober 13, 2020
  • devowl.io: Auf geht’s in das WordPress Business! März 10, 2020
  • Kuschelpartys: Nähe und Geborgenheit einfach erleben September 30, 2018

devowl.io

Meine Brötchen verdiene ich im Internet. Dazu habe ich gemeinsam mit meinem Kollegen Matze die devowl.io GmbH gegründet. Gemeinsam entwickeln und vertreiben wir in unser Plugins und Entwickler-Tools im WordPress Umfeld.

Mehr erfahren
  • Datenschutzerklärung
  • Impressum