Raspberry Pi

Aus Mediawiki Ferdinand Gruber
Zur Navigation springen Zur Suche springen

Dieser Artikel erhebt keinen Anspruch auf Vollständigkeit. Ich dokumentiere hier nur meine eigenen Erfahrungen. Es wird beschrieben, wie man ohne einen Monitor an den Raspberry PI anzuschließen, auf diesem die Linux Distribution Raspbian installieren kann.

Achtung: Bitte bedenken, dass durch Unachtsamkeit bzw. mangelhaftes Verständnis der Zusammenhänge Schaden angerichtet werden kann.

Raspbian

Installation

Raspbian ist ein Betriebssystem für den Raspberry PI auf Debian Basis.

  • Download des Raspbian Image
wget https://downloads.raspberrypi.org/raspbian_latest
  • ZIP Datei entpacken
unzip raspbian_latest

Die Datei wird entpackt als

# Beispiel
2017-03-02-raspbian-jessie.img
  • Image auf SD Speicherkarte kopieren

Die Mini SD-Karte in den mitgelieferten SD-Adapter stecken und diesen in ein Kartenlesegerät einstecken.

Den Namen der Gerätedatei ermitteln
fdisk -l

Wir sehen alle am Gerät angeschlossenen Datenträger, darunter sollte nun auch die SD-Karte sein. Das heruntergeladene Image auf die SD-Karte übertragen

Achtung: Im folgenden Beispiel wird angenommen, dass die SD-Karte im System als /dev/sdd erkannt wurde, was wir der Ausgabe von fdisk -l entnommen haben.
dd if=./2017-03-02-raspbian-jessie.img of=/dev/sdd bs=4M
  • Raspberry PI booten

Die SD-Karte in den Raspberry PI einstecken und dann den Raspberry PI mit dem Netzteil verbinden.

Der Raspberry PI bootet und installiert auf der SD-Karte automatisch das Betriebssystem Raspbian. Nach ca. 5 Minuten sollte das erledigt sein.
  • Raspberry PI im LAN finden

Nun können wir testen, ob der Raspberry PI ordnungsgemäß hochgefahren ist, indem wir an unserem PC im LAN folgenden Befehl eingeben:

Das Kommando bezieht sich auf ein LAN, in dem IP Adressen von 10.0.0.0 bis 10.0.0.254 möglich sind.
nmap -sP 10.0.0.0/24

Achtung: Unter Suse ist das Tool nmap nicht vorhanden, also installieren:

zypper install nmap

Wenn in der Ausgabe dieses Befehls drei Zeilen auftauchen, die dem Raspberry PI zuzuordnen sind, dann ist alles ok. Das könnte so aussehen:

Nmap scan report for 10.0.0.72
Host is up (0.00041s latency).
MAC Address: B8:27:EB:D1:B9:20 (Raspberry Pi Foundation)

Folgendes Kommando testet, ob die IP wirklich erreichbar ist:

ping 10.0.0.72

Partitionen

Folgende Partitionen befinden sich nun auf der SD-Karte:

Device         Boot Start      End  Sectors  Size Id Type
/dev/mmcblk0p1       8192    92159    83968   41M  b W95 FAT32
/dev/mmcblk0p2      92160 31176703 31084544 14,8G 83 Linux

Die SD-Karte muss im MSDOS Format partitioniert werden. GPT wird nicht unterstützt.

Aktualisieren

apt update
apt upgrade

Release Upgrade

Ich beschreibe hier den Wechsel von Version Raspbian sttretch nach buster

Zuerst das alte System auf den aktuellen Stand bringen, falls das noch möglich ist.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove

Sicherstellen, dass keine Pakete beschädigt sind.

sudo dpkg --audit
sudo dpkg --get-selections | grep hold

Wenn keine Ausgabe, dann alles okay. Dann Speicherkapazität überprüfen.

df -h

Einige GB sollten verfügbar sein.

Jetzt den Paket Cache leeren.

apt-get clean

Paketquellen anpassen

# /etc/apt/sources.list
deb http://mirrordirector.raspbian.org/raspbian/ buster main contrib non-free rpi
# /etc/apt/sources.list.d/raspi.list 
deb http://archive.raspberrypi.org/debian buster main ui

Paket listchanges eventuell entfernen.

apt-get remove apt-listchanges

Update der Paketquellen

apt-get update

Das ist noch nicht das Update der Version, es werden nur die Paketquellen aktualisiert.

Nun werden die installierten Pakete aktualisiert.

sudo apt-get upgrade

Jetzt wird das ganze System aktualisiert

apt-get dist-upgrade -y

Aufräumen

apt autoremove -y
apt autoclean

SSH aktivieren

Wir brauchen SSH, um an den Raspberry PI heranzukommen.

In neueren Versionen von Raspbian ist es notwendig, SSH explizit zu aktivieren. indem man in der Boot-Partition der SD eine leere Datei mit dem Namen ssh anlegt.
Da wir den Raspberry PI jetzt noch nicht über SSH erreichen können, müssen wir die SD-Karte noch einmal herausnehmen und in den Kartenleser am PC einlegen. Wir sehen, dass es nun zwei Partitionen auf der SD-Karte gibt:
Gerät      Boot Anfang     Ende Sektoren Größe Kn Typ
 /dev/sdd1         8192   137215   129024   63M  c W95 FAT32 (LBA)
 /dev/sdd2       137216 30375935 30238720 14,4G 83 Linux

Die FAT32 Partition, hier /dev/sdd1 ist die Boot Partition des Raspberry PI.

Wir mounten diese Partition
mount /dev/sdd1 /mnt

Dann legen wir eine leere Datei mit dem Namen ssh an und hängen die Prtition wieder aus.

cd /mnt
touch ssh
umount /mnt

Nun nehmen wir die SD-Karte aus dem Kartenleser, stecken sie wieder in den Raspberry PI und schließen das Netzteil an.

  • SSH Verbindung testen

Nach dem Booten sollte der Raspberry PI per SSH erreichbar sein - allerdings nicht als Benutzer root sondern nur als Benutzer pi.

ssh pi@10.0.0.72

Das Passwort des Benutzers pi lautet

raspberry

Passwort für Root

Aus Sicherheitsgründen ist auf Debian Systemen standardmäßig kein root-Passwort definiert - wie von Ubuntu her bekannt.

Man kann aber trotzdem ein root-Passwort vergeben mit
sudo passwd root

SSH Verbindung als Root

  • Authentifizierung über Schlüsselpaare

Will man den Raspberry PI als Benutzer root per SSH erreichen, sollte der Zugang nicht über ein Passwort sondern über Schlüsselpaare erfolgen.

Folgender Artikel beschreibt, wie man SSH über Schlüsselpaare einrichtet: SSH.
  • Authentifizierung über Passwort

Will man aber auch als root eine SSH Authentifizierung über Passwort, dann am Raspberry Pi die SSH Konfiguration ändern:

# /etc/ssh/sshd_config

PasswordAuthentication yes
PermitRootLogin yes
usePAM no

Nun den SSH Server neu starten

systemctl restart ssh.service

Raspbian konfigurieren

Konfigurationstool

raspi-config
  • Grafische Oberfläche abschalten
Bootoptionen | Desktop/CLI | Console

Statische IP Adresse

In den meisten Fällen wird es sinnvoll sein, dem Raspberry PI eine statische IP Adresse zu geben.

Name der Netzwerk Schnittstelle

Für die Konfiguration der statischen Adresse sollte man nicht die alten Bezeichnungen für die Netzwerkadapter eth0 wlan0 verwenden sondern die neuen, sogenannten predictable network names. Die Namen der Schnittstellen erhält man mit

ifconfig

Voraussetzung ist, dass die predictable network names aktiviert sind. Das geschieht mit

raspi-config / Advanced Options

Den Namen der Netzwerk-Schnittstelle braucht man dann für die Konfigurationsdatei /etc/dhcpcd.conf

Konfiguration der statischen IP

sudo pico /etc/dhcpcd.conf

In meinem Beispiel bekommt der Raspberry PI die Adresse 10.0.0.111

Achtung: Die Adresse sollte nicht im AdressPool des DHCP Servers liegen.

Folgendes am Ende der Konfiguration hinzufügen:

# interface eth0
# nicht mehr verwenden

# Beispiel 
interface enxb827ebe91322 
static ip_address=10.0.0.111/24
static routers=10.0.0.138
static domain_name_servers=10.0.0.138

USB Festplatte automatisch in den Standby Modus versetzen

Falls man eine externe HD am Raspberry PI betreiben will und diese nur bei Bedarf eingeschaltet sein soll.

  • hdparm installieren
sudo apt-get update
sudo apt-get install hdparm
  • Power Status der Festplatte überprüfen

Somit sehen wir, ob die Festplatte überhaupt geeignet ist für einen Standby Betrieb.

sudo hdparm -C /dev/sda
  • Die UUID der Festplatte ermitteln
blkid
  • Konfigurationsdatei bearbeiten
pico /etc/hdparm.conf

An das Ende dieser Datei folgendes einfügen:

# Beispiel UUID: f16aec5f-34a8-49fa-8356-ae0c39ca53e8

/dev/disk/by-uuid/f16aec5f-34a8-49fa-8356-ae0c39ca53e8 {
  spindown_time = 240
}
  • Troubleshooting

Anscheinend wird der Standbymodus blockiert, wenn die USB Festplatte über den Automounter eingebunden wurde. Schuld daran ist die grafische Oberfläche Lxde.

Workaraund: Mit raspi-config in den Bootoptionen die GUI deaktivieren - siehe weiter oben im Kapitel Konfiguration.
  • Info

https://linuxundich.de/hardware/festplatten-automatisch-im-betrieb-in-den-standby-schalten/

  • Standbymodus manuell einschalten

Falls aus irgendeinem Grund die Fesplatte nicht automatisch in den Standbymodus geht, kann man per cronjob folgenden Befehl aufrufen:

hdparm -y /dev/sda

Tastaturlayout ändern

Die Localisierung stellt man mit raspi-config ein. Falls das nicht zu einer deutschen Tastaturbelegung führt, so kann man mit folgendem Befehl die Tastaturbelegung ändern:

dpkg-reconfigure keyboard-configuration

SWAP

SWAP als Datei

pico /etc/dphys-swapfile

SWAP file nicht auf SD Card legen sondern auf USB-Festplatte, hier eingehängt unter /media/disk

CONF_SWAPFILE=/media/disk/swap
CONF_SWAPFACTOR=2

SWAP aktivieren

service dphys-swapfile start

SWAP Partition

Sicherheitshalber dphys-swapfile deinstallieren:

sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo update-rc.d dphys-swapfile remove

Dann SWAP Partition in /etc/fstab eintragen

/dev/sda3    swap    swap    defaults   0  0

Troubles

  • Swap verhindert Standby der Festplatte

Folgendes in ein Wartungsscript eintragen bzw. in die crontab

# Beispiel UUID
swapoff UUID="d6bc7fb3-6bab-45f1-b65d-3cd264751665" 
swapon UUID="d6bc7fb3-6bab-45f1-b65d-3cd264751665"

WLAN aktivieren

Der Raspberry PI 3 hat einen WLAN Netzwerkadapter eingebaut.

  • Überprüfen, welche Netzwerke erreichbar sind
iwlist wlan0 scan | grep ESSID
  • Zugangsdaten für Netzwerk(e) hinterlegen
pico /etc/wpa_supplicant/wpa_supplicant.conf

Am Ende dieser Datei SSID und Passwort eintragen

network={
   ssid="TestNetzwerk"
   psk="Mein1SuperGeheimesPasswort!"
}
  • Energiesparmodus deaktivieren
pico /etc/network/interfaces

Folgende zwei Zeilen am Ende der Datei einfügen:

pre-up iw dev wlan0 set power_save off
post-down iw dev wlan0 set power_save on
  • WLAN Adapter starten
ifdown wlan0
ifup wlan0
  • WLAN deaktivieren

Falls man WLAN doch nicht braucht, dann kann man den Adapter nach jedem Bootvorgang deaktivieren, indem man einen Cronjob definiert

crontab -e

Folgendes in die Cron Tabelle eintragen

@reboot sudo ifdown wlan0

Boot

Der Raspberry Pi bootet von einer FAT-Bootpartition, die über /etc/fstab unter /boot eingehängt wird. Es wird nicht der unter Linux übliche Bootmanager grub2 verwendet. In folgende Datei werden Bootoptionen eingetragen.

/boot/cmdline.txt 

Beispiel

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=b210802c-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Die Option net.ifnames=0 ermöglicht die Zuweisung statischer IP Adressen bei Verwendung der Schnittstellenbezeichnungen wlan0 bzw. eth0 Die Kernel-Optionen müssen in einer Zeile stehen.

Filesystemcheck

Das Dateisystem auf der SD Karte kann in Unordnung geraten. Da man es im laufenden Betrieb nicht reparieren kann, ist es sinnvoll, dies nach einem Reboot zu automatisieren. Damit das Dateisystem überprüft wird, muss folgende Option beim Start als Kernel-Parameter übergeben werden:

fsck.mode=force

Beim nächsten Reboot wird nun ein Dateisystem Check durchgeführt.

Achtung

Bei einer großen (externen) Festplatte kann der Filesystem Check lange dauern. Da man ohne Monitor nichts sieht, könnte man glauben, der Rechner bootet nicht ...

MTA installieren

Wir brauchen einen Mailserver, damit uns der Rapberry PI mitteilen kann, was sich so tut in seinem Inneren.

Als Mail Transfer Agent verwenden wir exim4.

Eine Anleitung zu Installation und Konfiguration findet sich hier: Exim

HTTP Server installieren

apt-get update
apt-get install apache2

In Debian-Systemen ist die Document Root des Servers

/var/www/html

ServerName eintragen

# /etc/apache2/sites-available/000-default.conf
ServerName myraspi.mydomain
  • Server starten
service apache2 start
  • HTTP Server automatisch beim Systemstart aktivieren
systemctl enable apache2.service

Datenbankserver Mysql installieren

apt-get update
apt-get install mysql-server

Printserver CUPS

Konfiguration

# /etc/cupsd.conf
DefaultEncryption Never
adduser [BENUTZRR] lpadmin


https://www.elektronik-kompendium.de/sites/raspberry-pi/2007081.htm

https://www.raspberry-pi-geek.de/ausgaben/rpg/2016/05/shell-befehle-fuer-die-administration-von-cups/

Apple Airprint

Damit man mit einem Apple Gerät, wie Iphone oder Ipad über den Raspberry Pi drucken kann, muss am Raspberry Pi das Service <ii>Avahi aktiviert sein. Damit kann

apt-get update
apt-get install avahi-daemon

Avahi testen:

apt-get install avahi-utils
avahi-browse -a

PhpMyAdmin installieren

apt-get update
apt-get install phpmyadmin

Apache2 Direktive hinzufügen:

# /etc/apache2/apache2.conf
Include /etc/phpmyadmin/apache.conf

Die Konfiguration von phpmyadmin ist

/var/lib/phpmyadmin/config.inc.php

PHP Version aktualisieren

Zuerst den PGP key herunterladen

wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -

Nun wird das PHP Repository für raspbian stretch zur Sources Liste hinzugefügt

echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php7.list

dann Update der Repositories

apt update

und jetzt installieren

apt install php7.3

Backup des Raspberry PI

Image der SD Karte

In folgenden Beispielen wird angenommen, dass die SD-Karte als /dev/sdd erkannt wurde.

SD Card aus dem Raspi herausnehmen und mittels Kartenlesegerät mit dem PC verbinden.
  • Image der SD Karte am PC sichern.
dd bs=4M if=/dev/sdd | gzip > /download/iso/raspbian.img.gz 
  • Gesichertes Image auf SD-Karte zurückkopieren
gunzip --stdout /download/iso/raspbian.img.gz | dd bs=4M of=/dev/sdd

Anpassungen nach dem Wiederherstellen

  • HD Bezeichnungen anpassen

Mit blkid die Gerätebezeichnungen der USB Partitionen ermitteln und in /etc/fstab eintragen.

Für die Gerätebezeichnungen unbedingt die UUID verwenden und nicht /dev/sdx
  • Statische IP-Adresse ändern
pico /etc/dhcpcd.conf
  • ID der USB Festplatte eintragen
pico /etc/hdparm.conf

Dies ist notwendig für den Standby Betrieb der Festplatte

  • SSH Schlüssel an diverse Rechner verteilen
ssh-copy-id root@hostname

Dateien sichern mit Rsync

Siehe Artikel Datensicherung

Troubleshooting

Permission Errors

/etc/cron.daily/man-db

Fehlermeldungen:

/usr/bin/mandb: fopen /var/cache/man/fsstnd/5179: Keine Berechtigung
/usr/bin/mandb: fopen /var/cache/man/it/5179: Keine Berechtigung
/usr/bin/mandb: fopen /var/cache/man/gl/5179: Keine Berechtigung
...

Lösung:

chown man /var/cache/man -R

Kein Reboot möglich

Nach Eingabe des Kommandos reboot erscheint die Meldung

Failed to talk to init daemon

Lösung

sudo reboot -f

SD Karte voll

Um problemlos ein Systemupgrade auf die nächste Raspbian Version machen zu können, sind einige GB freier Platz auf der SC Karte notwendig.

Ich habe das Paket wolfram-engine deinstalliert, weil es mehr als 2 GB Platz verbraucht und ich diese Software für meinen Raspberry PI nicht brauche.
apt remove wolfram-engine
apt autoremove

Keine IP Adresse

Trotz Konfiguration des dhcpcd daemon, erhält der Rechner nach dem Boot keine IP Adresse. Dies trat bei mir auf nach dem Upgrade von raspbian stretch auf raspbian buster.

Möglicherweise geht es nachdem man einmal die gewünschte IP Adresse manuelle zugewiesen hat.

# Beispiel
ifconfig eth0 10.0.0.112 netmask 255.255.255.0