Ich wollte Raspbian Stretch Lite auf dem Raspberry Pi zum Laufen bringen, ohne Tastatur und Display an den Pi anzuschließen. Sogenannter „headless“ Betrieb.
Man muss dazu den SSH-Server auf dem Pi zum Hochfahren bringen (was Raspbian nicht automatisch tut) und kann dann per ssh darauf zugreifen.
Voraussetzung ist eine SD-Karte mit mindestens 8 GB. Sie sollte nicht zu langsam sein, also wenigstens Class 10 bzw. UHS-1 haben.
Bei den Modellen Pi Zero, Pi 1 +, Pi B+, Pi 2 und Pi 3 muss es eine micro-SD-Karte sein. Beim Pi 1 A und Pi 1 B eine SD-Karte (ohne micro).
Achtung! Alle Dateien und Verzeichnisse auf der SD-Karte werden im Folgenden gelöscht werden!!!
Das Ganze funktioniert unter Ubuntu (18.04) wie folgt:
- Image herunterladen (Im folgenden Beispiel die Datei 2018-10-09-raspbian-stretch-lite.zip. Download-Quellen am Ende)
- Prüfsumme der zip-Datei ermitteln und vergleichen:
sha256sum 2018-10-09-raspbian-stretch-lite.zip
Es sollte die gleiche Hex-Zahl angezeigt werden, wie auf der Download-Seite bzw. in der Datei *.zip.sha256 angegeben.
- Image auspacken
unzip 2018-10-09-raspbian-stretch-lite.zip
Datei 2018-10-09-raspbian-stretch-lite.img ist nun vorhanden.
- Aktuell vorhandene Laufwerke ansehen:
lsblk
oder besser
lsblk | grep -ve loop
- SD-Karte in den SD-Karten-Slot des PC stecken.
- Normalerweise hängt Ubuntu die SD-Karte automatisch ein (mount).
- Alle Partitionen der SD-Karte aushängen (im Dateimanager oder mit umount).
- Aktuell vorhandene Laufwerke ansehen:
lsblk
oder:
lsblk | grep -ve loop
- Der Unterschied zwischen der Ausgabe des ersten und zweiten lsblk (Punkte 4 und 8 oben) ist das Gerät (device) der SD-Karte. Bei mir:
mmcblk0 179:0 0 14,5G 0 disk ├─mmcblk0p1 179:1 0 43,8M 0 part └─mmcblk0p2 179:2 0 14,4G 0 part
- Image auf SD-Karte schreiben, d. h. auf das soeben ermittelte Gerät, z. B. /dev/mmcblk0.
Parameter if ist die Input-Datei, of die Output-Datei (hier die Geräte-Datei der SD-Karte) des Befehls dd.
Achtung! Beide Parameter dürfen nicht verwechselt werden!
sudo dd bs=4M if=2018-10-09-raspbian-stretch-lite.img of=/dev/mmcblk0 conv=fsync status='progress'
Falls sudo das erste Mal aufgerufen wurde, das eigene Passwort eingeben.
Das Kopieren dauerte bei mir ca. 4 min. (Nicht wundern, wenn dd am Ende scheinbar steht. Einfach warten.)
Dabei werden zwei Partitionen auf der SD-Karte erstellt.
- SD-Karte physisch aus dem SD-Karten-Slot des PC entfernen und wieder hineinstecken.
- Normalerweise hängt Ubuntu die Partitionen der SD-Karte automatisch ein (mount).
- Nur wenn nötig, d. h. wenn Ubuntu die SD-Karte nicht einhängen sollte:
Partitionen der SD-Karte selbst mounten wie folgt (in folgenden Befehlen muss evtl. mmcblk0p1 und mmcblk0p2 angepasst werden):
sudo mkdir /media/$USER/boot sudo mkdir /media/$USER/rootfs sudo mount /dev/mmcblk0p1 /media/$USER/boot sudo mount /dev/mmcblk0p2 /media/$USER/rootfs
- Nun der entscheidende Trick: Leere Datei „ssh“ auf der Boot-Partition der SD-Karte anlegen. (Nicht im leeren Verzeichnis boot der größeren Partition!)
sudo touch /media/$USER/boot/ssh
Hintergrund: Raspbian startet normalerweise keinen SSH-Server auf dem Pi. Wenn es aber diese Datei „ssh“ an der genannten Stelle findet, dann startet es einen SSH-Server.
- SD-Karte aushängen (im Dateimanager oder mit umount).
- SD-Karte physisch aus dem SD-Karten-Slot des PC entfernen
- SD-Karte physisch in den Pi hineinstecken.
- Pi einschalten (d. h. mit Spannung versorgen).
- Der Pi sollte nun vom Router eine IP-Adresse erhalten.
Nun muß man entweder diese IP-Adresse oder den Namen, unter dem der Pi im Netzwerk bekannt ist, herausfinden.
Beides kann man im Router einsehen (z. B. auf einer Fritz!Box unter FRITZ!OS 7 unter Heimnetz / Netzwerk).
Bei mir war der Name „raspberrypi“.
Alternativ könnte man mit nmap das Netzwerk scannen, um den Pi zu finden (z. B.: nmap 192.168.178.0/24).
- Nun endlich mit ssh auf den Pi zugreifen:
ssh pi@raspberrypi
„pi“ ist der Benutzer auf dem Pi. „raspberrypi“ ist der Hostname des Pi, den man im Router gefunden hat.
- Mögliche Stolpersteine:
Bei mir gab der ssh-Client folgenden Meldungen aus:
The authenticity of host ‚raspberrypi (192.168.178.22)‘ can’t be established.
ECDSA key fingerprint is SHA256:VpSRtvekRkX0zhWfHfne38iCDl6D919hdpf9l+Jn5CQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‚raspberrypi‘ (ECDSA) to the list of known hosts.
Warning: the ECDSA host key for ‚raspberrypi‘ differs from the key for the IP address ‚192.168.178.22‘
Offending key for IP in /home/cmc/.ssh/known_hosts:8
Are you sure you want to continue connecting (yes/no)? yes
Die erste bedeutet, dass der ssh-Client den Pi zum ersten Mal sieht und noch nicht kennt.
Die zweite bedeutet, dass der Schlüssel des Pi ein anderer ist, als der bisher von dieser IP-Adresse bekannte.
Beide Male mit „yes“ antworten!
Ich habe an dieser Stelle auch schon von ssh eine Fehlermeldung „… Host key verification failed.“ erhalten.
Falls unter der gleichen IP-Adresse bereits ein anderer Host im Netzwerk lief und man auf diesen von diesem (Ubuntu-)PC aus bereits per ssh zugegriffen hatte.
Dann muss man den in der Fehlermeldung genannten ssh-keygen-Befehl ausführen, um den alten Schlüssel für diesen alten Host aus der Datei der bekannten Hosts zu löschen. Zum Beispiel:
ssh-keygen -f "/home/$USER/.ssh/known_hosts" -R "raspberrypi"
Anschließend wiederholt man den ssh-Befehl von oben (ssh pi@raspberrypi).
- Anschließend das Passwort eingeben. Beim Eintippen wird nichts angezeigt!
Das Passwort lautet: raspberry - Der SSH-Server auf dem Pi gibt nun einen Begrüßungstext aus (z. B. „Linux raspberrypi 4.14.71-v7+ …“) und man ist „drin“!
Der Prompt sollte etwa so aussehen:
pi@raspberrypi:~ $
- Aus Sicherheitsgründen sollte man nun noch (auf dem Pi) das Passwort des Benutzers pi ändern wie folgt:
passwd
Altes Passwort und zweimal neues Passwort eingeben (wieder ohne Anzeige).
Das neue Passwort notieren und gut aufbewahren!!
- Pi herunterfahren mit:
sudo halt
Die ssh-Verbindung wird dabei getrennt, Ausgabe:
Connection to raspberrypi closed by remote host.
Connection to raspberrypi closed.
Falls der ssh-Client hängen bleibt und das (Ubuntu-)Terminal nicht zu seinem Prompt zurückkehrt, muss man es hart beenden (Fenster schließen).
- Nun darf der Pi vom Netzteil getrennt werden.
Hinweis für Windows-Freunde:
Statt dd (bei Ubuntu) würde man unter Windows z. B. ein Programm wie Win32 Disk Imager oder Rufus nehmen. Als ssh-Client z. B. putty.
Download-Quellen:
Raspbian Stretch Lite:
- Entweder: https://www.raspberrypi.org/downloads/raspbian/
- Oder: https://downloads.raspberrypi.org/raspbian_lite/images/
- In diesen Tagen ist die Version „October 2018“ aktuell, die man hier findet:
- https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2018-10-11/
- Dateien:
- 2018-10-09-raspbian-stretch-lite.zip
- 2018-10-09-raspbian-stretch-lite.zip.sha256
- Dateien:
- https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2018-10-11/
Tools für Windows:
- Rufus: https://rufus.ie/de_DE.html
- WinImager: https://sourceforge.net/projects/win32diskimager/
- z. B. das Installations-Programm für 64-bit-Windows: https://sourceforge.net/projects/win32diskimager/files/Archive/win32diskimager-1.0.0-install.exe/download
- putty: https://www.chiark.greenend.org.uk/~sgtatham/putty/
- z. B. das Installations-Programm für 64-bit-Windows: https://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.70-installer.msi