GoboLinux, NixOS und Bedrock blühen im Verborgenen

Evolutionär

Im Linux-Umfeld gedeihen seit Langem Distributionen, die bekannte Pfade verlassen und neue Ansätze und Techniken wählen. Systemd-Entwickler Lennart Poettering greift diese gerne auf und lässt sich zu neuen Ideen inspirieren.

Je nach Blickwinkel erscheint die schier unüberschaubare Menge an Linux-Distributionen doch nicht so unendlich vielfältig: Die überwiegende Mehrheit richtet sich zum Beispiel nach dem Filesystem Hierarchy Standard (FHS) [1], der vorgibt, dass die 13 einschlägig bekannten Verzeichnisse oder entsprechende symbolische Verknüpfungen wie /usr, /bin oder /home im Stammverzeichnis liegen müssen. Bei der Installation eines Pakets verteilen die Paketmanager die einzelnen Dateien dann üblicherweise nach dem Gießkannenprinzip im System.

Doch es gibt auch Projekte, die in dieser Hinsicht vieles anders machen und damit richtungsweisend für zukünftige Linux-Distributionen sein könnten. Dabei geht es etwa um Systeme mit verändertem FHS, Aktualisierungen mit Rollback-Funktion, doppelte Dateisysteme, Apps in App-Stores oder Container und zustandslose Systeme [2]. Die verwendeten Techniken sind nicht unbedingt alle neu; teilweise finden sie sich sogar schon seit längerer Zeit in BSD oder Solaris oder wurden von anderen Betriebssystemen wie NeXTStep [3], AtheOS [4] oder BeOS  [5] beeinflusst. Für Linux-Distributionen geben sie in Kombination jedoch neue Wege vor.

GoboLinux

Beschränken wir unseren Blick auf Linux-Distributionen im weitesten Sinne, so war GoboLinux die erste Distribution, die bei der Paketverwaltung gänzlich neue Wege ging. Erstmals 2003 veröffentlicht, ging es mit GoboLinux bis 2008 stetig voran. Die Distribution verschwand danach allerdings in der Versenkung, um sich wie Phönix aus der Asche wieder zu erheben: Mitte 2014 erschien wieder eine neue Version [6].

GoboLinux (Abbildung 1) sortierte als erste Distribution in Missachtung des FHS alle Programme in jeweils einem eigenen Verzeichnis unter /Programs ein und verteilte sie nicht wie traditionell üblich über das gesamte Dateisystem.

Abbildung 1: Die aktuelle Version von GoboLinux setzt auf Enlightenment 18 als Desktop-Umgebung.

Der erste Blick auf den Root-Dateibaum von GoboLinux zeigt statt der üblichen Verzeichnisse /etc, /usr oder /var die Ordner Depot, Files, Mount, Programs, System und Users (Abbildung 2). Die traditionelle Sicht auf den Linux-Dateibaum, den die eigens dafür entwickelte Kernel-Erweiterung GoboHide versteckt, erscheint über symbolische Links unter /System/Index. Physisch liegt aber jedes Paket mit allen seinen Dateien in einem eigenen Verzeichnis.

Abbildung 2: Im Root-Ordner von GoboLinux fehlen die üblichen Verdächtigen wie /var, /user oder /home.

Die Installation eines Programms beinhaltet daher lediglich das Auspacken in ein Unterverzeichnis von /Programs und eine abschließende Aktivierung, die im Erstellen der symbolischen Links besteht. Neben den ausführbaren Dateien enthält ein Paket auch Informationen über Abhängigkeiten zur Laufzeit, zu den benötigten Benutzer- und Gruppen-Einstellungen, zu den gesetzten Umgebungsvariablen sowie zur Konfiguration. Das Mantra der GoboLinux-Entwickler lautet dabei: Unser Paketmanager ist das Dateisystem.

Diese Praxis bietet laut Aussagen der Entwickler mehrere Vorteile. So dürfen beispielsweise nicht nur mehrere Versionen eines Programms parallel installiert sein, sondern lassen sich auch gleichzeitig ausführen. Die verschiedenen Versionen liegen dann in Verzeichnissen wie /Programs/Firefox/32 und /Programs/Firefox/33 oder /Programs/GCC/4.7.2-1 und /Programs/GCC/4.9.1-5. Die tägliche Handhabung des Systems heben die Entwickler als weiteren Vorteil hervor. Alle installierten Programme listen Sie etwa mit ls /Programs auf, die unterschiedlichen Versionen dann mit ls /Programs/Anwendung. Den Inhalt eines Programmverzeichnisses gibt zum Beispiel ls /Programs/Iceweasel/33 aus.

Auch der Umgang mit Abhängigkeiten fällt dadurch leichter. Eine Textdatei beschreibt, von welchen Programmen und Bibliotheken ein Paket abhängt, die Überprüfung des Vorhandenseins erfolgt dann ganz einfach durch einen Blick in /Programs. So lässt sich das System nach einer fehlerhaften Paketaktualisierung schnell wieder in einen lauffähigen Zustand versetzen. Dabei braucht GoboLinux keine zentrale Paketdatenbank. Das Entfernen von Programmen besteht einfach im Löschen des Ordners unter /Programs. Dadurch zerbrochene, nicht mehr benötigte Symlinks entsorgt das Tool GoboLinux Listener

Zwei wichtige Werkzeuge bei GoboLinux sind Scripts und Compile. Scripts kümmert sich um die Systemadministration, wie etwa das Installieren und Entfernen von Paketen, das Signieren und Überprüfen der GPG-Schlüssel oder die Überprüfung von Abhängigkeiten. Compile obliegt die Aufgabe, Programme nachträglich einzuspielen, die im Rahmen des Installationsprozesses nicht auf der Festplatte landen. Dabei bedient es sich vorgefertigter Rezepte [7], die im einfachsten Fall nur aus zwei Zeilen bestehen. Darüber erfährt Compile, unter welcher URL oder in welchem Git-Repository der Quellcode liegt und mit welcher Methode sich der Code bauen lässt.

Das Rezept gibt vor, ob ein CMakefile oder ein Configure-Script existiert, ob es sich um Python- oder Perl-Code handelt oder ob etwa Scons zum Einsatz kommen soll. Wie üblich lassen sich dem Build-Prozess Optionen mitgeben. Compile orientiert sich stark an Gentoos Portage [8], wurde aber an die spezielle Dateisystem-Hierarchie von GoboLinux angepasst.

Die aktuelle Veröffentlichung GoboLinux 0.15 [9] setzt auf Kernel 3.14.2 und erstmals auf Enlightenment 18 als Desktop-Umgebung. Dazu kommt eine speziell vorkonfigurierte ZSH als Shell. Die Auswahl an mitgelieferten Programmen enthält unter anderem LibreOffice 4.2.3.3, Firefox 28.0, PulseAudio 5.0, SysVinit 2.88dsf und GCC 4.8.2. Viele nicht von Haus aus mitgelieferten Programme machen Sie per Rezept und dem Compile-Script schnell einsatzbereit. Dazu zählen auch proprietäre Anwendungen, die GoboLinux generell nicht vorinstalliert.

NixOS

In Bezug auf die Möglichkeit zum Installieren mehrerer Anwendungsversionen und eine konsistente Systemaktualisierung wählen der Paketmanager Nix [10] und die darauf aufbauende Distribution NixOS [11] einen ähnlichen Ansatz wie GoboLinux, wenn auch mit anderen Mitteln. Weitere Ähnlichkeiten betreffen das Mischen von Binärdateien und aus dem Quellcode zu erstellende Anwendungen sowie die Möglichkeit von Rollbacks.

Gemeinsam mit anderen Distributionen, wie etwa Fedora ab Version 17, hat sich auch NixOS dem Usr-Merge-Vorhaben [12] angeschlossen. Dabei leiten symbolische Links die Verzeichnisse /bin, /sbin und /usr/sbin nach /usr/bin, sodass sämtliche ausführbare Dateien in /usr/bin vorliegen. NixOS geht dabei noch einen Schritt weiter und verlegt auch /lib, /lib32 und /lib64 an diese Stelle (Abbildung 3).

Abbildung 3: Die veränderte Dateisystemhierarchie von NixOS.

Als weitere Abweichung fehlt bei NixOS das Verzeichnis /opt, ersatzweise gibt es aber /nix. In dessem Unterverzeichnis /store liegen sämtliche installierten Anwendungen inklusive all ihrer Dateien in eigenen Unterverzeichnissen – das Prinzip nutzt auch GoboLinux.

Für den Bau von Kernel, Anwendungen und allen weiteren benötigten Paketen verwendet NixOS ebenfalls fertige Beschreibungen. Diese leisten allerdings deutlich mehr als die Rezepte von GoboLinux. So legen Sie über Anpassungen der Datei /etc/nixos/configuration.nix etwa Spezifikationen des Systems fest oder steuern benötigte Funktionalitäten. Eine Spezifikation für SSH finden Sie als einfaches Beispiel in Listing 1.

Listing 1

{
  boot.loader.grub.device = "/dev/sda";
  filesystems."/".device = "/dev/sda1";
  services.sshd.enable = true;
  services.openssh.permitRootLogin = "no";
}

Der danach abgesetzte Befehl nixos-rebuild switch besorgt den Quellcode von SSH, kompiliert ihn und schreibt die gewünschte Konfiguration an die entsprechenden Stellen, sodass ab dem nächsten Neustart der SSH-Daemon standardmäßig läuft. Im Gegensatz zu herkömmlichen Linux-Systemen finden Aktualisierungen und Konfigurationsänderungen jeweils definiert statt: Das System schließt den Rebuild-Prozess entweder erfolgreich ab oder gar nicht.

Klappt alles, liegt anschließend ein aktuelles und funktionierendes System vor, ohne dass, wie bei herkömmlichen Distributionen, eine falsche Konfigurationsoption beim nächsten Systemstart zu Problemen führen kann. Größere Änderungen testen Sie reibungslos parallel zum laufenden System in einer eigens erstellten virtuellen Maschine. Mittels nixos-rebuild build-vm starten Sie eine Qemu-VM mit einem die Änderungen umfassenden Image.

Der neue Systemstand erscheint nach einer Aktualisierung gemeinsam mit älteren Snapshots künftig beim Hochfahren des Systems im Bootmanager (Abbildung 4). Ein Rollback auf den Zustand vor der letzten Aktualisierung lässt sich aber ebenso über den Befehl nix --rollback erreichen. Ein Zurückspringen auf noch ältere Generationen gelingt mit nix-env --switch-generation, gefolgt von der Nummer der gewünschten Generation. Nach dem Löschen einer oder mehrerer Generationen beseitigt nix-store --gc die entsprechenden Pakete aus dem Store.

Abbildung 4: Über den Bootmanager starten Sie die verschiedenen gespeicherten Snapshots von NixOS.

Diese Funktionen des Paketmanagers Nix, der ab 2003 im Rahmen einer universitären Studie der Universität zu Delft in den Niederlanden entstand, werden über eine eigens für ihn geschriebene, rein funktionale und deklarative Programmiersprache realisiert. Diese im englischen als "purely functional" bezeichnete Programmiermethode unterscheidet sich von der imperativen Programmierung dadurch, dass sie Funktionen im mathematischen Sinn betrachtet.

Dies ermöglicht eine recht einfache automatisierte Verwaltung von Abhängigkeiten, die Koexistenz von multiplen Versionen eines Pakets oder des gleichen Pakets mit verschiedenen Parametern sowie "atomare" Aktualisierungen, die im Falle eines fehlgeschlagenen Upgrades automatisch auf den letzten funktionierenden Zustand zurückrollen.

Atomare Upgrades lassen die Software während der Aktualisierung zu keinem Zeitpunkt in einem inkonsistenten Zustand, wie dies bei vielen Paketmanagern für DEB oder RPM prinzipbedingt geschieht. Zudem arbeiten Aktualisierungen nicht destruktiv: Sie überschreiben also keine alten Paketversionen, was einen Rollback auf eine ältere Version erst ermöglicht. Eine 160 Bit lange kryptografische Hash-Summe begleitet das Paket während seines Lebenszyklus und macht es eindeutig identifizierbar (Abbildung 5).

Abbildung 5: NixOS speichert über den Nix-Store installierte Anwendungen vollständig in eigene Verzeichnisse.

Das Auflösen von Abhängigkeiten geschieht nach einem Modell, das sich an Hardlinks [13] anlehnt. Dabei entfernt das System ein Paket, von dem wiederum andere Pakete abhängen, erst dann, wenn kein Paket mehr auf dieses verweist. Neue Konfigurationen eines Pakets lassen sich zur Laufzeit in einer dazu jeweils erstellten virtuellen Maschine testen, ohne vorhandene Konfigurationen zu überschreiben. Nachteil der Atomic Updates: Sie verursachen einen gesteigerten Bedarf an Festplattenplatz, da alte Programmversionen so lange erhalten bleiben, bis Sie diese manuell entfernen.

Die aktuelle Version NixOS 14.4 liegt als Live-CD zur Installation auf 32- und 64-Bit-Systemen sowie als VirtualBox-Appliance im OVA-Format für den Betrieb in einer VirtualBox vor. Die Entwickler stellen auch eine NixOS-Instanz für die Amazon-EC2-Cloud bereit. Der Aufwand einer Installation von NixOS lässt sich sowohl vom Zeitaufwand als auch vom benötigten Kenntnisstand mit einer Installation von Arch Linux vergleichen. Der Paketmanager Nix steht auch für andere Distributionen wie Debian, Fedora, Arch, FreeBSD und sogar auch unter OS X zur Verfügung.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...