Letzte Aktualisierung am 28. März 2025


Meinen Raspberry Pi 5 habe ich zunächst mit einer 64GB SD-Karte initial aufgesetzt und später die Installation auf eine SSD übertragen. Beim initialen Setup habe ich mich an die Anleitung der c’t gehalten. Es gibt allerdings auch eine große Zahl an weiteren Tutorials für das Aufsetzen eines Pi im Internet.

Die nachfolgende Anleitung kann sowohl für einen Raspberry Pi 5 als auch für den Pi 4 verwendet werden. Die Screenshots des Pi Imager Tools zeigen den Raspberry Pi 5 als ausgewähltes Pi-Modell an. Hier kannst du alternativ auch den Pi 4 auswählen.


Initiale Einrichtung des Pi

Pi OS

Für die Erstellung der SD-Karte nutze ich einen Windows PC mit einem Card Reader mit dem offiziellen Pi Imager Tool (Link, zum Zeitpunkt der Erstellung ist die Version 1.8.5 aktuell).

Im Pi Imager Tool habe ich nach dem korrekten Modell unter Betriebssystem | Raspberry Pi OS (other) als Betriebssystem Raspberry Pi OS Lite (64-bit) ausgewählt, da ich meinen Pi ausschließlich als Server betreibe und mittels SSH auf die Konsole zugreife.

Nach Auswahl der SD-Karte und einem Klick auf Weiter wirst du nach den Einstellungen gefragt. Hier kannst du mit einem Klick auf Einstellungen bearbeiten folgende zusätzlichen Optionen einstellen:

Reiter „Allgemein“

Hostname: raspi (oder einen Hostnamen deiner Wahl)
Benutzername: pi (oder einen Benutzernamen deiner Wahl)
Passwort: pi-geheim (oder ein Passwort deiner Wahl)
Zeitzone: Europe/Berlin
Tastaturlayout: de

Optional kannst du in diesen Einstellungen auch das WLAN aktivieren. Dazu ist die Eingabe der SSID deines WLANs sowie das dazugehörige Kennwort notwendig. Als Wifi-Land stellst du DE ein.

Reiter „Dienste“

SSH aktivieren mit der Option „Passwort zur Authentifizierung“ verwenden.

Ein Klick auf Speichern übernimmt die vorgenommenen Einstellungen. Und dann kann die SD-Karte auch schon erstellt werden:

1. Ein Klick auf Ja übernimmt die gerade vorgenommenen Einstellungen.

2. Mit einem weiteren Klick auf Ja bestätigts du, dass alle Daten auf der ausgewählten SD-Karte überschrieben werden.

3. Danach wird die SD-Karte beschrieben und der Schreibvorgang verifiziert.

4. Anschließend kannst du nach eine Klick auf Weiter die SD-Karte entfernen und für deinen Pi nutzen.

Ein kurzer Test zeigt die erfolgreiche Installation:

  1. SD-Karte nach Fertigstellung in den Pi einsetzen
  2. Pi einschalten und kurz warten
  3. Ein SSH-Tool deiner Wahl starten (ich nutze PuTTY und MobaXterm) und mit deinem Pi verbinden. Wenn du den o.g. Hostnamen festgelegt hast, sollte die Verbindung mit diesen Einstellungen klappen.
    Mit einem Klick auf Open wird die Verbindung zu deinem Pi geöffnet. Beim ersten Aufruf erscheint ein Dialog zum Bestätigen des Fingerprints, den du. Danach wirst du aufgefordert, den o.a. Benutzer und dessen Passwort einzugeben. Nicht wundern, wenn bei der Passworteingabe nicht die gewohnten Sternchen oder Punkte angezeigt werden, das ist in diesem Fall normal! Die Eingabe des Passworts bestätigst du mit Return und landest anschließend beim Prompt der Konsole.

Installation von docker und docker compose


Ich gehe im Folgenden davon aus, dass du keine Scheu hast mit der Linux-Konsole deines Pi zu arbeiten und die wichtigsten Linux-Kommandos kennst. Zum Nachschlagen gibt es z.B. diese Übersicht oder diese hier, bzw. die in Linux eingebaute Hilfe, die du mit <Kommando> --help in der Konsole aufrufst.

Hat die Verbindung zum Pi geklappt, kannst du nun über die Konsole sowohl docker als auch docker compose installieren. Dazu ist nun etwas Tipparbeit notwendig.


Bevor wir loslegen, ist es eine gute Idee den Pi auf den aktuellen Stand zu bringen und danach einmal neu zu starten.

sudo apt-get update
sudo apt-get dist-upgrade -y
sudo reboot

Dann kann’s losgehen….

curl -fsSL https://get.Docker.com -o get-Docker.sh
sudo sh get-Docker.sh
sudo usermod -aG docker $USER
newgrp docker

Die letzten beiden Zeilen sorgen dafür, dass der aktuell angemeldete User der Gruppe docker hinzugefügt wird. Damit ist es dann möglich, docker ohne vorangestelltes sudo aufzurufen. Das probieren wir auch gleich mal aus.

docker run hello-world

Nach der Ausführung solltest du folgende Ausgabe in der Konsole sehen.

Anschließend prüfst du noch kurz, ob auch docker compose gleich mit installiert wurde (das ist i.d.R. der Fall).

docker compose version

Die Installation ist bereits erfolgt, wenn dir die Version von docker compose in der Konsole ausgegeben wird.
Falls nicht, erfolgt die Installation über die folgenden Zeilen.

sudo apt-get install libffi-dev libssl-dev
sudo apt install python3-dev
sudo apt-get install -y python3 python3-pip
sudo pip3 install docker-compose

Fürs automatische Starten von docker als auch docker compose nach einem Reboot gebt ihr folgende Zeile ein. Dies sorgt auch dafür, dass Docker-Container mit restart: always oder restart: unless-stopped gestartet wurden, nach einem Reboot des Raspi automatisch neu gestartet werden.

sudo systemctl enable docker

IP-Adresse

Es empfiehlt sich für deinen Pi zur eindeutigen Identifizierung im Netzwerk eine feste IP-Adresse einzurichten; sie macht das Leben leichter. Ich habe es in meiner Umgebung so gelöst, dass ich eine feste IP-Adresse in den LAN-Einstellungen meiner Fritz!Box (=meine DHCP-Server) eingetragen habe, wenn dein Pi erstmalig eine IP-Adresse zugewiesen bekommen hat. Das geht auf zwei verschiedene Art und Weisen:

  1. Du stellst die aktuell verwendete IP-Adresse so ein, dass sie immer deinem Pi zugewiesen wird.
  2. Du vergibst manuell ein IP-Adresse aus dem Bereich, den der DHCP-Server der Fritz!Box nicht verwendet.
    Bei mir sind das alle Adresse nach xxx.xxx.xxx.220. Mein Pi habe ich daher die xxx.xxx.xxx.221 manuell zugewiesen.
    Achtung: Dieses Vorgehen erfordert einen Neustart deines Pi!

Mit dem so aufgesetzten Pi kannst du bereits alle weiteren Umfänge umsetzen, die ich hier beschreibe.
Ich habe mich schlussendlich aus Platz- und Geschwindigkeitsgrößen für den Einsatz einer SSD entschieden. Mein Vorgehen dazu findest du im folgenden Abschnitt.

Migration auf SSD

Vorbereitung

Vor Verwendung einer SSD ist es eine gute Idee, die Version des EEPROMs und des BOOTLOADERs zu kontrollieren.

sudo rpi-eeprom-update

In der Konsole erhälst du eine Ausgabe ähnlich der folgenden.

Sollte für deinen Pi ein Update notwendig sein, erledigst du das mit der folgenden Eingabe in der Konsole.

sudo rpi-eeprom-update -a

Nach Ausführung erhälst du ein Konsolenausgabe ähnlich der folgenden. Die letzten beiden Zeilen zeigen ein erfolgreiches Update an.

Danach ist ein Reboot via sudo reboot now notwendig!
Dein Pi startet neu und du kannst dich nach kurzer Wartezeit neu mit PuTTY verbinden.
Ein erneutes sudo rpi-eeprom status zeigt dir an, dass alles up-to-date ist.

Jetzt ist es an der Zeit für ein wenig Hardwarebastelei, um den Pi mit einer SSD zu versorgen. Das kann entweder via USB-Anschluss erfolgen oder durch Verwendung eines entsprechenden Gehäuses, in das die SSD eingebaut wird.
Ich verwende für meinen Raspberry Pi 4 das Argon One V2 von GeekPi. Dazu gibt es mit der Argon One M.2 NVME-Erweiterungsplatine eine Erweiterung, die perfekt unter das vorhandene Argon One-Gehäuse passt und eine NVME-SSD bis zum Formfaktor 2280 aufnimmt. Entsprechende Angebote lassen sich im Internet schnell finden.
Für meinen Raspberry Pi 5 verwenden ich ebenfalls das GeekPi-Gehäuse N07, das es gleich im Set mit einer Erweiterungsplatine für die SSD, ebenfalls bis Formfaktor 2280, und einem geregeltem Kühler für den Pi 5 gibt.

Wenn ihr die Variante mit dem Pi-Gehäuse bevorzugt, fahrt ihr mit sudo shutdown now euren Pi herunter, nehmt die notwendigen Umbauarbeiten vor und startet ihn anschließend wieder. Für die weiteren Schritte stellst du wieder eine SSH-Verbindung mit deinem Pi her und meldest dich an.

Zunächst gilt es zu prüfen, ob dein Pi die SSD korrekt erkannt hat. Das Kommando dafür ist

lsblk

Je nach SSD sieht die Ausgabe etwas anders aus, auch abhängig davon, ob deine SSD bereits formatiert ist oder nicht.
Du erhälst eine ähnliche Ausgabe wie die folgende:

mmcblk0 ist in meinem Fall die SD-Karte mit zwei Partitionen mmcblk0p1 und p2, die vom Pi Imager Tool während der Ersteinrichtung angelegt wurde. nvme0n1 ist die noch unformatierte SSD. Bei dir kann die SSD z.B. auch als sda o.ä. angezeigt werden. Merke dir diesen Namen, du wirst ihn weiter unten noch benötigen.
Ich werde im weiteren Verlauf nvme0n1 verwenden, was du bitte durch den NAMEN deiner SSD ersetzt!

Der nächste Schritt ist die Anpassung der Boot-Reihenfolge für deinen Pi. Dazu benutzt du das Konfigurations-Tool deines Pi.

sudo raspi-config

In der Oberfläche von raspi-config erfolgt die Navigation mit den Cursor-Tasten. Return wählt eine Option aus, ESC bricht den Vorgang ab.
Du wählst zunächst den Punkt „6 Advanced Options“

und dann weiter den Punkt „A4 Boot Order“

sowie den Punkt „B2 NVME/USB Boot“

Die Übernahme der neuen Einstellungen dauert einen kleinen Moment. Als Bestätigung erhälst du folgende Information.

Nach Bestätigung mit <Ok> landest du wieder im Hauptmenü von raspi-config. Dort wählst du <Finish> und wirst zu einem Reboot aufgefordert, den du mit <Yes> bestätigst.

Die vorgenommene Änderung der Boot-Reihenfolge sorgt dafür, dass dein Pi nach einem bootbaren Betriebssystem erst auf einer SSD, dann am USB-Anschluss und schließlich auf einer SD-Karte sucht. Dein Pi startet jetzt immer noch von der SD-Karte, da wir das Betriebssystem noch nicht auf die SSD dupliziert haben.

Klonen des Pi OS

Jetzt kann es an das Klonen der SD-Karte auf die SSD gehen.
Dazu verwende ich das Tool rpi-clone in der Konsole, dass du über ein git clone auf deinen Pi bringen kannst.

Zunächst prüfst du, ob bereits git auf deinem Pi installiert hast.

git --version

Falls du anschließend keine Versionsangabe für git in der Konsole siehst, erledigst du die Installation von git auf deinem Pi mit:

sudo apt-get install git

rpi-clone holst du dir mit folgendem Befehl auf deinen Pi

git clone https://github.com/geerlingguy/rpi-clone.git

Für das Klonen der SD-Karte benutzt du die folgenden Kommandos

cd rpi-clone
sudo ./rpi-clone nvme0n1

rpi-clone beginnt seine Arbeit. Du kannst alle Nachfragen mit y oder yes beantworten. Die Nachfrage nach dem Label kannst du leer lassen und einfach mit Return bestätigen. Nach etwas Wartezeit (bei mir war es etwas über eine Minute) wird rpi-clone mit einem abschließende Return beendet und die Ausgabe in deiner Konsole sollte ähnlich der nachfolgenden aussehen.

Jetzt wird es spannend, denn du kannst die SD-Karte aus deinem Pi entfernen und ihn neu starten. Aber vorher erstmal runterfahren mit

sudo shutdown now

Dann die SD-Karte entfernen und deinen Pi wieder neu starten. Nach einer kurzen Bootzeit kannst du wieder eine SSH-Verbindung und die SSD-Geschwindigkeit mit deinem Pi genießen.

Einrichtung der Datenablage

Da meine QNAP TS-470 Pro mittlerweile aus dem Support bei QNAP raus ist, nur noch Sicherheitsupdates erhält und irgendwann die Container Station nicht mehr vernünftig zu benutzen war, habe ich mich entschieden, zunächst einen Pi 4 und jetzt aktuell einen Pi 5 für meine Docker-Umgebung zu nutzen. Meine QNAP dient jetzt als Datenablage (natürlich inkl. Backup) für meine Docker-Container.

Einrichten der Verzeichnisstruktur

Im NAS habe ich eine Verzeichnisstruktur angelegt, in der ich für jeden Docker-Container die Datenablage als Unterverzeichnis eingerichtet habe. Das Hauptverzeichnis habe ich über eine NFS-Freigabe verfügbar gemacht, sodass ich dieses in die Verzeichnisstruktur meines Pi mounten kann. Ich beschreibe im Folgenden die Einrichtung der Verzeichnisstruktur und dessen Freigabe für mein QNAP-NAS mithilfe der QTS-Weboberfläche. Die Abbildungen stammen von meiner QNAP TS-470 Pro mit QTS 4.3.6. Die Benutzerführung und das Look-and-Feel aktuellerer QTS-Versionen werden davon abweichen, ebenso diejenigen anderer Hersteller wie bspw. Synology. Du kannst die Verzeichnisablage auch auf anderen Medien bzw. auch auf dem Pi anlegen.

Fangen wir an: Ich habe auf einem meiner Volumes das Hauptverzeichnis dk1 mit der File Station von QTS angelegt und freigegeben. In dieses Hauptverzeichnis werden im weiteren Verlauf durch das Starten der Docker-Container weiter Unterverzeichnisse angelegt.

Für das übergeordnete Verzeichnis MyContainer habe ich über den Punkt Freigabeordner in der Systemsteuerung eine NFS-Freigabe für die IP-Adresse meines Pi angelegt.

Über den Punkt „Berechtigung für Freigabeordner bearbeiten“ gelangt man schließlich in die Detaileinstellungen für die Berechtigung. Dort wird dann mit Auswahl „NFS-Hostzugriff“ die Freigabe für die IP-Adresse des Pi angelegt wie nachfolgend dargestellt. In meinem Fall lautet die IP-Adresse 192.168.1.222. Du trägst hier bitte die Adresse deines Pi ein!

Mit „Übernehmen“ werden die Eingabe zum Abschluss aktiviert.

NFS-Share im Pi nutzen

Nun fehlt noch das Mounten des angelegten Verzeichnisses auf dem NAS in das Dateisystem des Pi, und das am besten so, dass es gleich beim Hochfahren des Pi mit erledigt wird.

Dazu habe ich in der Datei /etc/fstab folgende Zeile am Ende eingefügt
192.168.1.102:MyContainer /share/MyContainer nfs defaults 0 0

Dabei ist

  • 192.168.1.102 die IP-Adresse des NAS
  • MyContainer die Bezeichnung der NFS-Freigabe auf dem NAS
  • /share/MyContainer das Mount-Verzeichnis im Dateisystem meines Pi

Diese Angaben musst du deinen Gegebenheiten entsprechend anpassen.

Ich habe mit nano die Änderung an der fstab vorgenommen: sudo nano /etc/fstab.

Nach einem Reboot des Pi wird das Verzeichnis entsprechend im Dateisystem sichtbar.

Ich werde im weiteren Verlauf immer mal wieder die Umgebungsvariable ${DATA_ROOT} verwenden. Daher kannst du diese auch auf deinem Pi dauerhaft einrichten.

Dazu legst du in deinem Home-Verzeichnis die Datei .bash_aliases an und exportierst darin die Umgebungsvariable ${DATA_ROOT}. Die Datei .bash-aliases wird beim Starten einer Bash automatisch vom .bashrc-Skript aufgerufen, also z.B. immer dann, wenn du eine SSH-Verbindung zu deinem Pi öffnest. Das ganze funktioniert so:

nano ~/.bash_aliases

In die Datei kopierst du folgenden Inhalt, wobei du dein_datenablage_share durch den Pfad zu deiner Datenablage ersetzt.

export DATA_ROOT=dein_datenablage_share

Damit sind alle vorbereitenden Dinge getan, es kann nun an die Installation von Portainer gehen.


Nützliches

SD-Karte als Image

Wenn du planst mehrere identische Pi’s aufzusetzen z.B. für eine Docker Swarm-Installation, kannst du die zu Beginn erzeugte SD-Karte als Master verwenden.

Wenn du in dieser Form einen neuen, baugleiche Pi aufsetzen möchtest, musst du nicht die ganze Anleitung durcharbeiten. Es sind folgende Schritte notwendig:

  1. Starten des neuen Pi mit der SD-Karte und Herausfinden der IP-Adresse.
    Ich habe so es gemacht, dass ich bei meinem vorhandenen Pi das WLAN ausgeschaltet und den neuen per WLAN eingebunden habe. So hatte ich zwar in der Übersicht meiner Fritz!Box zwei Pi’s mit identischem Namen, allerdings war der neue der mit der WLAN-Verbindung.
  2. SSH-Verbindung mit dem neuen Pi per IP-Adresse aufbauen und per sudo raspi-config den Hostnamen ändern, anschließend rebooten.
  3. Durchführen der Schritte im Kapitel „Migration auf SSD“, außer der Installation von rpi-clone. Das ist bereits auf der SD-Karte vorhanden.

Governor-Einstellung im Pi

Der sog. Governor beeinflusst den Modus, in dem die CPU-Kerne des Pi laufen.
Du kannst dir die möglichen Werte für alle vier Kerne in der Konsole ausgeben lassen mit folgendem Aufruf.

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors

Die aktuell genutzte Einstellung aller vier Kerne erhälst du mit

sudo cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Und über den folgenden Aufruf kannst du den Governor auf einen der oben ausgegebenen Werte setzten. In diesem Fall werden alle Kerne auf ondemand eingestellt.

echo "ondemand" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Zu beachten ist, dass

  • die Einstellung für den Governor nach einem Neustart des Pi wieder zurückgesetzt wird.
    Ich habe noch keine nachhaltige Lösung zum dauerhaften Setzen des Governors für mich gefunden bzw. getestet.
  • du den Governor auch für einzelne Kerne einstellen kannst, wenn du den * im letzten Befehl durch eine Zahl zwischen 0 und 3 ersetzt

Swapping des Pi

Das temporäre und dauerhafte Ausschalten des Swapping wird in diesem Artikel gut erklärt.

In Kurzform:

Swapping temporär aus- bzw. einschalten funktioniert mit

sudo swapoff -a
sudo swapon -a

Zwischen beiden Befehlen zeigt ein free an, ob der Swap-Speicher auf 0 gesetzt wurde.

Möchtest du das Swapping dauerhaft ausschalten, was auch einen Neustart überlebt, funktioniert dieses mit

sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile

Analog startet start anstelle von stop den Swap-Dienst wieder, und enable statt disable stellt den Dienst so ein, dass er automatisch startet beim Hochfahren des Pi.


Quellen & Links

Schreibe einen Kommentar