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)
ROCK64 (4 GB)
64 GB SD Karte
Adapter von SD Micro auf SD
** ACHTUNG: Diese Anleitung funktioniert nur für die Version V2 des Rock64, weil nur für diese Version ein ARCH Linux Distribution zur Verfügung steht. Für die Version 3 gibt es aktuell nur ein Debian 9, mit dem sollte Matrix Synapse zwar auch funktionieren, dann muss man Matrix aber von Hand installieren und aktualisieren.**
Diese Konstellation sollt 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 Rock64 offen sein
HTTPS-Server: 8448
HTTPS-Server: 443
FRITZBox Portfreigaben. Was sind Portweiterleitungen?
Alternativer Link ohne Tracker
Mit dieser Anleitung kann man auf einem ROCK64 den Server Synapse von Matrix installieren.
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 ArchLinux?
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 Pakete für ARM Computer an.
Diese Version von ArchLinux werden wir installieren:
https://archlinuxarm.org/platforms/armv8/rockchip/rock64
Hier stehen die offiziellen Anleitungen von Matrix zu Synapse https://matrix.org/docs/guides/installing-synapse
Ich empfehle direkt eine 64 GB Karte zu verwenden, da man mit Synapse aktuell keine alten Daten löschen kann, der Server wird also über kurz oder lang stark anwachsen.
So heißt die SD Karte unter Ubuntu bzw. Linux Mind
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 64 GB Karte). Hierzu öffnen wir in Linux das Terminal [STR]-[ALT]-[T] und geben folgende Befehle ein
sudo -s
(danach muss man das Passwort vom root User eingeben)\
Die ersten 32 MByte müssen mit dem Wert 0 befüllt werden
dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=32
Starten von fidsk zum partitionieren der SD Karte
fdisk /dev/mmcblk0
At the fdisk prompt, create the new partition:
- 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, 32768 for the first sector, and then press ENTER to accept the default last sector.
- Write the partition table and exit by typing w.
Create the ext4 filesystem:
mkfs.ext4 /dev/mmcblk0p1
Verzeichnis eingeben, wo die Daten hin kopiert werden sollen
cd /home/username
pwd
(ums zu sehen, ob es funktioniert hat)
ls
(zum ansehen der Dateien die da jetzt liegen)\
Mount the filesystem:
mkdir root
mount /dev/mmcblk0p1 root
Jetzt laden wir das Filesystem von root herunter und entpacken es (als root-User)
wget http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
apt install libarchive-tools
(falls bsdtar nicht gefunden wird)
sudo bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C root
Es wird folgendes angezeigt
bsdtar: Ignoring malformed pax extended attribute
bsdtar: Ignoring malformed pax extended attribute
bsdtar: Ignoring malformed pax extended attribute
bsdtar: Ignoring malformed pax extended attribute
bsdtar: Error exit delayed from previous errors
Danach noch folgendes eingeben
sync
Download the boot.scr script for U-Boot and place it in the /boot directory:
wget http://os.archlinuxarm.org/os/rockchip/boot/rock64/boot.scr -O root/boot/boot.scr
sync
umount root
Download and install the U-Boot bootloader:
wget http://os.archlinuxarm.org/os/rockchip/boot/rock64/idbloader.img
wget http://os.archlinuxarm.org/os/rockchip/boot/rock64/uboot.img
wget http://os.archlinuxarm.org/os/rockchip/boot/rock64/trust.img
dd if=idbloader.img of=/dev/mmcblk0 seek=64 conv=notrunc
dd if=uboot.img of=/dev/mmcblk0 seek=16384 conv=notrunc
dd if=trust.img of=/dev/mmcblk0 seek=24576 conv=notrunc
Jetzt die SD Karte in den Rock64 stecken und den Rock64 starten.
AB HIER WEITERMACHEN, WENN MAN EINEN RASPBERRY 3B+ AUFGESETZT HAT
Dann meldet ihr euch im Terminal von Linux mit dem alarm User bei dem ROCK64 / Raspberry an. Hierzu müsst ihr euch über euren Router die IP Adresse heraussuchen, die dem ROCK64 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 Archlinux 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
rm /boot/boot.scr
pacman -Sy uboot-rock64
Das System aktualisieren
pacman -Syu
Jetzt das Ergebnis auf die Festplatte sichern
dd if=/dev/mmcblk0 of=Rock64.img
So kann man das Image wieder auf eine SD Karte kopieren
dd if=Rock64.img of=/dev/mmcblk0
Als erstes besorgen wir uns Zertifikate bei Let’s Encrypt, Hierzu müssen wir Certbot installieren.
pacman -S certbot
Jetzt müsst ihr für den ROCK64 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 2048 --standalone --agree-tos --no-eff-email --email deine.mail@domain.de -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 niginx
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;
sendfile on;
keepalive_timeout 65;
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name meinedomain.de;
client_max_body_size 50m;
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;
}
}
server {
listen 8448 ssl default_server;
listen [::]:8448 ssl default_server;
server_name meinedomain.de;
client_max_body_size 50m;
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;
}
}
}
systemctl start nginx.service
systemctl enable nginx.service
Nachschauen ob der Server geht
systemctl status nginx
PS: Mit STR-C kommt man wieder raus.
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=yes
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 aus eurer Originaldatei einsetzen.
nano /etc/synapse/homeserver.yaml
server_name: "meinedomain.de"
pid_file: /var/lib/synapse/homeserver.pid
soft_file_limit: 0
use_presence: true
listeners:
- port: 8008
tls: false
bind_addresses: ['::1', '127.0.0.1']
type: http
x_forwarded: true
resources:
- names: [client, federation]
compress: false
acme: tls_fingerprints: []
database:
name: "sqlite3"
args: database: "/var/lib/synapse/homeserver.db"
event_cache_size: "10K"
log_config: "/etc/synapse/meinedomain.de.log.config"
rc_messages_per_second: 0.2
rc_message_burst_count: 10.0
federation_rc_window_size: 1000
federation_rc_sleep_limit: 10
federation_rc_sleep_delay: 500
federation_rc_reject_limit: 50
federation_rc_concurrent: 3
media_store_path: "/var/lib/synapse/media_store"
uploads_path: "/var/lib/synapse/uploads"
max_upload_size: "10M"
max_image_pixels: "32M"
dynamic_thumbnails: false
thumbnail_sizes:
- width: 32
height: 32
method: crop
- width: 96
height: 96
method: crop
- width: 320
height: 240
method: scale
- width: 640
height: 480
method: scale
- width: 800
height: 600
method: scale
url_preview_enabled: False
max_spider_size: "10M"
recaptcha_public_key: "YOUR_PUBLIC_KEY"
recaptcha_private_key: "YOUR_PRIVATE_KEY"
enable_registration_captcha: False
recaptcha_siteverify_api: "https://www.google.com/recaptcha/api/siteverify"
turn_user_lifetime: "1h"
turn_allow_guests: True
enable_registration: False
# If set, allows registration by anyone who also has the shared
# secret, even if registration is otherwise disabled.
registration_shared_secret: "~~~~~~~~~~~~~~~"
# Set the number of bcrypt rounds used to generate password hash.
bcrypt_rounds: 12
# Allows users to register as guests without a password/email/etc, and
allow_guest_access: False
# The identity server which we suggest that clients should use when users log
trusted_third_party_id_servers:
- matrix.org
- vector.im
autocreate_auto_join_rooms: true
# Enable collection and rendering of performance metrics
enable_metrics: False
report_stats: true
# A list of event types that will be included in the room_invite_state
room_invite_state_types:
- "m.room.join_rules"
- "m.room.canonical_alias"
- "m.room.avatar"
- "m.room.encryption"
- "m.room.name"
# A list of application service config file to use
app_service_config_files: []
# Whether or not to track application service IP addresses. Implicitly
track_appservice_user_ips: False
# a secret which is used to sign access tokens. If none is specified,
macaroon_secret_key: "~~~~~~~~~~~~~~~"
# Used to enable access token expiration.
expire_access_token: False
# a secret which is used to calculate HMACs for form values, to stop
form_secret: "~~~~~~~~~~~~~~~"
# Path to the signing key to sign messages with
signing_key_path: "/etc/synapse/meinedomain.de.signing.key"
# The keys that the server used to sign messages with but won't use
old_signing_keys: {}
# How long key response published by this server is valid for.
key_refresh_interval: "1d" # 1 Day.
# The trusted servers to download signing keys from.
perspectives:
servers:
"matrix.org":
verify_keys:
"ed25519:auto":
key: "~~~~~~~~~~~~~~~"
# Enable password for login.
password_config:
enabled: true
# Uncomment and change to a secret random string for extra security.
# DO NOT CHANGE THIS AFTER INITIAL SETUP!
# Whether to allow non server admins to create groups on this server
enable_group_creation: false
alias_creation_rules:
- user_id: "*"
alias: "*"
action: allow
resources:
- names: [client, federation]
compress: false
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/matrix-synapse/homeserver.yaml http://localhost:8008
Jetzt müsst ihr auch nur noch den Riot.im Client installiern (geht auch direkt im Browser) um auch damit mit dem neuen User anmelden zu können.
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 riesiges Logfile.
sudo nano /etc/synapse/meinedomain.de.log.config
maxBytes: 10000000
Backup erstellen
Einmal pro Monat
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 Rock64, sondern unter Linux im Terminal)
dd if=/dev/mmcblk0 of=Rock64.img
Das Image auf die neue Karte übertrageb
dd if=Rock64.img of=/dev/mmcblk0
Jetzt die neu SD Karte in der Rock64 stecken und starten.
Einmal pro Woche
Als root anmelden
systemctl stop synapse
systemctl stop nginx
sqlite3 /var/lib/synapse/homeserver.db .dump > /var/lib/synapse/homeserver_DATUM.sql
rsync --numeric-ids -avp --stats /var/lib/ rsync@IP-vom-NAS:22:/ArchLinuxRock64lib
pacman -Syu
systemctl start nginx
systemctl start synapse
Prüfen ob alles noch geht
systemctl status nginx
systemctl status synapse
Historie Medien 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="
Ein paar Befehle für später
chown -R synapse /var/lib/synapse
chown -R synapse /etc/synapse
pacman -S wget
pacman -S netdata
systemctl start netdata
systemctl enable netdata
systemctl restart nginx.service
journalctl -feu synapse
Datenbankverzeichnisses /var/lib/synapse/
Konfigurationsverzeichnisses /etc/synapse
Hier noch eine paar Links zu andern 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: @favstarmafia@social.anoxinon.de
Matrix: @favstarmafia:bau-ha.us
XMPP: favstarmafia@anoxinon.me
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!