Paketverwaltung und Snaps unter Ubuntu 16.04 LTS

Ubuntu Snaps

Ubuntu Snaps

Jedes Betriebssystem ermöglicht das Hinzufügen, Aktualisieren und Deinstallieren von Software. Meistens werden vom Hersteller Softwarepakete angeboten, die mit Hilfe eines Installationsskripts den Weg auf den Computer finden. Updates für diese Pakete bestehen entweder aus sogenannten Patches (engl. Flicken), die einzelne Dateien eines Softwarepaketes aktualisieren oder aus anderen Softwarepaketen, die „über“ bereits installierte Softwarepakete installiert werden. Zur Deinstallation von Softwarepaketen benötigst man oft Deinstallationsskripte.

Unter Mac OS gibt es bis heute beispielsweise keine einheitliche Vorgehensweise um Software zu deinstallieren. In Windows gibt es die zwar, aber der Teufel liegt im Detail. Das Problem ist oft „Geheimniskrämerei“ bei den Herstellern von kommerzieller Software und so weiss man oft weder, was ein Programmpaket denn nun genau auf dem Computer installiert hat, geschweige denn, wie man das alles wieder entfernt. Auch die aufgeräumtesten Apple macOS und Microsoft Windows Computer werden nach ein paar Jahre mit Updates und Programminstallation langsamer und die Festplatte füllt sich. Ein „clean install“, bei dem man ein zuerst „frisches“ Betreibsystem und danach seine Softwarepakete installiert, wirkt oft Wunder und beschleunigt alles wieder.

Im Linux Umfeld ist die Lage etwas übersichtlicher, da glücklicherweise die meisten verfügbaren Softwarepakete grundsätzlich auch im Quellcode vorliegen und klar beschrieben ist, was bei Installation und Aktualisierung verändert wird. Anders als bei den proprietären Systemen gibt es in Linux Abhängigkeiten zwischen den Softwarepaketen. Wenn ich auf einem Windows Computer etwas installiere, ist das normalerweise eine große Installationsdatei oder ein Installer, der während der Installation Dateien nachlädt, entpackt und irgendwo hinschreibt. Diese Art Softwarepaket lässt sich gut verkaufen.

Unter Linux geht es eher modular zu. Wenn ich beispielsweise auf einem Novatrend Root/Cloud Server, der mit Ubuntu läuft, den Webserver Apache installieren will, habe ich normalerweise keine grafische Oberfläche und benutze auf der Konsole den Befehl.

sudo apt-get install apache2
Das Kommando sudo zeigt an, dass der Befehl mit den Rechten des Root Users ausgeführt werden soll. Unter Linux gibt es die User und es gibt Root. Root darf alles, die User dagegen leben im „Userland“ und dürfen viele Dinge einfach nicht! (In macOS ist es genauso, in Windows ähnlich).
Das Kommando apt ruft den Advanced Package Manager auf.
Das Kommando -get zeigt an, dass man etwas haben möchte.
Das Kommando install bedeutet, dass man etwas installieren möchte (apt-get remove würde etwas deinstallieren, apt-get update etwas aktualisieren.).
Das Kommando apache2 zeigt an, das man den Webserver Apache in der Version 2 installieren möchte.
Das ist alles sehr logisch und so fragt das Ubuntu Linux zunächst nach dem Passwort von Root

[sudo] password for anon:

danach schaut es in seiner Paketliste nach, ob ein Paket mit dem Namen apache2 existiert. Die Liste liegt in /etc/apt/sources.list und erhält die Quellen, von denen Software geladen wird.

APT-Quellenliste
APT-Quellenliste

Beim Nachsehen merkt der Paketmanager, das ausser apache2 weitere Pakete installiert werden müssen, damit der Webserver funktioniert. Alle Pakete werden aufgelistet und man muss bestätigen, ob man das alles installieren will.

Building dependency tree
Reading state information... Done
The following additional packages will be installed:
apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0 ssl-cert
Suggested packages:
www-browser apache2-doc apache2-suexec-pristine | apache2-suexec-custom openssl-blacklist
The following NEW packages will be installed:
apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0 ssl-cert
0 upgraded, 10 newly installed, 0 to remove and 4 not upgraded.
Need to get 1554 kB of archives.
After this operation, 6412 kB of additional disk space will be used.
Do you want to continue? [Y/n]

Bei der Aktualisierung und Deinstallation funktioniert das genauso. Wenn man keine Veränderungen an den Dateien vorgenommen hast, kann mit diesem System wirklich alles restlos deinstalliert werden, so als wäre es niemals installiert gewesen. Das geht soweit, dass auch Distributionsupdates gemacht werden können, beispielsweise von Ubuntu 14.04 auf 16.04.

Es gibt also zwei Arten von Paketverwaltungen:

  1. Programme, die aus anderen Quellen Pakete nachladen können, um Abhängigkeiten aufzulösen, so wie eben beschrieben.
  2. Programme, die direkt die Pakete installieren oder löschen, aber keine Abhängigkeitsverwaltungs- und Konfliktlösungsmechanismen kennen.

Linux Distributionen gehören zum ersten Punkt und nutzen immer ein bestimmtes Paketformat. Red Hat, Fedora und OpenSuse benutzen beispielsweise RPM Pakete, Debian und Ubuntu deb Pakete. Die Arbeit, die in einer Distribution steckt, ist die geschickte Zusammenstellung dieser Pakete.

Wen du einen Root Server mit Linux betreibst, wirst du dich über diese Ordnung sehr freuen, denn es gibt immer einen Weg, Probleme zu lösen – IMMER 🙂

Leider ist es oft ziemlich schwer, gerade neuere Pakete die nicht zur Distribution gehören, zu installieren und zu konfigurieren. Wenn beispielsweise die neueste Webanwendung PHP7 benötigt, du aber noch ein Ubuntu 14.04 nutzt, gibt es das in den offiziellen Paketen nicht. Da du ja weisst, wo sich die Liste der Installationsquellen befindet, kannst du natürlich eine Quelle für PHP7 Pakete eintragen und dann die PHP7 Pakete auch unter Ubuntu 14.04 installieren. So eine Erweiterung kann allerdings schwer vorhersehbare Folgen für Abhängigkeiten von anderen Paketen haben. Jeder, der einen Server betreibt, hat vermutlich schon mal etwas ausserhalb der offiziellen Pakete installiert und dann sehr schnell gelernt, dass das manchmal keine gute Idee ist 🙂

An dieser Stelle setzen nun Projekte wie Docker an, die völlig unabhängig vom Paketmanager komplette Softwarepakete zur Installation anbieten. Docker kann man sich wie einen Container vorstellen, der alles notwendige enthält und eine fix und fertige Lösung bietet, beispielsweise ein Web Forum. Prinzipiell ist das eine gute Idee aber die Arbeit liegt natürlich wieder in der Konfiguration und im Zusammenspiel der Container. Nehme ich einen MySQL Docker Container und einen Apache Docker Container und verbinde sie irgendwie mit einem Drupal Container oder nehme ich einen MySQL/Apache/Drupal Container und das wars? Eine einheitliche Antwort gibt es natürlich nicht und so sammeln sich schnell ein paar Container an und die Aktualisierung ist wieder so eine Sache.

Click, snap und snappy

Bei Smartphones geht das alles auf den ersten Blick problemloser mit sogenannten Apps, aber dahinter verbergen sich natürlich die gleichen Herausforderungen.

Als Ubuntu Phone entwickelt wurde, ging man neue Wege und nutzte das Paketformat click. Für den RasberryPi wurde Snappy Ubuntu Core angeboten und nun hält das Snap Format auch im neuen Ubuntu 16.04 Einzug. Es kann mit dem existierenden deb Format koexistieren. Software kann als deb oder snap Paket angeboten werden. Der Unterschied liegt darin, dass snap Pakete, wie bei Docker, eigentlich eher komplette snap Anwendungen sind und vom Rest des System isoliert laufen. Die Snaps können  auch aufeinander aufbauen.

Snappy Ubuntu
Snappy Ubuntu

Vorteil ist die einfache Installation, Nachteil ist der erhöhte Platzbedarf, da nun benötigte Bibliotheken innerhalb eines snap Paketes und damit unter Umständen mehrfach auf einem Betriebssystem installiert werden.

Snap benutzen

Um Snap benutzen zu können muss der ubuntu-core installiert sein ( sudo snap install ubuntu-core).

Eine Übersicht über verfügbare snaps bietet der Befehl snap list. Beim ersten Aufruf entsteht folgender Dialog.

anon@server1:~$ snap list
No snaps are installed yet. Try 'snap install hello-world'.
anon@server1:~$ sudo snap install hello-world
[sudo] password for anon:
0 B / 20.00 KB [________________________________________________] 0.00 %
hello-world (stable) 6.3 from 'canonical' installed
anon@server1:~$ hello-world
Hello World!

Das Programm „hello-world“ kann ausgeführt werden werden und gibt Hello World auf der Konsole aus. Bei einem erneuten Aufruf von snap list sieht es dann so aus:

anon@server1:~$ snap list
Name Version Rev Developer Notes
hello-world 6.3 27 canonical -
ubuntu-core 16.04+20160531.11-56 122 canonical -

Entfernen lässt sich ein snap Paket mit dem Befehl

anon@server1:~$ sudo snap remove hello-world
hello-world removed

Installationsbeispiel Nextcloud

Um ein konkretes Beispiel zu zeigen, werde ich das Snap Paket Nextcloud installieren

anon@server1:~$ sudo snap install nextcloud
122.31 MB / 122.31 MB
[===========================] 100.00 % 22.35 MB/s
nextcloud (stable) 9.0.53snap1 from 'nextcloud' installed

Der Inhalt des Pakets wird im Verzeichnis /snap/nextcloud installiert. In der Liste der Snaps taucht nun auch das Nextcloud Paket auf.

anon@server1:~$ sudo snap list
Name Version Rev Developer Notes
nextcloud 9.0.53snap1 17 nextcloud -
ubuntu-core 16.04+20160531.11-56 122 canonical -

Um die Nextcloud nutzen zu können, muss die IP-Adresse des Servers im Browser aufgerufen werden. Der Installer von Nextcloud fragt noch nach Namen und Passwort des Administrators und danach ist die persönliche Cloud einsatzbereit.

Nextcloud - Snap Paket
Nextcloud – Snap Paket

Fazit

Das Snap Format bietet eine einfache Verwaltung für die Installation, Aktualisierung und Deinstallation kompletter Anwendungen in der Linux Distribution Ubuntu 16.04 LTS. Snap Pakete werden zunehmend von Softwareprojekten angeboten und können auch sogar als Universal Snap Package auf anderen Distributionen genutzt werden.

Links

Autor: Hagen Graf

consultant, author, trainer, solution finder, web architect, developer, open source lover, visionary, orator, the good old webmaster. Able to simplify!

Ein Gedanke zu „Paketverwaltung und Snaps unter Ubuntu 16.04 LTS“

Kommentar verfassen