Ich übernehme keine Verantwortung für die Richtigkeit dieser Anleitung, sie ist nur eine Mitschrift der Installation meines eigenen Matrix Servers. Die Verwendung dieser Anleitung ist deshalb auf eigene Gefahr.
Hardware
PC mit Linux (in diesem Beispiel Linux Mint)
rPI4B (4 GB)
16 GB SD Karte
Adapter von SD Micro auf SD
Ein USB Medium für die Daten (muss nicht unbedingt sein)
Diese Konstellation sollte bis zu 20 Accounts verkraften können.
Was braucht man sonst noch
Eine Domain bei einem Anbieter, der DynDNS kann.
Einen Router, der DynDNS kann.
Was ist Dynamic DNS? Wofür brauche ich DynDNS?
Alternativer Link ohne Tracker
Definitionen
User: username (durch den eigenen Linux User ersetzen)
Domain: meinedomain.de (durch die eigene Domain ersetzen)
Folgende Ports müssen für die interne IP des rPI4 offen sein
HTTPS-Server: 8448
HTTPS-Server: 443
FRITZBox Portfreigaben. Was sind Portweiterleitungen?
Alternativer Link ohne Tracker
Aktuell gibt es noch ein Problem mit großen Räumen, deshalb solltet ihr euren Usern mitteilen, dass sie mit ihrem Account erst mal nicht versuchen, Mitglied in großen öffentlichen Räumen zu werden.
Warum ARCH Linux?
Ihr solltet Synapse unbedingt mit einem Paketmanager unter Linux installieren, da nur so sichergestellt ist, dass zukünftig alle Updates auch sicher und sauber installiert werden. Nach meinem Wissen bietet aktuell nur ArchLinux so ein Paket für ARM Computer an.
Diese Version von ArchLinux werden wir installieren:
https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-4
Hier stehen die offiziellen Anleitungen von Matrix zu Synapse https://matrix.org/docs/guides/installing-synapse
Ich empfehle direkt ein 256 GB USB Medium zu verwenden, da man mit Synapse aktuell keine alten Daten löschen kann, der Server wird also über kurz oder lang stark anwachsen.
Installation von ARCH Linux
fdisk -lu
(alle Partitionen anzeigen lassen)
So heißt die SD Karte bei mir unter Ubuntu bzw. Linux Mint
mmcblk0: Das ist der Name der Karte selbst
mmcblk0p1: p1 ist de Name der ersten Partition
Im ersten Schritt muss die SD Karte vorbereitet werden (im Beispiel eine 16 GB Karte). Hierzu öffnen wir in Linux das Terminal [STRG]-[ALT]-[T] und geben folgenden Befehle ein:
sudo -s
(danach muss man das Passwort vom root User eingeben)
Starten von fdsk zum Partitionieren der SD Karte
fdisk /dev/mmcblk0
At the fdisk prompt, delete old partitions and create a new one:
- Type o. This will clear out any partitions on the drive.
- Type p to list partitions. There should be no partitions left.
- Type n, then p for primary, 1 for the first partition on the drive, press ENTER to accept the default first sector, then type +100M for the last sector.
- Type t, then c to set the first partition to type W95 FAT32 (LBA).
- Type n, then p for primary, 2 for the second partition on the drive, and then press ENTER twice to accept the default first and last sector.
- Write the partition table and exit by typing w.
Prüfen wo man ist, damit man nicht das lokale System überschreibt
Create and mount the FAT filesystem:
mkfs.vfat /dev/mmcblk0p1
mkdir boot
mount /dev/mmcblk0p1 boot
Create and mount the ext4 filesystem:
mkfs.ext4 /dev/mmcblk0p2
mkdir root
mount /dev/mmcblk0p2 root
Download and extract the root filesystem (as root, not via sudo):
wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-4-latest.tar.gz
apt install libarchive-tools
bsdtar -xpf ArchLinuxARM-rpi-4-latest.tar.gz -C root
sync
Move boot files to the first partition:
mv root/boot/* boot
Unmount the two partitions:
umount boot root
Jetzt die SD Karte in den rPI4 stecken, das LAN Kabel anschließen und den rPI4 starten (Netzteil anschließen).
Dann meldet ihr euch im Terminal von Linux mit dem alarm User bei dem Raspberry an. Hierzu müsst ihr euch über euren Router die IP Adresse heraussuchen, die dem Raspberry zugewiesen wurde. Falls euer Router die Möglichkeit hat, die IP für immer fest zuzuordnen, dann solltet ihr das dabei gleich mit machen.
ssh alarm@IP-des-Raspi
Erst mal erstellen wir ein neues Passwort, der Default ist alarm.
passwd
(danach das neue Passwort von alarm eingeben)
Jetzt machen wir uns zum Admin (User root) und erstellen wieder ein neues Passwort (Default ist root).
su
passwd
(danach das neue Passwort von root eingeben)
Jetzt müsste euer User [root@alarmpi alarm] heißen.
Danach muss der Paketdienst von ARCH Linux initialisiert werden, mit dem man Programme installieren kann. Das machen wir, damit wir erst mal alles auf den neuesten Stand bringen können.
pacman-key --init
pacman-key --populate archlinuxarm
Das System aktualisieren
pacman -Syu
USB Medium einrichten
Das USB Medium einstecken (wenn es ein USB3 Meddium ist, dann in die blauen Buchsen).
fdisk -lu
(alle Partitionen anzeigen lassen). Bei mir heißt der Medium sda.
fdisk /dev/sda
o (alle Partationen löschen)
p (anzeigen ob alle Partitionen weg sind)
n (neue Partition anlegen)
p (Primäre Partition auswählen)
1 (1. Partition auswählen)
Enter (Anfang übernehmen)
Enter (Ende übernehmen)
Y (Sigantur entfernen)
W (ausführen)
mkfs.ext4 /dev/sda1
mkdir /mnt/matrix
mount /dev/sda1 /mnt/matrix
Das USB Medium muss bei jedem Systemstart automatisch gemountet werden, deshalb müssen wir sie in die Datei fstab eintragen
blkid
(UUID der USB Platte suchen).
nano /etc/fstab
folgende Zeile einfügen
UUID=a8c61cae-035d-499f-a13c-796c15fe8006 /mnt/matrix auto rw,nouser 0 0
mount -a
(ausführen)
Jetzt erstellen wir die Verzeichnisse auf dem USB Medium
cd /mnt/matrix
mkdir synapse
cd synapse
mkdir media_store
mkdir uploads
ls
(zum prüfen was passiert ist)
Zugriff auf die neuen Ordner freigeben (maximal: alle Programme dürfen zugreifen):
chmod 777 /mnt/matrix/synapse
chmod 777 /mnt/matrix/synapse/media_store
chmod 777 /mnt/matrix/synapse/uploads
Oder so, mit minimalem Zugriff auf die neuen Ordner
chown root:root /mnt/matrix
chmod 755 /mnt/matrix
chown -R synapse:root /mnt/matrix/synapse
find /mnt/matrix/synapse -type d -exec chmod 750 {} ;
find /mnt/matrix/synapse -type f -exec chmod 640 {} ;
Es ist empfehlenswert, das USB Medium vollständig per dm-crypt zu verschlüsseln.
Zertifikate besorgen
Wir besorgen uns Zertifikate bei Let’s Encrypt, hierzu müssen wir Certbot installieren.
pacman -S certbot
Jetzt müsst ihr für den rPI die beiden Ports 80 und 443 öffnen. Wenn die beiden Ports offen sind, könnt ihr mit dem nachfolgenden Befehl ein Zertifikat erstellen.
certbot certonly --rsa-key-size 4096 --standalone --agree-tos --no-eff-email --email [email protected] -d meinedomain.de
In dem Verzeichnis /etc/letsencrypt/live/meinedomain.de wurden folgende Dateien erstellt:
@cert.pem
@chain.pem
@fullchain.pem
@privkey.pem
Danach kann der Port 80 wieder geschlossen werden.
Jetzt installieren wir den Webserver nginx
pacman -S nginx
Folgende Konfiguration in die Datei /etc/nginx/nginx.conf einfügen
nano /etc/nginx/nginx.conf
worker_processes 1;
events {worker_connections 1024;}
http {
include mime.types;
default_type application/octet-stream;
# Diese Zeile schaltet das Accesslog aus
access_log /dev/null;
sendfile on;
keepalive_timeout 65;
client_max_body_size 100M;
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name meinedomain.de;
client_max_body_size 100m;
ssl_certificate /etc/letsencrypt/live/meinedomain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/meinedomain.de/privkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /_matrix {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
client_max_body_size 100m;
}
}
server {
listen 8448 ssl default_server;
listen [::]:8448 ssl default_server;
server_name meinedomain.de;
client_max_body_size 100m;
ssl_certificate /etc/letsencrypt/live/meinedomain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/meinedomain.de/privkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
client_max_body_size 100m;
}
}
}
systemctl start nginx.service
systemctl enable nginx.service
Nachschauen ob der Server geht
systemctl status nginx
PS: Mit STRG-C kommt man wieder raus.
Hinweis zum Thema Sicherheit
Wenn ihr den Webserver noch sicherer machen wollt, dann könnt ihr zusätzlich folgenden Befehl einfügen
ssl_protocols TLSv1.3 TLSv1.2;
Ab die Konfiguation noch konsistent ist, kann man mit nginx -t
prüfen
Danach können aber vielleicht älter Anwenungen nicht mehr auf den Server zugreifen.
Hier noch ein passender Artikel dazu https://tecadmin.net/enable-tls-with-nginx/
Jetzt installieren wir den Server von Matrix
pacman -S matrix-synapse
pacman -S sudo
cd /var/lib/synapse
sudo -u synapse python /usr/lib/python3.7/site-packages/synapse/app/homeserver.py --server-name meinedomain.de --config-path /etc/synapse/homeserver.yaml --generate-config --report-stats=no
Eine Kopie der erzeugten Datei /etc/synapse/homeserver.yaml erstellen.
Folgende Konfiguration in die Datei /etc/synapse/homeserver.yaml einfügen.
Danach an den Stellen wo ~~~~~~~~~~~~~~~ steht, die Werte / Schlüssel aus eurer Originaldatei einsetzen.
registration_shared_secret: "~~~~~~~~~~~~~~~"
macaroon_secret_key: "~~~~~~~~~~~~~~~"
form_secret: "~~~~~~~~~~~~~~~"
Hinweis: Diese Konfiguration bezieht sich auf die Version 1.4 von Matrix-Synapse.
nano /etc/synapse/homeserver.yaml
server_name: "meinedomain.de"
pid_file: /var/lib/synapse/homeserver.pid
federation_ip_range_blacklist:
- '127.0.0.0/8'
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'
- '100.64.0.0/10'
- '169.254.0.0/16'
- '::1/128'
- 'fe80::/64'
- 'fc00::/7'
listeners:
- port: 8008
tls: false
bind_addresses: ['::1', '127.0.0.1']
type: http
x_forwarded: true
resources:
- names: [client, federation]
compress: false
acme:
database:
name: "sqlite3"
args:
database: "/mnt/matrix/synapse/homeserver.db"
log_config: "/etc/synapse/meinedomain.de.log.config"
media_store_path: "/mnt/matrix/synapse/media_store"
uploads_path: "/mnt/matrix/synapse/uploads"
max_upload_size: 100M
max_image_pixels: 32M
max_spider_size: 100M
enable_registration: false
registration_shared_secret: "~~~~~~~~~~~~~~~"
report_stats: true
macaroon_secret_key: "~~~~~~~~~~~~~~~"
form_secret: "~~~~~~~~~~~~~~~"
signing_key_path: "/etc/synapse/meinedomain.de.signing.key"
password_config:
opentracing:
trusted_key_servers:
- server_name: "matrix.org"
suppress_key_server_warning: true
systemctl start synapse
Prüfen ob der Server läuft
systemctl status synapse
Für den späteren Autostart noch folgendes eingeben
systemctl enable synapse
Um zu sehen, ob alles geht, legt ihr jetzt den ersten User an und meldet auch damit an.
Am besten gleich den ADMIN User anlegen, den braucht man später immer mal wieder.
register_new_matrix_user -c /etc/synapse/homeserver.yaml http://localhost:8008
Jetzt müsst ihr auch nur noch den Riot.im Client installieren (geht auch direkt im Browser), um euch dann mit dem neuen User dort anmelden zu können. Hierzu muss bei der Anmelung der Server matrix.org durch meinedomain.de ersetzt werden.
Ich habe noch die Größe der Logdatei auf 10 MByte begrenzt, so kann man später besser die einzelnen Dateien löschen und hat nicht ein so riesiges Logfile.
sudo nano /etc/synapse/meinedomain.de.log.config
maxBytes: 10000000
Backup erstellen
Ein komplettes Image von der SD Karte erstellen und das dann auf eine andere SD Karte zurückspielen.
Dann mit der kopierten Karte den Server neu starten.
Als root anmelden
systemctl stop synapse
systemctl stop nginx
shutdown
Die SD Karte auf die Festplatte kopieren (nicht auf dem rPI, sondern unter Linux im Terminal)
dd if=/dev/mmcblk0 of=rPI4.img
Das Image auf die neue Karte übertragen
dd if=rPI4.img of=/dev/mmcblk0
Jetzt die neu SD Karte in der rPI stecken und starten.
Zusätzlich müsst ihr natürlich noch die Daten auf dem USB Medium sichern, am besten macht ihr das mindesten einmal pro Woche.
Cash der Medienhistorie löschen, die älter als einen Monat ist
curl -k -v -d '' "https://meinedomain.de/_matrix/client/r0/admin/purge_media_cache?before_ts=$(date -d-1month +%s000)&access_token="
Sinnvolle Software für den Matrix Server
Midnight Commander
pacman -S mc
Netdata: Monitoring Service
pacman -S netdata
systemctl start netdata.service
systemctl enable netdata.service
Aufrufen kann man die Anzeige mit http://ID-des-rPI:19999
Die Temperatur Anzeige lm_sensors kann leider den Sensor nicht erkennen.
Temperatur messen
pacman -S raspberrypi-firmware
/opt/vc/bin/vcgencmd measure_temp
Ein paar Befehle für später
chown -R synapse /var/lib/synapse
chown -R synapse /etc/synapse
pacman -S wget
journalctl -feu synapse
Datenbankverzeichniss /mnt/matrix/synapse/
Konfigurationsverzeichniss /etc/synapse
Hier noch eine paar Links zu anderen Anleitungen und Artikeln (allerdings nicht für einen Minirechner)
Eigener verschluesselter Chat-Server mit Matrix-Synapse
Erkenntnisse und Erfahrungen rund um Matrix
Eigener Matrix Server
Wie man Matrix-Synapse auf Ubuntu installiert
Matrix – Das XMPP für Hobby-Admins?
Leichte Installation, einfache Bedienung
Rückmeldungen könnt ihr mir unter folgenden Adressen zukommen lassen:
Mastodon: @[email protected]
Matrix: @favstarmafia:bau-ha.us
Außerdem empfehle ich euch noch den Matrix Raum:
#synapse-admins:bau-ha.us
Da sind ganz viele nette Admins unterwegs, die einem mal bei einem Problem helfen können.
Comments
No comments yet. Be the first to react!