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¶
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.