Inhaltsverzeichnis

Installation XMPP (Jabber) Servers am Beispiel von ejabberd 22.10

Einleitung

Diese Howto-Serie bezieht sich auf Debian 11 (Bullyseye). Es sollte allerdings sehr leicht sein, dieses Howto auf andere Distributionen anzuwenden. <Wörter> in spitzen Klammern bezeichnen einen Platzhalter, der durch eigene Werte sinnvoll ersetzt werden muss. In dem Howto geht es daher immer um die Domain <beispiel.de>, was durch deine eigene Domain ersetzt werden muss. [Wörter] in eckigen Klammern bezeichnen einzelne Tasten oder Menüs zum klicken.

Diese Howto-Serie ist als Copy-Paste Howto gedacht. Du musst also nur die Befehle kopieren und bei dir in der Console einfügen. Befehle erkennst du am Dollarzeichen ($):

$ ./das/ist/ein/befehl mit option
Das ist kein Befehl, sondern ein Hinweis.

Als Editor setze ich jed ein. Warum weiß ich auch nicht, ich bin damit aufgewachsen. Es gibt durchaus viele Gründe und effektivere Wege Dateien zu ändern. Darum soll es hier aber nicht gehen. Wenn ihr (Konfigurations-) Dateien verändert habt, endet das immer mit dem Satz:

Die Änderungen mit [STRG] + [x] und [STRG] + [s] speichern und den Editor mit [STRG] + [x] und [STRG] + [c] verlassen.

Das kannst abkürzen. Wenn du direkt [STRG] + [x] und [STRG] + [c] verwendest wirst du gefragt, ob du die Änderungen vor dem Verlassen speichern möchtest.

Wenn in Konfigurationsdateien Abstände mit Leerzeichen angezeigt sind, dann verwende bitte ausschließlich Leerzeichen über die Leertaste (Space). Bitte füge keine Tabs ein!

Die späteren Howtos geben in ihrer Einleitung immer an, welche Howtos vorausgesetzt werden. Diese müssen dann vorher abgearbeitet werden.

Dieses Howto beschränkt sich auf die Einrichtung einer einzigen Domain. Wenn du deinen XMPP-Server mit mehreren Domains betreiben möchtest, gibt es das Howto ejabberd mit mehreren Domains, welches du dann zuerst lesen solltest.

Voraussetzung

Es wird ein fertig installiertes (minimales) Debian System vorausgesetzt. Dazu gibt es sehr gute Anleitungen im Netz (z.B. https://www.howtoforge.com/tutorial/debian-minimal-server/). Wenn du deinen Server bei einem Hoster betreibst, bieten viele ein automatisches Installationsimage für Debian 11 (Bullseye) an.

Der Zugriff erfolgt entweder direkt über eine Tastatur und Bildschirm oder aus der Ferne via SSH. Du solltest daher grundlegende Kenntnisse mitbringen, wie SSH funktioniert.

Zusätzlich wird ein fertig eingerichteter (Sub-)Domainname benötigt. Deine Domain <beispiel.de> muss mindestens mit einem A Eintrag auf die IP deines Servers zeigen (zusätzlich AAAA für IPv6). Du brauchst also ggf. Zugriff auf die DNS Verwaltung bei deinem Hoster.

Benötigte Softwarepakete

jed (ich favorisiere diesen Editor, wer vi oder etwas anderes nutzen möchte, ist herzlich eingeladen dies zu tun)
wget (zum Download von Dateien)

$ apt -y install jed wget

Installation

Wir erstellen uns einen ejabberd Benutzer:

$ adduser --disabled-login ejabberd
Lege Benutzer »ejabberd« an ...
Lege neue Gruppe »ejabberd« (1001) an ...
Lege neuen Benutzer »ejabberd« (1001) mit Gruppe »ejabberd« an ...
Erstelle Home-Verzeichnis »/home/ejabberd« ...
Kopiere Dateien aus »/etc/skel« ...
Benutzerinformationen für ejabberd werden geändert.
Geben Sie einen neuen Wert an oder drücken Sie ENTER für den Standardwert
        Vollständiger Name []: ejabberd User
        Zimmernummer []: 
        Telefon geschäftlich []: 
        Telefon privat []: 
        Sonstiges []: 
Sind die Informationen korrekt? [J/n] j

Evtl. erscheint die Ausgabe bei dir in englischer Sprache. Du brauchst nur einen Namen Anzugeben, weitere Informationen wie Zimmernummer kannst du frei lassen und nur mit [Enter] bestätigen.

Wir machen uns zu ejabberd um damit zu arbeiten:

$ su - ejabberd

ejabberd herunterladen und ausführbar machen:

$ wget -O ejabberd-22.10-1-linux-x64.run https://www.process-one.net/downloads/downloads-action.php?file=/22.10/ejabberd-22.10-1-linux-x64.run
$ chmod +x ejabberd-22.10-1-linux-x64.run

Installation starten:

$ ./ejabberd-22.10-1-linux-x64.run

Running without superuser privileges (installer wasn't invoked
with "sudo"), cannot perform system-wide installation this way.
Continue anyway? (y/n) [n] y

Install ejabberd below /home/ejabberd/opt? (y/n) [n] y

The following installation paths will be used:
- /home/ejabberd/opt/ejabberd-22.10
- /home/ejabberd/opt/ejabberd (for configuration, database, and log files)
Install ejabberd 22.10 now? (y/n) [n] y

Danach hast du zwei neue Pfade :

/home/ejabberd/opt/ejabberd für Konfgurationsdateien, Datenbank und Log Dateien. Dieses Verzeichnis wird bei Updates übernommen.
/home/ejabberd/opt/ejabberd-22.10 für ejabberd

Dies ist das erste Mal, dass ejabberd in getrennten Pfaden installiert wird. Zukünftige Updates werden nach /home/ejabberd/opt/ejabberd-xx-yy installiert.

In den folgenden Howtos werde ich Scripte vorstellen, die automatisiert Dinge tun. Damit nicht bei jedem Update die Pfade innerhalb der Scripte angepasst werden müssen, erstellen wir noch einen Link (vergleichbar mit einer Verknüpfung unter Windows):

$ ln -s /home/ejabberd/opt/ejabberd-22.10 /home/ejabberd/opt/ejd

Nach einem Update muss in Zukufnt lediglich dieser Link entfernt und mit der aktuellen Version neu erstellt werden:

$ rm opt/ejd
$ ln -s /home/ejabberd/opt/ejabberd-xx.yy /home/ejabberd/opt/ejd

ejabberd konfigurieren

Konfigurationsdatei öffnen:

$ jed opt/ejabberd/conf/ejabberd.yml

Das ist eine Basiskonfiguration, die du nach deinen Bedürfnissen anpassen kannst. Mehr dazu findest du in späteren Howtos.

Wir passen zuerst den Hostnamen an.

Suche nach:

hosts:
  - <deinhostname>

Und ersetze es mit deiner Domain:

hosts:
  - <beispiel.de>

In der Standardkonfiguration werden die Passwörter deiner User:innen im Klartext gespeichert, was sehr unsicher ist. Wir richten ejabberd deshalb von Anfang an so ein, dass die Passwörter gehasht und gesalzen gespeichert werden.

Füge über dem hosts Block ein:

auth_password_format: scram
auth_scram_hash: sha512

Jetzt noch mqtt deaktivieren, das benötigen wir nicht und könnte bei einem Wechsel zu SQL Probleme verursachen.

Suche nach:

  -
    port: 1883
    ip: "::"
    module: mod_mqtt
    backlog: 1000

Und lösche den kompletten Block.

Suche nach:

  mod_mqtt: {}

Und lösche die komplette Zeile.

Die Änderungen mit [STRG] + [s] speichern und den Editor mit [STRG] + [x] und [STRG] + [c] verlassen.

ejabberd starten und automatisch beim Boot starten

$ exit
$ cp /home/ejabberd/opt/ejabberd-22.10/bin/ejabberd.service /etc/systemd/system/ejabberd.service

Damit nicht bei jedem Update die Datei neu kopiert werden muss, passen wir noch die Pfade an.

Konfiguration öffnen:

$ jed /etc/systemd/system/ejabberd.service

Suche nach:

ExecStart=/home/ejabberd/opt/ejabberd-22.10/bin/ejabberdctl foreground
ExecStop=/bin/sh -c '/home/ejabberd/opt/ejabberd-22.10/bin/ejabberdctl stop && /home/ejabberd/opt/ejabberd-22.10/bin/ejabberdctl stopped'
ExecReload=/home/ejabberd/opt/ejabberd-22.10/bin/ejabberdctl reload_config

und ersetze durch:

ExecStart=/home/ejabberd/opt/ejd/bin/ejabberdctl foreground
ExecStop=/bin/sh -c '/home/ejabberd/opt/ejd/bin/ejabberdctl stop && /home/ejabberd/opt/ejd/bin/ejabberdctl stopped'
ExecReload=/home/ejabberd/opt/ejd/bin/ejabberdctl reload_config

Die Änderungen mit [STRG] + [x] und [STRG] + [s] speichern und den Editor mit [STRG] + [x] und [STRG] + [c] verlassen.

Zum Schluss den Dienst aktivieren und starten:

$ systemctl daemon-reload
$ systemctl enable ejabberd.service
$ systemctl start ejabberd.service

Den ersten XMPP Benutzer anlegen

$ su - ejabberd
$ ./opt/ejd/bin/ejabberdctl register <benutzer> <beispiel.de> <passwort>

Das wars, du kannst dich jetzt mit einem beliebigen XMPP Client am Server anmelden und direkt loschatten.