Tipps und Tools für das Life-Cycle-Management der Software von Embedded-Systemen.

Bild: iStock, Barsik

Life-Cycle-Management Pflege für Linux-Systeme

11.04.2019

Die Software von Embedded-Systemen wird immer komplexer. Dementsprechend aufwendig ist ihr Life-Cycle-Management. Für auf Linux basierende Systeme gibt es einige Tipps und Tools, die Unternehmen das Leben einfacher machen.

Sicherheit spielt im Alltag eine große Rolle. Gegen fast alle Widrigkeiten kann man sich absichern: gegen Unfälle, fürs Alter und auch für die Pflege. Auch die Pflege von Produkten sollte einen ähnlichen Stellenwert bekommen. Im industriellen Umfeld spielt die Absicherung gegen bestimmte Szenarien eine immer wichtigere Rolle. Der zunehmende Funktionsumfang und die allgegenwärtige Vernetzung von Geräten bringen dem Anwender ein deutliches Plus an Komfort, die Entwicklung wird aber deutlich komplexer und fehleranfälliger. Zudem machen neue Schnittstellen und Funktionen die Geräte angreifbarer. Bei auf Linux basierenden Embedded-Systemen ist beispielsweise ein häufig unterschätzter Aufwand die Pflege von Software. Das Erstellen eines Linux-basierten Board Support Package (BSP) bedeutet in erster Linie Integrationsarbeit. Es werden viele, sehr unterschiedliche Komponenten Dritter integriert. Oft kommt auch Software mit sehr hoher Komplexität hinzu. Die Wahrscheinlichkeit, dass Teile dieser Komponenten über die Produktlebenszeit hinweg Performance-Optimierungen oder Security Fixes erhalten, ist sehr hoch. Eine kontinuierliche Pflege ist daher notwendig. Und ein System ohne die Möglichkeit von Softwareaktualisierungen ins Feld zu bringen, muss unter diesen Gesichtspunkten als grob fahrlässig betrachtet werden.

Ein Pflegekonzept für ein Produkt beginnt bei der Auswahl des richtigen Linux Kernels. Der Entscheidungsprozess beginnt meist damit, festzulegen ob die vom Hersteller bereitgestellte Version oder die sogenannte Mainline-Version, also die unmodifizierte Linux-Variante aus der Community, zum Einsatz kommt. Am Projektstart fällt die Auswahl meist auf die Version des Boardlieferanten, da diese einen einfachen Einstieg ermöglicht. Hierbei wird aber häufig vergessen, dass diese Portierungen oft nur für Evaluierungszwecke gedacht sind und meist auch nur über einen sehr kurzen Zeitraum oder gar nicht gepflegt werden. Der Aufwand wird dadurch in frühen Projektphasen unter Umständen reduziert. Diese Ersparnis erkaufen sich Unternehmen aber mit einem deutlich erhöhten Pflegeaufwand über die Produktlebensdauer hinweg.

Wer hingegen die Mainline-Version von Linux einsetzt, kann auf das Pflegekonzept der Community zurückgreifen. Für jedes Kernelrelease gibt es die sogenannten Stable-Versionen, die kritische Fehlerbehebungen zur Verfügung stellen. Einige Ausführungen erhalten sogar eine längere Pflege. Dabei handelt es sich um sogenannte Longterm-Releases. Diese werden mindestens für 2 Jahre mit Fehlerbehebungen versorgt, einige sogar deutlich länger. Kernel 4.9 etwa wird in Summe sogar knapp 7 Jahre gepflegt. Ob und wie lange ein bestimmtes Linux Release Updates erhält, lässt sich der Projektseite des Linux Kernels (https://www.kernel.org/category/releases.html) entnehmen. Empfehlenswert als Betriebssystemkern ist daher die jeweils aktuelle Longterm-Version von Linux.

Doch die Entwicklung eines auf Linux basierenden Produkts umfasst nicht nur die Anpassung des Betriebssystemkerns, sondern auch das Zusammenstellen, Konfigurieren und reproduzierbare Paketieren als Gesamtsystem. Das Zusammenstellen eines solchen Systems ist eine umfangreiche und komplexe Aufgabe. In der Desktop- und Serverwelt greift man daher schon seit mehr als 20 Jahren auf bewährte und gepflegte Linux Distributionen zurück. Im industriellen Umfeld hingegen haben sich Technologien etabliert, mit denen der Anwender seine eigene Linux-Distribution für das jeweilige Zielsystem erstellt. Üblicherweise bedeutet das Cross-Übersetzen aller verwendeten Softwarekomponenten. Dieser Ansatz ist keineswegs darauf zurückzuführen, dass er einen technologischen Vorteil bietet. Im Gegenteil: Ein solches Vorgehen ist sehr aufwendig und fehlerträchtig. Die Erstellung eigener Linux-Distributionen ist in der Hauptsache historisch begründet. Die etablierten Linux-Distributionen waren lange Zeit nicht für alle CPU-Architekturen verfügbar. Heute sind die Zielsysteme wesentlich leistungsfähiger und die Verfügbarkeit von Linux-Distributionen auch außerhalb der Server- und Desktopwelt hat sich wesentlich verbessert. Ein positives Beispiel dafür ist Debian. Es unterstützt neben der x86-Architektur auch alle verbreiteten Varianten von ARM und noch viele mehr. Es empfiehlt sich also mittlerweile auf gepflegte Distributionen zurückzugreifen. Anstatt alle Pakete selbst zu übersetzen und auch selbst zu pflegen, wie das zum Beispiel beim Yocto-Projekt der Fall ist, greift man auf eine existierende Distribution und auf deren Maintenance Konzept zurück.

Gute gepflegt und lang verfügbar: Debian

Neben den grundsätzlichen Pflegeaspekten muss im industriellen Umfeld noch eine ganz andere Herausforderung gelöst werden: die langen Produktlebenszyklen. Die reine Verfügbarkeit von Softwareaktualisierungen reicht dafür nicht aus. Auch die verwendete Basistechnologie, also die Linux-Distribution, muss über viele Jahre am Markt verfügbar sein. Das Debian-Projekt wurde bereits 1993 ins Leben gerufen und erfreut sich seither immer größerer Beliebtheit. Neben der Verwendung auf Desktop- und Serversystemen ist auch der Verbreitungsgrad im industriellen Umfeld in den vergangenen Jahren stetig gewachsen. Die lange Projekthistorie, eine große Entwicklergemeinde und viele Nutzer aus unterschiedlichen Anwendungsgebieten garantieren auch langfristig eine umfangreiche Pflege und Weiterentwicklung. Darüber hinaus gibt es das Debian-LTS-Projekt, das sicherstellt, dass alle Debian Releases für mindestens 5 Jahre gepflegt werden. Nicht zuletzt deswegen setzen auch Projekte für kritische Infrastrukturen auf Debian, wie etwa die Civil Infrastructure Platform (CIP) der Linux Foundation.

Neben der Auswahl der richtigen Komponenten, wie zum Beispiel eines Longterm-Linux-Kernels und einer gepflegten Distribution, spielen natürlich die verwendeten Tools eine ganz wesentliche Rolle. Denn Produktpflege bedeutet auch, jede Version zu jedem Zeitpunkt ohne Aufwand erzeugen zu können. Für diesen Zweck wird das sogenannte Buildsystem verwendet. Im Umfeld von Debian gibt es zum Beispiel das Open-Source Projekt Elbe (https://elbe-rfs.org/). Elbe ist ein Buildsystem, mit dem der Nutzer eine Debian-Installation für sein Zielsystem erstellen und sie für seinen Einsatzzweck anpassen kann. Neben dem Erstellen eines passenden Images für das jeweilige Zielsystem kann Elbe auch die Verfügbarkeit von Updates prüfen und bietet darüber hinaus auch weitere Funktionen, unter anderem für Variantenmanagement und License Compliance.

Bei der Produktpflege wird häufig vernachlässigt oder vergessen, dass auch die verwendeten Werkzeuge über die Produktlebenszeit gewartet werden müssen. Beispielsweise kann die eingesetzte Toolchain ebenso wie jede andere Komponente fehlerbehaftet sein. Wer auf eine gewartete Distribution zurückgreift, kann die dort zur Verfügung stehenden Entwicklungswerkzeuge verwenden, wie etwa Compiler und Bibliotheken. Das gilt auch, wenn „cross“ entwickelt wird. Ein weiterer Aspekt, der für den Einsatz einer gepflegten Distribution spricht.

Tools für Over-the-Air-Updates

Die Verfügbarkeit von Updates ist nur eine Seite der Medaille. Die Aktualisierungen müssen auch auf dem Zielsystem eingespielt werden. Unternehmen sollten das Rad in diesem Punkt nicht neu erfinden, sondern lieber auf bewährte, getestete und gepflegte Technologien zurückgreifen. Zum Updaten Linux-basierter Systeme steht eine Vielzahl von Werkzeugen zur Verfügung. Ein in der Praxis bewährtes Tooling ist Swupdate (https://github.com/sbabic/swupdate). Dieses Framework bietet alle notwendigen Funktionen, um Updates erzeugen, signieren und auf dem Zielsystem einspielen zu können. Auch Over-the-Air-Updates sind damit möglich. Außerdem lässt sich das Framework sehr einfach auf den jeweiligen Fall hin anpassen. Swupdate ist Open-Source und somit frei verfügbar und mit keinerlei Lizenzkosten verbunden. Auch für das Verteilen von Softwareaktualisierungen gibt es freie Lösungen, wie Hawkbit (https://www.eclipse.org/hawkbit/), ein Framework zum Ausrollen von Softwareupdates. Swupdate unterstützt eine Anbindung an Hawkbit.

Aufgrund zunehmender Funktionalität und neuer Schnittstellen wird die Absicherung eines Produktes wichtiger. Sie ist zentraler Bestandteil der Entwicklung. Sicherheit ist kein Einmalaufwand. Ein Pflege- und Wartungskonzept, gemeinsam mit der Updatefähigkeit eines Systems, wird zwingend benötigt. Für Linux-basierte Systeme kann der Pflegeaufwand durch die Auswahl der richtigen Komponenten und Werkzeuge drastisch reduziert werden. Die Nutzung der Longterm-Versionen des Linux Kernels mit einer bewährten Distribution wie Debian ermöglicht es dem Anwender, auf die Maintenance-Konzepte der Community zurückzugreifen. Tools wie Elbe, Swupdate und Hawkbit unterstützen ihn beim Erstellen des Systems und dem Ausrollen und Einspielen von Updates. Hier zeigt sich die Stärke auf Open-Source basierender Technologien. Der Nutzer kann sowohl bei der Wartung als auch beim Tooling auf die Stärke der Community zurückgreifen und sich mit seinem Know-how auf die Umsetzung des Produkts konzentrieren.

Firmen zu diesem Artikel
Verwandte Artikel