Vorsicht

Dies ist die Dokumentation des aktuellen Entwicklungszweigs der CometVisu. Es besteht daher die Möglichkeit, dass einige der hier beschriebenen Features mit dem aktuellsten Release der CometVisu nicht genutzt werden können.

Raspberry Pi: Vorbereitung

Im ersten Teil des Tutorials wird der Raspberry Pi (RPi) so vorbereitet, dass dieser mit minimalem Betriebssystem läuft und von einem Arbeitsrechner über das Netzwerk erreichbar ist. Wer eine andere Plattform als einen Raspberry Pi verwenden möchte, wie z.B. einen NUC, kann problemlos den Rechner selbst vorbereiten und diesen Teil des Tutorials überspringen um bei einem der späteren Teile einzusteigen.

Bemerkung

Dieser erste Tutorial-Teil ist sehr ausführlich gehalten um auch Einsteigern ohne jegliche Erfahrung in der Administration von Linux basierten Rechnern einen problemlosen Start zu ermöglichen.

Je nach Vorwissen mag es jedoch notwendig sein selbständig zu den einzelnen Themen noch etwas Hintergrundinformationen zu suchen. Dies dazu notwendigen Stichworte sind jedoch in diesen Tutorial bereits enthalten.

Warum Raspberry Pi?

Der Raspberry Pi ist ein kleiner, sparsamer Einplatinen-Computer, bei dem alles wichtige für den Betrieb bereits auf der Platine enthalten ist. Ursprünglich für Bastel- und Ausbildungsprojekte gedacht hat sich der Raspberry Pi in den letzten Jahren auch im professionellen Umfeld einen Namen gemacht und seinen Platz gefunden.

Für ein Projekt im Bereich der Gebäudeautomatisierung, wie eben auch im Smart Home, ist er aufgrund seiner Universalität, Stabilität und des geringen Stromverbrauchs prädestiniert. Ein weiter Vorteil sind die geringen Kosten für die Hardware und dessen frei verfügbares Betriebssystem.

Was wird benötigt?

Neben dem Raspberry Pi selbst, in diesem Tutorial wird die 2021 aktuelle Version Raspberry Pi 4 Model B verwendet. Zusätzlich wird nur noch eine Stromversorgung und ein Speichermedium benötigt.

Weitere Ausstattung wie Netzwerkkabel, HDMI-Kabel, Displays, … sind jeweils spezifisch für den Anwendungsfall und werden hier als vorhanden vorausgesetzt.

Minimale Ausstattung

  • Raspberry Pi 4 Model B, 2 GB
  • USB-C Spannungsversorgung
  • microSD Karte
../_images/rpi_minimum.jpg

Empfohlende Ausstattung

Die größte Schwachstelle bei dauerhaften Betrieb eines Raspberry Pi ist die Lebensdauer der SD-Karte, da diese nicht auf die dabei auftretende hohe Anzahl an Schreibzyklen ausgelegt ist. Hier empfiehlt es sich statt der microSD Karte ein USB Massenspeicher zu verwenden (keinen USB-Stick, diese sind sogar meist mit Flash-Speicher von noch geringerer Qualität ausgestattet). Die Spannungsversorgung muss ausreichend dimensioniert sein um auf den USB Speicher versorgen zu können - oder es muss ein entsprechender Speicher mit externer Versorgung verwendet werden.

Wenn der Raspberry Pi für zukünftige Erweiterungen noch bisschen Luft haben, so kann auch die Version mit 4 GB RAM verwendet werden.

Für den professionellen, langfristigen Betrieb ist außerdem noch ein Gehäuse empfohlen, dass auch die CPU kühlen kann.

  • Raspberry Pi 4 Model B, 4 GB
  • USB-C Spannungsversorgung
  • microSD Karte - wird nur temporär benötigt
  • USB Speicher mit langer Lebensdauer
  • Gehäuse
../_images/rpi_recomended.jpg

Ausstattungsbeispiel

Dieses Tutorial wurde anhand dieser Ausstattung erstellt:

  • Raspberry Pi 4 Model B, 4 GB
  • original Raspberry Pi USB-C Spannungsversorgung (3 Ampere)
  • microSD Karte - wird nur temporär benötigt
  • Kingston M.2 SSD A400 240GB
  • Argon ONE M.2 Gehäuse

Anschaffungspreis (2021) waren keine 150 Euro.

../_images/rpi_housing.jpg

Setup der Hardware

Der Zusammenbau der Hardware erfolgt nach den jeweiligen Bedienungsanleitungen.

Setup der Software

Betriebssystem

Als Betriebssystem wird Raspberry Pi OS Lite der Raspberry Pi Foundation verwendet. Angeboten wird dieses unter: https://www.raspberrypi.org/software/

Dieses Betriebssystem ist nun auf die SD-Karte und, wenn vorhanden, auf den USB-Speicher zu installieren, z.B. mit dem Raspberry Pi Imager:

Bemerkung

Wenn der USB-Speicher verwendet werden soll, so muss in diesem Schritt das Betriebssystem-Image sowohl auf die SD-Card als auch den USB-Speicher installiert werden, denn die SD-Card wird nur benötigt um die Firmware des Raspberry Pi darauf vorzubereiten später von dem USB-Speicher zu starten.

Netzwerkzugriff - Teil 1

Clients

Um den Raspberry Pi warten zu können ist es wichtig über das Netzwerk auf diesen zugreifen zu können. Dies geschieht, wie üblich, über die Secure Shell (SSH). Linux-Anwender können dann normal über das Terminal zugreifen, Windows-Anwender nutzen hierfür am einfachsten PuTTY. Aber auch für Mac OS, Android, … sind kostenlose SSH Clients verfügbar.

SSH aktivieren

Um direkt per SSH auf den Raspberry Pi zugreifen zu können muss noch vor dem ersten Start in der ersten Partition der SD-Card (und des USB Speichers) eine (leere) Datei mit dem Namen ssh angelegt werden.

Erster Start

Nun ist der Raspberry Pi bereit für den ersten Start, es müssen nur die Speicher, das Netzwerk-Kabel und anschließend die Spannungsversorgung verbunden werden.

Wurde auch ein Monitor verbunden, so ist auf diesem die Boot-Sequenz sichtbar. An deren Ende erscheint die Netzwerk-Adresse, die über DHCP bezogen wurde und unter der der Raspberry Pi zu erreichen ist. Alternativ kann in der Regel auch über den DHCP-Server (meist Bestandteil des Internet-Routers) die IP-Adresse in Erfahrung gebracht werden.

Erster Zugriff

Über den SSH-Client kann nun auf den Raspberry Pi zugegriffen werden. Der initial angelegte Benutzer für das Login ist pi mit dem Passwort raspberry.

USB Boot einrichten (optional)

Für das empfohlene Setup für langfristigen Betrieb ohne SD-Karte müssen nach dem Einloggen auf den root-User gewechselt, die Pakete (auf der SD-Karte) aktualisiert und ggf. die Firmware aktualisiert werden. Im Anschluss wird das Raspberry Pi Software Configuration Tool gestartet:

sudo -s
apt update
apt full-upgrade
rpi-eeprom-update
raspi-config

In dem Software Konfigurations-Tool wird nun die Boot-Reihenfolge auf USB Boot geändert:

  1. 6 Advanced Options
  2. A6 Boot Order
  3. B2 USB Boot

Bemerkung

Das installierte Raspberry OS kennt, wie jedes andere Linux auch, mehrere Benutzer. Als normaler Nutzer ist der Account pi angelegt worden, dieser hat aber - bewusst! - nur eingeschränkte Rechte. Werden für administrative Aufgaben erweiterte Rechte benötigt, so müssen diese mit dem Accout root durchgeführt werden. Aus Sicherheitsgründen kann man sich normalerweise nicht direkt als root anmelden, sondern geht über einen normalen Account (wie pi) und wechselt dann von dort auf den root-Account.

Für einen einzelnen Befehl geschieht dies, in dem sudo vor den Befehl geschrieben wird. Wenn mehrere Befehlen als root ausgeführt werden sollen, so kann über sudo -s der Account auf den root Account gewechselt werden. Durch ein exit wird wieder zurück gewechselt.

Der Raspberry Pi kann nun über shutdown -h now herunter gefahren werd, die Spannungsversorgnug getrennt, die SD-Karte entfernt und anschließend über das Wiedereinstecken der Spannungsversorgung wieder gestartet werden.

Basisadministration

Passwort ändern

Als erster Schritt in der finalen Umgebung sollte das Passwort des Users pi geändert werden:

passwd

Bemerkung

Das Passwort kann gerne lange und kompliziert gewählt werden, da dieses später durch den „ssh key exchange“ nicht mehr eingegeben werden muss.

Wenn dennoch ein „unsicheres“ Passwort gewünscht wird - wovon dringend abgeraten wird - so lässt sich über sudo passwd pi der Komplexitäts-Schutz umgehen.

System aktuell halten

Seit dem Erstellen des Betriebssystem-Paketes gab es bereits Aktualisierungen von einzelnen Software-Bestandteilen. Alle Updates werden installiert über:

sudo apt update
sudo apt full-upgrade

Diese Befehle sollte man später im Rahmen der allgemeinen Systemwartung regelmäßig wiederholen um alle Bug-Fixes und Sicherheits-Patches zu bekommen.

Komfort (optional)

Um sich das Leben etwas leichter zu machen können nun ein paar grundlegende Einstellungen vorgenommen werden.

Editor

Standardmäßig ist bereits der Editor nano installiert, eine gerade auch für Einsteiger gute Wahl. Editieren von (Text-)Dateien geht sehr einfach, in dem nano <Dateiname> aufgerufen wird. Änderungen werden dann mit „^O“ gespeichert, d.h. mit Strg + O. Der Editor wird mit „^X“, also Strg + X, wieder beendet.

Sollte jedoch ein anderer Editor bevorzugt werden, so kann dieser jetzt installiert werden, z.B. für vim:

sudo apt-get install --no-install-recommends vim

Auch kann dieser nun konfiguriert werden, z.B. wenn bei vim die Mausintegration über das Terminal stören sollte:

echo "set mouse=" | sudo tee -a /etc/vim/vimrc.local
echo "set ttymouse=" | sudo tee -a /etc/vim/vimrc.local
Dateianzeige

Für die schnelle und komfortable Anzeige der Dateien im Terminal haben sich Abkürzungen etabliert, die noch in der Datei ~/.bashrc aktiviert werden müssen. Hierzu öffnet man diese Datei im Editor (z.B. mit nano ~/.bashrc) und Passt, relativ am Ende, die Zeilen an auf:

alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

Im Terminal kann so nun über ll mit entsprechend bunter Hervorhebung der Inhalt des aktuellen Ordners angezeigt werden.

Diese Einstellung ist für jeden Account individuell. D.h. diese müsste sowohl für den User pi als auch für root vorgenommen werden.

Basiseinstellungen

Über sudo raspi-config lassen sich nun grundlegende Einstellungen des Raspberry Pi vornehmen, z.B. nicht benötigte Hardware-Treiber ausschalten oder, wenn wider Erwarten notwendig, die HDMI Ausgänge konfigurieren.

Netzwerkzugriff - Teil 2

Netzwerkaddresse ändern

Bis jetzt hat sich der Raspberry Pi selbst eine Netzwerkadresse besorgt. Damit dieser aber als Server immer unter der gleichen Adresse zu erreichen ist muss entweder im DCHP-Server (in der Regel im Internet-Router integriert) für den Pi eine feste Adresse festgelegt werden - oder man vergibt eine statische Adresse außerhalb des DHCP Bereichs.

Für eine statische IP Adresse muss in die Datei /etc/dhcpcd.conf um die entsprechenden Zeilen ergänzt werden. In diesem Beispiel wird dem Ethernet-Interface eth0 die statische Adresse 192.168.0.52 mit dem Router und DNS-Server 192.168.0.1 zugewiesen:

interface eth0
static ip_address=192.168.0.52/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

Die einfachste Möglichkeit um diese Einstellungen zu aktivieren ist ein Neustart, z.B. mit sudo shutdown -r now.

WLAN (und Bluetooth) entfernen (optional)

Wenn der Raspberry Pi über Ethernet und nicht über WLAN mit dem Netzwerk verbunden ist (sehr empfohlen!), so kann dies komplett abgeschaltet werden.

Hierzu muss die Datei /boot/config.txt am Ende um die Zeile

dtoverlay=disable-wifi

erweitert werden. Wenn auch Bluetooth deaktiviert werden soll, so ist zusätzlich noch die Zeile

dtoverlay=disable-bt

hinzuzufügen. Nach einem Neustart kann nun noch über sudo apt-get autopurge wpasupplicant der wpasupplicant Service entfernt werden.

SSH Key Exchange

Für einen komfortablem Zugriff über SSH wird ein SSH Key Exchange durchgeführt. Nach einem Key Exchange wird kein Passwort mehr benötigt, sondern es wird direkt ein lokal vorliegender kryptographischer Schlüssel verwendet. Dieser Schlüssel kann wiederum mit einem (ggf. anderen) Passwort geschützt werden.

Bemerkung

Wird der Key Exchange mit einem Arbeitsrechner durchgeführt, so sollte in der Regel ein Passwort für den Schlüssel vergeben werden. Wenn der Key Exchange mit einem Automatisierungsserver (z.B. einer Node-Red Instanz) durchgeführt wird, um so z.B. von außen den Bildschirm aktivieren zu können, so wird dieser meist ohne extra Passwort durchgeführt.

In einer geschützten, privaten Umgebung kann dies ausreichend sein. In einer professionellen Umgebung wird die Entscheidung über einen notwendigen Passwortschutz anhand einer Gefahrenanalyse getroffen.

Auf dem Client (Arbeitsrechner, Automatisierungsserver) muss zuerst ein lokaler SSH-Schlüssel erzeugt werden, sollte noch keiner vorhanden sein. Bei der Erzeugung des lokalen Schlüssels wird dann auch das Passwort für diesen Schlüssel (also nicht das Passwort für den Raspberry Pi!) angegeben. Der lokale, öffentliche Schlüssel liegt auf dem Client-Rechner in der Text-Datei id_rsa.pub.

Auf dem Raspberry Pi muss nun im Home-Verzeichnis des entsprechenden Users (also pi oder root) das Unterverzeichnis .ssh angelegt werden und der öffentliche Schlüssel dann in die Datei authorized_keys kopiert werden. Für einen Key Exchange mit root wird erst über sudo -s der Benutzer gewechselt. Anschließdend dann:

mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys

Im Editor kann dann der Text aus der lokalen Datei id_rsa.pub hinein kopiert werden.

Im Anschluss bietet es sich an gleich die Verbindung zu testen. Dazu beendet man über exit die aktuelle ssh-Session und startet diese wieder neu. Bei einem Schlüssel ohne Passwort sollte man nun direkt verbunden sein, bei einem mit muss nur das lokale Passwort (und nicht das Passwort des Users pi) eingegeben werden.

Weiteres (optional)

Anschließend können noch finale Konfigurationen durchgeführt werden, wie beispielsweise die Treiber für das Argon Gehäuse. In diesem konkreten Fall würde über

curl https://download.argon40.com/argon1.sh | bash

der Treiber installiert werden und über argonone-config eingerichtet werden.

Ausblick

Der erste Teil des Tutorials zur grundsätzlichen Vorbereitung des Raspberry Pi für eine professionelle, langfristige Nutzung ist nun abgeschlossen. Als nächstes muss nun die Software installiert werden, durch die der Pi produktiv nutzbar wird.

Dies kann die CometVisu selbst sein, die dazu am einfachsten in einer Docker-Umgebung läuft: Raspberry Pi: Docker installieren und Raspberry Pi: CometVisu in Docker installieren.

Es kann aber auch sein, dass der Raspberry Pi als CometVisu Client laufen soll und den Browser mit der CometVisu auf einem Touch Sreen darstellen soll: Client einrichten (Kiosk Modus).

Genau so ist es möglich den Raspberry Pi als Automatisierungs-Server für OpenHAB oder Node-Red zu verwenden.

Gerade wenn der Raspberry Pi mit „etwas Luft“ gekauft wurde, so kann dieser leicht mehrere dieser Aufgaben gleichzeitig übernehmen, da dieser ja sowieso rund um die Uhr Durchläuft.

Cheat Sheet

Für die Einrichtung und grundlegende Administration des Raspberry Pi über die Kommandozeile werden nicht viele Befehle benötigt. In dieser Liste sind die wichtigsten zusammengefasst.

Allgemeine Befehle:

cd <Pfad>
Wechsel des Verzeichnisses, cd .. wechselt ein Verzeichnis „nach oben“. cd ~ wechselt in das Heimat-Verzeichnis des aktuellen Accounts.
ls oder (wenn eingerichtet) mit mehr Komfort ll
Aktuellen Inhalt des Verzeichnisses anzeigen.
whoami
Anzeige des aktuellen Accounts (pi oder root).
sudo <Befehl>
Führt <Befehl> als User root aus.
sudo -s
Führt alle weiteren Befehle als root aus, bis dies durch exit wieder beendet wird.
exit
Beendet die aktuelle „Anmeldung“, also z.B. die aktuelle SSH-Session oder den Wechsel des Accounts über sudo -s.
shutdown -h now
Sofortiges Herunterfahren und anschließendes Halten. Bei einem Raspberry Pi muss zum anschließenden neuen Start die Spannungsversorgung getrennt und wieder neu verbunden werden.
shutdown -r now
Sofortiges Herunterfahren und anschließender Neustart.
nano oder nano <Dateiname>
Öffnet den Editor nano.

Befehle speziell für den Raspberry Pi:

raspi-config
Grundlegendste Systemeinstellungen, vergleichbar mit BIOS Einstellungen bei einem normalen PC.

Sollte die Boot-Partition in den Systemeinstellungen als Read-Only konfiguriert worden sein, so kann diese temporär mit sudo mount -o remount,rw /boot beschreibbar gemacht werden.