Raspi Grundkonfiguration

Nachdem nun der Raspi nach der Basisinstallation erfolgreich am Netz ist, ist dieser natürlich noch nicht bereit um in Netzwerk einfach so losgelassen zu werden.

Ein Firewall ist schon etwas was laufen sollte bzw. muß.

Für alle die sich nicht erst umfangreich mit dem Thema IP Tables auseinandersetzen wollen gibt es eine kleine Variante um eine Firewall auf dem Rechner zu betreiben. Mit der uncomplicated Firewall(ufw) steht ein Package auf Debian bereit. Details könnt ihr hier finden:

https://wiki.debian.org/Uncomplicated%20Firewall%20%28ufw%29

Die Installation erfolgt über folgenden Befehl:

sudo apt-get install ufw

Nachdem die Software nun auf dem Raspi ist, muss nun auch noch eine Erstkonfiguration durchgeführt werden. Hierzu machen wir die Firewall dicht und erlauben nur noch die Kommunikation auf Port 22(ssh), 5000(Flask ohne Nginx Webserver), 5901(VNC), 445(Samba), 80(http mit Nginx WebServer) und 443(https). Mit enable wird die Firewall aktiviert und die folgende Frage nach dem kurzzeitigen unterbrechen der Verbindung bestätigt.


sudo ufw default deny incoming
sudo ufw allow 22
sudo ufw allow 5000
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 5901
sudo ufw allow 445
sudo ufw enable

Weitere Ports können folgen, wenn der Emailversand konfiguriert werden soll oder andere Anwendungen hinzukommen.

Ein Samba Share ggf. um einfacher an aufgezeichnete Bilder und Mediadateien einsehen zu können.

Die Installation erfolgt mittels Aufruf:

sudo apt-get install samba 

Nach der Installation sind einige Dinge zu konfigurieren und einzelne Sicherheitsaspekte zu berücksichtigen. Eine gute Quelle war hie für mich die Webseite von Thomas Krenn.

Fall nicht nicht die Lite Version gewählt wurde, macht auch ein VNC Viewer Sinn um sich auch den Rechner visuell aufschalten zu können.

Und nicht zu vergessen ist auch die Python Laufzeitumgebung auf den aktuellen Stand zu bringen.

Raspi Basisinstallation

Um einen Raspi von Grund auf zu installieren benötigt man eine Micro SD Card in einer geeigneten Größe. Die Größe richtet sich im Wesentlichen nach den Daten, die durch das Projekt aufgezeichnet werden. Kurz 8-16GB sind für Projekte mit Wetterdaten völlig zureichend, für Projekte mit Bild und Videodaten besser 64 GB verwenden, damit eine geeignete Laufzeit  entsteht, ohne dass ihr die Karte leeren müsst.

Unter folgenden Link www.raspberryPi.org/software könnt ihr das Image für die SD-Card herunter laden und gleich aufspielen. Seit einer Weile gibt es den RaspberrPi Imager. Alternative hier hierzu ist der Win32Imager mit dem ich in der Vergangenheit sehr gute Erfahrungen gemacht habe.

Image aufspielen mit dem RaspberryPI Imager:

Hierzu den Raspberry Pi Imager herunter laden und ausführen. In der Folge werden unterschiedliche Varianten zur Installation angeboten. Hier die Raspberry Pi Desktop Installation auswählen und auf der Karte installieren. Dieses Image hat einen Desktop und nur grundlegende Software. Ein späterer Remote Desktop Zugriff über VNC ist also möglich. Der Overhead an nicht benötigter Software hält sich in Grenzen.

Start des RaspiImagers
Auswahl des Betriebssystems
Schreiben der SD Karte starten
Auswählen des Betriebssystems
Schreiben der SD Karte erfolgreich

Solltet ihr euch für den win32 Imager entschieden haben, so könnt ihr unter www.raspberryPi.org/operating-systems ein entsprechendes Image herunterladen.

Raspberry Pi Lite Image

Dieses Image verfügt über keinen Desktop. Dies ist aus meiner Sicht völlig zureichend, denn in der Folge wird der Raspi ohnehin über den Command Prompt konfiguriert wird. 

[Anmerkung für Headless Installation unabhängig vom gewählten Image]

Bevor das Image für den initialen Start in den Raspi gesteckt wird ist der  SSH Zugriff vorab zu ermöglichen. Ein Monitor oder eine Tastatur wird nicht angeschlossen.

Einrichten des SSH Zugriffs

Die Boot Partition ist in Eurem System als separates Laufwerk eingehangen. 

Hier ist eine Date ssh zu erzeugen, ohne Inhalt und Dateiendung

Solltet ihr den Raspi nicht am LAN angeschlossen haben, so ist es notwendig die WLAN konfiguration noch zu hinterlegen.→ konfigurien des WLAN Schlüssels vor dem ersten Start

Hier zu ist eine Datei mit den Namen wpa_supplicant. confanzulegen im Boot- Verzeichnis. Die Datei hat folgendenInhalt: 

country=DE  
ctrl_interface=DIR=/var/run/wpa_supplicant
GROUP=netdev
update_config=1
network={
ssid="wlan-bezeichnung"
psk="passwort"
key_mgmt=WPA-PSK
}

Nach dem diese beiden Schritte durchgeführt wurden, sollte die SD Card so aussehen:

Nun kann die SD Karte in den Raspi eingelegt und die Stromversorgung angeschlossen werden.

So bald der Rechner hochgefahren ist findet man auf dem Router einen weiteren Rechner mit dem Namen raspberry.

Mit dem Rechnernamen oder der IP auf dem Router wird nun der SSH Zugriff auf den Rechner durchgeführt. Hierzu könnt ihr ein Tool wie Putty oder BitVise verwenden, oder ihr gebt auf der Commando Zeile(cmd.exe) folgedenden Befehl ein:

ssh pi@<IP Adresse>

Auf dem Raspi ist im Standard ein Nutzer mit dem Namen pi angelegt. Das initiale Passwort ist „raspberry“.

Folgende Themen sind nach einem initialen Login zu ändern:

 

  • Passwort des Nutzers Pi
  • Spracheinstellungen und Zeitzone
  • Tastaturlayout
  • I2C für unterschiedlichste Sensoren und 1Wire für Sensoren wie den DS18B20 Temperatursensor aktivieren
  • Aktivierung der GPIO Pin’s
  • Aktivierung des VNC Zugriffs für Installationen mit Desktop

Nach dem die Anmeldung nun erfolgreich war kann die Konfiguration mittels

Sudo raspi-config

erfolgen.

Meine persönliche IDE Auswahl

Im ersten Moment scheint die Eclipse als Framework für unterschiedliche Programmiersprachen eine gute Wahl zu sein. Gerade wenn man aus der Javaentwicklung kommt ist es schon fast gesetzt. Bei näherem Hinsehen gibt es dann doch ein paar Hürden, welche bei der Entwicklung nerven und den initialen Spaß rauben.

Sofern man mit C oder C++ nicht vertraut ist, wird man recht schnell bei Python als Programmiersprache landen. Dies ist völlig in Ordnung, jedoch muss die IDE danach ausgerichtet werden.

In der Folge habe ich mir 3 IDE’s einmal angesehen und ausprobiert.

Welche Anforderungen habe ich an die IDE gestellt?

– Syntaxhighlighting für die bessere Lesbarkeit

– Code Assistent um schnell verfügbare und geeignete Methoden zu finden

– Remote Debugging da der Code ja nicht auf dem Entwicklungsrechner läuft, sondern auf einem Raspi

– Verwaltung mehrerer Projekte

– Verwaltung von Abhängigkeiten/Libraries

– Gitintegration um eine Sicherung der Entwicklungen zu ermöglichen und keinen Datenverlust bei Rechnerwechsel zu erleiden

– Lokale Versionsverwaltung → falls man mal das Falsche gelöscht hat und noch einmal nachsehen möchte was da einmal stand

– Verbindungsverwaltung der unterschiedlichen Raspi

Ein Punkt ist dabei das Remote Debugging, dass mir bei der Eclipse ein paar graue Haare verschafft hat. Dies vorneweg, das haben andere Umgebungen besser gelöst.

Für die Eclipse gibt es entsprechende Plugins, welche helfen in der gewählten Programmiersprache Quellcode zu schreiben. Dennoch waren die Einstellungen und die Art und Weise wie Remote Debugging mit der Eclipse funktioniert sehr gewöhnungsbedürftig.

Folgende Plugins habe ich genutzt:

– Remote System Explorer um einen entsprechenden ssh Zugriff auf den Raspi herstellen zu können

– PyDev um in Python entwickeln zu können

Auf dem Raspi bringt die Vollinstallation ebenfalls einzelne Programmierumgebungen mit, welche vom Grundsatz funktionieren jedoch bei umfangreicheren Projekten ihre Schwächen haben. Eine Hauptschwäche war die Verwaltung von Projekten. Auf der anderen Seitehat nach meinem Dafürhalten eine IDE auf dem Ziel rechner nix zu suchen.

Ein weiterer Aspekt ist, daß nachdem der erste Raspi am laufen ist wird der 2te Raspi folgen (ich gehe mal davon aus: Es hat Spaß gemacht!)und wer möchte, dann immer wieder alles von vorn beginnen.Vor diesem Hintergrund ist es sinnvoll eine Konfiguration zu wählen, welche nur den Quellcode auf den Raspi schafft, welcher dann remote ausführbar ist.

Mit der Eclipse hatte ich bei diesen Anforderungen so meine Schwierigkeiten. Weiterhin ist es gewöhnungsbedürftig die IP Adresse des Remoterechners mit der IDE in den Quellcode auf dem Zielrechner zu schreiben. Es war temporär möglich den Code auf dem Raspi zu debuggen, jedoch war dies nicht ohne weiteres möglich, da kommen Alternativen zu Eclipse deutlich besser damit klar.

Aus diesem Grund war es sinnvoll Alternativen auszuprobieren.

– Visual Studio Code

– PyCharm

– Visual Studio 2019 Community Edition

Am Ende des Tages bin ich mit PyCharm am besten klar gekommen, auch wenn Funktionen wie ssh nur mit der Bezahlversion bereit stehen.

Darüber hinaus gibt es auch unterschiedliche Anbieter die es eine ermöglichen Python zu lernen, ohne dass man irgendeine Software installieren muss.

Wie man ssh Verbindungen in den einzelnen Umgebungen mit lokal installierter IDE anlegen kann, wird auf den folgenden Seiten beschrieben:

Visual Studio 2019 Community Edition

https://docs.microsoft.com/de-de/cpp/linux/connect-to-your-remote-linux-computer?view=msvc-160

PyCharm

https://www.jetbrains.com/help/pycharm/configuring-remote-interpreters-via-ssh.html

Visual Studio Code

https://code.visualstudio.com/docs/remote/ssh-tutorial

https://code.visualstudio.com/blogs/2019/10/03/remote-ssh-tips-and-tricks

Arbeiten mit PyCharm

Der Quellcode wird nach jeder Änderung auf den Raspi kopiert bzw. kann dieser mittels Deployment(PyCharm) sehr schnell auf den Rechner geschafft werden und steht zur Ausführung bereit.

Der Import der Konfiguration des Remoterechners wird automatisch durchgeführt. Hierzu ist der Remoterechner der IDE bekannt gemacht werden.→ Screen Konfiguration

Auch Github ist einfach integrierbar, sodaß der Quellcode nach einem Rechnerwechsel direkt auf die neue Umgebung gezogen bzw. gemeinsam an Projekt gearbeitet werden kann.