pixel
Seite wählen

NETWAYS Blog

Your own Mini-NAS – Einfach umgesetzt mit Raspberry Pi und OpenMediaVault

Als Auszubildender zum Fachinformatiker für Systemintegration im ersten Lehrjahr bei NETWAYS darf ich regelmäßig neue Projekte bearbeiten. Das Ziel der Projekte: Wissensaufbau und Verständnis für die zugrunde liegende Technik und Software entwickeln.
Im Rahmen meines aktuellen Projektes setze ich mich mit der Einsatzmöglichkeit eines Raspberry Pi 4 als Network-attached storage (NAS) auseinander. Um sich als Einsteiger mit dem Konzept NAS und den Konfigurationsmöglichkeiten vertraut zu machen, ist die Open Source Software OpenMediaVault (OMV) eine sehr gute Einstiegsmöglichkeit. Mit ihrer Hilfe lässt sich unkompliziert und innerhalb kurzer Zeit ein voll funktionstüchtiges NAS installieren und konfigurieren.

Was ist OpenMediaVault?

OpenMediaVault ist eine moderne, auf Debian basierende NAS-Lösung. Die Software unterstützt mit FTP, TFTP, SMB/Samba, NFS, SNMP und SSH die gängigsten Protokolle für den Fernzugriff. Dadurch kann von (fast) jedem Gerät auf die gespeicherten Daten zugegriffen werden, egal ob PC, Laptop oder Smartphone.

Eine besonders wichtige Rolle spielt dabei Samba. Das dazugehörige SMB-Protokoll wird von Linux, Microsoft Windows, macOS sowie Android unterstützt und ist somit das ideale Protokoll für den Cross-Platform-Zugriff.

Die Datensicherung kann unter anderem mit RSync durchgeführt werden. Dafür müssen lediglich ein Quell- sowie ein Zielordner angegeben werden.
Neben den von Haus aus vorhandenen Funktionen lässt sich OMV mit unterschiedlichen Plug-ins erweitern und an die eigenen Bedürfnisse anpassen.

Zusätzlich zu seiner Funktionalität ist OpenMediaVault zudem äußerst einsteiger- und bedienerfreundlich. Diese Nutzerfreundlichkeit zeigt sich unter anderem an der grafischen Weboberfläche, die es allen Nutzer:innen, unabhängig vom IT-Wissen, erlaubt mit dem Browser auf OMV zuzugreifen und die Software zu konfigurieren.

Die Entwickler:innen selbst bezeichnen OMV als eine “Out-of-the-box-Lösung die es jeder Person, auch ohne technisches Vorwissen, möglich macht ein NAS zu installieren und zu verwalten.”

Technische Voraussetzungen

Damit ein NAS mithilfe von OMV installiert und konfiguriert werden kann, gibt es einige technische Voraussetzungen die erfüllt werden müssen.
Man benötigt:

  • Raspberry Pi 4 mit Raspberry Pi OS Full oder Raspberry Pi OS lite (Versionen ab Raspberry Pi 2B sind ebenfalls möglich)
  • microSD-Karte (idealerweise 8GB Speicherkapazität)
  • Aktive Ethernet- oder WiFi-Verbindung des Raspberry Pi
  • Externes Speichermedium (z.B. Festplatte, USB-Stick) mit dem gewünschten Speicherplatz
  • Raspberry Pi HDMI-Kabel (falls der Pi mit einem Bildschirm verbunden werden muss)

Installation von OpenMediaVault

–HINWEIS–
Nach der Installation von OpenMediaVault kann der Raspberry Pi problemlos ohne Monitor betrieben werden. Da für den Zugriff auf die Weboberfläche jedoch die IP-Adresse des Pi benötigt wird, sollte für die Dauer des Installationsvorgangs ein Monitor angeschlossen sein.

Das Versprechen der Nutzerfreundlichkeit hält OpenMediaVault ebenfalls bei der Installation ein. Sie beinhaltet lediglich fünf Schritte, wovon vier der Aktualisierung bzw. der Informationsfindung dienen.

  • Update und Aktualisierung der bereits auf dem Raspberry Pi installierten Softwarepakete
sudo apt update
sudo apt upgrade
  • Installation des OpenMediaVault – Softwarepakets
wget -O - https://raw.githubusercontent.com/OpenMediaVault-Plugin-Developers/installScript/master/install | sudo bash
  • Nach Abschluss der Installation ist ein Neustart des Raspberry Pi empfehlenswert
sudo reboot
  • Abfragen der IP-Adresse des Pi
hostname -I

oder

ip -a
  • Aufrufen der IP-Adresse im Browser der Wahl
    Wenn das folgende Eingabefenster erscheint, war die Installation erfolgreich:

Die standardmäßigen Anmeldedaten von OpenMediaVault lauten: username –> admin , password –> openmediavault ; (aus Sicherheitsgründen sollte das Passwort direkt nach dem ersten Login in ein sicheres Passwort geändert werden.)

Damit ist die Installation von OpenMediaVault auf dem Raspberry Pi abgeschlossen. Welche Konfigurationsmöglichkeiten bestehen, auf welche Art und Weise auf das NAS zugegriffen wird und vieles mehr, bleibt dem Nutzer selbst überlassen.

Die folgenden Guides behandeln eine Erstkonfiguration der Software:

Wenn du einen Ausbildungsplatz als Fachinformatiker:in für Systemintegration suchst, Lust auf spannende und abwechslungsreiche Projekte hast (die stets auf deinen persönlichen Wissensstand abgestimmt sind) und Teil eines modernen IT-Unternehmens werden willst, bist du du bei NETWAYS an der richtigen Adresse.

Marc Rupprecht
Marc Rupprecht
Junior Consultant

Nach seinem Bachelorabschluss im Fach Technikjournalismus und zweieinhalb Jahren als Online-Redakteur hat Marc sich entschieden, die Medienwelt hinter sich zu lassen und den Wechsel in die IT vollzogen. Als Auszubildender zum Fachinformatiker für Systemintegration verstärkt er nun seit September 2021 das Team der NETWAYS Professional Services. In seiner Freizeit ist er seit vielen Jahren begeisterter Volleyballspieler und hat vor Kurzem das Scuba Diving für sich entdeckt. Ansonsten versucht er regelmäßig neue Länder auf seiner Weltkarte...

Wireguard mit dynamischen DNS Namen

Seit einiger Zeit bin ich großer Fan von Wireguard als VPN Lösung um meine Server und Notebooks zu verbinden. Auch Patrick hatte schon mal über DNS Privacy mit Wireguard geschrieben.

Dabei ist mir ein kleines Problem begegnet, Wireguard hat kein automatisches Handling wenn sich Endpoint Adressen über DNS ändern. In meinem Fall verbinde ich:

  • Server im Rechenzentrum mit fester IP Adresse
  • Notebook irgendwo unterwegs, muss sich zu allen anderen Verbinden
  • Server zuhause, Verbindung nur über DynDNS möglich

Auf dem Bild kann man in etwa die aufgebauten Verbindungen erkennen, nun besteht das Hauptproblem darin, dass der Server zuhause nur über die Auflösung des dynamischen DNS Namens erreichbar ist. Wireguard löst DNS Namen nur beim laden der Konfiguration auf. Sollte sich die IP Adresse ändern funktioniert die Verbindung nicht mehr.

Ein Beispiel meiner Konfiguration:

[Interface]
# Notebook
Address = 10.99.0.3/24
PrivateKey = BASE64
ListenPort = 51820

[Peer]
# Server at home
PublicKey = BASE64
AllowedIPs = 10.99.0.1/32
Endpoint = home.example.com:51820

[Peer]
# hosted VM
PublicKey = BASE64
AllowedIPs = 10.99.0.2/32
Endpoint = server.example.com:51820

#[Peer]
## Notebook Entry on other nodes
#PublicKey = BASE64
#AllowedIPs = 10.99.0.3/32
## No endpoint defined for this peer

Nachdem Wireguard noch keine eingebaute Lösung dafür hat, braucht man ein Script, welches DNS Namen neu auflöst und dann anwendet. Ich verwende das Beispielskript reresolve-dns.sh aus den contrib Skripten.

Die Installation ist relativ einfach:

curl -LsS -o /usr/local/bin/wireguard-reresolve-dns https://github.com/WireGuard/wireguard-tools/raw/master/contrib/reresolve-dns/reresolve-dns.sh
chmod 0755 /usr/local/bin/wireguard-reresolve-dns

Im Anschluss kann das Skript manuell oder per Cron (als root) ausgeführt werden:

wireguard-reresolve-dns wg0

Oder was ich bevorzuge, als Systemd Service und Timer wie folgt.

/etc/systemd/system/wireguard-reresolve-dns.service

[Unit]
Description=Wireguard Re-Resolve DNS of endpoints

[Service]
Type=oneshot
ExecStart=/usr/local/bin/wireguard-reresolve-dns wg0

/etc/systemd/system/wireguard-reresolve-dns.timer

[Unit]
Description=Runs Wireguard Re-Resolve DNS every 5 Minutes

[Timer]
OnUnitActiveSec=300s
OnActiveSec=300s

[Install]
WantedBy=multi-user.target

Anschließend muss man den Timer nur aktivieren und kann den Status des Service jederzeit checken:

# systemctl daemon-reload
# systemctl enable wireguard-reresolve-dns.timer
# systemctl status wireguard-reresolve-dns.timer
* wireguard-reresolve-dns.timer - Runs Wireguard Re-Resolve DNS every 5 Minutes
Loaded: loaded (/etc/systemd/system/wireguard-reresolve-dns.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Thu 2021-12-30 15:40:09 CET; 6 days ago
Trigger: Wed 2022-01-05 15:50:48 CET; 3min 1s left
Triggers: * wireguard-reresolve-dns.service

Dec 30 15:40:09 notebook systemd[1]: Started Runs Wireguard Re-Resolve DNS every 5 Minutes.

# systemctl status wireguard-reresolve-dns.service
* wireguard-reresolve-dns.service - Wireguard Re-Resolve DNS of endpoints
Loaded: loaded (/etc/systemd/system/wireguard-reresolve-dns.service; static)
Active: inactive (dead) since Wed 2022-01-05 15:45:48 CET; 2min 1s ago
TriggeredBy: * wireguard-reresolve-dns.timer
Process: 3600033 ExecStart=/usr/local/bin/wireguard-reresolve-dns wg0 (code=exited, status=0/SUCCESS)
Main PID: 3600033 (code=exited, status=0/SUCCESS)
CPU: 17ms

Jan 05 15:45:48 notebook systemd[1]: Starting Wireguard Re-Resolve DNS of endpoints...
Jan 05 15:45:48 notebook systemd[1]: wireguard-reresolve-dns.service: Succeeded.
Jan 05 15:45:48 notebook systemd[1]: Finished Wireguard Re-Resolve DNS of endpoints.

Ich wünsche viel Spaß beim Ausprobieren.

Wer gerne automatisiert, dem kann ich die Ansible Rolle von githubixx empfehlen, so spart man sich das müssige Erstellen und Verteilen von Keys. Leider habe ich noch keine fertige Rolle für reresolve DNS. 😉️

Markus Frosch
Markus Frosch
Principal Consultant

Markus arbeitet bei NETWAYS als Principal Consultant und unterstützt Kunden bei der Implementierung von Nagios, Icinga und anderen Open Source Systems Management Tools. Neben seiner beruflichen Tätigkeit ist Markus aktiver Mitarbeiter im Debian Projekt.

Nur Vim ist nicht genug!

Alle, die mal ein Problem mit Linux hatten, werden das vermutlich kennen: Du suchst online nach deinem Problem, stößt auf einige Befehle, bearbeitest eine Konfigurationsdatei und dann passiert es – Du bist in Vim gefangen!

Der Erstkontakt mit Vim kann durchaus von Frust geprägt sein, aber das muss nicht auf Dauer so sein. Stattdessen könntest Du Dich mit Vim anfreunden und seine Vorzüge genießen. Wenn Du nach fünf Jahren mit Vim ca. drei Prozent der Möglichkeiten kennengelernt hast – oder das zumindest glaubst – kannst Du aber auch noch tiefer abtauchen.

Hier kommen sog. “Vim-likes” in’s Spiel.
Ein paar Kandidaten, die ich interessant finde, möchte ich Dir nicht vorenthalten.

 

Zathura

Bei Zathura handelt es sich um einen PDF Reader (ohne Bearbeitungsfunktion), der sich vim-ähnlich steuern lässt. Die bekannten Bewegungstasten h, j, k, und l bewegen die Ansicht nach links, unten, oben bzw. rechts. Auch gg und G erfüllen ihre bekannte Funktion. Wenn Du Dich auf das Lesen konzentrieren willst und Du die Maus aus Deinem Leben verbannen möchtest, dann ist Zathura ein guter erster Schritt!
Hier sind noch ein paar Tastenbefehle, um Dich auf Deinen Weg zu schicken:

o       → Dokument öffnen
J       → Nächste Seite
K       → Vorige Seite
H       → Anfang der aktuellen Seite
L       → Ende der aktuellen Seite
a       → Ansicht an Fensterhöhe anpassen
s       → Ansicht an Fensterbreite anpassen
/       → Textsuche
+, -, = → Zoom vergrößern, verkleinern, zurücksetzen

Vifm

Mit Vim ist es möglich, viele ähnliche Änderungen gleichzeitig vorzunehmen, wie etwa das Anfügen eines Ausrufezeichens, um jeder Zeile eines Dokuments mehr Ausdruck zu verleihen. Wenn Du Vims Fähigkeit zur Massenbearbeitung tatsächlich einmal gebraucht hast, möchtest Du sie sicher nicht mehr missen. Wäre es da nicht wundervoll, wenn Du das auch auf andere Bereiche ausweiten könntest?

Vifm ist ein Terminal-Dateimanager, der das Gefühl von Vim perfekt einfängt und eine Zwischenstufe zwischen Kommandozeilenbefehlen und einem grafischen Dateimanager darstellt.

Hier lassen sich Dateien verschieben, kopieren und löschen. Du kannst sie allerdings auch umbenennen. Spätestens jetzt wird die Markierfunktion sehr nützlich. Mit ihr können mehrere Dateien auf dieselbe Art bearbeitet werden. Ob es sich dabei um das Kopieren, Verschieben, das Setzen von Berechtigungen oder um das Umbenennen handelt, spielt dabei keine Rolle.

Ein klassisches Beispiel für das Umbenennen wären Screenshots, die üblicherweise unter anderem die Aufnahmeuhrzeit im Dateinamen hinterlegen. So könntest Du bei allen Bildern eines Ordners gleiche Teile der Namen entfernen, Dateiendungen ergänzen oder ungeliebte Leerzeichen ersetzen.

Mit v kannst Du mehrere aufeinanderfolgende Dateien wählen und Deine Auswahl mit Enter bestätigen. Alternativ kannst Du mit t auch die aktuell angesteuerte Datei markieren.

Hast Du die relevanten Dateien markiert, kannst Du mit Shift+i die Dateinamen über einen Texteditor bearbeiten. Der Standard hierfür ist Vim. Damit schließt sich der Kreis zur Massenbearbeitung durch Vim.

Vifm bietet außerdem ein Vorschaufenster, das die Inhalte von Ordnern und Dateien darstellt. Einfache Textdateien kannst Du so bereits lesen. Ähnlich wie der Befehl “tree” zeigt diese Vorschau auch die Unterstruktur eines Ordners an. Welche Programme für diese Vorschau genutzt werden, kannst Du auch selbst in der Vifm-Konfigurationsdatei anpassen.

Wie auch Vim verfügt Vifm über zu viele Funktionen, um sie hier alle zu nennen. Im besten Fall probierst Du es einfach selbst aus. Das Vifm-cheat-sheet sollte dir für den Anfang genug Beistand leisten.

 

Vimb

Die Königsdiszipilin: Der Browser!
Ja, selbst das Werkzeug, das uns täglich begleitet und das wir wohl am meisten verwenden, ist nicht vor Vims Einfluss geschützt. Vimb ist genau das, was Du gerade erwartest. Dir ist es zu langweilig, Links mit der Maus anzuklicken? Dein Mausrad ist etwas dreckig und dreht sich daher beim Scrollen nicht richtig? Du denkst ohnehin nur noch in Vim-Bewegungen? Vimb ist Dein Browser!

Die Navigation läuft auch in Vimb über h, j, k und l. Strg+f und Strg+b scrollen je eine Seite runter bzw. hoch. Der Seitenanfang ist über gg, das Seitenende über G zu erreichen. Den Standardmodus kannst Du jederzeit über ESC auswählen. Mit Strg+o springst Du in der Historie eine Seite zurück, mit Strg+i eine vorwärts. gi platziert den Eingabezeiger in dem ersten möglichen Textfeld auf dem Bildschirm und aktiviert den Eingabemodus.

Damit kannst Du bereits einen Suchbegriff in eine Suchmaschine eingeben.
Doch bei einer solchen Suchmaschine musst Du erst einmal landen. o lässt Dich eine URL eingeben, die Du aufrufen möchtest. O wiederum ermöglicht das gleiche, fügt aber gleichzeitig die aktuelle URL ein, um diese zu bearbeiten.

Doch wie geht das Klicken denn nun ohne Maus? f ist dein Freund. Diese Taste zeigt Dir klickbare Elemente auf der Seite an und nummeriert sie. Anschließend kannst Du noch Text eingeben, um die Suche einzuschränken, die angezeigte Nummer eingeben und so z.B. von diesem Blog aus zu unseren Events gelangen. Alternativ zu den Nummern funktioniert auch Tab gefolgt von der Eingabetaste.

Möchtest Du ein etwas konventionelleres Erlebnis, kannst Du auch Strg+z drücken. Dann wird nur noch ESC von Vimb verarbeitet (stoppt diesen Modus). Die restlichen Tasten tun dann das, wofür die entsprechende Seite sie vorgesehen hat.

Vimb ist anfänglich sicherlich ungewohnt, aber es versucht schließlich auch, etwas anderes zu sein. Dieses Ziel ist definitiv erreicht. Übrigens kann die Maus auch in Vimb genutzt werden. Du musst Dich also nicht gänzlich auf Deine Tastatur verlassen 😉.

Zusammenfassend kann ich sagen, dass es wohl nicht ohne Grund so viele “Vim-likes” gibt. Der Ansatz von Vi(m) hat sich bewehrt und deshalb ist es keine Überraschung, dass dieser Ansatz immer wieder in andere Anwendungen einfließt. Nicht jede dieser Anwendungen macht alle glücklich. Aber eine nette Spielerei sind sie allemal. Wenn Du also auch nur zehn Minuten mit einem “Vim-like” verbringst, hat sich dieser Blogeintrag aus meiner Sicht bereits gelohnt. Viel Spaß beim Entdecken!

Matthias Döhler
Matthias Döhler
Junior Consultant

Über ein paar Umwege ist Matthias nun endlich da gelandet, wo er sich wohl fühlt: in der IT! Bei NETWAYS hat er im September 2021 seine Ausbildung zum Fachinformatiker für Systemintegration im Bereich Professional Services begonnen. Wenn er sich zu Hause nicht auch noch mit Themen rund um Linux auseinandersetzt, sieht er sich leidenschaftlich gerne Horrorfilme und solche an, die man als "Trash" bezeichnen könnte. Je seltsamer, desto besser! Den üblichen Beschäftigungen wie Freunde treffen,...

Homebrew – Der fehlende Paketmanager für macOS

Manche haben noch nie davon gehört, einige kennen ihn, und viele lieben ihn.

Zu Teenagerzeiten kannte ich nur Windows und dessen Umgang, wie man Software installiert und ebenfalls lästige Update-Hinweise beim Öffnen der Programme. Wie viele andere auch, begann ich meine Ausbildung mit einem Ubuntu auf meiner Workstation und lernte Linux Distributionen kennen und lieben. Einher ging die einfache Arte und Weiße an einer zentralen Stelle Software zu installieren, zu verwalten und auf dem neusten Stand zu halten. Zum Ende meiner Ausbildung bekam ich die Wahl eines neuen Notebooks und entschied mich für ein MacBook. Jedoch fand ich die manuelle Installation der Software und Pakete für die Kommandozeile sehr zeitaufwendig. Daraufhin empfahl mir ein damaliger Arbeitskollege Homebrew.

Homebrew ist eine in Ruby geschriebene, opensource Paketverwaltung für macOS, welche 2009 ursprünglich von Max Howell geschrieben wurde. Zur Unterstützung weiterer Pakete durch Beiträge anderer Nutzer wird GitHub verwendet. Modifikationen sind also schnell rückgängig gemacht und Änderungen lassen sich leicht umsetzen. Seit 2016 gibt es auch Linuxbrew, ein Homebrew-Fork für Linux, welcher seit 2019 fester Bestandteil von Homebrew geworden ist.

Die Installation ist genauso einfach wie die Bedienung:

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Dabei erklärt dir das Skript was es macht und wartet auf deine Eingabe bevor es etwas ausführt.

Ein Paket oder eine Software installiert man folgendermaßen:

$ brew install git

Dabei spielt es keine Rolle, ob das Paket eine kommandozeilenbasierte Software ist oder eine grafische macOS Anwendung:

$ brew install google-chrome

Hierbei wird das erweiternde Projekt Homebrew Cask verwendet. Ob es für eine Software bereits ein Homebrew-Paket oder -Cask gibt lässt sich mittels Suche auf Kommandozeile herausfinden:

$ brew search google
==> Formulae
aws-google-auth                google-go                    google-sql-tool
google-authenticator-libpam    google-java-format           googler      
google-benchmark               google-sparsehash            googletest  
goose 

==> Casks
google-ads-editor              google-japanese-ime
google-analytics-opt-out       google-trends
google-assistant               google-web-designer
google-chat                    googleappengine
google-chat-electron           marshallofsound-google-play-music-player
google-chrome ✔                moefe-google-translate
google-cloud-sdk               homebrew/cask-versions/google-chrome-beta
google-drive                   homebrew/cask-versions/google-chrome-canary
google-drive-file-stream       homebrew/cask-versions/google-chrome-dev
google-earth-pro               homebrew/cask-versions/google-japanese-ime-dev
google-featured-photos

Falls es ein Paket noch nicht geben sollte, kann man es auch selbst erstellen:

$ brew create https://foo.com/bar-1.0.tgz
Created /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/bar.rb

oder

$ brew create --cask foo
Editing /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Casks/foo.rb

Alle, über Homebrew installierte, Software aktuell zu halten ist ebenso simpel, wie man es von anderen Unix/Linux Distributionen kennt:

$ brew update && brew upgrade

Das nur einmal für den Anfang.

Ausführliche Dokumentation und Informationen zu diesem Projekt findet man auf der Homepage oder auf Github:

Janina Vogel
Janina Vogel
Technical Service Manager

Janina ist seit Dezember 2018 bei NETWAYS. Zunächst hat sie uns als Consultant unterstützt, seit Ende ihrer Elternzeit im September 2021 arbeitet sie im Bereich der technischen Planung. Besonders gefällt ihr, dass es in der IT nie langweilig wird und man immer wieder neu gefordert ist. Außerhalb der Arbeit geht sie ihrer Leidenschaft fürs Kochen und Backen nach.

Jitsi Meetings mit Jibri aufzeichen

Trotz scheinbar eintretender Entspannung bei der aktuellen Corona-Krise ist Videoconferencing nicht mehr wegzudenken. Sei es durch das Umdenken bei den Arbeitgebern zu Homeofficeregeleungen oder bei international gewachsenen Teams. Alle müssen irgendwie miteinander kommunizieren. Wir von NETWAYS setzen ja schon seit Beginn der Krise auf Jitsi und konnten damit auch viele Kunden überzeugen, datenschutzkonforme Videokonferenzlösungen einzusetzen.

Neben unserer Jitsi-App (JaaS), welche sich übrigens 30 Tage kostenfrei testen lässt und darüber hinaus auch schon Branding nach eigenen Bedürfnissen anbietet, bauen wir auch Jitsi-Lösungen nach Kundenwunsch. Seien es spezielle Anforderungen an besonders viele gleichzeitige Nutzer, ein komplett eigenes Branding, JWT-Auth, Telefoneinwahl oder Datenschutz-Pop-Up’s.

Inzwischen erreichen uns auch immer öfter Anfragen, die den Wunsch äußern, solche Meetings aufzuzeichnen. Also haben wir uns hier auf die Suche gemacht und Jibri gefunden. Nachfolgend beschreibe ich in aller Kürze, wie man seinen Jitsi-Server dazu bringt Videos aufzuzeichnen. Als Basis hierzu dient ein Ubuntu 20.04 LTS-Server mit bereits eingerichtetem Jitsi.

Alle nachfolgenden Schritte werden als root auf dem Jitsi-Meet Server ausgeführt, hingegen zur offiziellen Dokumentation gibt es ein paar Stolpersteine, welche ich euch gern erspare.

Vorbereitung

Zu Beginn installieren wir die erforderlichen Kernel-Module:

apt install linux-modules-extra-$(uname -r)
apt install linux-generic
reboot
echo "snd-aloop" >> /etc/modules 
modprobe snd-aloop

Nun machen wir den Server mittels Chrome Stable als Client fit:

curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list apt-get -y update apt-get -y install google-chrome-stable

Im nächsten Schritt kommen die Chrome managed-policies dazu:

mkdir -p /etc/opt/chrome/policies/managed
echo ‘{ “CommandLineFlagSecurityWarningsEnabled”: false }’ >>/etc/opt/chrome/policies/managed/managed_policies.json

Der Chrome-Treiber darf natürlich auch nicht fehlen, daher führen wir nun aus:

CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ unzip ~/chromedriver_linux64.zip -d ~/ rm ~/chromedriver_linux64.zip sudo mv -f ~/chromedriver /usr/local/bin/chromedriver sudo chown root:root /usr/local/bin/chromedriver sudo chmod 0755 /usr/local/bin/chromedriver

Noch weitere benötigte Pakete:

apt install ffmpeg curl alsa-utils icewm xdotool xserver-xorg-input-void xserver-xorg-video-dummy

Installation Jibri

Die eigentliche Jibri-Installation machen wir über apt:

apt install jibri

Ohne Rechte geht natürlich nichts, daher kommen diese auch noch dazu:

usermod -aG adm,audio,video,plugdev jibri

In den nächsten Schritten kommt noch das erforderliche Java hinzu:

wget -O - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -
add-apt-repository https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
apt-get -y update
apt-get install adoptopenjdk-8-hotspot

Wir müssen Java8 als default setzen, dazu ändern wir die nachfolgende Datei:

vim /opt/jitsi/jibri/launch.sh

Hier ändern wir das Wort “java” in den folgenden String “/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java”. Danach speichern und schließen wir Datei schon wieder.

Prosody benötigt auch noch eine kleine Änderung. Also kommt das nun direkt (Achtung, Pfad weicht auf die eigene Domain am Ende ab):

vim /etc/prosody/conf.avail/your.domain.com.cfg.lua

Dort hängen wir am Ende einfach an (your.domain.com wieder durch eigene Jitsi-Adresse ersetzen):

-- internal muc component, meant to enable pools of jibri and jigasi clients
Component "internal.auth.your.domain.com" "muc"
modules_enabled = {
"ping";
}
storage = "memory"
muc_room_cache_size = 1000

VirtualHost "recorder.your.domain.com"
modules_enabled = {
"ping";
}
authentication = "internal_plain"

Danach speichern und schließen wir die Datei wieder
Nun bekommt Prosody noch 2 neue Nutzer, die Passwörter “JPwd” und “RPwd” ersetzt man durch eigene, sichere Passwörter und notiert diese für später:

prosodyctl register jibri auth.your.domain.com JPwd
prosodyctl register recorder recorder.your.domain.com RPwd

Jicofo will auch noch eine Änderung, diese beginnen wir durch öffnen des Config-Files:

vim /etc/jitsi/jicofo/sip-communicator.properties

Dort fügen wir die Zeilen ein (Achtung, Domainname anpassen):

org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.your.domain.com 
org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90

Jetzt bringen wir Jitsi selbst wirklich noch bei, eine Aufnahme zu starten (!Domainname):

vim /etc/jitsi/meet/your.domain.com-config.js

hier prüfen wir, ob die folgenden Optionen so gesetzt sind, bzw. fügen den Code ein (!Domain):

fileRecordingsEnabled: true, 
liveStreamingEnabled: true, 
hiddenDomain: 'recorder.your.domain.com',

Der Dateispeicherort bekommt nun auch noch die Rechte, die er braucht, um von Jibri beschrieben zu werden:

mkdir /srv/recordings
chown jibri:jibri /srv/recordings

Zu guter Letzt, muss Jibri noch konfiguriert werden. Nachfolgend ein Beispiel hierfür. Man achte bitte auf das Ersetzen mit dem eigenen, korrekten Domainnamen und die korrekt vergebenen Passwörter:

vim /etc/jitsi/jibri/jibri.conf

jibri {
// A unique identifier for this Jibri
// TODO: eventually this will be required with no default
id = ""
// Whether or not Jibri should return to idle state after handling
// (successfully or unsuccessfully) a request. A value of 'true'
// here means that a Jibri will NOT return back to the IDLE state
// and will need to be restarted in order to be used again.
single-use-mode = false
api {
http {
external-api-port = 2222
internal-api-port = 3333
}
xmpp {
// See example_xmpp_envs.conf for an example of what is expected here
environments = [
{
name = "prod environment"
xmpp-server-hosts = ["your.domain.com"]
xmpp-domain = "your.domain.com"

control-muc {
domain = "internal.auth.your.domain.com"
room-name = "JibriBrewery"
nickname = "jibri-nickname"
}

control-login {
domain = "auth.your.domain.com"
username = "jibri"
password = "JPwd"
}

call-login {
domain = "recorder.your.domain.com"
username = "recorder"
password = "RPwd"
}

strip-from-room-domain = "conference."
usage-timeout = 0
trust-all-xmpp-certs = true
}]
}
}
recording {
recordings-directory = "/srv/recordings"
# TODO: make this an optional param and remove the default
finalize-script = "/path/to/finalize_recording.sh"
}
streaming {
// A list of regex patterns for allowed RTMP URLs. The RTMP URL used
// when starting a stream must match at least one of the patterns in
// this list.
rtmp-allow-list = [
// By default, all services are allowed
".*"
]
}
chrome {
// The flags which will be passed to chromium when launching
flags = [
"--use-fake-ui-for-media-stream",
"--start-maximized",
"--kiosk",
"--enabled",
"--disable-infobars",
"--autoplay-policy=no-user-gesture-required"
]
}
stats {
enable-stats-d = true
}
webhook {
// A list of subscribers interested in receiving webhook events
subscribers = []
}
jwt-info {
// The path to a .pem file which will be used to sign JWT tokens used in webhook
// requests. If not set, no JWT will be added to webhook requests.
# signing-key-path = "/path/to/key.pem"

// The kid to use as part of the JWT
# kid = "key-id"

// The issuer of the JWT
# issuer = "issuer"

// The audience of the JWT
# audience = "audience"

// The TTL of each generated JWT. Can't be less than 10 minutes.
# ttl = 1 hour
}
call-status-checks {
// If all clients have their audio and video muted and if Jibri does not
// detect any data stream (audio or video) comming in, it will stop
// recording after NO_MEDIA_TIMEOUT expires.
no-media-timeout = 30 seconds

// If all clients have their audio and video muted, Jibri consideres this
// as an empty call and stops the recording after ALL_MUTED_TIMEOUT expires.
all-muted-timeout = 10 minutes

// When detecting if a call is empty, Jibri takes into consideration for how
// long the call has been empty already. If it has been empty for more than
// DEFAULT_CALL_EMPTY_TIMEOUT, it will consider it empty and stop the recording.
default-call-empty-timeout = 30 seconds
}
}

Das wars, nun startet man die betroffenen Dienste noch neu und der Aufnahme-Button im Meeting zeigt nun auch die gewünschte Funktion:

systemctl restart jitsi-videobridge2 prosody jicofo
systemctl enable --now jibri

Die Aufnahmen sind nun in /srv/recordings zu finden. Sollte hier noch kein Bild und Ton sichtbar sein, hat final folgende Änderung in der Datei /etc/jitsi/jicofo/jicofo.conf noch Abhilfe geschafft

Man suche sich die Zeile:

trusted-domains: recorder.your.domain.com

und passt sie an, auf:

trusted-domains: [recorder.your.domain.com]

Nach einem letzten Dienstneustart läuft nun alles wie gewünscht.

Schlusswort

Bedenken sollte man, dass Videos gespeichert werden und entsprechend viel Platz verbrauchen. Dies sollte man beim Sizing des Systems beachten. Die Daten sind auch nicht einfach für jeden Teilnehmer herunterladbar, sondern liegen auf dem Jitsi-Server unter /srv/recordings.

Alles in Allem ist dies aber eine wunderbare Lösung, um Workshops mit Kollegen aufzuzeichnen und diese später an neue Kollegen weiter zu geben.

Sobald die Aufzeichnung ausgelöst wird, wird dies allen Teilnehmern auch via Text2Speech mitgeteilt. Im Meeting ist oben neben dem Meetingnamen auch ein Recording-Symbol zu sehen.

Wer ein solches Jitsi haben will, sich aber nicht gern selbst darum kümmert, wäre bei uns genau richtig und sollte den Kontakt zu unseren freundlichen Vertriebskollegen suchen. Unsere Server stehen in Nürnberg und ermöglichen so eine vollständig datenschutzkonforme Videokonferenzlösung.

Georg Mimietz
Georg Mimietz
Lead Senior Systems Engineer

Georg kam im April 2009 zu NETWAYS, um seine Ausbildung als Fachinformatiker für Systemintegration zu machen. Nach einigen Jahren im Bereich Managed Services ist er in den Vertrieb gewechselt und kümmerte sich dort überwiegend um die Bereiche Shop und Managed Services. Seit 2015 ist er als Teamlead für den Support verantwortlich und kümmert sich um Kundenanfragen und die Ressourcenplanung. Darüber hinaus erledigt er in Nacht-und-Nebel-Aktionen Dinge, für die andere zwei Wochen brauchen.