Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

So können integrierte Systeme App-fähig gemacht werden

JouleCore_4366bfb3ebb6b814f374567963dc41ebd378183d.jpg

Durch die App-Befähigung integrierter Linux-Systeme mit Ubuntu Core stehen die Vorteile von Transaktions-Updates, erhöhter Sicherheit und des Zugangs zum Snap-Anwendungsökosystem zur Verfügung.

In diesem Artikel beschäftigen wir uns mit Snap Packaging und Ubuntu Core und laden anschließend letzteres auf den winzigen und doch enorm leistungsfähigen Intel Joule (123-9801) . Wir erkunden das System und installieren Node-RED aus dem App Store. Abschließend erstellen wir eine Beispielanwendung für die Verwendung in Verbindung mit einem angeschlossenen LimeSDR.

Ubuntu Core kann neben anderen Hardware-Plattformen auch auf dem Raspberry Pi und Intel NUC installiert werden

Snaps und Snappy Ubuntu Core

snappy_7c9632697e945ae40a7884e674b2d88fb31b98b1.jpg

Geräte-Software wird zunehmend komplexer. Ursache ist der Trend von einfacheren Anwendungen oder vielleicht auch von integrierten Minimalbetriebssystemen mit zusätzlichen Serverprozessen hin zu Anwendungen, die durch Verwendung mehrerer Frameworks mit jeweils zahlreichen eigenen Abhängigkeiten erweiterte Funktionen integrieren.

Mit Snaps wird diese Komplexität durch das gemeinsame Packaging der Anwendungs-Software mit allen Abhängigkeiten bewältigt. Das mag nach Verschwendung klingen – wenn zwei installierte Anwendungen die gleiche Bibliothek nutzen, befinden sich dann zwei Kopien dieser Bibliothek auf dem System – bedeutet aber auch, dass keine Probleme auftreten, wenn diese Anwendungen verschiedene Versionen einer Abhängigkeit erfordern. Zudem sind Snaps in eigenen schreibgeschützten Dateisystemen mit getrennten Datenspeichern sicher abgeschlossen.

Durch den hohen Trennungsgrad nicht nur zwischen verschiedenen Snaps, sondern auch zwischen Snaps und dem zugrunde liegenden Linux-Betriebssystem, wird eine solide Grundlage für die Gerätesicherheit und -stabilität gelegt. Die Bereitstellung klar definierter Plug- und Slot-Schnittstellen ermöglicht bei Bedarf die Integration zwischen verschiedenen Snaps.

AE_snap_YAML_b6dee0c4aa44e480d4ce4eb4f022754a32ed2835.jpg

Fragment der Konfigurationsdatei für den limesdr-server-Snap

Im obigen Beispiel sind GitHub-Repositorys für die Anwendung und die angegebenen Abhängigkeiten sowie Detailinformationen zum Erstellungsmechanismus, zu den Konfigurationsoptionen und zur Erstellungsreihenfolge zu sehen.

Core_efbdede44c3e764d330be68d0e5098ff1746bb12.jpg

Snaps werden als „universelle Linux-Pakete“ beschrieben. Sie werden zwar von den „klassischen“ Desktops von Ubuntu, Debian, Yocto Project, Fedora und anderen Linux-Distributionen unterstützt, hier nutzen wir jedoch die minimalistische Ubuntu-Version Ubuntu Core, die speziell für integrierte und IoT (usw.)-Geräte konzipiert ist.

Ubuntu Core erweitert die Snap-Philosophie auf das Betriebssystem und unterstützt Transaktions-Updates sowie die strenge Trennung zwischen dem Kernel, den Gerätetreibern, dem breiteren Betriebssystem und den Anwendungen.

Firmwareaktualisierung

JouleFlash_75c4c7231636b5a78f9f11b7d7feb8588b8a9d63.jpg

Entsprechend den Angaben in der „Erste Schritte“-Anleitung für Ubuntu auf Intel Joule muss das BIOS auf Version 174 aktualisiert werden. Diese und nachfolgende BIOS-Versionen können von der Intel-Website heruntergeladen werden. Auch die Anleitung für das BIOS-Flashing ist dort zu finden.

Installation des Betriebssystems

AE_Startup_Disk_Creator_41baff4168b44da7947a8d51f64b7721beb69137.jpg

Das Gerät muss mit einem Ubuntu Single Sign-On (SSO)-Konto verbunden werden. Wenn Sie noch nicht über ein derartiges Konto verfügen, müssen Sie sich entsprechend registrieren.

Snappy Ubuntu Core steht zurzeit nicht als selbst gehostetes Installationsprogramm für den Intel Joule zur Verfügung. Um es laden zu können, erstellen wir daher zunächst ein klassisches Ubuntu Desktop Live-/Installations-Image. Anschließend booten wir von diesem Image und extrahieren dann über die Befehlszeile ein Ubuntu Core-Dateisystem in den internen MMC-Speicher.

Wenn Sie für die Erstellung des Live-/Installations-Image Ubuntu nutzen, muss dies mit Startup Disk Creator und nicht mit unetbootin erfolgen, da mit letzterem kein bootfähiges Gerät erzeugt werden kann. Die vollständige Anleitung für Ubuntu, Windows und Mac OS X ist hier zu finden.

BootMenu_ea59151eea0a16f8fd8fcb252617259bdcf705e2.jpg

Zunächst wurden beim Booten USB-Sticks nicht von Intel Joule erkannt, möglicherweise wegen der Verwendung eines USB-Hubs oder anderer Inkompatibilitäten. Daher sei an dieser Stelle darauf hingewiesen, dass das Live-/Installations-Image auch von einer Micro-SD-Karte auf der Erweiterungsplatine gebootet werden kann.

WriteOut_74bab6bec3fe48f9ab72257e4ddca1f4b9c0c4cf.jpg

Wir haben den Bootvorgang über die Micro-SD-Karte durchgeführt und anschließend das Snappy Ubuntu Core-Image auf einem USB-Stick bereitgestellt. Hier ist zu beachten, dass die SD-Karte die Bezeichnung /dev/mmcblk0 hatte und der interne Speicher im Joule daher mit /dev/mmcblk1 benannt wurde. Der Befehl zum Extrahieren des Core-Dateisystems wurde daher entsprechend angepasst.

CoreBoot_b2c997dad2e09e8c3c0da345195d4e688a686e42.jpg

Nach dem Neustart wurde Ubuntu Core vom internen Joule-Speicher gebootet.

Network_d2af833235b9989b2c9fa4f9de05419e806f41a8.jpg

Anschließend wurden wir aufgefordert, das Netzwerk zu konfigurieren und die E-Mail-Adresse des Ubuntu SSO-Kontos einzugeben, mit dem dieses Gerät verknüpft werden sollte.

SSH-Anmeldung

AE_firstSSH_61e16421ab7ede8b791c30c0b022480b85e83035.jpg

Da das Gerät nun mit dem Netzwerk verbunden war, konnten wir uns jetzt mit der Ubuntu SSO-ID und der auf dem angeschlossenen Monitor nach dessen Bereitstellung angezeigten IP-Adresse anmelden.

Nach der Anmeldung über SSH können mit dem folgenden Befehl die Standard-Snaps angezeigt werden:

$ snap list

AE_first_snap-list_4c381a8ff785e39ea3136b823b54e79d92a77803.jpg

An diesem Punkt ist die Installation weiterer Snaps über die Befehlszeile möglich. Alternativ kann ein Zugriffs-Token erstellt werden, das eine etwas benutzerfreundlichere Web-Schnittstelle ermöglicht.

Snapweb

AE_Snapweb-access-control_4ab6fda56c68b3e19db4ef2f6601a363bc74541c.jpg

Nach der Eingabe der Geräte-IP-Adresse mit dem Präfix „https“ und dem Port-Suffix „4201“ in die Adresszeile eines Webbrowsers wird die Zugangskontrollseite der Snapweb-Anwendung angezeigt.

AE_snapweb-generate-token_991357336960cb3cfb0b083b20424c624bffa54c.jpg

Zur Erstellung eines Tokens für die Anmeldung an der Web-Schnittstelle muss Folgendes über die Befehlszeile eingegeben werden:

$ sudo snapweb.generate-token

AE_Snapweb-installed-snaps_8ee9f948ad4f4fc9d25e33ca202a4d09f312d00f.jpg

Nach der Anmeldung können wieder die installierten Snaps aufgelistet werden. Außerdem ist es möglich, Snaps zu suchen und zu installieren, z. B. auch ein Snap, das ein hervorragendes Tool für die IoT-Verschaltung bereitstellt: Node-RED.

AE_Snapweb-search-nodered_b6308be115836f9361020ab608c4401c03875cac.jpg

Nach einem weiteren Klick kann durch die Eingabe von ps in die Befehlszeile überprüft werden, ob Node-RED ausgeführt wird.

AE_ps_nodered_7929c5d9f6c32b016e903d81de35253a154be4c4.jpg

Nach der Eingabe der Geräte-IP-Adresse mit dem Port-Suffix „1880“ in die Adresszeile eines Webbrowsers wird der allgemein bekannte Editor angezeigt.

AE_NodeRED_Editor_3402e7e3fe3ae81787b4b64ec58d90153ce97408.jpg

An dieser Stelle könnten wir mit der Erstellung neuer Node-RED-Flüsse (Anwendungen) beginnen.

Klassisches Ubuntu als Snap

AE_InstallStartClassic_0bdf14aa2cd66fc1fde31df0f9ab909bcd8f2812.jpg

Es ist sogar möglich, das klassische Ubuntu-Betriebssystem als Snap zu installieren und damit unter anderem die Entwicklung auf dem Zielgerät selbst zu ermöglichen. Dazu muss lediglich Folgendes eingegeben werden:

$ snap install classic --edge --devmode

$ sudo classic

AE_ClassicOSRelease_8d430c612252125c891f2f940675b714fc37ca2d.jpg

Anschließend kann in einer chroot-Umgebung durch die Untersuchung des Inhalts der Datei /etc/os-release die Ubuntu-Version bestimmt werden. In unserem Fall handelte es sich um die Version 16.04.02.

Zum Zeitpunkt der Erstellung dieses Artikels gab es allerdings scheinbar einige Probleme mit der aktuellen Version des klassischen Snaps, denn Befehle für die Installation von Paketen führten zu Signaturprüffehlern. Wir haben daher ein Beispiel-Snap auf einem Desktopsystem erstellt, auf dem das klassische Ubuntu installiert war.

Erstellen von Snaps

AE_JouleLimeSDR_b48e0e5a215ba03d3c01b32c1e293782c772eff0.jpg

Das Erstellen von Snaps ist denkbar einfach und erfolgt mithilfe der snapcraft-Software. Diese kann zusammen mit snapd, einer Software, die auch für die Ausführung von Snaps auf dem klassischen Ubuntu erforderlich ist, installiert werden:

$ sudo apt-get install snapcraft snapd

Durch die Einbeziehung von snapd können Snaps zunächst auf einem Desktopsystem getestet werden. Anschließend werden sie auf Zielgeräte kopiert, auf denen Snappy Ubuntu Core ausgeführt wird, und dort installiert.

 Auf GitHub wird eine Auswahl von Beispiel-Snaps für die LimeSDR USB 3.0 Software Defined Radio (SDR)-Plattform angeboten. Das Repository wurde geklont und das limesdr-server-Snap erstellt. Auf diese Weise kann über das Netzwerk transparent auf eine LimeSDR-Platine zugegriffen werden.

AE_Snapcraft_LimeSDRServer_ca524c228fcea4e1b1d5fc3915ee77b0d15d0e77.jpg

$ git clone https://github.com/myriadrf/snapcraft-sandbox.git

$ cd snapcraft-sandbox/limesdr-server

$ snapcraft

Als Ergebnis werden die Hauptanwendungssoftware sowie alle entsprechenden Abhängigkeiten von GitHub geklont, erstellt und anschließend als vollkommen eigenständige Anwendung verpackt.

AE_Snapped_74f7eda07f104423bb6e0c018e225a4f6ef6efab.jpg

Die Installation kann wie folgt durchgeführt werden:

$ sudo snap install --force-dangerous --devmode soapysdr-server_0.5.3.0_amd64.snap

Die Option „--force-dangerous“ ist erforderlich, da keine Lieferung über einen App Store erfolgt, sondern der Snap vom Dateisystem, d. h. von einer nicht vertrauenswürdigen Quelle, installiert wird. Die Option „--devmode“ ist eine temporäre Problemumgehung, durch die der Snap Zugang zu Hardware-Peripheriegeräten erhält (Unterstützung für Hot-Plug-Peripheriegeräte und das Management des sicheren Zugriffs auf diese soll später hinzugefügt werden).

Detailinformationen zu den ersten Schritten zur Erstellung eigener Snaps sind in der Snapcraft-Dokumentation zu finden.

Benutzerdefinierte Stores, Geräte-Images und mehr

AE_Advanced_Production_Model_f351885a6213cbe140730b0fdc2306c39c336591.jpg

Ubuntu Core Advanced production model

Dies war nur eine erste Einführung in die Möglichkeiten von Snaps und Ubuntu Core. Es gibt eine ganze Reihe weiterer Funktionen wie die Erstellung benutzerdefinierter Ubuntu Core-Images mit integrierter Anbieterunterstützung für bestimmte Hardware und benutzerdefinierter „Brand“ App Stores, mit denen Geräte-Images verknüpft sind.

Detaillierte Informationen zur Erstellung von Ubuntu Core-Unterstützung für neue Geräte, zur Integration von benutzerdefinierten Stacks, zur Einrichtung von Brand Stores, zu Produktionsmodellen usw. sind in der Ubuntu Core-Dokumentation zu finden.

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin