Raspberry Pi
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
Zur statischen IP-Konfiguration öffnet man die Datei /etc/dhcpcd.conf.
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 in diese Datei am Ende 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
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