Basisinstallation des Raspberry Pi

Installation Raspbian

Basis dieser Projekte ist das Raspberry Pi OS in der aktuellen Ausgabe bullseye. Die Installation erfolgt nach Standardprozedur, ausführlich beschrieben in der Online-Dokumentation. Hier kurz zusammengefasst die Arbeitsschritte mit Bordmitteln (dd) unter Linux. Die Einrichtung erfolgt "headless", d.h. es werden nur Stromversorgung und Netzwerk am Raspi angeschlossen.

Farbkennzeichnung der Textboxen:

Eingaben auf der PC - Konsole"
Eingaben auf der SSH - Konsole des Pi"
Textausgaben


ggf. Verzeichnis erstellen

mkdir ~/raspbian && cd "$_"

Herunterladen und entpacken der Lite-Version:

wget https://downloads.raspberrypi.org/raspios_lite_armhf_latest
unzip raspios_lite_armhf_latest

oder

Herunterladen und entpacken der Voll-Version:

wget https://downloads.raspberrypi.org/raspios_full_armhf_latest
unzip raspios_full_armhf_latest


Nun geht es ans Aufspielen des Images. Ein Fehler in einem der nächsten Arbeitsschritte gefährdet das Dateisystem des PC !!! Nach Möglichkeit sollte dies in einer virtuellen Umgebung (Virtualbox, VMWare, o.ä) ausgeführt werden. Zur besseren Übersicht werden jetzt alle Wechseldatenträger vom PC getrennt.

Mit dem Befehl:

df -h
verschafft man sich einen Überblick über die verbundenen Laufwerke.

Nach Anschließen des Kartenlesers und erneutem df -h sollte ein neues Laufwerk mit einer oder mehreren Partitionen aufgelistet werden.

df -h

Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
[...]
/dev/sdX1        56M     20M   37M   36% /media/user/boot
/dev/sdX2        29G    8,2G   19G   31% /media/user/ec2aa3d2-eee7-454e-8260-d145df5ddcba

X steht für a..z je nach Gerät

Aushängen der einzelnen Partitionen (incl. Partitionsnummer):

umount /dev/sdXn

Imageversion und Gerätebezeichner (!!!) anpassen. Daten auf die Karte schreiben (ohne Partitionsnummer):

sudo dd bs=4M status=progress if=2021-10-30-raspios-bullseye-armhf-lite.img of=/dev/sdX

Nach der Fertigmeldung die SD-Karte aus dem PC entfernen und durchatmen.

Setup Raspbian

Anmelden in der Security-Shell

In den aktuellen Raspbian-Versionen ist der SSH-Server per default deaktiviert. Im einfachsten Fall kann die erste Kommunikation via Tastatur und Monitor erfolgen. Folgende Login-Daten sind zu verwenden:

  • user: pi
  • Passwort: raspberrz
Da das Layout für QWERTY - Tastaturen eingestellt ist, kann man bei der Blindeingabe des Passwortes sonst verzweifeln.


Soll auf Tastatur und Monitor verzichtet werden, bietet sich folgender Workaround an:

  • Image auf die SD-Karte schreiben
  • Die SD-Karte aus dem Leser entfernen und wieder einstecken (Einhängen der Partitionen)
  • In der Partition /boot eine leere Datei ssh erzeugen
  • Zur Einrichtung des WLan die Datei wpa_supplicant.conf in /boot erstellen
  • Während des nächsten Bootens im RPi werden die Einstellungen übernommen und
    die Hilfsdateien gelöscht

Die Dateien können im PC-Terminal wie folgt erstellt werden:

cd /media/$USER/boot
cat << EOF | tee -a  ssh
EOF
cat << EOF | tee -a  wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE
network={
 ssid="mySSID"
 psk="myPassword"
}
EOF

Anschließend SSID und Passwort anpassen. Im Raspberry 3 A+/B+ können an dieser Stelle auch die Daten der 5GHz-Verbindung eingegeben werden. Voraussetzung ist, dass die Wifi-Region country=DE gesetzt wird.

nano wpa_supplicant.conf


SD-Karte in den RPi setzen

Bei verbundenem Ethernet oder WLan erfolgt die Verbindungsaufnahme via PC-Terminal.
ssh pi@raspberrypi

Die Sicherheitsabfrage des SSH-Client mit "yes" bestätigen und mit Eingabe des Passwords raspberry als user pi anmelden.


Textbasierte Konfiguration des Pi via SSH:

sudo raspi-config

Die üblichen Einstellungen:

  • Expand Filesystem -> neu: automatisch beim ersten booten
  • Change User Password
  • Hostnamen ändern
  • Localisation Options [de_DE.UTF-8 UTF-8]
Einen unikaten Hostnamen vergeben z.B: raspi

  • Finish
  • Reboot

Im Terminalfenster des PC am Pi anmelden:

ssh pi@raspi

System aktualisieren und abmelden:

sudo apt update
sudo apt upgrade
exit


Troubleshooting

Warnhinweis zu einer früheren Zuordnung Host<=>IP beheben

ssh-keygen -R 192.168.xx.yy


Falls keine Verbindung zustande kommt, funktioniert evtl. die Namensauflösung im Netzwerk nicht. Dann empfiehlt es sich, dem Pi eine feste IP im Router zuzuordnen.

ssh pi@192.168.xx.yy (zugewiesene IP)

Finetuning

Anmeldung per Keyfile

...ist der bequemere und sicherere Weg über die Security Shell.

Falls noch nicht vorhanden, wird ein Schlüsselpaar auf dem PC erzeugt: => ~/.ssh/

ssh-keygen -t rsa -b 4096
  • Verzeichnisse bestätigen
  • Passphrase vergeben !

Übertragen des öffentlichen Schlüssels zum Pi

ssh-copy-id -i ~/.ssh/id_rsa.pub pi@raspi
in das Verzeichnis: /home/pi/.ssh/authorized_keys

Verbindungsaufnahme ohne Passwort prüfen

ssh pi@raspi

Anmeldung mit Passwort verbieten

cat << EOF | sudo tee -a /etc/ssh/sshd_config

# user-Einträge für Keyfile-Anmeldung
PasswordAuthentication no
UsePAM no
MaxStartups 3:30:10
EOF
sudo service ssh restart

Die Anmeldung sollte jetzt ohne Passwort funktionieren. Lediglich einmal je PC-Sitzung ist die Eingabe der Passphrase erforderlich. Der Wert MaxStartups behindert Massenattacken auf den SSH-Server. Sinnvoll, wenn man vorhat, den Dienst über das Internet freizugeben.




WLan einrichten (RPi3)

Energiesparmodus des WLan-Moduls deaktivieren

cat << EOF | sudo tee -a /etc/network/interfaces.d/pwr_save_off
# Energiesparmodus des WLan-Moduls deaktivieren
allow-hotplug wlan0
iface wlan0 inet manual
post-up iw wlan0 set power_save off
EOF

Einstellungen aktivieren

sudo ifdown wlan0 && sudo ifup wlan0

Ggf. Zugangsdaten ändern:

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
network={
    ssid="mySSID"
    psk="GeheimesPasswort"
}




Aktivitäts - LED (RPi 2)

Die rote LED zeigt beim Pi2 per Voreinstellung den Betriebszustand an. Statt einer grell rot l euchtenden Anzeige, kann auch die CPU-Aktivität signalisiert werden.

sudo crontab -e

Zeile anhängen

@reboot echo cpu0 | sudo tee /sys/class/leds/led1/trigger

RPi neustarten

sudo reboot

Update Raspberry Pi 3:
Beim RPi3 ist die Ansteuerung der PWR-LED fest mit dem Ausgang des Reset-Chip APX803 verdrahtet, sodass diese Möglichkeit hier nicht mehr besteht ( s. Schaltung ).




Nützliche Werkzeuge

Prozessüberwachung htop (in bullseye schon enthalten)

sudo apt-get install htop

Dateisynchronisation rsync (in bullseye schon enthalten)

sudo apt-get install rsync




Verzeichnisse anzeigen

Einer der meist verwendeten Befehle in der Kommandozeile ist ls -al zur Anzeige von Verzeichnisinhalten. Häufig ist dafür in Linux der Alias ll gesetzt. In Raspian fehlt diese Voreinstellung. Die notwendigen Einträge können in der .bashrc wie folgt angehangen werden:

cat << EOF | tee -a ~/.bashrc 
# Alias - Auflistung von Dateien
alias ll='ls -al'    #sortiert nach Namen
alias lld='ls -atl'  #sortiert nach Datum, aktuell oben
alias llr='ls -artl' #sortiert nach Datum, aktuell unten
EOF

Nach erneutem Anmelden stehen die Aliase zur Verfügung.

Verzeichnis spiegeln

Einrichtung des SSH-Filesystems

Ein sehr einfacher Dateiaustausch zwischen PC und Raspi ist durch mounten eines Verzeichnissses per sshfs möglich. Auf Raspi-Seite wurde oben bereits alles eingerichtet. Der SSH-Server muss laufen und das Login per Keyfile sollte möglich sein.

Auf dem Linux-PC ist das sshfs-Paket nachzuinstallieren:

sudo apt install sshfs
und ein beliebiges mount-Verzeichnis anzulegen, bspw:
mkdir ~/pimnt

Das Home-Verzeichnis von pi lässt sich nun wie folgt am PC mounten:

sshfs pi@raspi: pimnt
Wichtig ist das Leerzeichen hinter dem Doppelpunkt !

Es kann aber auch jedes andere Raspberry-Verzeichnis eingehangen werden, bspw:

sshfs pi@raspi:/var/log pimnt
oder das komplette Dateisystem:
sshfs pi@raspi:/ pimnt

Die Berechtigungen laufen in allen Beispielen im Kontext des users pi.
Das dauerhafte Einhängen beim PC-Start ist nur in wenigen Fällen sinnvoll. Es müsste sichergestellt sein, dass der Raspberry bereits vor dem PC gebootet ist.

Aushängen lässt sich das Verzeichnis wie folgt:

fusermount -u ~/pimnt

GPIO Tool

Das RasPi OS stellt von Haus aus keine Kommandozeilenbefehle zur direkten Steuerung der GPIO bereit. Zum Lesen und Schreiben der Pins sind zusätzliche Programme erforderlich. Ein in FreePascal geschriebenes Cli-Tool lässt sich von hier laden und in den Suchpfad kopieren:

wget https://github.com/bw38/Raspberry_IO/raw/master/gpiocmd/binary/gpio
chmod +x gpio
sudo chown root:root gpio
sudo mv gpio /usr/local/bin

Bedienung wie folgt:

gpio -arg gpio [value]
args:
  -r, -read   : Lesen eines oder mehrerer GPIO
  -w, -write  : Schreiben eines GPIO-Ausg. | value: [0, 1]
  -f, -fsel   : Setzen einer GPIO-Funktion | value: [in, input, out, output, alt0(..5)]
  -p, -pull   : PullUp/Dwn-Widerstände     | value: [no, none, up, dn, dwn, down]
  -t, -table  : Übersicht GPIO
  -d, -dump   : Hexdump GPIO-Register
  -v, -version: Versionsangaben
  -h, -help   : Hilfe
gpio:
  0..31 - numerischer Wert BCM

Das read-Argument erlaubt mehrere durch Leerzeichen getrennte Gpionummern.

VNC-Fernsteuerung

VNC - Server einrichten

Zur graphischen Fernsteuerung ist in der Vollversion von Raspian bereits der VNC-Server vorinstalliert. In der raspi-config kann der Autostart beim booten eingestellt werden. Sofern kein anderes Display am RPi angeschlossen ist und grundsätzlich graphisch ferngesteuert wird, wäre dies die richtige Wahl.

Ist am RPi bereits ein Touchscreen angeschlossen, läuft dieser als Desktop:0. Um eine separate Fernsteuerung zu ermöglichen, wird der Server manuell als Desktop:1 mit angepasster Auflösung gestartet.

vncserver -geometry 1920x1080 -depth 24 :1

Stoppen des Servers:

vncserver -kill :1


Alias zum manuellen Starten einrichten

Alias zum Start über die SSH-Shell an die .bashrc anhängen:

cat << EOF | tee -a ~/.bashrc
 
# Alias - Start VNC-Server
alias vnc='vncserver -geometry 1920x1080 -depth 24 :1' # Start mit Desktop - Auflösung
alias vnd='vncserver -geometry 1366x768 -depth 24 :1'  # Start mit Laptop - Auflösung
alias vnx='vncserver -kill :1'                         # Beenden
EOF

Nach erneutem Anmelden stehen die Aliase zur Verfügung.




VNC-Server beim booten starten

Startskript erstellen

cat << EOF | tee ~/.vnc/startvnc
vncserver -geometry 1920x1080 -depth 24 :1
EOF
chmod +x ~/.vnc/startvnc

Der Server wird im Kontext des Users pi gestartet

crontab -e
Zeile anhängen
@reboot ~/.vnc/startvnc




Troubleshooting

Tastaturlayout:

Bei der Eingabe von Sonderzeichen kann es zu Problemen kommen. Mit dem voreingestellten Tastaturlayout wird bei einigen Tasten ein zusätzliches KeyRelease-Event mit falschem Keycode übermittelt. Dadurch kommt es bei Programmen die dieses Event auswerten (bspw. der Lazarus-IDE-Editor) zu Fehlinterprtationen des Keycodes (Test: xev im Terminal des X-Servers)

Abhilfe: Tastaturlayout über die graphische Oberfläche einstellen

Menü→ Einstellungen→ Tastatur und Maus→ Tastatur→ Keyboard Layout→ Deutschland/Deutsch




VNC-Client einrichten (Linux Mint)

Download der aktuellen Version und in ein beliebiges Verzeichnis des Users entpacken. Bspw:

mkdir ~/VNCViewer
Executable-Bit setzen
chmod +x ~/VNCViewer/VNC-Viewer-*-Linux-x64

Client starten

~/VNCViewer/VNC-Viewer-*-Linux-x64
ggf. Desktop - Starter erstellen

IP-Adresse / Servername:Desktopnummer eingeben

raspi:1

Am RPi anmelden als:

→ user: pi
→ passwort: sudo-passwort

nach oben