Vorbereitung zur Installation
Letztes Update 2020/11/23 13:40
Voraussetzung ist ein lauffähiges System mit SSH Zugang und einer am USB-Port angeschlossenen Festplatte oder einem USB-Stick.
In diesem Beispiel wird 2020-08-20-raspios-buster-armhf-lite
verwendet.
Wenn man keine Möglichkeit hat, den Raspberry Pi per Tastatur, Maus und Bildschirm in Betrieb zunehmen, dann kann man auf der SD-Speicherkarte in der Boot-Partition eine leere Datei mit dem Namen „ssh“ erstellen. Wenn man das mit Windows macht, dann muss man darauf achten, dass keine Dateiendung hinzugefügt wird.
Die IP-Adresse des Paspberry kann mit Tools wie dem Advanced IP Scanner herausgefunden werden.
Wenn Raspbian gestartet wird, dann wird SSH aktiviert und die Datei automatisch gelöscht.
sudo apt update -y && apt full-upgrade -y && apt autoremove -y
Der Raspberry Pi bekommt eine fixe IP-Adresse, hier 192.168.20.210. Hierfür öffnen wir die dhcpcd.conf:
sudo nano /etc/dhcpcd.conf
und fügen an das Ende der Datei folgendes ein:
# Eigenes Netzwerk interface eth0 static ip_address=192.168.20.210/24 static routers=192.168.20.20 static domain_name_servers=192.168.20.20
Die dhcpcd.conf speichern und den Pi rebooten:
sudo reboot
Das Standardpasswort für den User pi ändern. Bei der Eingabe wird nichts angezeigt.
~ $ passwd Changing password for pi. Current password:altes_passwort New password:neues_passwort Retype new password:neues_passwort passwd: password updated successfully ~ $
Wenn password updated successfully
angezeigt wird, gilt ab sofort das neu eingegebene Passwort.
Für die Bequemlichkeit wird der Midnight Commander installiert.
sudo apt install mc -y
Weitere Informationen sind im Artikel Midnight Commander auf dem RPi installieren zu finden.
Hier wird beschrieben, wie man vom Windows-Desktop mit PuTTY auf den Pi mit SSH verbinden kann, ohne Username und Passwort einzugeben.
Benötigt wird dazu PuTTY als SSH Client und Puttygen zum Erzeugen der Keys. Alle benötigten Programme sind auf der Seite:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html zu finden.
Die Programme sind ausführbar und müssen daher nicht installiert werden
Mit PuTTYgen wird nun ein private/public Keypaar erzeugt. Dafür wird nun der PuTTY Key Generator gestartet. Die Einstellungen wie im Bild vornehmen:
Auf Generate
drücken und und während der Erstellung der Keys den Cursor mit der Maus über das leere Feld bewegen.
Es wurde ein private/public Keypaar erzeugt. Auf die Eingabe von Key Comment und Key Passphrase wird hier verzichtet. Bei Key Comment wird üblicherweise die Mail-Adresse eingetragen. Mit der Key Passphrase kann ein Kennwort eingegeben werden, welches dann beim Verbindungsvorgang eingegeben werden muss. Es erhöht zwar die Sicherheit, ist aber in geschlossenen Netzwerken nicht unbedingt erforderlich.
Public und private Key speichern. Den Public Key als Textdatei (zB. id_rsa.txt) und Private Key mit der Endung .ppk speichern.
Den Private Key vornehmlich in einem Bereich speichern, in dem nur der Anwender Zugriff hat.
Den Public Key nun auf den Raspberry übertragen. Das Programm FileZilla ist zB. ein geeigneter FTP-Client um den Datentransfer durchzuführen.
Die Datei id_rsa.txt
in das Verzeichnis pi am Raspberry kopieren.
Auf dem Raspberry als User pi einloggen und in der Konsole ein Verzeichnis .ssh anlegen:
~ $ mkdir ~/.ssh ~ $ chmod 700 ~/.ssh ~ $ sudo cat id_rsa.txt >> ~/.ssh/authorized_keys ~ $ nano ~/.ssh/authorized_keys
In der Datei authorized_keys
muss der Key in einer einzelnen Zeile stehen, dh., es sind alle Zeilenvorschübe etc. zu entfernen. Vor dem eigentlichen Key muss ssh-rsa
eingefügt werden, falls nicht vorhanden. Es sollte etwa so wie im Bild aussehen.
---- BEGIN SSH2 PUBLIC KEY ---- Comment: "rsa-key-20170207" ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEApInMGIfA370....$ ---- END SSH2 PUBLIC KEY ----
Falls bereits vorhanden, die authorized_keys
Datei nach ~/.ssh/authorized_keys
kopieren.
Der Eintrag in Putty kann kopiert werden, indem man eine bestehende Verbindung lädt und unter einem neuen Namen und den neuen Parametern wieder speichert.
Die beiden Dateien sind hier vorhanden auf data/media/putty
.
~ $ sudo nano /etc/ssh/sshd_config
In der sshd_config folgenden Eintrag kontrollieren und eventuell vornehmen
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
und dann den sshd neu starten:
~ $ sudo /etc/init.d/ssh restart
PuTTY starten, das Profil laden und die Kategorie SSH/Auth aufrufen
im Feld Connection / Data Auto-login username
den User pi
eintragen.
Im Feld Private key file for authentication
Ort und Name des Private Key Files eintragen, wieder zurück in die Katgorie Session
und die Taste Save
drücken.
Für ein Login am Raspberry nun PuTTY Starten und das entsprechende Profil auswählen.
Nachdem wir nun eine Verbindung mit dem Raspberry Pi mithilfe von Schlüsseln herstellen können, kann die Kennwortauthentifizierung für zusätzliche Sicherheit vollständig deaktiviert werden. Damit kann man sich nur mehr von Rechnern mit dem PI verbinden, auf denen der Public Key
gespeichert ist.
Dazu die SSHD Configuration öffnen
~ $ sudo nano /etc/ssh/sshd_config
und den Eintrag PasswordAuthentication yes
auf PasswordAuthentication no
ändern, und dann den sshd neu starten:
~ $ sudo /etc/init.d/ssh restart
Falls der RPi ohne Tastatur / Monitor betrieben wird, ist es empfehlenswert eine eigene Session von Putty für diesen Vorgang zu verwenden, um im Fehlerfall noch eine gültige Verbindung für Korrekturen offen zu haben.
Quelle: https://putty-ssh.com/
Um den Raspberry leichter zu identifiziern, wird ein aussagekräftiger Name eingetragen.
Dies wird über raspi-config erledigt:
sudo raspi-config
Punkt 2 - Network Options, N1 Hostname, RFC Regeln bestätigen, Name eingeben und mit ENTER bestätigen.
Danach aus dem Konfigurationstool aussteigen und den RPi im nächsten Fenster mit Yes
neu booten, um den Hostnamen zu übernehmen.
Falls nicht neu gebootet wird, wird es zu Fehlermeldungen bei eingaben an der Konsole kommen.
Nach dem Reboot ist an der Konsole der neue Hostname zu sehen. In diesem Fall
pi@Dokuwiki:~ $
Um größere Datenmengen unterzubringen, ist es notwendig, einen Datenträger zu installieren.
Nachdem die Festplatte am USB-Port angeschlossen wurde, müssen wir prüfen, ob sie gefunden wurde.
1. Festplatte erkennen
An der Konsole folgenden Befehl absetzen:
dmesg # für die komplette Liste, oder dmesg | grep sda: # für eine Liste, die nur Zeilen druckt, welche ''**sda:**'' enthalten
Damit wird die Festplatte identifiziert. In diesem Fall ist es /dev/sda1
2. Partition erstellen
sudo fdisk /dev/sda
In weiterer Folge nachstehendes am fdisk-Prompt eingeben:
Command (m for help):
n – um eine neue Partition zu erstellen
p – für eine primäre Partition
1 – für die erste Partition
dann 2 x die vorgeschlagenen Werte übernehmen
Command (m for help):
w – um die Änderungen aud die Disk zu schreiben.
3. Festplatte formatieren:
sudo mkfs.ext4 /dev/sda1
4. Festplatte mounten:
sudo mkdir /mnt/ssd sudo mount /dev/sda1 /mnt/ssd
Nun wurde im Ordner /mnt/ das Verzeichnis /ssd/ erstellt und die Festplatte in diesem Ordner gemountet.
Mit der Eingabe von:
df -l -h
können wir kontrollieren, ob die neue Platte gefunden wird.
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf /dev/root 29G 4,0G 24G 15% / devtmpfs 459M 0 459M 0% /dev tmpfs 463M 0 463M 0% /dev/shm tmpfs 463M 6,4M 457M 2% /run tmpfs 5,0M 4,0K 5,0M 1% /run/lock tmpfs 463M 0 463M 0% /sys/fs/cgroup >/dev/sda1 118G 60M 112G 1% /mnt/ssd /dev/mmcblk0p1 63M 21M 42M 33% /boot tmpfs 93M 0 93M 0% /run/user/1000
Siehe 3. Zeile von unten
5. Automatisch beim Booten mounten
UUID feststellen:
sudo ls -l /dev/disk/by-uuid/
insgesamt 0 lrwxrwxrwx 1 root root 15 Feb 10 23:27 0EDC-9EC5 -> ../../mmcblk0p1 lrwxrwxrwx 1 root root 9 Feb 10 23:27 7d4bd715-1158-4a82-a235-b100038fb4b6 -> ../../sda lrwxrwxrwx 1 root root 15 Feb 10 23:27 7f593562-9f68-4bb9-a7c9-2b70ad620873 -> ../../mmcblk0p2 lrwxrwxrwx 1 root root 10 Feb 10 23:27 f9b3a36b-64d2-412c-8218-0fc2d083dd8e -> ../../sda1
sudo nano /etc/fstab
Für unsere Festplatte folgende Zeile einfügen:
UUID=f9b3a36b-64d2-412c-8218-0fc2d083dd8e /mnt/ssd ext4 noauto,x-systemd.automount,x-systemd.idle-timeout=3600,defaults 0 0 Alternativ, da es beim letzten Release von Raspbian (2020-05-27) Probleme gab: UUID=f9b3a36b-64d2-412c-8218-0fc2d083dd8e /mnt/ssd ext4 auto,nofail,sync,users,rw 0 0
Danach Rechte vergeben, dass alle auf die Disk schreiben können. Falls Bedenken bestehen, dass unberechtigte Zugriff haben, die Rechte entsprechend ändern:
sudo chmod -R 777 /mnt/ssd/
Raspbian verwendet das Init-System systemd. Dieses enthält einen Automounter, der auch durch einen Eintrag in fstab aktiviert werden kann. Trägt man in einem fstab-Eintrag die mount-Optionen noauto,x-systemd.automount ein, so wird die Partition bzw. Netzwerk-Freigabe nicht schon beim Systemstart, sondern erst bei einem Zugriffsversuch automatisch eingebunden. Fügt man noch zusätzlich die Option x-systemd.idle-timeout=60 ein, so wird die eingebundene Partition bzw. Freigabe nach einer Untätigkeit von 60 Sekunden wieder automatisch ausgehängt. Natürlich kann der Wert für das Timeout beliebig verändert werden.
Quelle: https://wiki.ubuntuusers.de/fstab/
Den Pi rebooten und kontrollieren, ob die Festplatte gefunden wird.
sudo reboot
WiringPi ist ein nützliches Framework um die GPIO Ein-und Ausgänge am Raspberry Pi zu schalten. Natürlich ist das Schalten der GPIO’s auch ohne WiringPi möglich, der Einsatz von WiringPi vereinfacht die ganze Sache aber und ist zudem erweiterbar.
Falls GIT noch nicht installiert ist:
sudo apt install git-core -y
Falls die I²C Libary benötigt wird:
sudo apt install libi2c-dev -y
WiringPi aus dem Repository installieren:
sudo apt install wiringpi
Die Version der installierten Version ermitteln:
~ $ gpio -v gpio version: 2.50 Copyright (c) 2012-2018 Gordon Henderson This is free software with ABSOLUTELY NO WARRANTY. For details type: gpio -warranty Raspberry Pi Details: Type: Unknown17, Revision: 01, Memory: 0MB, Maker: Sony * Device tree is enabled. *--> Raspberry Pi 4 Model B Rev 1.1 * This Raspberry Pi supports user-level GPIO access.
Die Version 2.50 wird am Raspberry Pi 4 nicht oder nicht richtig funktionieren. Daher muß ein Update installiert werden:
cd /tmp wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb
~ $ gpio -v gpio version: 2.52 Copyright (c) 2012-2018 Gordon Henderson This is free software with ABSOLUTELY NO WARRANTY. For details type: gpio -warranty Raspberry Pi Details: Type: Pi 4B, Revision: 01, Memory: 4096MB, Maker: Sony * Device tree is enabled. *--> Raspberry Pi 4 Model B Rev 1.1 * This Raspberry Pi supports user-level GPIO access.
Falls bereits eine alte Version von WiringPi installiert ist und diese entfernt werden soll, bevor die neue Version übertragen wird:
sudo apt purge wiringpi hash -r
Damit ist WiringPi installiert. Wie man damit GPIO's schalten kann, wird im Kapitel "Mit WiringPi schalten" und Anschluss eines Summers erklärt.
Info:
Version kontrollieren ⇒ gpio -v
Status anzeigen ⇒ gpio readall
I²C-Treiber laden ⇒ gpio load i2c
weitere Schalter ⇒ gpio -h
Quellen:
Gordons Projects
WiringPi
WiringPi Update
Um nicht nur zu sehen, ob der Pi am Strom angeschlossen, sondern dieser auch betriebsbereit ist, wird am Anschluss GPIO05, WPi21 eine LED mit einem Vorwiderstand angeschlossen. Die Größe des Vorwiderstandes sollte an die Stromaufnahme der LED angepasst werden. In diesem Projekt wird zur Ansteuerung der LED's ULN2803 verwndet, der mit 5V versorgt wird.
Für weitere Information siehe Schaltplan
WiringPi
ist nicht unbedingt notwendig. Da aber WiringPi
hier auch für andere Vorhaben notwendig ist, wird es auch zur Ausführung dieses Scripts verwendet.
Um die LED zum leuchten zu bringen, ist ein kleines Script notwendig. Dieses wird hier in C
erstellt.
sudo nano statusled_on.c
#include <wiringPi.h> int main (void) { wiringPiSetup () ; pinMode (21, OUTPUT) ; { digitalWrite (21, HIGH) ; } return 0 ; }
Das Script wird kompiliert:
gcc -o statusled_on statusled_on.c -lwiringPi
und in die Verzeichnissse /etc/init.d/ und /bin/ kopiert:
sudo cp statusled_on /etc/init.d/statusled_on sudo cp statusled_on /bin/statusled_on
Im Verzeichnis /etc/init.d/
wird eine Datei mit dem Namen local.statusled
erstellt:
sudo nano /etc/init.d/local.statusled
Es wird die vereinfachte Vorlage /etc/init.d/skeleton
verwendet.
#! /bin/sh ### BEGIN INIT INFO # Provides: local.autostart # Required-Start: $start # Required-Stop: $shutdown # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: schaltet die StatusLED ein # Description: Lange Bechreibung ### END INIT INFO # Author: ede # Aktionen /bin/statusled_on
Der Kopfteil ist sehr wichtig und muss vorhanden sein, denn er wird später vom Befehl update-rc.d
verwendet. Er darf nicht gelöscht und sollte entsprechend angepasst werden. Unterhalb von # Aktionen
steht der Befehl zur Ausführung des C-Scripts.
Da die GPIO Pins ohnehin beim Abschalten stromlos werden, kann die /etc/init.d/local.statusled
einfach gehalten werden.
Die Datei wird nun ausführbar gemacht:
sudo chmod 755 /etc/init.d/local.statusled
Abschließend fügt man das Skript mit dem Befehl update-rc.d
in die entsprechenden Runlevel ein.
sudo update-rc.d local.statusled defaults
Ab dem nächsten Reboot wird nun ab der Betriebsbereitschaft des Pi eine LED aktivert.
Quellen:
Autostartskript erstellen und einbinden
Raspberry Pi - run program at start-up
Ab dem Raspberry Pi3 genügt ein einfacher Taster, der an den GPIO-Pins 5 & 6 (GPIO3 & Ground) angeschlossen wird.
Der Taster muss mit GPIO3 & Ground verbunden werden.
Damit der Ein- & Ausschalter funktioniert, muss eine neue Befehlszeile in die Datei /boot/config.txt
in der Sektion [pi4] eingefügt werden.
sudo nano /boot/config.txt
dtoverlay=gpio-shutdown,gpio_pin=3, active_low=1,gpio_pull=up
[pi4] # Enable DRM VC4 V3D driver on top of the dispmanx display stack dtoverlay=vc4-fkms-v3d max_framebuffers=2 # GPIO pin3 für Ein- Ausschalter überwachen dtoverlay=gpio-shutdown,gpio_pin=3, active_low=1,gpio_pull=up
Nach der Änderung der config.txt
muss der Raspberry rebootet werden:
sudo reboot
Falls diese Anwendung beim Raspberry Pi4 nicht funktionieren sollte, dann muss vermutlich ein neuer Bootloader auf den RPi aufgespielt werden.
Siehe dazu Bootloader wiederherstellen.
Der Ein- / Ausschalter funktioniert nur dann, wenn i2c
nicht aktiviert ist. Der Pin 5 [GPIO 3 (SCL1)]
ist Teil des I2C
Anschlußes. Sobald über raspi-config
I2C
aktiviert ist, funktioniert die Anwendung nicht mehr. Man kann einen anderen Pin in der /boot/config.txt
angeben. Über diesen kann der Raspberry zwar aus- aber nicht mehr eingeschaltet werden kann. Dies geht dann nur mehr durch unterbrechen der Stromversorgung oder mit einem Reset.