Benutzer-Werkzeuge

Webseiten-Werkzeuge


wetter:raspberry_pi_konfigurieren

Raspberry Pi Grundkonfiguration

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.

Benötigte Ausrüstung

  • Raspberry Pi 2 mit SD-Karte und USB-Stick aus unserem Kapitel Raspberry mit USB-Stick einrichten
  • Netzwerkverbindung zum Raspberry Pi
  • ein SSH-Programm zur Remotverbindung auf den Raspberry Pi (z.B. Putty)

Alternativ ohne Netzwerkverbindung und Remote-Zugriff zum direkten Arbeiten auf dem Raspberry

  • Tastatur und Maus
  • HDMI Monitor
  • HDMI Kabel
  • apt (Benutzung von apt - advanced packaging tool)
  • cron (Benutzung des cron Dienstes)
  • df (Benutzung des df (disk free) Kommandozeilen Programms)
  • fdisk (Benutzung des fdisk (fixed disk) Kommandozeilen Programms)
  • interfaces (Konfiguration der Netzwerkschnittstellen)
  • passwd (Benutzung des passwd Kommandozeilen Programms)
  • resize2fs (Benutzung des resize2fs Kommandozeilen Programms, englische Seite)
  • ssh (Benutzung des ssh Kommandozeilen Programms)
  • touch (Benutzung des touch Kommandozeilen Programms)

Arbeiten als root Benutzer

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.

Einloggen auf dem Raspberry Pi via Remote

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.
logged_in.jpg

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

ssh_datei.jpg
Damit die SSH Funktionalität aktiviert wird, muss ein Reboot durchgeführt werden.

reboot


Partition des USB-Sticks vergrößern

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 

Dateisystem und Partitionen des Raspberry Pi vor der Vergrößerung
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

Ausgabe der aktuellen Partitionstabelle


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): 

Partitionierung abgeschlossen


Wenn wir nun die neue Partitionstabelle anschauen, ist die Partition /dev/sda2 deutlich größer

 command (m for help): p

Neue Partitionstabelle nach der Partitionierung


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

Dateisystem nach der Vergrößerung der Partition


Grundkonfiguration mit dem raspi-config Programm

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 

Änderung des Benutzerpassowrtes


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 

Das Konfigurationsprogramm vom Raspberry Pi

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 


Uhrzeitsynchronisation mit einem NTP Server sicher stellen

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).

Feste IP-Adresse und Nameserver konfigurieren

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


Video-Tutorials zu diesem Abschnitt

Partition des USB-Sticks vergrößern


Raspbian Grundkonfiguration und statische IP-Adresse einrichten



1)
Unter einer Partition (lat. partitio = (Ein)teilung) versteht man einen zusammenhängenden Teil des Speicherplatzes eines physischen oder logischen Datenträgers. Partitionierung ist die Aufteilung bzw. das Anlegen oder Ändern von Partitionen.
wetter/raspberry_pi_konfigurieren.txt · Zuletzt geändert: 2017/03/01 18:28 von schnacki