ubuntuusers.de

Snappy Ubuntu Core

ubuntu_logo.png

Im Januar stellte Canonical mit „Snappy Ubuntu Core“ ein Ubuntu-Derivat vor, welches mit anderen Konzepten und einem anderen Paket-Manager daherkommt. Dieser Artikel beleuchtet die Ideen und Konzepte hinter Snappy Ubuntu und was in der Zukunft alles anstehen wird.

Snappy Ubuntu Core ist ein abgespecktes Ubuntu, welches sich an eine Vielzahl von Geräten richtet. Während das normale Desktop- und Server-Image in der Regel auf normaler PC- und Server-Hardware läuft, richtet sich Snappy Ubuntu Core an viele verschiedene Geräte, wie Router, Switches, Kühlschränke oder Drohnen. Auch richtet sich Snappy Ubuntu an die Cloud. Dieser Markt wird auch Internet_der_Dinge genannt.

Architektur

raspi-bbb.jpg
Snappy läuft auf dem BeagleBoneBlack und auf dem Raspberry Pi 2

Die Architektur von Snappy Ubuntu unterscheidet sich grundlegend vom „normalen“ Ubuntu-System. Insgesamt besteht Snappy Ubuntu aus vier verschiedenen Schichten. An unterster Ebene befindet sich das Hardware Enablement Layer, welches entweder von Canonical oder vom Hersteller der Hardware erstellt wird. Dieser beinhaltet den Kernel und die notwendigen Treiber für die Hardware. Darüber befindet sich die System-Ebene „Ubuntu Core“ welches von Canonical kommt und das minimalisierte Ubuntu enthält. Die dritte Schicht ist optional. Dort können sogenannte Frameworks installiert werden, von denen Apps abhängen können. Dementsprechend befinden sich Apps auf der vierten Schicht.

System-Updates werden unter Snappy Ubuntu anders ausgeliefert – verglichen zum klassischen Ubuntu. Im traditionellen Ubuntu werden installierte Pakete einzeln bei Bedarf aktualisiert, dies ist bei Snappy Ubuntu anders. Das System unterteilt sich in zwei logische Teile, dies ist einmal das minimale Basis-System und zum anderen sind es die Apps und Frameworks. Das Basis-System ist lediglich read-only, sodass man standardmäßig keine System-Dateien überschreiben kann. System-Aktualisierungen erfolgen daher Image-Basiert und nicht Paket-Basiert, sodass sowohl bei kleineren als auch bei größeren Aktualisierungen das ganze System aktualisiert wird. Dieses Vorgehen ist bereits heute auf Ubuntu Phone gängig, auch andere mobile Betriebssysteme wie Android, nutzen ein solches Aktualisierungsverfahren.

Ein Feature von Snappy Ubuntu ist ein Rollback auf einen älteren Stand von Snappy Apps oder auch vom ganzen Core-System. Dies kann man beispielsweise dann durchführen, wenn es zu unvorhergesehenen Fehlern im System oder zu System-Instabilitäten nach einer Aktualisierung kam. Diese Funktion macht sich auch in der Partitionierung bemerkbar. Insgesamt gibt es vier Partitionen: eine Boot-Partition, zwei Root-Partitionen für zwei Root-Verzeichnisse, sowie eine „writable“ Partition, auf die Daten geschrieben werden können. Dies impliziert auch, dass die beiden Root-Partitionen nicht beschreibbar sind. Bei Systemen, auf denen Grub als Bootloader eingesetzt wird, gibt es eine zusätzliche Partition für grub – dies ist etwa bei i386 oder amd64 Geräten der Fall. Die beiden Root-Partitionen sind notwendig, um nach einer System-Aktualisierung zwei bootfähige Systeme zu haben: einmal den alten und einmal den neuen Stand des Systems. Bei einem Rollback wird dann einfach wieder das alte Root-Verzeichnis gebootet.

Snappy Paket-Manager

Das Tool „snappy“ ist der Paket-Manager unter Snappy Ubuntu. Es ist weder apt-get verfügbar, noch lassen sich Deb-Pakete über dpkg installieren. Das Tool snappy handhabt sowohl das Aktualisieren von einzelnen Apps und Frameworks als auch das Aktualisieren des kompletten Systems.

Wenn man also Aktualisierungen durchführen will, reicht es,

sudo snappy update 

auszuführen. Dies aktualisiert bei Bedarf das System ubuntu-core und ggf. weitere installierte Apps und Frameworks. Mit

snappy list 

lassen sich alle installierten Apps anzeigen. Mit

snappy list -v 

werden alle verfügbaren Apps angezeigt, die installiert sind, aber nicht unbedingt aktiv sind. Das heißt, dass dort auch ältere Versionen von ubuntu-core oder von Apps gelistet werden können. Falls man ein Rollback auf eine ältere Version durchführen möchte, reicht das Ausführen von

sudo snappy rollback ubuntu-core 

Letzterer Befehl benötigt dann allerdings einen Reboot, um auf die vorherige Version zurück zu wechseln.

Apps & Frameworks

Apps

Das Paketformat von Apps unterscheidet sich unter Snappy deutlich von Deb-Paketen. Allgemein lässt sich sagen, dass der Aufbau von Snappy Apps deutlich einfacher ist, als von Deb-Paketen. Dies macht sich besonders beim Bauen von Paketen bemerkbar. Snap-Pakete werden in der Regel „snaps“ genannt und haben die Dateiendung .snap.

Ein einfaches Snap-Paket besteht aus zwei Ordnern: meta und bin. In letzterem Ordner befinden sich alle binären Dateien, die für das Ausführen der Anwendung notwendig sind. Diese können in den verschiedensten Programmiersprachen geschrieben sein. Wichtig im Vergleich zum System mit Deb-Paketen ist, dass alle Abhängigkeiten, die eine Anwendung mit sich bringt, in diesem Snap-Paket enthalten ist. Wenn man beispielsweise eine Anwendung in C++ schreibt und dort die Boost-Bibliothek verwendet, dann hat das Paketieren in Snap- und Deb-Paketen diverse Vor- und Nachteile. Bei einem aktuellen Ubuntu-Release hätte so ein Deb-Paket eine feste Abhängigkeit zu der Boost-Version, die sich über die Ubuntu-Paketquellen installieren lassen. Der Vorteil bei diesem System ist, dass mehrere Anwendungen auf dieselben Bibliotheken abhängen können und die Bibliothek nur einmal installiert sein muss. Der Entwickler hat daher keinen Aufwand Aktualisierungen für Dritt-Bibliotheken anbieten zu müssen. Im Gegenzug muss der Entwickler allerdings die entsprechende Bibliothek in der bereitgestellten Version nutzen, eine neuere oder ältere Version kann nicht so einfach genutzt werden. Der Distributor kümmert sich in diesem Fall um die Aktualisierungen der entsprechenden Bibliothek.

In Snaps hat der Entwickler freie Hand über die mitgelieferten Bibliotheken, sodass dieser die bevorzugten Versionen nutzen kann, ohne auf feste Versionsbeschränkungen achten zu müssen. Anderweitig muss er selbst dafür sorgen, dass die Bibliotheken aktualisiert werden müssen. Dies führt auch zu einem höheren Speicherplatzverbrauch auf dem installierten System, da Bibliotheken von jedem Snap-Paket selbst mitgeliefert werden und es dann zu Doppelungen kommen kann. In Zukunft soll dies allerdings verbessert werden, sodass identische Bibliotheken durch ein Deduplikationsverfahren nur einmal auf dem Dateisystem landen und somit nicht unnötig Platz verschwendet wird.

Neben dem bin-Verzeichnis muss ebenfalls ein meta-Verzeichnis vorhanden sein, in dem mindestens die Dateien package.yaml und eine readme.md liegen müssen. In der ersten Datei liegt die Konfiguration des Snaps, wie etwa die mitgelieferten Binär-Dateien oder auch die Definition von Diensten. Wie der Dateiname schon aussagt, wird die Konfiguration in YAML definiert. Der Inhalt der readme.md wird hingegen für die Paket-Beschreibung verwendet. Durch das Ausführen von

snappy build . 

im Projektverzeichnis wird dann das Snap-Paket gebaut.

WebDM

Snap-Pakete lassen sich nicht nur über

snappy install 

installieren, sondern es gibt auch einen grafischen Installer, der sich WebDM nennt. Mit WebDM ist es möglich, Snap-Pakete über den Browser zu installieren. Dort werden alle im Snap-Store verfügbaren Apps aufgelistet, die man durch wenige Klicks installieren kann. Snap-Pakete können von jedem Nutzer in den Snap-Store hochgeladen werden, sodass es durchaus mehrere Snaps geben kann, welche dieselben Programme ausliefern.

Frameworks

Neben Snap-Apps gibt es auch noch Frameworks, die ebenfalls als Snap-Paket ausgeliefert werden. Diese sind grundsätzlich dafür da, um „Shared Resources“ anzubieten, also Ressourcen die von anderen Snap-Apps genutzt werden können. Bei Frameworks gelten höhere Sicherheitsrichtlinien. In der Folge werden sie also stärker geprüft und können nur von Entwicklern hochgeladen werden, die eine Vertragsbeziehung mit Canonical führen.

Frameworks sind nicht als Ersatz für deb/rpm-Pakete gedacht. Zudem soll man keine Frameworks verwenden, nur um eine Bibliothek anbieten zu können. Docker ist beispielsweise unter Snappy Ubuntu als Framework verfügbar.

Hardware

Offiziell von Canonical unterstützt 🇬🇧 wird das BeagleBone Black, welches sich für circa 50€ erwerben lässt. Es gibt auch Builds für das Raspberry Pi 2; offiziell unterstützt wird es allerdings noch nicht.

Hardware, die unter das „Internet der Dinge“ fällt, wurde mittlerweile auch schon vorgestellt. So gibt es mittlerweile unter anderem Kühlschränke, Drohnen und Switche auf denen Snappy läuft. Es ist wahrscheinlich, dass noch mehr Hardware erscheinen wird, die mit Snappy läuft.

Fazit und Zukunft

Snappy zielt darauf ab, eine breite Masse von Geräten abzudecken. Der Fokus liegt dabei auch besonders auf den Geräten, die heutzutage nicht mit Sicherheitsaktualisierungen angeboten werden und wovon der Endnutzer auch nicht weiß, was darin läuft. Dies könnte zum Beispiel der heimische Router sein, der keine Aktualisierungen mehr empfängt. Mit Snappy Ubuntu Core soll es für die Hardware-Hersteller einfacher sein, Aktualisierungen anzubieten.

Snappy spielt eine große Rolle in der Zukunft von Ubuntu. Es ist so gesehen auch eine Weiterentwicklung des Unterbaus von Ubuntu Phone. So wird in Zukunft auch Ubuntu Phone auf Snappy Ubuntu basieren. Auch wird es ein experimentelles „Ubuntu Desktop Next“ Image von 15.10 geben, das auf Snappy basiert und mit Unity 8 daherkommt.