Bord-Computer: Raspberry PI inkl. Dienste

Sicherlich lässt sich dies alles recht einfach mit einem Laptop realisieren. Doch hat der Laptop an Bord meiner Meinung nach folgende Nachteile:

  •  relativ hoher Stromverbrauch
  • sicherer Standort ist nicht immer gegeben (vor allem bei Kleinkreuzern)

Daher viel die Wahl schnell und leicht auf einen Raspberry PI. Dieser Mikrocomputer bietet ausreichend Performance um die aufgeführten Anforderungen umzusetzen.

System-Dienste

Diese sind sowohl Voraussetzung für die teilweise Umsetzung der Anforderungen und sollen einen möglichst automatisiertes Handling des Systems gewährleisten. Hierzu zählen folgende Dienste

  • Datenbereitstellung: Webserver, FTP-Server, VNC-Server, NFS-Server
  • Datenbank
  • Datenverarbeitung: Backup
  • autom. Verarbeitung: Cronjob

Aufgrund der verschiedenen Dienste und OpenCPN (s.u.) sollte es schon ein Raspberry PI 3 b+ sein. Gerade OpenCPN benötigt zur Darstellung der Karten und Overlays schon etwas RAM.

Hardware:
Raspberry PI 3 b+, SD-Karte 16GB, Tastatur USB, Maus USB, Montior per HDMI oder Adapter

Software: aktuelles Image von raspberrypi.org herunterladen

1. Aufbau Raspberry PI

Die heruntergeladene Datei entpacken und das entpackte Image-File mit folgenden Befehlen auf die SD-Karte schreiben:

dd bs=4M if=/home/me/piserver/2018-stretch.img of=/dev/mmcblk0

Wobei der Parameter hinter „if=“ dem Pfad zur Imagedatei entspricht und hinter „of=“ dem Pfad zur SD-Karte. Diese Angaben müsst ihr entsprechend eurer Umgebung anpassen.

sync

Zum Abschliessen des Schreibvorgangs vom Image und leeren des Schreibcaches für die SD-Karte in Linux.

Den PI mit Monitor, Tastatur und Maus verbinden, da beim erstmaligen Aufruf noch keine Server-Dienste aktiv und somit kein Remote-Verbindung möglich ist.

Hinweis:
Wer die SD-Karte unter Windows einrichten will, kann hierfür die Anleitung bei raspberry.org nutzen. 

2. Einrichtung der Server-Dienste

SSH

Oben links auf den Ribbon gehen und Einstellungen -> Raspberry-PI-Konfiguration wählen . Unter „Schnittstellen“ den Eintrag SSH aktivieren und speichern. Jetzt besteht schon ein Ferbzugriff auf den PI per  SSH-Tools wie „Putty“. Abspeichern und neu starten.

VNC-Server

Zwar bietet Raspbian hier unter den Einstellungen – Schnittstellen auch die Möglichkeit einen VNC-Server zu aktivieren, aber Stretch setzt standardmäßig auf RealVNC. Dieser lässt sich aufgrund der verwendeten Verschlüsselung/Protokollierung allerdings nur mit dem RealVNC Client stabil nutzen. Daher wird der xtightvnserver installiert:

sudo apt-get install xtightvncserver

anschliessend Passwort für VNC-Verbindung setzen

vncpasswd

dann noch den VNC-Dienst fürs automatische Starten beim Booten einrichten

sudo vim /etc/systemd/system/vncserver.service

mit folgendem Inhalt

[Unit]
Description=xtightvncserver
After=syslog.target network.target

[Service]
Type=forking
User=pi
PAMName=login
PIDFile=/home/pi/.vnc/%H:%i.pid
ExecStart=/usr/bin/vncserver -depth 8 -geometry 800x600 :%i
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

anschliessend

sudo systemctl daemon-reload

den neuen VNC-Dienst starten

sudo systemctl start vncserver1.service

und diese neue Datei zum automtischen Starten beim Booten eintragen

sudo systemctl enable vncserver1.service

zum Test den PI neu booten

sudo reboot

danach sollte der PI mit einem VNC-Client übers Netzwerk erreichbar sein

auf dem PI lässt sich der Status des VNC-Dienstes abrufen

sudo systemctl status vncserver1.service

FTP-Server

Mit einem FTP-Server lassen sich Dateien einfach und bequem zwischen PI und beliebigen Endgeräten austauschen. Als FTP-Server bietet sich vsftpd an.

sudo apt-get install vsftpd

Konfigurationsdatei /etc/vsftpd.conf anpassen

  1. lokale Benutzer zulassen local_enable=YES
  2. globales Schreiben zulassen write_enable=YES

anschliessend kann der Dienst gestartet werden

sudo service vsftpd start

Web-Server

Als Webserver wird nginx eingerichtet. Das ist schneller und schlanker als Apache.

sudo apt install nginx

dann PHP einrichten

sudo apt-get install php7.0-fpm

nun für nginx die PHP-Funktionalität einrichten, hierzu die Datei /etc/nginx/sites-enabled/default beareiten

sudo vim /etc/nginx/sites-enabled/default

und hierin in der Zeile mit „index index.html index.htm;“ den Eintrag „index.php“ ergänzen

index index.php index.html index.htm;

und weiter den Kommentator # in folgenden Zeilen entfernen

location ~ \.php$ { 
include snippets/fastcgi-php.conf; 
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
}

anschliessend den Webser neu starten

sudo /etc/init.d/nginx reload

Um zum Schluss zu prüfen ob nginx mit PHP läuft, eine Datei index.php im Verzeichnis /var/www/html erstellen

sudo vim /var/www/html/index.php

mit folgendem Inhalt

<?php
phpinfo();
?>

und dann die Seite aufrufen, indem entweder auf dem PI (per VNC) im Browser einfach die URL „localhost“ aufgerufen wird, oder von einem beliebigen PC im Netz im Browser die IP-Adresse des PI

es sollte die Infoseite von PHP erscheinen

Datenbank-Server

Jetzt noch als Datenbank-Server mySql einrichten:

sudo apt-get install mysql-server mysql-client php-mysql phpmyadmin

in der Datei /etc/php/7.0/fpm/php.ini folgenden Eintrag auskommentieren und auf Null (0) setzen:

cgi.fix_pathinfo=0

anschliessend den PHP Dienst neu starten

sudo systemctl restart php7.0-fpm

AD-HOC Server

Damit wir auch unterwegs auf den PI zugreifen bzw. die Infos aus der Plicht abgerufen werden können, muss noch ein Ad-Hoc Server eingerichtet werden.

Die Vorgehensweise hierzu ist sehr ausführlich und gut auf folgender Seite beschrieben:

https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md

Hierdurch kann der PI per Ethernet-Kabel an einen Routen angeschlossen und in ein bestehendes Netzwerk (z.B. zu Hause) eingebunden werden, oder aber er dient unterwegs als Access Point.

Somit steht auf dem PI der Webserver (nginx) mit PHP und Datenbannk zur Verfügung, und kann jederzeit per WiFi angesprochen werden.

Datensicherung

Jetzt noch eine Lösung, um die angefallenen Daten möglichst einfach zu sichern.

Da an unterschiedlichen Stellen (MySQL-Server, Dateien, etc.) Daten anfallen und zu sichern sind, gehe ich einfach hin, und erstelle vom System automatisch per Cron-Job ein Image. Damit habe ich den kpl. Server immer gesichert. Dieses Image wird auf einen externen Stick geschrieben und kann von dort entweder per FTP oder durch Übernahme des Sticks an einen anderen PC übertragen werden.

dd bs=4M if=/dev/mmblck0 of=/dev/sda

die o.g. Angaben den eigenen Umgebungsbedingungen entsprechend anpassen

Der USB-Stick hat natürlich eine größere Kapazität als die Micro-Karte des Raspberry.