Wie finden Sie diesen Artikel? Helfen Sie uns, bessere Inhalte für Sie bereitzustellen.
Vielen Dank! Ihr Feedback ist eingegangen.
There was a problem submitting your feedback, please try again later.
Was denken Sie über diesen Artikel?
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
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.
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.
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
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
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.
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.
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.
Nach dem Neustart wurde Ubuntu Core vom internen Joule-Speicher gebootet.
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
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
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
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.
Zur Erstellung eines Tokens für die Anmeldung an der Web-Schnittstelle muss Folgendes über die Befehlszeile eingegeben werden:
$ sudo snapweb.generate-token
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.
Nach einem weiteren Klick kann durch die Eingabe von ps in die Befehlszeile überprüft werden, ob Node-RED ausgeführt wird.
Nach der Eingabe der Geräte-IP-Adresse mit dem Port-Suffix „1880“ in die Adresszeile eines Webbrowsers wird der allgemein bekannte Editor angezeigt.
An dieser Stelle könnten wir mit der Erstellung neuer Node-RED-Flüsse (Anwendungen) beginnen.
Klassisches Ubuntu als Snap
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
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
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.
$ 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.
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
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.