Automatische Raspbian Images mit PiBakery erzeugen

Raspbian Images für den Raspberry zu erzeugen ist ja keine große Sache; auf dem Mac geht das zb mit

$> sudo dd bs=1m if=image.img of=/dev/rdisk<DISKNO>

Wobei man die DISKNO vorher mit diskutil ermittelt.

Damit ists aber nicht getan; für ein ordentliches Setup muss/sollte man:

  • ssh aktivieren (ist ja seit neuestem deaktiviert, um den Missbrauch von “offenen” Raspberries als DDOS-Bots zu unterbinden)
  • Wifi konfigurieren
  • password für user pi ändern
  • ssh Konfigurationen (Host key setzen, public key hinterlegen)
  • und den ganzen anwendungsspezifischen Kram installieren …

All diese Dinge lassen sich automatisiert mit PiBakery erledigen. PiBakery schreibt das Image auf die SD Karte, und ermöglicht es, die Setup-Kommandos automatisch auszuführen.

Sobald die SD Karte dann im im Raspberry steckt und das System gebootet hat, ist es automatisch fertig konfiguriert.

Das ist insbesondere dann prima, wenn man wie ich ab und an sein System mit komischen Treibern zerschiesst und dann alles wieder neu aufsetzen muss…

Funktionsweise

PiBakery liefert modifizierte Raspbian Images aus, die nach dem Booten des Raspberry die gewünschen Scripte (Blocks) ausführen. Die Anweisungen kann man in der PiBakery GUI festlegen und stöpselt einfach hintereinander. PiBakery läuft hierbei auf dem Arbeitsrechner (bei mir ein Mac).

Installation

PiBakery ist eine plattformunabhängige Node.js Anwendung (basierend auf dem electron Framework). Auf dem Mac kann man es als dmg installieren; die Installation direkt aus https://github.com/davidferguson/pibakery ist aber auch keine große Sache. Allerdings muss man bei letzterem die PiBakery Raspbian Images manuell runterladen und an den richtigen Ort schieben (Dokumentation hierzu im github README).

Beispielkonfiguration

Meine Beispielkonfiguration für ein Projekt von mir sieht so aus:

PiBakery Beispielkonfiguration

  • Wifi SSID und Kennwort festlegen. Das ist eine prima Sache, man spart sich das Netzwerkkabel für die “Erstkinstallation” des Pi.
  • Das Pi Passwort sollte man sowieso immer ändern; die Hostnames der Raspi Systeme nummeriere ich immer durch (‘raspi-1’, ‘raspi-2’,…)
  • Ich pack mir gerne meine public key auf die Raspis um mir das Einloggen zu ersparen (hier den Wert aus .ssh/id_rsa.pub reinkopieren)
  • Da das Standard Image mit einem Host key ausgeliefert wird (der immer gleich ist), sollte man diesen neu generieren
  • Ich verwende das jessie-lite Image, da ist git nicht drauf. Deswegen wird es hier installiert
  • Wenn ich meine Raspis initial boote, haben sie die falsche Timezone. Diese beiden Kommandos setzen diese richtig
  • Für meine stomplooper Tests installiere ich mir mein stomplooper Script.

Eigene Kommandos - Blocks

Man kann recht einfach eigene Kommandos (Pardon, “Blocks”) zufügen. In meinem Beispiel habe ich einen Block “settimezone” zugefügt. Man legt einen Ordner mit einer json und einen Script File an und draggt diesen auf die PiBakery GUI. Nach dem nächsten Start ist der Block dann aktiv - theoretisch. Hat bei mir nicht funktioniert.

Statt dessen hab ich pibakery aus den Quellen gebaut und den Ordner manuell in das Verzeichnis pibakery/pibakery-blocks geschoben. Dort muss man noch die info.json manuell anpassen. Wie auch immer - nach dem nächsten Start kann man das Kommando dann verwenden; nun ist das “Rezept” etwas kürzer:

PiBakery Rezept mit settimezone

Die dazu gehörenden settimezone Scripten sind recht übersichtlich: