Balena Cloud läuft!

Als letzter Schritt zur vorgegebenen Architektur fehlt noch die Integration der Balena Cloud. Die Inbetriebnahme wird hier kurz beschrieben.

Als erstes legt man sich einen kostenlosen Account an und erstellt die erste Applikation. Nun gelangt man auf das Dashboard zu dieser Applikation und sieht, dass man keine Devices und keine Releases hat. Als Test wird das aus dem vorherigen Beitrag bekannte Skript über die Balena Cloud deployed.

Device hinzufügen

Zuerst muss der Pi als Device zur Applikation hinzugefügt werden. Dazu geht man auf New Device und wählt die gewünschten Einstellungen. Ich habe von der DHBW einen Raspberry Pi 4 und entscheide mich für die Anbindung des Pi über WLAN. Also gebe ich die SSID und das WLAN-Passwort an. Nun kann das Image (ca. 160 MB) heruntergeladen werden.

Nun muss das heruntergeladene Image entpackt werden und auf eine SD-Karte für den Pi geschrieben werden. Dafür bietet Balena ein eigenes Tool, ich verwende jedoch lieber die Boardmittel von Linux bzw. macOS: dd. Der Befehl lautet folgendermaßen:

dd if=balena.img of=/dev/sdc bs=1m

Nach kurzer Zeit ist das Image geschrieben. Es sind mehrere Partitionen auf der SD-Karte sichtbar. Die Karte wird nun in den Pi gesteckt und der Strom eingeschaltet. Andere Geräte sind nicht notwendig. Und tatsächlich: nach wenigen Sekunden erscheint das erste Device im Dashboard.

Release erstellen

Bisher ist die eigene Software noch nicht auf dem Pi angekommen. Um dies nachzuholen, wird ein Release erstellt. Später wird das Release dann auf alle verfügbaren Devices deployed. Dazu geht man auf New Release und entscheidet sich für eine Variante. Entweder das Balena CLI Interface oder per git. Letzteres ist schon auf meinem Rechner, also warum sollte ich mehr Software installieren? Ich nehme also git.

Repository erstellen

Zunächst wird ein Repository erstellt und diesem die drei Dateien (dockerfile, requirements.txt und src/app.py) des vorherigen Beitrags hinzugefügt. Es sind nun zwei kleine Änderungen am dockerfile notwendig.

  1. Umbenennen in Dockerfile.template
  2. Basis Image ändern

Als Basis Image muss ein Image der Balena Cloud verwendet werden. Laut Doku gibt es mehr als 26.000 verschiedene Images. Die Auswahl ist aber trotzdem leicht zu treffen. Im Groben kann man die zugrunde liegende Distribution und die integrierte Programmiersprache wählen. Außerdem muss das Image für die entsprechende Hardware gewählt werden (hier Raspberry Pi 4). Diese Auswahl kann jedoch automatisiert erfolgen, indem ein Platzhalter angegeben wird. Entscheidet man sich für all diese Faktoren, lässt sich daraus der Name des Image zusammensetzen (Weitere Infos hier). Für diesen Fall wird also die erste Zeile wie folgt angepasst, während der Rest unverändert bleibt.

FROM balenalib/%%BALENA_MACHINE_NAME%%-alpine-python:3.9.1-run

Damit sind alle Anpassungen gemacht und das Repository ist bereit.

Push in die Balena Cloud

Nachdem auf dem Dashboard New Release angeklickt wurde, wird die Anleitung angezeigt. Dort kann man auch einen SSH-Key hinzufügen. Man wählt die manuelle Methode und erzeugt mit dem folgenden Befehl ein neues SSH-Key Paar auf seinem Rechner.

ssh-keygen -t ed25519

Als Name wähle ich balena und die Passphrase bleibt leer. Anschließend wird der Inhalt von balena.pub in die Eingabemaske auf dem Dashboard kopiert. Nun ist noch der folgende Eintrag in der ssh-config-Datei notwendig. Diese ist in der Regel $HOME/.ssh/config

Host balena git.balena-cloud.com
	Host git.balena-cloud.com
	IdentityFile ~/.ssh/balena

Der Eintrag sorgt dafür, dass der Verbindung zur Balena Cloud der passende private-Key zugeordnet wird. Hat man nur einen SSH-Key, kann man bei Erstellung den Namen leer lassen und dieser Schritt entfällt.

Nun muss dem oben erstellten Repository ein neuer Remote-Ort hinzugefügt werden. Den passenden Befehl kopiert man aus der Anleitung auf dem Balena Dashboard. Ebenso den Befehl zum pushen in die Cloud.

Der Vorgang dauerte bei mir etwa eine Minute, bis mir eine Erfolgsmeldung ausgegeben wurde. Anschließend wird die Software auf die Devices verteilt. Das dauert beim ersten Mal relativ lange, geht danach jedoch schneller, da immer nur die neueste Schicht des Docker Image verteilt werden muss. Deshalb sollte der Quellcode nur in der letzten Schicht sein. Nun noch den MQTT-Broker starten und schon läuft das ganze. Im Dashboard wird die Terminalausgabe des Device angezeigt. Sendet man mit einem anderen Client eine Zahl im Topic intervall, so ändert der Device die Abstände zwischen den Nachrichten. Zieht man den Stecker des Pi, dauert es mehrere Minuten, bis das Device im Dashboard als offline angezeigt wird.

Fazit

Die Infrastruktur für unser Projekt steht. Ab jetzt können wir uns auf die Entwicklung der eigentlichen Software konzentrieren und den Teil für die Devices einfach deployen.

Balena Cloud läuft!

Ein Kommentar zu „Balena Cloud läuft!

Schreibe einen Kommentar