All Systems Go 2017: Updating Embedded Systems

Robert Schwebel | | Event, Talk

Auf der All Systems Go Konferenz in Berlin berichtete Michael Olbrich am 22.10.2017 über die Erfahrungen unseres Integration Teams, unter dem Titel "Updating Embedded Systems - Putting it all together".

Während noch vor ein paar Jahren Embedded Geräte fast nie geupdatet wurden, sorgen die vielen IoT Security Vorfälle in letzter Zeit dafür, dass das Thema Updating zunehmend auf der Agenda der Hersteller erscheint. Viele Embedded Linux Systeme folgen dabei einem "A/B" Schema, d.h. ein System-Slot ist aktuell gebootet, während ein zweiter geupdatet wird; mit diesem Mechanismus kann ein Update "atomar" durchgeführt werden, d.h. selbst eine Fehlfunktion führt nicht dazu, dass das System nicht mehr bootfähig ist.

Wie funktioniert der Update-Vorgang? Neben dem eigentlichen Schreibvorgang des Images, der mehr oder weniger generisch ablaufen kann, muss die Integrität des Images auf mögliche Fehler geprüft werden. Bei interaktiven Geräten kann z.B. der Benutzer (lokal oder remote hinter einem Rollout-Server) informiert werden, dass im Fehlerfall auf eine alte Version zurückgeschaltet wird. Schwieriger wird es bei nicht interaktiven Geräten: hier kann z.B. der Watchdog genutzt werden, um den Startvorgang zu überwachen; dabei wird im Userspace systemd als Watchdog-Handler genutzt. Allerdings müssen im Gegensatz zum Desktop-Usecase Maßnahmen ergriffen werden, damit systemd den erfolgreichen Start des Systems inklusive seiner Applikationen korrekt überwachen kann:

  • Das System kann im Fehlerfall versuchen, neu zu booten. Dabei können die Reboot-Vorgänge vom Bootloader (meist barebox) mitgezählt werden und es kann bei Überschreiten einer Anzahl von Versuchen ein Fallback auf das alte System vorgenommen werden.
  • Bei transienten Fehlern kann dieser Vorgang in einer Loop durchgeführt werden.
  • Bei kritischeren Systemen kann das System im Fehlerfall aus Sicherheitsgründen heruntergefahren werden.

Welche Variante bei einem konkreten Gerät umgesetzt wird, ist oft projektspezifisch.

Für das Schreiben der Updates und die Verwaltung der Slots ist RAUC ein mächtiges Werkzeug, das neben der Prüfung von Signaturen auch die Synchronisation (z.B. mittels casync vornehmen kann.