Menuebild


Forum






Impressum   

Raspberry PI Teichsteuerung Eigenbau

 

In dem folgenden Artikel wird erklärt wie man mithilfe eines Mini-PCs, in diesem Fall einem Raspberry Pi (kurz RasPi), eine Teichsteuerung realisieren kann.

Für das Projekt Teichsteuerung im Selbstbau werden benötigt:

- Der Raspi

- Ein Netzteil

- Eine hochwertige SD-Karte

- Ein Gehäuse, sofern der RasPi nicht anders untergebracht wird

Sofern nicht bereits in einer Wühlkiste enthalten, sollte man auch diese Dinge besorgen:

- Ein HDMI-Kabel (wird nur für die Einrichtung benötigt)

- USB-Tastatur und -Maus (wird nur für die Einrichtung benötigt)

- Ein Netzwerkkabel (wird nur für die Einrichtung benötigt, wenn man sich für WLAN entscheidet.)

Sofern eine WLAN-Verbindung vorgesehen ist, wäre es kein Fehler, einen WLAN-Stick mit zu bestellen.

Kurzer Warnhinweis: Der Raspberry Pi ist eine Bastellösung und wird auch immer eine Bastellösung bleiben. Eigene Handgriffe werden immer erforderlich sein. Wer eine Plug&Play-Lösung sucht, wird am Markt auch fündig. Einige Anbieter solcher Fertiglösungen sind hier im Forum aktiv und werden gerne weiterhelfen.

Hier möchte ich Euch zeigen, wie ich diesen kleinen Freund für den Einsatz am Teich fit mac

Ersteinrichtung & Installation

 

Am Anfang steht die Ersteinrichtung. Eine sehr gute Anleitung wie man den RasPi einrichtet, findet ihr auf der Seite "www.raspiprojekt.de" . Auch findet ihr hier eine komplett vorkonfigurierte SD Karte, mit der sofort mit Schritt 4 von 5 dieser Anleitung eingestiegen werden kann.

Den Raspi zuerst an den HDMI-Eingang eines Fernsehers oder Monitors anschließen, Tastatur und Maus ran, Netzwerkkabel anschließen und zuletzt das Netzteil einstecken! Der Raspi startet sofort - er hat keinen separaten Schalter.

Wichtig sind diese Punkte:

- Expand Filesystem (Kann beim vorkonfigurierten System entfallen)

- Change User Password

- Internationalisation Options -> Change Locale

- Internationalisation Options -> Timezone

- Advanced -> Hostname, sofern man mehrere Raspis betreiben möchte

- SSH eingeschaltet lassen!

Einstellungen für Bildschirmausgabe sowie Tastaturlayout sind für einen Rechner, der hauptsächlich fernbedient wird, eher Zeitverschwendung.

Mithilfe dieses Befehles:

ifconfig

lässt sich eine Ausgabe auf den Bildschirm zaubern aus der die IP-Adresse unseres Raspis erkennbar wird.

Mit Hilfe der Konsole eines Linux-Rechners (oder mit dem Terminal vom Mac) lässt sich der Raspi ab sofort fernbedienen:

ssh pi@aaa.bbb.ccc.ddd

Hier muss natürlich die gerade herausgefundene IP-Adresse eingesetzt werden. Freunde von Windows bemühen einfach das Programm Putty, mit dem dasselbe gemacht werden kann.

Inzwischen können wir uns als Benutzer pi am RasPi anmelden. Pi darf Vieles, aber nicht alles. Gerade Arbeiten an der Konfiguration sind einem anderen Benutzer vorbehalten. Er heißt root, ist auf dem RasPi Chef und so etwas wie der Administrator in Windows. Sind Befehle abzurbeiten, die alle eingeben dürfen, ist nichts weiter zu beachten. Arbeiten wir jedoch mit Befehlen, die nur root darf, so haben wir vorerst zwei Möglichkeiten:

a) Vor jeden Befehl schreiben wir

sudo

(Umständlich, doch gern praktiziert)

b) Wir verwandeln uns in den Superuser root. Dazu gibt der Benutzer pi einen speziellen Befehl ein:

sudo su

Man merkt schon an der Farbe am Zeilenanfang - es hat sich etwas verändert. Wir dürfen nun quasi alles, theoretisch auch unsere mühsam eingerichtete SD-Karte zerstören. Also Vorsicht!

c) Wir vergeben an root ein seeehr sicheres Kennwort und erlauben es, dass sich root über SSH von der Ferne an unserem Raspi anmeldet. Dazu geben wir den folgenden Befehl ein:

sudo su

Sind wir zum Superuser geworden, so können wir ihm ein eigenes Kennwort geben. Dazu erteilen wir den Befehl:

passwd

Nun muss das Kennwort zur Sicherheit vor Tippfehlern zweimal (unsichtbar) eingegeben werden. Zwecks Fernbedienung hatten wir SSH an gelassen und sollten das keinesfalls ausschalten. In allen Betriebssystemen kann ich mich nun sowohl als Benutzer root, als auch als Benutzer pi an meinem Raspi melden.

Egal, wie Ihr Euch nun root-Rechte verschafft habt, nun installiert man mit folgenden Befehlen Software nach, die wir später brauchen werden.

Nach Variante a muss der Benutzer pi diese Zeilen eingeben:

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install joe

sudo apt-get install mysql-server

sudo apt-get install apache2

sudo apt-get install phpmyadmin

sudo apt-get install subversion

sudo apt-get install lynx

Variante b geht so:

sudo su

apt-get update

apt-get upgrade

apt-get install joe

apt-get install mysql-server

apt-get install apache2

apt-get install phpmyadmin

apt-get install subversion

apt-get install lynx

Künftig werde ich Euch nur noch Variante b vorstellen.

Hin und wieder erscheinen während der Installation Fragen. Die voreingestellten Vorschläge kann man üblicherweise akzeptieren. Sollte man auch, denn es werden Pakete vorgeschlagen, die für das Funktionieren der Teichsteuerung ebenso wichtig sind.

Für den mysql-server muss ein weiteres starkes Kennwort festgelegt werden, das für den Superuser in MySQL gilt. Es darf verschieden vom Kennwort des Linux-root sein, muss es aber nicht. Hauptsache, es wird nicht verwechselt. Bei der Installation von phpmyadmin gibt man an, dass wir mit apache2 arbeiten. Mit Leertaste den Punkt apache2 bestätigen dann OK, anschließend wird man genau nach diesem Kennwort gefragt, das bei der MySQL-Installation eingegeben worden ist. Das zweite Kennwort muss man nicht eingeben, kann es leer lassen. Die Installationsroutine erzeugt ein geeignetes Kennwort, das wir nicht wissen müssen.

Wer oder was ist joe ?

Möglicherweise hat sich der eine oder andere schon gewundert, welche Software da als Erstes installiert worden ist. Es handelt sich um einen Texteditor, der auf der Linux-Konsole verwendet werden kann. Da ich weder mit nano, noch mit vi richtig warm geworden bin, pflege ich, diesen Texteditor zu verwenden. Das liegt auch daran, dass ich seit etwa 30 Jahren schon mit Programmen umging, das Wordstar sehr ähnlich sind und deren wichtigster Befehlssatz mir einigermaßen geläufig ist. de.wikipedia.org/wiki/Joe_(Texteditor) www.linuxmaterial.de/tab/joetab.shtml Wohl gemerkt ist das meine persönliche Vorliebe. Selbstverständlich gibt es neben den beiden genannten Editoren noch einen Haufen weitere Editoren, die hier ebenso gut eingesetzt werden können. Wer aber mit Texteditoren auf der Linux-Konsole nichts am Hut hat und lieber die Maus schubst, kann das inzwischen gerne einrichten.

Das Programm Apache2 wird unser Webserver, den wir benötigen, um aus dem Internet oder Netzwerk auf unsere Daten zugreifen zu können.

Der MySQL-Server ist so etwas wie ein riesengroßer Notizzettel. Dieses Programm ist dazu gedacht, große Datenmengen in Datenbanken und Tabellen zu verwalten und auf Anfrage wieder herauszurücken. Der Benutzer hat selbst kaum direkten Kontakt zu diesem Server, sondern greift nur indirekt darauf zu. Zum Beispiel mit phpmyadmin oder der hier entstehenden Steuerungssoftware.

Als nächstes hatte ich die Installation von phpmyadmin empfohlen. Das geschah aus zwei Gründen, erstens benötigen wir diesen zur Ersteinrichtung der Datenbank, zweitens wird anlässlich dieser Installation noch die Installation von diversen anderen Paketen empfohlen. PHP und diverse Bibliotheken und Erweiterungen, die für die Teichsteuerung ohnehin benötigt werden. Dafür reichte in diesem Fall der eine Befehl aus.

Mit Hilfe von Subversion wird der Programmcode der Teichsteuerung verwaltet. Sowohl hier auf Lothars Server läuft Subversion mit der Bibliothek die ihre Dienste anbietet. Auf dem Raspi wird Subversion nur als Client benötigt, um die Steuerungssoftware zu installieren und auf dem aktuellen Stand zu halten.

Programmierer stellen damit noch mehr an, sie verwalten damit einzelne Entwicklungszweige der Software.

Und letztendlich musste noch lynx installiert werden. Das ist ein Webbrowser, der auf der Konsole funktioniert.,

Für den Fernzugriff von einem Windows-Host aus kann man entweder Putty oder WinSCP benutzen, in WinSCP ist sogar ein integrierter Texteditor dabei, die die Verwendung der Maus und der eigenen Zwischenablage zulässt. winscp.net/eng/docs/lang:de

Zur Sicherheit stelle ich hier noch einmal zusammen, welche Kennworte wir bisher vergeben haben:

1. Für den Linux-Benutzer pi - das erste Kennwort bei der Installation, noch am HDMI-Bildschirm

2. Für den Linux-Benutzer root

3. Für den MySQL-Benutzer root, das wurde während des Installationsvorganges vom MySQL-Server angelegt.

4. Für den MySQL-Benutzer teich, dieses Kennwort werden wir später noch anlegen.

5. Für den MySQL-Benutzer phpmyadmin, das nur interne Verwendung findet und uns nicht bekannt sein muss. (Wir hatten die Eingabe bei der Installation leer gelassen.)

Alle fünf Benutzer wissen nicht viel über einander. Auch wenn die Chefs in Linux und in MySQL beide root heißen, sind das zwei verschiedene Benutzer, die verschiedene Kennworte haben dürfen, aber nicht müssen. Nur verwechseln darf man diese Benutzer nicht.

Warnung: Insbesondere die Leute, die in Erwägung ziehen, ihre Fritzbox oder ihren Router für den weltweiten Zugriff auf den Raspi einzurichten, sollten hier sehr starke Kennworte wählen, in denen nicht nur Buchstaben, sondern auch Ziffern und Sonderzeichen vorkommen. Tante Google ist sehr gesprächig, wenn sie nach Regeln für starke Kennworte befragt wird.

Netzwerkeinstellungen

 

Weiter geht es mit den Netzwerkeinstellungen.

Wir bearbeiten als Linux-root die Datei

/etc/network/interfaces

Befehl:

joe /etc/network/interfaces

a) Die Ethernetschnittstelle mit dem Netzwerkkabel: Üblicherweise steht bereits in der Datei:

iface eth0 inet dhcp

Damit wird vom Router eine IP angefordert und verwendet. Diese könnte täglich wechseln, was lästig ist. Der Raspi kann sich auch selbst eine Adresse geben. Dann kommentieren wir diese Zeile mit einer Raute aus und ersetzen sie durch diese Angaben:

#iface eth0 inet dhcp

iface eth0 inet static

address 192.168.1.50

netmask 255.255.255.0

network 192.168.1.0

broadcast 192.168.1.255

gateway 192.168.1.1

(Die Adressen müssen natürlich auf das eigene Netzwerk angepasst werden.)

b) WLAN-Stick Standardmäßige Einstellungen für manuelle Verbindungsaufnahme - für uns schlecht geeignet!

allow-hotplug wlan0 iface

wlan0 inet manual

wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

Daher verwenden wir folgende Einstellungen :

allow-hotplug wlan0 iface

wlan0 inet static

address 192.168.1.51

netmask 255.255.255.0

gateway 192.168.1.1

broadcast 192.168.1.255

dns-nameservers 192.168.1.1

wpa-ssid "mein-wlan-name"

wpa-psk "geheimer_schluessel"

wpa-proto RSN wpa-key_mgmt

WPA-PSK

wpa-pairwise TKIP

wpa-auth_alg OPEN

Damit sollte der Raspi nach seinem Start selbständig Verbindung zum WLAN aufnehmen. Wenn das Netzwerk so schön funktioniert, macht es viel Spaß, den Raspi vom Laptop oder Computer zu bedienen.

Zum Überprüfen ob phpmyadmin richtig installiert wurde gebt ihr folgende Adresse in euren Browser ein:

192.168.1.50/phpmyadmin

Wir erinnern uns: Anfangs hatten wir phpmyadmin installiert. Dabei wurden wir gefragt, welche Webserver konfiguriert werden sollen. Der rote Cursor stand zwar bei "apache2", aber diese Option musste mit einem Stern (Druck auf die Leertaste) markiert werden, damit sie wirksam ist. Hat man das vergessen, dann wird man die Datei /etc/apache2/conf.d/phpmyadmin.conf nicht vorfinden und obiger Link wird nicht funktionieren

Datenbankkonfiguration

 

Nun wird es Zeit, die Datenbank für unsere Zwecke zu konfigurieren, die unsere Voreinstellungen und vorläufig unsere Messwerte aufnehmen soll. Wer der Router so konfigurieren will, dass man den Raspi auch von außen, also von der Arbeit oder aus dem Urlaub erreicht, so empfehle ich eine kleine Vorsichtsmaßnahme vor ungebetenen Gästen, die sonst etwas in der Datenbank veranstalten können. Wer den Raspi nur im internen Heimnetz verwenden möchte, kann mit der Anmeldung weiter machen.

Schnelle Möglichkeit: Wir öffnen mit root-Rechten die Datei

/etc/apache2/conf.d/phpmyadmin.conf

Das machen wir entweder in unserer grafischen Oberfläche mit WinSCP oder auf der Konsole mit dem Befehl:

joe /etc/apache2/conf.d/phpmyadmin.conf

Weit oben in der Datei finden wir diese Zeile:

Alias /phpmyadmin /usr/share/phpmyadmin

Diese Zeile ändern wir geringfügig ab, zum Beispiel indem wir eine schöne lange Nummer an die Adresse anhängen, Ihr nehmt natürlich eine andere!

Alias /phpmyadmin47114711 /usr/share/phpmyadmin

Mit dem Kommando Strg-K X wird gespeichert und der Editor verlassen.

Der Webserver wird nun darüber informiert, dass wir ihn neu konfiguriert haben. Dazu dient das Kommando

apache2ctl restart

Nun können wir uns an die Datenbankkonfiguration machen.

Dazu geben wir in den Browser die IP des Raspis ein, die wir ihm gegeben hatten. Als Pfadangabe schreiben wir die soeben festgelegte Angabe dahinter. Für das Konfigurationsbeispiel, das ich Euch hier aufgeschrieben hatte, gilt diese Adresse:

192.168.1.50/phpmyadmin47114711

Ein Angreifer müsste die richtige Adresse erst einmal erraten. Sehr schwer, aber nicht ganz unmöglich. Konsequente Möglichkeit: Es gilt natürlich der Spruch: "Obscurity is not security!" Wer es etwas sicherer mag, arbeitet diese Anleitung ab:

de.selfhtml.org/servercgi/server/htaccess.htm

Anmeldung:

Anmelden darf sich natürlich nur der Chef. Das ist in der Datenbank der Benutzer root mit seinem Kennwort, das er gleich mal ausprobiert. Er hat aber nicht viel zu tun. Nur ein Benutzer und eine Datenbank muss angelegt werden.

Klick auf "Rechte"

Klick auf "Neuen Benutzer anlegen"

Der neue Benutzer wird "teich" (klein geschrieben) heißen.

Er kann sich nur lokal anmelden, das reicht.

Für das Kennwort müssen wir uns nicht den Kopf zermartern. Wir klicken auf "Generieren" und erhalten ein Kennwort, das für unsere Zwecke sicher genug ist. Dieses Kennwort müssen wir unbedingt kopieren und an sicherer Stelle speichern! Tun wir das jetzt nicht, werden wir es nie wieder sehen.

Eine Datenbank erstellen wir gleich mit. Wir markieren "Erstelle eine Datenbank mit gleichem Namen und gewähre alle Rechte".

Weiter unten könnte man dem neuen Benutzer noch weitere Rechte einräumen. Machen wir aber nicht, weil er diese nicht brauchen wird.

Mit einem Klick auf "Erzeuge Benutzer" wird der Benutzer und die dazu gehörige Datenbank angefertigt.

Mehr ist in der Datenbankadministration nicht mehr zu tun.

Installation der Steuerungssoftware

 

Zuerst müssen wir dafür sorgen, dass wir als pi Webseiten auf unserem Webserver hochladen und verändern dürfen. Vorerst fehlen uns dafür die Schreibrechte. Wir melden uns als root auf der Konsole an. Es ist gleichgültig, ob das per HDMI am Fernseher, über putty von Windows her oder mittels ssh-Befehles von der Konsole eines anderen Linux-Rechners. Diese Befehle muss root geben:

chgrp -R pi /var/www/

chmod -R g+w /var/www/

Ab sofort dürfen wir als Benutzer pi den Webauftritt, den unser Raspi präsentiert, verändern. Rootrechte werden dafür nicht mehr erforderlich sein.

Die nächsten Schritte führen wir lieber als pi aus und nicht als superuser root. Ansonsten gehören die Dateien dem Chef und das würde im Laufe der Zeit lästig...

Ich war so frei und habe Lothars Server ein wenig aufgebohrt, so dass er ab sofort auch als Subversionsserver dient. Das Paket subversion wurde ja bereits in einem der ersten Schritte auf Eurem Raspi installiert, bisher noch nicht verwendet.

Das Archiv findet Ihr bei  svn.koi-gehlhaar.de/steuerung

Es lässt sich zwar mit einem Browser einsehen und die Software könnte mühsam heraus kopiert werden, aber es soll ja einfach gehen. Die Teichsteuerungssoftware installiert man als pi mit dem Befehl:

svn checkout svn.koi-gehlhaar.de/steuerung/stamm/ /var/www/steuerung

Sie ist aber noch nicht nutzbar, denn es kommt noch keine Verbindung zur Datenbank zustande. Das ist Absicht. Die individuelle Datenbankkonfiguration muss jeder selbst eingeben und darf naturgemäß nicht Bestandteil der Versionsverwaltung mit Subversion sein. Wir erzeugen noch die Datei mit unserer Datenbankkonfiguration.

joe /var/www/steuerung/quellen/rechnerdaten.php

Der Editor merkt sofort, dass eine neue Datei angelegt wird. Es wird dieser Code-Block kopiert und in die neue Textdatei eingefügt.

<?php

if ( !defined('IN_PHP') ) { echo ("Hacking Versuch");   exit; }

$dbhost         =   'localhost';

$dbuser         =   'teich';

$dbpasswd      =   'Das_Kennwort_von_teich';

$g_str_rot13   =   1;

?>

Jetzt tragen wir das vorhin kopierte Kennwort des Datenbankbenutzers 'teich' an der gekennzeichneten Stelle ein, das wir uns gespeichert hatten. Der Editor joe speichert die Datei mit Strg-K X. (Wer einen anderen Editor verwendet, kein Problem. Aber dann weiß man selbst, wie man damit speichert.) Alles klar zum Steuern! (oder fast) Gebt mal die IP Eures Raspis und dahinter /steuerung in Euren Browser ein! in etwa so:

192.168.1.50/steuerung

Und nun möchte ich Euch mal zeigen, wie ein Update der Software durchgeführt wird. Diese Teichsteuerung soll schließlich als Gemeinschaftswerk zusammen gestellt werden. Und wenn sich Verbesserungen ergeben haben, wenn Fehler ausgebessert wurden, so will ja jeder möglichst schnell davon profitieren.

Wir melden uns als pi auf der Konsole an. Root-Rechte sind nicht erforderlich, eventuell sogar störend. Dann ist dieser Befehl einzugeben:

svn update /var/www/steuerung

Es wird kurz angezeigt, was sich geändert hat. Fertig ist die Aktualisierung.

Konfiguration eines Temperatursensor DS18B20

 

Ich habe folgende PINs vom Raspi verwendet:

PIN 1 - liefert 3,3V

PIN 6 - liefert GND

PIN 7 - dient als GPIO 4

Den von Paulinchen empfohlenen Kondensator habe ich noch nicht einglötet, mir aber inzwischen einige Exemplare davon gekauft. Wer es mag, kann so ein Ding gleich mit einlöten.

Wir verschaffen uns root-Rechte und kopieren diese Datei an ihren vorgesehenen Platz. Anschließend erhält die Datei noch die richtigen Berechtigungen.

cp /var/www/steuerung/quellen/w1bus /etc/init.d/w1bus

chown root:root /etc/init.d/w1bus

chmod 0755 /etc/init.d/w1bus

update-rc.d w1bus defaults

(Wer einen anderen als PIN 7 als GPIO verwenden möchte, muss es in dieser Datei ändern.)

Nach einem Neustart des Systems sollte der 1-wire-Bus sofort einsatzbereit sein.

Konfiguration des CRON

 

Einen Schritt muss ich Euch noch genau instruieren. Bisher wird die Software nur tätig, wenn jemand auf einen Menüpunkt oder einen Link klickt. Macht das niemand, langweilt sich der Raspi. Das geht nicht am Teich, er soll in jeder Minute wachsam sein! Wir brauchen jemanden, der laufend auf einen Link klickt und die Steuerungssoftware aufruft, denn verständlicherweise will der Teichfreund nicht 24 Stunden täglich beobachten, er muss ja irgendwann auch das Geld für den Raspi und die Sensoren verdienen!

Glücklicherweise lebt im Raspi ein Dämon, der CRON (http://de.wikipedia.org/wiki/Cron) genannt wird. Er schläft eigentlich die meiste Zeit. Nur einmal in der Minute wacht er auf und schaut in seiner Aufgabenliste nach, ob schon wieder etwas zu tun ist. Hier wird das für Einsteiger bildhaft erläutert (http://www.drweb.de/magazin/cron-jobs-fuer-einsteiger-bildhaft-erklaert-via-sheldon-cooper/). Wir geben ihm in jeder Minute etwas zu tun - er soll unsere Steuerung anstupsen.

Für diesen CRON wurde eine eigene, spartanische Webseite angefertigt. Im Wesentlichen passiert zwar dasselbe, als ob man auf "CronJob" im Menü klicken würde. Aber es wird nur das Allerwesentlichste angezeigt. Wer sich einmal langweilen mag, klickt hier (IP-Adresse des eigenen Raspis einsetzen!):

192.168.1.50/steuerung/cronaufruf.php

Wir bitten nun CRON, mit dem Browser lynx, den ich bereits kurz vorgestellt hatte, in jeder Minute einmal den spartanischen Teil der Steuerungssoftware aufzurufen. Bei dieser Gelegenheit finden Messungen und Routinearbeiten statt. Und für das, was ausgegeben wird, interessiert sich ohnehin nicht wirklich jemand.

Verschaffen wir uns auf der Konsole Rootrechte! Und dann legen wir eine neue Datei an, deren Name ist eigentlich egal:

joe /etc/cron.d/teich

In diese neue Datei wird folgender Inhalt kopiert:

# /etc/cron.d/teich: crontab fragment fuer die Teichsteuerung

#  Diese Datei ruft in regelmaessigen Abstaenden die Teichsteuerung auf.

* * * * * pi lynx -dump localhost/steuerung/cronaufruf.php >/dev/null 2>&1

Achtung: Am Ende der Datei müssen ein bis zwei Leerzeilen geschrieben werden, sonst funktioniert es nicht!

Mittels STRG^K - X wird gespeichert und der Editor verlassen. Ab sofort weiß CRON, was zu tun ist. Zu jeder vollen Minute wird cronaufruf.php aufgerufen. Die Teichsteuerungssoftware entscheidet dann, ob gerade etwas zu tun ist oder nicht. Aber wir sehen und merken nichts von dieser Aktivität. Nur das Vorhandensein von immer neuen Messwerten lässt uns erkennen, dass CRON gearbeitet hat.

Konfiguration der Log-Dateien

 

Wenn das alles geklappt hat, sollte der CRON fleißig arbeiten. Aber nun müssen wir unsere schützende Hand über unseren Raspi, speziell über unsere SD-Karte halten. In Linux wird nämlich eine große Menge an Informationen in Protokolldateien geschrieben. Das ist bei der Fehlersuche sehr hilfreich, hier im konkreten Falle störend, weil es laufend unnötige Schreibzugriffe auf die SD-Karte verursacht. Schauen wir uns das mal an. Der Benutzer root gibt diesen Befehl:

tail -f /var/log/apache2/access.log

Weil wir den Parameter -f eingegeben haben, lohnt es sich, den Schwanz dieser Logdatei mehr als eine Minute lang zu beobachten. Wenn es nach einigen Minuten langweilig wird, drückt man Strg-C und ist wieder in der Konsole.

127.0.0.1 - - [30/Jul/2014:10:56:02 +0200] "GET /steuerung/cronaufruf.php HTTP/1.0" 200 262 "-" "Lynx/2.8.8dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.18"

127.0.0.1 - - [30/Jul/2014:10:57:01 +0200] "GET /steuerung/cronaufruf.php HTTP/1.0" 200 333 "-" "Lynx/2.8.8dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.18"

127.0.0.1 - - [30/Jul/2014:10:58:01 +0200] "GET /steuerung/cronaufruf.php HTTP/1.0" 200 262 "-" "Lynx/2.8.8dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.18"

127.0.0.1 - - [30/Jul/2014:10:59:01 +0200] "GET /steuerung/cronaufruf.php HTTP/1.0" 200 262 "-" "Lynx/2.8.8dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.18"

127.0.0.1 - - [30/Jul/2014:11:00:01 +0200] "GET /steuerung/cronaufruf.php HTTP/1.0" 200 262 "-" "Lynx/2.8.8dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.18"

127.0.0.1 - - [30/Jul/2014:11:01:02 +0200] "GET /steuerung/cronaufruf.php HTTP/1.0" 200 262 "-" "Lynx/2.8.8dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.18"

127.0.0.1 - - [30/Jul/2014:11:02:01 +0200] "GET /steuerung/cronaufruf.php HTTP/1.0" 200 262 "-" "Lynx/2.8.8dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.18"

127.0.0.1 - - [30/Jul/2014:11:03:01 +0200] "GET /steuerung/cronaufruf.php HTTP/1.0" 200 353 "-" "Lynx/2.8.8dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.18"

127.0.0.1 - - [30/Jul/2014:11:04:01 +0200] "GET /steuerung/cronaufruf.php HTTP/1.0" 200 262 "-" "Lynx/2.8.8dev.12 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.18"

Das ist es doch, was wir schon immer wissen wollten!

Spaß beiseite! Diese Zeilen wird sich ganz sicher niemand freiwillig durchlesen. Warum also aufzeichen?

Und was noch viel schlimmer ist: Diese Zeilen versperren uns den Blick auf die Dinge, die wirklich wichtig sind. Also bitten wir unseren Webserver apache, auf diese entbehrlichen Protokollnotizen zu verzichten.

Wir haben ja noch root-Rechte auf der Konsole.

joe /etc/apache2/sites-available/default

Wir finden darin diese Zeile:

CustomLog ${APACHE_LOG_DIR}/access.log combined

Die wird ausgetauscht gegen diese Zeilen:

# Mark requests from the loop-back interface

   SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog

   CustomLog ${APACHE_LOG_DIR}/access.log common env=!dontlog

Nach einem Neustart des Webservers ( root befiehlt apache2ctl restart ) werden die Aufrufe, die vom Raspi selber kommen, nicht mehr protokolliert. Zugriffe auf die Steuerung von anderen Rechnern werden aber weiterhin aufgezeichnet. Sofern jemand auch andere Zugriffe ausblenden möchte, können an dieser Stelle weitere Bedingungen eingegeben werden. Heute verzichten wir darauf.

Nächste Baustelle: die Fehlerdatei des Webservers. Fehler sollen bei unserer Bastelei lieber im Browser angezeigt werden, nicht in die Logdatei eingeschrieben werden. Root bearbeitet diese Datei:

joe /etc/php5/apache2/php.ini

Wir müssen weit hinunter rollen, etwa in Zeile 500 finden wir diese Einstellung:

log_errors = On

Das wollen wir natürlich nicht, also "Off".

Nach einem erneuten Neustart des Webservers wird an dieser Stelle wesentlich weniger geloggt.

Dritte Baustelle: Das System selber loggt verschiedene CRON-Aufrufe in einer Logdatei, was sich bei uns in manchen Fällen als überflüssig heraus stellt. Deshalb erzeugt root eine neue Datei:

joe /etc/rsyslog.d/discard.conf

Es wird dieser Inhalt einkopiert:

:rawmsg, ereregex, "/USR/SBIN/CRON.* CMD .*lynx" ~

:rawmsg, ereregex, "/USR/SBIN/CRON.* info .*No MTA installed" ~

:rawmsg, ereregex, "/USR/SBIN/CRON.* CMD .*/usr/lib/php5/maxlifetime" ~

:rawmsg, ereregex, "/USR/SBIN/CRON.* CMD .*/etc/cron.hourly" ~

Gesichert und das Loggen neu gestartet. Root befiehlt dazu:

/etc/init.d/rsyslog restart

Ein Neustart des Raspis hätte es auch getan.

Fehlerbehebung

 

Update funktioniert nicht? Was nun?

 

Die Art, wie man zu dieser Software kommen kann, habe ich versucht, mit Hilfe von Subversion sehr robust zu gestalten. Insbesondere dann, wenn man eine Datei verändert hat, meldet Subversion einen Konflikt beim Update. Das ist auch sinnvoll, denn schließlich soll die (möglicherweise nützliche) Veränderung nicht durch ein Update überschrieben werden. Bei einem solchen Konflikt kann man die veränderte Datei entfernen, das Update durchführen und erhält jederzeit wieder eine rekonstruierte Datei im aktuellen Zustand. Außer dem Verzeichnis /var/www/steuerung/.svn/ und der eigenen Datei /var/www/steuerung/quellen/rechnerdaten.php darf jede Datei rigoros gelöscht werden, da die Software durch einen Updatebefehl jederzeit wiederherstellbar ist.

Wenn alles nichts hilft, muss man noch lange nicht die SD-Karte platt machen und alles neu installieren. Zuerst stellt man die Datei rechnerdaten.php, die das individuelle Kennwort der Datenbank enthält, irgendwo sicher, was man ohnehin schon längst getan haben sollte. Anschließend entfernt man das Verzeichnis /var/www/steuerung/ komplett, wobei ein Umbenennen des Verzeichnisses schon reicht.

Nun können wir erneut ein Verzeichnis auschecken. Der Befehl

svn checkout svn.koi-gehlhaar.de/steuerung/stamm/ /var/www/steuerung

zaubert uns bekanntlich einen jungfräulichen Ordner mit der Steuerungssoftware an die richtige Stelle. Die Datei rechnerdaten.php an die richtige Stelle kopiert und weiter gehts!

Downgrade der Steuerungssoftware

 

Falls man von der aktuellen Version zu einer älteren zurückkehren möchte bieten sich folgende Befehle an:

svn update /var/www/Steuerung -r 76

oder

svn checkout -r 76 svn.koi-gehlhaar.de/steuerung/stamm/ /var/www/historisch

 
 
Zitieren von Texten aus dieser Enzyklopädie ist ausdrücklich erwünscht, jedoch nur mit Quellenangabe zulässig.