matsab.de

RaspberryPi Setup

Diese Anleitung beschreibt wie man unter macOS den Raspberry Pi installiert und einrichtet. MacOS bringt bereits alles was dazu benötigt wird mit, es muss keine weitere Software auf dem Mac installiert werden.

Manuelle Installation

Betriebsystem Abbild (Image) herunterladen: RaspberryPi OS Lite und das heruntergeladene Archiv durch Doppelklick entpacken. Das eigentliche Image nennt sich 2022-04-04-raspios-bullseye-armhf.img

SD-Karte in den Kartenleser des Mac einstecken.

Terminal auf dem Mac öffnen, in das Downloadverzeichnis des Images wechseln und folgendes Kommando ausführen:

diskutil list

In der Ausgabeliste muss nun das SD-Karten-Laufwerk identifiziert werden. Hier im Beispiel ist die SD-Karte anhand des Windows FAT32 Dateisystems und anhand der Datenträgergröße von 16GB zu erkennen. Ebenso kann der Name der SD-Karte herangezogen werden (Hier: “No Name”). Wichtig ist das Laufwerk zu wählen (z.B. disk2), keine Partition (disk2s1):

/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.0 TB     disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            999.9 GB   disk0s2
/dev/disk1 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *512.1 GB   disk1
   1:                        EFI EFI                     209.7 MB   disk1s1
   2:                  Apple_HFS Macintosh SSD           511.1 GB   disk1s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk1s3
/dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.9 GB    disk2
   1:             Windows_FAT_32 NO NAME                 15.9 GB    disk2s1

SD-Karte auswerfen (unmounten) dazu wird der disk identifier aus Schritt 4 gebraucht:

diskutil unmountDisk /dev/disk2

Zum Schreiben des Images auf die SD-Karte wird das Kommando dd benutzt, welches die Parameter BlockSize (bs), InputFile (if) und OutputFile (of) übergeben bekommt. Als InputFile wird der Name der Image-Datei angegeben, als OutputFile das SD-Kartenlaufwerk.
Zu Beachten ist, das nicht der “normale” Diskname benutzt wird, sondern der Diskname mit vorgestelltem “r” (für RawDisk):

sudo dd bs=1m if=2022-04-04-raspios-bullseye-armhf.img of=/dev/rdisk2

Nach Eingabe des Administrator Kennworts wird das Image auf die SD-Karte geschrieben. Eine Ausgabe erfolgt jedoch erst, nachdem das vollständige Image geschrieben wurde. Dies kann je nach Geschwindigkeit der SD-Karte ein paar Minuten dauern. Bei erfolgreichem Abschluss sollte eine Ausgabe erfolgen:

1041+1 records in
1041+1 records out
1092491264 bytes transferred in 115.502149 secs (9458623 bytes/sec)

SSH aktivieren vor dem ersten Start

Um SSH Zugriff für Raspberry Pi ohne Bildschirm zu konfigurieren (headless) muss auf der boot Partition des Raspberry eine leere Datei mit dem Namen ssh angelegt werden. Auf dem Mac Terminal folgendes eingeben:

cd /Volumes/boot

touch ssh

Die SD-Karte kann nun in den RaspberryPi eingesetzt werden. Booten!

Generelle Konfiguration

Die Konfiguration wird beim ersten Start nach der Installation automatisch ausgeführt. Manchmal ist es jedoch nötig, Änderungen wie z.B. Tastaturlayout, Gebietsschema, Hostname usw. vorzunehmen:

sudo raspi-config

Firmware Update

sudo rpi-update

Version prüfen:

uname -a

Software

Update vorhandener Pakete:

sudo apt-get update && sudo apt-get upgrade

Passwort des Standard Benutzers pi ändern

sudo raspi-config

1 System Options -> S3 Password
6 Advanced Options -> A1 Expand Filesystem

Evtl noch folgendes anpassen:

  • Locale: de-DE.utf8
  • Timezone
  • Advanced Options: Hostname ändern

eingestellte Locale überprüfen mit:

locale

Zugang via SSH mit private/public key

Public Key vom Mac auf den Raspberry kopieren (192.168.50.17 ist die IP-Adresse des Raspberry):

ssh-copy-id pi@192.168.50.17
ssh-copy-id pi@devpi

oder manuell:

cat ~/.ssh/id_rsa.pub | ssh <USERNAME>@<IP-ADDRESS> 'cat >> .ssh/authorized_keys'

Es sollte nun eine Ausgabe erfolgen das der entsprechende public key übertragen wurde:

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: „~/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
pi@192.168.50.17's password:
Number of key(s) added:        1   
   
   Now try logging into the machine, with:   "ssh 'pi@192.168.50.17'"
   and check to make sure that only the key(s) you wanted were added.

Wenn alles geklappt hat sollte man sich jetzt ohne Passworteingabe auf dem Raspberry einloggen können:

ssh pi@192.168.50.17

Ab jetzt kann auf dem Raspberry der SSH Zugang per Passwort komplett abgeschaltet werden:

nano /etc/ssh/sshd_config

Folgende Einträge sollten hier in der SSH Konfigurationsdatei gesetzt werden, alle anderen können gefahrlos auskommentiert werden (durch voranstellen von #):

PermitRootLogin without-password
PubkeyAuthentication yes
ChallengeResponseAuthentication no
PasswordAuthentication no
AddressFamily inet

PermitRootLogin mit der Einstellung without-password ist dabei etwas missverständlich. Es ermöglicht root logins, aber nur wenn die Authentifizierungmethode eine andere als Passwort war.

PubkeyAuthentication yes Authentifizierung mittels public key aktivieren

ChallengeResponseAuthentication no Diese Authentifizierung fragt ebenfalls nach einem Passwort, deshalb abschalten

PasswordAuthentication no Authentifizierung mittels Passwort abschalten

AddressFamily inet erlaubt SSH nur mit dem Protokoll IPV4 und nicht etwa via IPV6.

Neustart des Raspberry durchführen (via „sudo reboot“) oder nur den SSH Daemon neu starten damit die Änderungen wirksam werden:

sudo systemctl restart ssh.service

ipv6 abschalten

Beim Thema Sicherheit ist es immer eine gute Idee alles was nicht benötigt wird abzuschalten. Die wenigsten benutzen bei ihren lokalen Netzwerken schon IPV6. Speziell im Hausgebrauch dominiert immer noch IPV4.

Da beim vorherigen Punkt “SSH Zugang mit private und public key”, der Zugang schon auf IPV4 beschränkt wurde, kann IPV6 auch komplett deaktiviert werden. Die Netzwerk Adapter des Raspberry bekommen dann auch keine IPV6 Adresse mehr zugewiesen falls man DHCP aktiviert hat.

Zum Ausschalten von ipv6 muss die Datei /boot/cmdline.txt angepasst werden:

sudo nano /boot/cmdline.txt

Am Ende der Zeile folgendes anhängen:

ipv6.disable=1

Apple File sharing kit (netatalk)

Damit der Raspberry bei den Neutzwerkfreigaben im Finder von OSX auftaucht, wird das Paket netatalk benötigt: 

sudo apt-get install netatalk

Verzeichnisse konfigurieren:

sudo nano /etc/netatalk/afp.conf

Den gewünschten Pfad eintragen:

[Home of Pi]
path = /home/pi
directory perm = 0755
file perm = 0664

nach Konfigurationsänderung muss netatalk neu gestartet werden:

sudo /etc/init.d/netatalk restart

FritzBox!

Um FritzBox! NAS auf dem Raspberry zu mounten wird zuerst ein Mountpoint auf dem Raspberry benötigt:

cd /mnt
sudo mkdir fritzbox

In der Filesystem Tabelle muss dann folgendes eingetragen werden:

sudo nano /etc/fstab

//fritz.box/fritz.nas/ /mnt/fritzbox cifs uid=1000,gid=1000 0 0

Der eigentliche Mount-Vorgang wird dann wie folgt ausgeführt:

sudo mount /mnt/fritzbox/

Serielle Schnittstelle

Der Raspberry verfügt über eine seriell RS232 Schnittstelle. Diese ist jedoch vom System belegt und muss zuerst “freigegeben” werden:

sudo nano /boot/cmdline.txt

Es muss nach der Zeile gesucht werden, die “ttyAMA0” beinhaltet. In der Wheezy-Raspbian-Distribution sieht das wie folgt aus:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Die Parameter bzgl. “ttyAMA0” müssen gelöscht werden, hier:

console=ttyAMA0,115200 kgdboc=ttyAMA0,115200

Das Ergebnis sollte wie folgt aussehen:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Dummy Soundkarte

Die onboard Soundkarte des Raspberry hat nur einen Line-Ausgang. Eingänge sind nicht vorhanden. Manche Programme benötigen jedoch auch einen Eingang. Um eine Soundkarte mit Ein- und Ausgängen zu simulieren, kann eine Dummy Soundkarte aktiviert werden: 

sudo nano /etc/modules

“snd-dummy” am Ende der Datei eintragen:

# /etc/modules: kernel modules to load at boot time.  
#  
# This file contains the names of kernel modules that should be loaded  
# at boot time, one per line. Lines beginning with "#" are ignored.  
# Parameters can be specified after the module name.  

snd-bcm2835  
snd-dummy

Backup des kompletten Home Ordners

cd /home
sudo tar czf pi_home.tar.gz pi

Backup auf den Mac kopieren per SCP: (ausführen vom Mac aus)

scp pi@raspberrypi:/home/pi_home.tar.gz .

Backup vom Mac zurück zum Raspberry kopieren per SCP: (ausführen vom Mac aus)

scp pi_home.tar.gz pi@raspberrypi:~

Backup extrahieren:

tar -xvf pi_home.tar.gz

CronJobs für User “pi” einrichten:

nano /etc/group
crontab:x:102:pi einfügen

Installierte Cronjobs anschauen:

crontab -l

Installierte Cronjobs editieren:

crontab -e

Löschen der Cronjobs für aktuellen Benutzer

crontab -r

Nicht benutze Services entfernen

Sehen was offen ist:

sudo netstat -tulpn
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      514/cupsd           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1305/sshd: /usr/sbi 
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           374/avahi-daemon: r 
udp        0      0 0.0.0.0:68              0.0.0.0:*                           473/dhcpcd          
udp        0      0 0.0.0.0:631             0.0.0.0:*                           557/cups-browsed    
udp        0      0 0.0.0.0:43674           0.0.0.0:*                           374/avahi-daemon: r 

Druckerservice CUPS deaktivieren:

sudo systemctl disable cups.service
sudo systemctl disable cups-browsed.service

Firewall installieren und konfigurieren

sudo apt install ufw

Status der Firewall erfragen (und Regeln anzeigen bei laufender Firewall):

sudo ufw status verbose

Regeln anzeigen wenn Firewall ausgeschaltet ist:

sudo ufw show added

Defaults einstellen:

sudo ufw default deny incoming
sudo ufw default allow outgoing

SSH erlauben:

sudo ufw allow 22   - or -
sudo ufw allow ssh

weiterer Port erlauben:

sudo ufw allow 1984/tcp comment "SSH"

Ein-/Ausschalten der Firewall:

sudo ufw enable|disable

Löschen von Regeln:

sudo ufw status numbered
sudo ufw delete 1