=====Informationen zum Raspberry PI=====
Linksammlung: \\
http://raspberry.tips/server-2/owncloud-8-1-auf-dem-raspberry-pi-2-mit-apache/ \\
https://lehrerfortbildung-bw.de/st_digital/medienwerkstatt/internet/pi-cloud/index.html \\
===== Grundlegende Konfiguration =====
Image schreiben:
dd bs=4M if= of= status=progress
mit kill -USR1 kann der aktuelle Fortschritt ausgegeben werden. Ab Version 8.2 auch mit dem Parameter status=progress. Die Prozessnummer erhält man mit ps -a.
Die Konfiguration erreicht man mit sudo raspi-config
Pi konfigurieren:
- Expand Filesystem ausführen damit wir genug Platz für Pakete, ownCloud an sich und Uploads haben
- Unter Advanced Options Memory Split auf „16“ MB einstellen.
- overclock auf „Medium“
- SSH-Verbindung aktivieren
- Hostname setzen
Nach einem Reboot ist der Raspberry über .fritz.box ansprechbar und die SSH Verbindung kann aufgebaut werden.
=====System aktualisieren=====
sudo apt-get update
sudo apt-get dist-upgrade
sudo rpi-update
==Benötigte Pakete installieren==
sudo apt install apache2 php7.3 curl libcurl4 libcurl4-openssl-dev sqlite rsync
===== 64 bit System =====
Die Zeile
arm_64bit=1
in die Datei /boot/config.txt einfügen.
=====Pi absichern=====
neuen Benutzer mit Root-Rechten anlegen
sudo useradd -m user -G sudo
sudo passwd user
Danach abmelden und mit neuem Benutzer anmelden
Ab Debian version: 12 wird bei der Installation ein Benutzer angelegt, der Root-Rechte hat. Ein Standarduser wird nicht mehr angelegt und muß auch nicht mehr gelöscht werden. Der angelegte User kann allerdings mit sudo alle Befehle ohne Passwort ausführen. Um das zu ändern, muß nur in /etc/sudoers.d/010_pi-nopasswd die einzige vorhandene Zeile auskommentiert werden.
Standarduser löschen
sudo deluser -remove-home pi
SSH Zugang absichern
Es ist sinnvoll den root-Zugang zu sperren und den Port für SSH zu ändern.
Änderungen in der Datei /etc/ssh/sshd_config
PermitRootLogin no
Port 10115
====SSH absichern mit Private Key====
Zuerst muß ein Schlüsselpaar für den User generiert werden, der sich am Raspberry anmelden will. [[https://www.thomas-krenn.com/de/wiki/OpenSSH_Public_Key_Authentifizierung_unter_Ubuntu|Hier]] ist eine Anleitung, wie das Schlüsselpaar mit ssh_keygen erzeugt wird. Anschließend auf dem Raspberry das Verzeichnis .ssh im Home-Verzeichnis des Users anlegen und mit nano ~/.ssh/authorized_keys den pub-Key einfügen.
In der Datei /etc/ssh/sshd_config muß die RSA-Autentifizierung noch eingestellt werden:
PubkeyAuthentication yes
PasswordAuthentication no # damit wird das normale Login mit Passwort ausgeschaltet
Raspberry pi absichern
http://raspberry.tips/raspberrypi-tutorials/raspberry-pi-im-internet-absichern-eures-mini-rechners/
==== Zeit vom Zeitserver ====
Zuerst muß der systemd-timesyncd gestoppt werden. (läuft defaultmäsig im rasbian)
sudo systemctl stop systemd-timesyncd
sudo systemctl disable systemd-timesyncd
Danach kann ntp installiert werden.
sudo apt install ntp
sudo systemctl enable ntp
sudo timedatectl set-ntp 1
ntp syncronisiert die Zeit aber nicht. Über die Kommandozeile
sudo ntpd -qg
wird die Zeit syncronisiert. Der systemd service startet das Script: /usr/lib/ntp/ntp-systemd-wrapper. Dort habe ich den Befehl "sudo ntpd -qg" eingefügt. Damit wird die Zeit gesetzt aber der Service wird daraufhin beendet.
NTP ist relativ komplex und kann durch systemd-timesyncd ersetzt werden. Die Beschreibung ist [[https://blog.doenselmann.com/uhrzeit-ueber-systemd-timesyncd-synchronisieren/|hier]]. systemd-timesyncd legt den timestamp im Filesystem unter /var/lib/systemd/timesync/clock ab. Dieser Pfad ist hart codiert und kann nicht geändert werden. Deshalb kann systemd-timesyncd mit read-only Filesystem **nicht eingesetzt** werden.
==== Filesystem ====
Damit die SD-Karte länger hält, empfehle ich das root-Filesystem read-only zu mounten.[[http://www.gtkdb.de/index_36_2825.html|Hier]] ist eine ausführliche Beschreibung. Dafür wird Raspbian wie oben beschrieben installiert und anschließend folgende Änderungen als root durchgeführt:
Zuerst werden alle unnötigen Pakete entfernt.
apt-get remove --purge logrotate triggerhappy dphys-swapfile fake-hwclock samba-common libx11-.*
Das Verzeichnis /tmp braucht die Rechte 777.
Danach allte temporären Dateien ins RAM legen:
rm -rf /var/lib/dhcp/ /var/spool /var/lock /var/mail
ln -s /tmp /var/lib/dhcp
ln -s /tmp /var/spool
ln -s /tmp /var/mail
rm -rf /etc/resolv.conf
ln -s /tmp/resolv.conf /etc/resolv.conf
rm -r /var/lib/sudo
ln -s /tmp /var/lib/sudo
Nun wird die Datei /etc/fstab angepasst:
Vorher:
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
Nachher:
/dev/mmcblk0p1 /boot vfat ro,defaults 0 2
/dev/mmcblk0p2 / ext4 ro,defaults,noatime 0 1
des Weiteren fügen Sie am Ende der Datei die folgenden drei Zeilen ein. Dadurch wird für die Verzeichnisse /tmp, /var/log und /var/tmp jeweils ein temporäres Dateisystem eingerichtet.
tmpfs /tmp tmpfs rw,nodev,nosuid,size=500M 0 0
tmpfs /var/log tmpfs nodev,nosuid 0 0
tmpfs /var/lock tmpfs nodev,nosuid 0 0
tmpfs /var/tmp tmpfs nodev,nosuid 0 0
Bevor Sie das System neu starten können, müssen Sie noch die /boot/cmdline.txt anpassen. Öffnen Sie diese dazu mit einem Editor. Hier sollten Sie nur die folgende Zeile vorfinden.
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Fügen Sie am Ende der Zeile die Optionen fsck.mode=skip und noswap hinzu. Durch die Option fsck.mode=skip wird die Überprüfung des Dateisystems beim Systemstart abgeschalten. noswap sorgt dafür, dass Linux keine Swap-Datei anlegt.
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait fsck.mode=skip noswap
Nach dem Neustart läuft das System mit root und boot Partition als readonly. Wenn nun auf die SD-Karte geschrieben werden soll, muß es wieder beschreibbar gemountet werden:
Mount read/write
sudo mount -o remount,rw /
Mount readonly
sudo mount -o remount,ro /
== Anmerkungen: ==
Für Sessions braucht php Schreibzugriff auf /var/lib/php/sessions. Das kann mit einem symbolischen Link nicht realiesiert werden. Den Grund dafür habe ich nicht herausgefunden. Ich habe es mit einem zusätzlichen Mount gelöst. Die Mount-Zeile:
tmpfs /var/lib/php/sessions tmpfs nodev,nosuid 0 0
=== Alternative Overlayfs ===
Das [[https://www.linux-magazin.de/ausgaben/2017/06/kern-technik|linux-magazin]] beschreibt die Möglichkeit ein OverlayFS einzurichten.
Es gibt mitlerweile auch ein Git-Repo (https://github.com/ghollingworth/overlayfs) um das Overlayfs am Raspberry einzurichten.
raspi-config hat unter "Performance Options" / "Overlay File System" auch die Möglichkeit ein OverlayFS einzurichten.
=== Overlayfs einrichten ===
Damit Overlayfs verwendet werden kann, muß das Swapen deaktiviert werden.
sudo systemctl disable dphys-swapfile.service
sudo apt-get purge dphys-swapfile
Nun loggt sich der Benutzer in das vorbereitete System ein und wird durch Eingabe von »sudo su« zum Superuser. Jetzt geht es ans Konfektionieren des Initram-FS:
Damit der Kernel das Modul »overlay« lädt, trägt der Superuser den Modulnamen in die Datei »/etc/initramfs-tools/modules« ein:
echo "overlay" >> /etc/initramfs-tools/modules
Für die eigentliche Aktivierung des Overlay muss er das Skript »root-ro« an der richtigen Stelle in das Initram-FS aufnehmen und ausführbar machen:
cd /etc/initramfs-tools/scripts/init-bottom
wget https://gist.github.com/niun/34c945d70753fc9e2cc7/raw/3d60338cd8d8daf740692f426a5a1ec17839d613/root-ro
chmod +x root-ro
Danach geht es weiter mit dem Generieren des Initram-FS:
update-initramfs -c -k $(uname -r)
**Achtung!** nach einem Kernel-Update muß vor dem generieren des initramfs ein Reboot gemacht werden.
update-initramfs legt eine neue Datei in /boot an. Diese wird anschließend in initrd7.img umbenannt. Der letzte Schritt vor dem Reboot aktiviert das Initram-FS auf dem Raspberry Pi, indem
cd /boot
echo "initramfs initrd7.img" >>config.txt
den Bootloader anpasst. Achtung: Diese Konfigurationsoption verlangt kein Gleichheitszeichen zwischen Optionsname und Wert.
Fertig! Mit dem nächsten Reboot ist der Zugriff auf die SD-Karte nur noch lesend möglich.
====Apache 2====
===Notwendige Dienste aktivieren===
sudo a2enmod rewrite
sudo a2enmod ssl
Damit der Browser nicht die Verzeichnisstruktur anzeigt, wenn ein Verzeichnis keine Default Datei (index.html) enthält, muss in der Datei /etc/apache2/apache2.conf im Abschnitt die Option Indexes entfernt werden. Um eine .htaccess Datei zu verwenden muß in diesem Abschnitt auch AllowOverride auf All gesetzt werden.
Mit der .htaccess kann auch ein Zugangsschutz (Benutzerverwaltung) eingebaut werden. Eine genaue Beschreibung steht auf https://wiki.selfhtml.org/wiki/Webserver/htaccess.
=== Rewrite ===
Mit Rewrite kann z.B. die HTTP Anfrage nach HTTPS umgeleitet werden. Dafür muss folgende Zeile in die Datei /etc/apache2/sites-available/000-default.conf unter "" eingefügt werden:
Redirect permanent / https://guettinger.dynv6.net/
Das ist mit Let's Encrypt nicht mehr notwendig, es wird bei der Installation von Let's Encrypt automatisch gemacht.
Um das Rewrite zu überprüfen, muss die Datei /etc/apache2/apache2.conf geändert werden. Bei LogLevel muss "rewrite:trace3" angehängt werden. ([[http://httpd.apache.org/docs/current/mod/mod_rewrite.html#logging|Beschreibung]]) Die Meldungen werden nach /var/log/apache2/error.log geschrieben.
===Einstellungen===
Die Einstellungen werden unter anderem im php.ini vorgenommen. Welches php.ini verwendet wird, kann durch phpinfo() angezeigt werden. Folgende Einstellungen habe ich verändert:
|Name|Beschreibung|
|session.save_path|Pfad für temporäre Informationen über die Session (kann nicht verändert werden, funktioniert nur mit original Einstellungen)|
== Anmerkung: ==
Apache legt standardmäßig ein eigenes tmp-Verzeichnis an. Das funkioniert nicht mehr, wenn das Root-Filesystem readonly ist. Um dies zu Ändern muß die Datei /lib/systemd/system/apache2.service nach /etc/systemd/system/ kopiert werden und anschließend die Zeile
PrivateTmp=true
auskommentiert werden.
====Let's Encrypt====
Let's Encrypt stellt kostenlos SSL-Zertifikate für Server zur Verfügung. Die Einrichtung ist [[https://intux.de/2020/12/raspberry-pi-lets-encrypt-zertifikat/|hier]] beschrieben. Sie kann aber mit den folgenden Befehlen zusammengefasst werden:
sudo apt install certbot
sudo apt install python-certbot-apache
sudo certbot --apache
=== Zertifikat erneuern ===
Zum erneuern wird
sudo certbot certonly --renew-by-default --apache --rsa-key-size 4096 -d domain.tld
verwendet.
=== Zertifikat erneuern (alter Raspi) ===
Apache stoppen \\
Zertifikat mit
cd /opt/letsencrypt/
./letsencrypt-auto -d ERSTE_DOMAIN -d ZWEITE_DOMAIN --redirect -m DEINE_MAIL --agree-tos --renew-by-default
erneuern \\
Das Zertifikat kann auch ohne das virtielle Environment erneuert werden:
cd /opt/letsencrypt/
sudo certbot renew --apache
Apache wieder starten \\
====Festplatte / USB-Stick einrichten====
UUID feststellen:
sudo blkid /dev/sda1
Mountzeile für /etc/fstab
UUID=215bdbe3-989d-476f-a4db-e5d981df79d5 /media/usb-hdd/ ext4 permissions,defaults,auto
====Dokuwiki====
Dokuwiki wird mit sudo apt-get install dokuwiki installiert. Danach muß in die Datei /etc/apache2/sides-available/000-default.conf noch folgendes eingetragen werden:
Options FollowSymLinks
AllowOverride None
Order allow,deny
allow from all
Konfiguration anpassen
Die Konfiguration steht in /etc/dokuwiki/dokuwiki.php und /etc/dokuwiki/local.php. Zum Sperren des Punktes Registrieren muss in dokuwiki.php die Zeile
$conf['disableactions'] = 'register';
eingetragen werden.
Die Benutzerdaten stehen in /var/lib/dokuwiki/acl. Hierfür sind standardmässig zwei Links in /etc/dokuwiki/. Diese können auf die aktuelle Konfiguration angepasst werden.
acl.auth.php -> /var/lib/dokuwiki/acl/acl.auth.php
users.auth.php -> /var/lib/dokuwiki/acl/users.auth.php
====MySQL====
Anstatt MySQL kann auch mariadb verwendet werden. Es ist ein Fork von MySQL. Es unterstützt die gleichen Funktionen und ist performanter.
apt-get install mariadb-server
Hierbei wird das Root-Passwort für mysql abgefragt. (nicht mehr!)
Verzeichnis von Mysql ändern
Nachdem die Datenbanken in das neue Verzeichnis kopiert wurde muss in der
MySQL Configdatei unter /etc/mysql/mariadb.conf.d/50-server.cnf der Pfad unter „datadir“ angepasst
werden.
Datenbank neu anlegen:
sudo /usr/bin/mysql_install_db --user=mysql --datadir= --skip-auth-anonymous-user
Das Verzeichnis unter --datadir muß das gleiche sein, wie in /etc/mysql/mariadb.conf.d/50-server.cnf.
Anschließend muß das Root-Passwort neu gesetzt werden. Dazu mit mysql -u root den Datenbank Manager starten und folgendes eingeben:
MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
[[https://dev.mysql.com/doc/refman/5.5/en/data-directory-initialization.html|Hier]] steht, wie das Datenverzeichnis neu erstellt wird.
=== root-Passwort zurücksetzen ===
Die Datenbank kann mit:
sudo mysqld_safe --skip-grant-tables
in einen Mode geschaltet werden, wo sie kein Password erwartet. Damit dies funktioniert muß in /proc/run noch ein Verzeichnis für den user mysql angelegt werden. Danach kann mysql mit mysql -u root gestartet werden und über "update user set authentication_string=password('1111') where user='root';" das root-Passwort geändert werden.
== Dump einspielen ==
mysql -uBENUTZERNAME -p DATENBANKNAME < PFAD_ZUR_DATEI
====rsync====
Damit rsync mit root-Rechten auf den Server zugreifen kann muß am Ende der Datei /etc/sudoers die Berechtigung hinzugefügt werden:
ALL = NOPASSWD: /usr/bin/rsync
muß mit dem Benutzernamen ersetzt werden.
Nun kann rsync mit der Option -e "SSH" --rsync-path="sudo rsync" benutzer@example.com:/quelle ziel die Daten kopieren.
====Backup====
Verschiedene Backupmethoden sind [[https://mariadb.com/kb/en/mariadb/backup-and-restore-overview/|hier]] beschrieben. Der beste Weg scheint mysqlhotcopy zu sein. [[https://debian-administration.org/article/311/Backup_MySQL_databases_with_mysqlhotcopy|Hier]] ist auch eine Möglichkeit beschrieben, die Dateien über SSH zu sichern.
====TT-RSS====
Installationsanleitung: https://allesit.de/anwendung/tiny-tiny-rss-reader-installieren-924
sudo apt-get install tt-rss
Beim ersten Login muss (username: admin, password: password) verwendet werden.
===Installationsverzeichnis===
TT-RSS wird standardmäßig nach /usr/share/tt-rss/www installiert.
Für die Konfiguration mit read-only Root Filesystem muß die Datei /etc/tt-rss/config.php angepasst werden. Hier sind verschiedene Pfade eingetragen, wo das Programm hinschreiben will.
===Konfiguration ===
Die Konfigurationsdatei ist /etc/tt-rss/config.php.
===Cron===
Für den update kann ein Cronjob eingerichtet werden. Dazu soll die der Befehl sudo -u www-data php /usr/share/tt-rss/www/update_daemon2.php ausgeführt werden.
Eine genaue Beschreibung steht unter https://tt-rss.org/gitlab/fox/tt-rss/wikis/UpdatingFeeds
Dirk Deimeke hat eine [[https://www.deimeke.net/dirk/blog/index.php?/archives/3530-Tiny-Tiny-RSS-update-daemon-und-systemd-....html|Beschreibung]] für systemd veröffentlicht.
Hier noch ein Link zu einer deutschen Beschreibung von tt-rss: http://office-tipps.net/tiny-tiny-rss-tutorial-1-installation-konfiguration/ \\
http://office-tipps.net/tiny-tiny-rss-tutorial-2-optische-anpassungen-und-plugins/ \\
http://office-tipps.net/tiny-tiny-rss-tutorial-3-artikel-feiner-strukturieren/ \\
http://office-tipps.net/tiny-tiny-rss-tutorial-4-noch-ein-paar-kleinigkeiten/ \\
====Composer====
[[http://askubuntu.com/questions/116960/global-installation-of-composer-manual|Hier]] sind mehrere Möglichkeiten beschrieben, wie man Composer installiert. ich denke am sinnvollsten ist:
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
====PHPMailer====
[[https://github.com/PHPMailer/PHPMailer|PHPMailer]] ist ein PHP-Skript, was E-Mails verschickt. Es wird mit Composer installiert.
==== Syslog ====
Raspian verwendet rsyslog als Dienst. Es kann über /etc/rsyslog.conf konfiguriert werden. Hier können auch Filter eingetragen werden.
In diesem [https://www.heise.de/ct/artikel/Erweiterte-Systemueberwachung-mit-rsyslog-846750.html|Artikel]] wird rsyslog beschrieben.
====E-Mail====
Damit der Raspi E-Mails verschicken kann braucht man einen MTA (Mail Transfer Agent).
Eine Möglichket mit ssmtp und mailutils: http://nicht-traeumen-sondern-machen.de/RaspberryPi_Basteleien/Code_Email_Versenden.php?anker=b2 \
Mit postfix und bsd-mailx: http://www.netzmafia.de/skripten/hardware/RasPi/RasPi_Postfix.html \
Mit exim4: http://blog.kay-farin.de/2014/06/21/allgemein/kommunikativ-e-mails-per-raspberry-pi-versenden, http://openbook.rheinwerk-verlag.de/ubuntu_904/ubuntu_20_server_006.htm, http://blog.mansshardt.net/mailversand-mit-exim-ueber-externen-smtp-unter-debian/
Weitere Beschreibungen:
http://kampis-elektroecke.de/?page_id=2324
Absenderadresse ändern:
http://serverfault.com/questions/377821/exim-send-every-emails-with-a-predefined-sender
== TLS ==
https://www.axxeo.de/blog/technisches/exim-mit-tls.html
https://www.heise.de/security/artikel/StartTLS-785453.html beschreibt den Test von TLS. Hier ist allerdings die Befehlssequenz für IMAP falsch. Der Login funktioniert mit "a1 LOGIN user password".
== Postfix ==
https://www.thomas-krenn.com/de/wiki/Postfix_unter_Debian_einrichten
== ssmtp ==
SSMTP funkitoniert auf dem Raspi mit Arcor und den untenstehenden Einstellungen nach [[https://linuxundich.de/gnu-linux/system-mails-ohne-einen-mail-server-mit-ssmtp-verschicken/#more-15889|dieser]] Beschreibung. Es gibt auch eine Beschreibung auf [[https://linuxundich.de/gnu-linux/system-mails-ohne-einen-mail-server-mit-ssmtp-verschicken/|Linux und Ich]].
Installation:
sudo apt-get install ssmtp
Die Datei /etc/ssmtp/ssmtp.conf
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=mail.arcor.de:465
# Where will the mail seem to come from?
#rewriteDomain=
# The full hostname
hostname=
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES
UseTLS=YES
AuthUser=
AuthPass=
FromLineOverride=NO
Die Datei /etc/ssmtp/revaliases
# sSMTP aliases
#
# Format: local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
root:guettinger@arcor.de:mail.arcor.de:465
www-data:guettinger@arcor.de:mail.arcor.de:465
thomas:guettinger@arcor.de:mail.arcor.de:465
Das Logfile wird nach /var/log/mail.log geschrieben.
Eine Alternative ist auch [[https://wiki.archlinux.org/index.php/Msmtp|msmtp]].
== PHPMailer ==
In Github gibt es ein Projekt [[https://github.com/PHPMailer/PHPMailer|PHPMailer]]. Es kümmert sich um den Versand von E-Mails.
===== Owncloud / Nextcloud =====
Wie man Nextcloud auf dem Raspi installiert ist im Raspberry PI Magazin 05/2016 , S. 56 [[http://www.raspberry-pi-geek.de/Magazin/2016/05/Owncloud-Fork-Nextcloud-auf-dem-RasPi-im-Praxistest|beschrieben]]
=====Hardware abfragen=====
mit vcgencmd kann die Hardware abgefragt werden (als root)
vcgencmd measure_volts
gibt die Spannung aus
vcgencmd measure_temp
gibt die Temperatur aus
Beschreibung auf http://elinux.org/RPI_vcgencmd_usage
=====Allgemeines=====
Raspberry Magazin
https://www.raspberrypi.org/magpi-issues/MagPi38.pdf
=====Nützliche Tools=====
[[http://nocc.sourceforge.net/|E-Mail Client für die Homepage]]
=====Nützliche Links=====
https://kofler.info/raspbian-jessie-raspbian-2/ beschreibt kurz Raspbian jessy
http://raspberry.tips/
http://jankarres.de/ Hauptsächlich Tipps zu OwnCloud
https://samhobbs.co.uk/2014/01/webalizer-a-free-open-source-alternative-to-google-analytics-for-raspberry-pi Zugriffsstatistik
==== Messanger ====
[[https://www.secutan.de/whatsapp_raspberry/|Hier]] gibt es eine Beschreibung, wie Whatsapp auf dem Raspberry installiert werden kann.
Es gibt die Möglichkeit mit XMPP einen Messanger auf dem Raspi zu hosten. Eine Möglichkeit ist ejabberd. Die installation wird auf https://0fury.de/blog/?/post/%5BTutorial%5D+Wie+mache+ich+meinen+Raspberry+Pi+zu+einem+Instant-Messaging-Server%3F/ beschrieben. \\
Es soll auch möglich sein XMPP mit Whatsapp zu verbinden. Eine Möglichkeit wird auf https://www.andreas-peters.net/linux/2016/03/01/whatsapp_xmpp_transport.html beschrieben.
Eine weitere Installationsanleitung für XMPP auf dem Raspberry: https://jankarres.de/2015/08/raspberry-pi-xmpp-server-prosody-installieren/