In diesem Kapitel geht es um die Grundkonfiguration des Raspberry Pi für unsere Wetterstation. Bis jetzt haben wir den Raspberry Pi 2 mit einer SD-Karte und einem USB-Stick ausgestattet und dafür gesorgt, dass das Betriebssystem Raspbian Jessie auf dem USB-Stick ausgeführt wird. Nun geht es darum, das Betriebssystem für unsere Zwecke aufzusetzen bzw. anzupassen - eben grundlegend zu konfigurieren.
Beim ersten Bootvorgang war mein Raspberry Pi an einen Monitor angeschlossen, daher kenne ich die IP-Adresse des Raspberry Pi in meinem Netzwerk. Alle Konfigurationsschritte erfolgen auf der Textkonsole (der sog. Commandline) des Betriebssystems Raspbian. Das ist bei Linux-Betriebssystemen die übliche Vorgehensweise. Da ich nicht mit einer extra Tastatur und Monitor arbeiten möchte, verbinde ich mich via SSH Remote Zugriff auf den Raspberry Pi - nach der Verbindung kann ich alle Konfigurationsschritte von meinem Rechner aus durchführen. Man kann aber auch direkt auf dem Raspberry arbeiten, das funktioniert genauso.
Alternativ ohne Netzwerkverbindung und Remote-Zugriff zum direkten Arbeiten auf dem Raspberry
Bei vielen der folgenden Konfigurationen kann nur der System-Admin, der Benutzer root
die Befehle und Einstellungen ausführen. Man kann mit dem Benutzer pi
arbeiten, in dem man den Befehlen das Kommando sudo
voranstellt. Dies führt dazu, dass das Kommando als root
ausgeführt wird. Auf dieser Seite gehe ich davon aus, dass als Benutzer root
gearbeitet wird und stelle den Befehlen nicht explizit das sudo
voran.
Man startet auf seinem Rechner den SSH Client (ich benutze Putty unter Windows; bei Linux Systemen funktioniert eine SSH-Verbindung aus der Kommandozeile mit dem Befehl ssh pi@IP-Adresse
) und verbindet sich über das Netzwerk mit dem Raspberry. Dazu benötigt man die IP-Adresse des Raspberry Pi und den Port. In meinem Fall ist das die 192.168.1.12 und der Port 22. Der SSH Dienst ist im Standard bei Raspbian Jessie aktiv, wenn man sich verbindet und alles geklappt hat, meldet sich die Konsole des Raspberry Pi mit einem einfachen login as:
Der Standard.benutzer ist pi
und das Passwort lautet raspberry
, beides geben wir wie folgt ein und sehen dann die Konsole vor uns, so dass wir los legen können.
Achtung! Bei dem Raspbian Lite Image ist der SSH Client nicht automatisch aktiviert bzw. der Pi weißt eine SSH Verbindung zurück. Dieses Problem ist sehr einfach zu lösen, in dem man im Verzeichnis \boot eine Datei namens ssh
anlegt. Dies funktioniert mit dem touch Befehl: touch ssh
.
cd /boot touch ssh
Damit die SSH Funktionalität aktiviert wird, muss ein Reboot durchgeführt werden.
reboot
Das Image des Betriebssystem Raspbian ist so angelegt, dass es auf die kleinst mögliche SD-Karte (4 GB) passt und ausgeführt werden kann. Das führt dazu, dass bei unserem USB-Stick, der 16 GB Speicherplatz hat ungefähr 14 GB momentan ungenutzt bleiben und auch nicht verwendet werden können, da die root-Partition des Betriebssystems nur ca. 3,4 GB groß ist und der Rest des USB-Sticks ungenutzt bleibt. Bei der Verwendung einer SD-Karte kann man mittels des Konfigurationstools raspi-config
über den Eintrag Expand Filesystem
die root-Partition sehr einfach automatisch maximal vergrößern lassen - bei unserer Sonderkonfiguration auf dem USB-Stick funktioniert das nicht. Da müssen wir manuell eingreifen. Zunächst lassen wir uns das Dateisystem anzeigen:
df -h
Um nun die root-Partition zu vergrößern benötigen wir ein Werkzeug zur Partitionierung 1). Raspbian liefert uns dies im Standard mit: fdisk
.
ACHTUNG! Die folgenden Schritte müssen mit Sorgfalt durchgeführt werden! Eine falsche Partitionierung zerstört das Dateisystem!
Wir rufen uns das Partitionierungsprogramm fdisk
mit root-Rechten auf für den Datenträger sda
- das ist unser USB-Stick
fdisk /dev/sda
Nun lassen wir uns zunächst die aktuelle Partitionstabelle anzeigen
command (m for help): p
Wir sehen im Bild oben, dass die Partition /dev/sda2
nur 3,6 GB groß ist. Diese Partition werden wir in den folgenden Schritten auf die maximal mögliche Größe, die der USB-Stick zulässt, vergrößern. Dazu notieren wir uns den Start-Block der Partition (roter Kasten). Diesen müssen wir später wieder exakt angeben.
Als nächstes müssen wir die Partition /dev/sda2
löschen.
command (m for help): d
Partition number (1,2, default 2): 2
Nun legen wir die Partition neu an. Als First sector
geben wir EXAKT! die zuvor ausgelesen Startposition an. Die Endposition wird mittels ENTER
einfach übernommen.
command (m for help): n
Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p
Partition number (2-4, default 2): 2
First sector (2048-31266815, default 2048): 131072
Last sector, +sectors or +size{K,M,G,T,P} (131072-31266815, default 31266815):
Wenn wir nun die neue Partitionstabelle anschauen, ist die Partition /dev/sda2
deutlich größer
command (m for help): p
Das Programm fdisk
hat bis jetzt noch keine Änderungen vorgenommen, die neue Partitionstabelle ist also noch nicht auf den USB-Stick geschrieben und liegt nur im Speicher. Dies tun wir jetzt, wenn wir uns sicher sind, dass wir keine Fehler gemacht haben. Nach dem Schreiben wird das Programm fdisk
beendet. Vorher kommt noch eine Warnung: da der USB-Stick aktiv vom System genutzt wird, kann der Kernel die neue Partitionstabelle erst nach einem Neustart berücksichtigen. Nach dem Schreiben der Partitionstabelle starten wir also den Raspian Pi neu.
command (m for help): w
reboot
Die Partitionstabelle ist jetzt ok, wir müssen aber noch dem Dateisystem sagen, dass es die neue Partitionsgröße verwenden soll.
resize2fs /dev/sda2
Die Kontrolle des Dateisystems zeigt uns, dass alles geklappt hat und wir jetzt den gesamten Speicherplatz des USB-Sticks zur Verfügung haben. Damit ist dieser Schritt erledigt.
df -h
Das Betriebssystem Raspbian hat ein kleines Konfigurationsprogramm, um die Standard-Konfigurationen vorzunehmen. Bevor wir dies tun, ändern wir jedoch zuerst für den User pi
das Standard-Passwort ab. Dies stellt sonst eine Sicherheitslücke dar. Nach Angabe des alten Passwortes geben wir 2x das neue Passwort ein und das Thema ist erledigt.
passwd
Nun kümmern wir uns noch darum, dass wir das Betriebssystem Raspbian mit allen Updates bis zum heutigen Tage versorgen. Das erledigt bei Raspbian der Paket-Manager für uns. Raspbian ist ein Derivat von Debian Linux und benutzt den gleichen Paketmanager. Zunächst muss das Betriebssystem wissen, wie die aktuelle (Software-)Paketliste aussieht, das erledigen wir mit dem folgendem Kommando. Achtung! Hier wird noch kein Softwareupdate im eigentlichen Sinne durchgeführt, sondern nur die Metadaten zu den aktuellen Paketlisten auf Stand gebracht.
apt-get update
Nachdem der Paketmanager auf Stand ist, führen wir das eigentliche Update durch. Das kann -je nach alter der Distribution und Internetgeschwindigkeit- schon mal ein paar Minuten dauern.
apt-get dist-upgrade
Unsere Software und das Beriebssystem sind jetzt auf aktuellem Stand und wir können jetzt das Konfigurationsprogramm raspi-config
starten
raspi-config
Den Punkt 1 haben wir wegen unserem Setup mit dem USB-Stick bereits erledigt, ebenso Punkt 2. Wir wählen direkt Punkt 3 Boot Options
. Dort wählen wir Console Autologin Text console, automatically logged in as 'pi' user
. Damit bootet der Raspberry Pi ab sofort in die Textkonsole und startet nicht das X-Window System mit dem Desktop - den benötigen wir für die Wetterstation nicht und er bindet reichlich System-Ressourcen, die wir an anderer Stelle besser gebrauchen können.
Bei Punkt 4 Wait for network on boot
wählen wir die Option Slow Wait for network connection before completing boot
. Das sorgt dafür, dass der Raspberry beim Booten auf das Etablieren der Netzwerkverbindung wartet. Wir benötigen das Netzwerk in jedem Fall, da wir später Wetterdaten übers Internet publizieren wollen und wir über einen NTP Zeitserver auch sicherstellen müssen, dass der Raspberry die aktuelle Zeit beim Booten bekommt, denn er hat im Gegensatz zu einem normalen PC keine Hardware-Uhr.
Unter Punkt 5 Internationalisation Options
kümmern wir uns um 2 Dinge.
Change Locale
: hier wählen wir aus der Liste de_DE.UTF-8 UTF-8
als Zeichensatz aus. Der Zeichensatz muss mittels der Leertaste
markiert werden, danach drücken wir ENTER
. Dann markieren wir den zuvor ausgesuchten Zeichnsatz als default und bestätigen nochmals mit ENTER
. Danach arbeitet der Raspberry einen Moment.Change Timezone
: hier wählen wir Europe
und dann Berlin
und bestätigen mit ENTER
.
Wer direkt auf dem Raspberry arbeitet und nicht via Remote Zugriff kann unter dem Punkt Change Keyboard Layout
noch für seine Tastatur die korrekte Einstellung konfigurieren.
Alle anderen Optionen lassen wir momentan unberührt und verlassen das Konfigurationsprogramm mit <Finish>
.
Damit die Einstellungen wirksam werden, starten wir den Raspberry Pi neu.
reboot
Wie oben erwähnt hat der Raspberry Pi keine Hardware Uhr. Es ist für unsere Wetteranwendung aber sehr wichtig, dass der Raspberry und die weewx Wettersoftware das aktuelle Datum und die genaue Uhrzeit hat, weil Datum und Uhrzeit der Wetterstation regelmäßig mit dem Raspberry synchronisiert wird (diese würde dann ein falsches Datum und falsche Uhrzeit bekommen) und die Datenbankeinträge ebenfalls einen falschen Zeitstempel bekommen würden. Das führt zu einer inkonsistenten Datenbasis / Datenbank.
Ab der weewx Version 3.4.0 startet die Software nicht, wenn der Raspberry einen Zeitstempel vor dem 01. Januar 2000 hat. Das können wir nutzen, in dem wir sicherstellen, das bei nicht erfolgter NTP Zeitsynchronisation ein sehr altes Datum aufläuft. Dazu müssen wir die „Fake Clock“ des Raspbian deinstallieren, was dazu führt, dass die Raspberry Zeit bei Unix Zeit 0 startet (was Mitternacht, 01.01.1970 entspricht), falls nicht via NTP synchronisiert.
Die Fake Clock kann mittels diesen Befehls deinstalliert werden:
apt-get purge fake-hwclock
Eigentlich muss man jetzt nichts weiter tun, denn der NTP-Dienst (NTP = Network Time Protocol) ist bei Raspbian per default installiert und holt so bei funktionierender Internet-Verbindung die aktuelle Uhrzeit. Nachteilig ist, dass ntp
ständig im Hintergrund läuft und damit Systemressourcen belegt.
Eine Alternative zum NTP-Daemon ist das Programm ntpdate
, das nur einmal Uhrzeit und Datum abruft. Meist genügt es, täglich einmal und nach einen Reboot die Zeit zu aktualisieren, was per Cronjob erledigt werden kann. ntpdate
wird zwar mittlerweile als „deprecated“ geführt, was aber nur bedeutet, dass es nicht mehr weiterentwickelt wird. Wozu auch? Es tut genau, was wir von ihm wollen.
Nun deinstallieren wir den NTP-Dienst und installieren ntpdate
:
apt-get purge ntp apt-get install ntpdate
Anschließend muss noch ein crontab-Eintrag vorgenommen werden, damit ntpdate
regelmäßig automatisch aufgerufen wird. Dazu zunächst die Datei /etc/crontab
mit dem Editor nano
öffnen:
nano /etc/crontab
Es werden 2 neue Zeilen hinzugefügt. Die Erste, damit die Zeit beim Starten des Pi synchronisiert wird, die Zweite, um eine Synchronisierung alle 5 Stunden durchzuführen, wobei der deutsche Zeitserver-Pool verwendet wird:
# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) @reboot root ntpdate -s 0.de.pool.ntp.org 3 */5 * * * root ntpdate -s 0.de.pool.ntp.org #
Mit der Tastenkombination Strg + O
speichern wir die Änderung ab und mit Strg + X
verlassen wir den Editor nano
.
Die Option -s
sorgt dafür, dass ntpdate still sein Werk verrichtet. Zum Testen kann man einmalig direkt bei der physikalisch-technischen Bundesanstalt in Braunschweig anfragen:
ntpdate ptbtime1.ptb.de
Es versteht sich von selbst, dass der Zeitabgleich schief geht, wenn keine Internet-Verbindung vorhanden ist.
Weitere Informationen zum Thema Zeit Synchronisierung kann man auch im weewx Wiki finden (in englischer Sprache).
Im Standard bekommt unser Raspberry Pi bei Anschluss an ein Netzwerk automatische eine IP-Adresse, Netwzerkmaske, Gateway und Nameserver zugewiesen. Da wir später aber immer wieder Remote auf das kleine Gerät zugreifen wollen, ist es besser, eine statische IP-Adresse zu vergeben. Denn über das DHC Protokoll kann bei jedem Bootvorgang theoretisch eine andere IP-Adresse vergeben werden und wenn uns diese unbekannt ist, können wir uns nicht mehr per Fernzugriff auf dem Raspberry anmelden.
Wir müssen lediglich eine Datei ändern, die Datei /etc/network/interfaces
. Diese enthält die Netzwerkschnittstellen Konfigurationen. Wir rufen zunächst mit dem Editor nano
die Datei auf:
nano /etc/network/interfaces
und ersetzen den Eintrag
iface eth0 inet manual
durch den Eintrag
auto eth0 iface eth0 inet static address 192.168.1.12 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 192.168.1.1
Mit der Tastenkombination Strg + O
speichern wir die Änderung ab und mit Strg + X
verlassen wir den Editor nano
. Natürlich müssen für andere Netzwerke die address, netmask, gateway und dns-nameservers entsprechend angepasst werden.
Damit haben wir eine feste IP Adresse für das Ethernet Interface eth0 konfiguriert. Um Systemressourcen zu sparen, deaktivieren wir jetzt noch den DHCP-Dienst auf dem Raspberry Pi:
service dhcpcd stop systemctl disable dhcpcd
Damit alle Einstellungen wirksam werden, muss ein Neustart unseres Systems durchgeführt werden.
reboot
Partition des USB-Sticks vergrößern
Raspbian Grundkonfiguration und statische IP-Adresse einrichten