Freie Systeme erlauben ungewöhnliche Ansätze, wie etwa NixOS mit seinem innovativen Paketmanagement.
Es gibt zwei ganz verschiedene Ideen, wie Dateien aus Softwarepaketen in einem System installiert werden sollten. Typischerweise folgen die Distributionen dem Filesystem Hierarchy Standard oder kurz FHS [1]. Er legt fest, wo welche Art von Dateien liegen sollen, damit die spätere Verwendung möglichst einfach und einheitlich funktioniert. Ausführbare Programmdateien kommen zu den Befehlen, Dokumente zu den Textdateien.
Ein Nachteil dieser Methode: Versuchen zwei Pakete gleichnamige Dateien in die vom FHS vorgegebenen Verzeichnisse zu speichern, kommt es unausweichlich zu Konflikten. Auch gelingt es mit diesem System normalerweise nicht, unterschiedliche Versionen von Paketen gleichzeitig vorzuhalten. Alle gängigen Distributionen basieren auf dieser Idee, die eine große Stringenz bei der Paketierung benötigt.
Eine leichtere Wartung der Software verspricht der zweite Ansatz: Alle zu einem Paket gehörenden Dateien speichert die Paketverwaltung in einem für jede Paketversion individuellen Ordner. Das erlaubt für jede Version der Software ein neues Verzeichnis und macht das Entfernen von Paketen extrem einfach.
Allerdings muss man auch dafür Sorge tragen, dass das System diese Verzeichnisse findet und erkennt, um die Software starten und nutzen zu können. Moderne Container- und Sandbox-Systeme wie Snap, Appimage oder Xen setzen grundsätzlich auf dieser Idee auf und führen sie noch erheblich weiter.
Installation
Bei NixOS [2] handelt es sich nun um eine Distribution, die sich ganz dem zweiten Ansatz verschrieben und ihn zum Paradigma erhoben hat. Daher unterscheidet sich auch die Installation von jener anderer Distributionen. Sie erfolgt ausschließlich über die Befehlszeile, normalerweise in einem gebooteten Live-System. Einen Installer gibt es bisher nicht; allerdings fällt die Installation im Prinzip auch nicht weiter schwer.
Dabei stehen Ihnen zwei Varianten zur Verfügung: In einem Terminal des Live-Systems bewirkt loadkeys de das Laden der deutschen Tastenbindungen. Auf der Konsole 8 ([Strg]+[Alt]+[F8]) steht dabei jederzeit die Online-Hilfe parat. Für eine grafische Desktop-Umgebung (unter KDE) müssen Sie zunächst als Root durch systemctl start display-manager den Display-Manager aufrufen. Auch hier erfolgen nun die meisten der weiteren Schritte in einem Terminal.
Das so gebootete Live-System enthält nur wenige, unbedingt notwendige Programme. Es gibt zwar einen Webbrowser, aber beispielsweise kein Mail-Programm.
Im Folgenden gehen wir von der Installation auf der grafischen Oberfläche aus (Abbildung 1), die via Gparted auf einfache Weise eine Partitionierung derFestplatte erlaubt. Die Alternativen wären die Kommandozeilenprogramme Fdisk und Sfdisk beziehungsweise Cfdisk.

Abbildung 1: Das Live-System startet minimalistisch, enthält aber bereits die Installationsanleitung.
Für die Installation von NixOS auf der Festplatte benötigen Sie mindestens zwei Partitionen: eine Swap-Partition, typischerweise etwa doppelt so groß wie das physikalisch verbaute RAM, sowie eine Systempartition. Letztere sollten Sie mit dem Label nixos versehen (Abbildung 2). Gparted bietet die Funktion im Kontextmenü zu den Partitionen als Label File System an. Die weitere Installationsanleitung verwendet dieses Label beispielsweise beim Mounten (Listing 1, erste Zeile), dem nächsten Schritt [3].

Abbildung 2: Zur Partitionierung verwenden Sie am einfachsten Gparted. Denken Sie daran, die Systempartition mit nixos zu bezeichnen.
Listing 1
# mount /dev/disk/by-label/nixos /mnt # swapon /dev/Swap-Partition
Anschließend aktivieren Sie für die weiteren Schritte die Auslagerungspartition, was sich besonders bei relativ wenig RAM (4 GByte oder weniger) empfiehlt (Listing 1, zweite Zeile). Danach lässt sich überprüfen, ob beides erfolgreich war: Ein Aufruf von Df sollte eine Zeile mit /mnt anzeigen, in der die Root-Partition eingebunden wird. Free zeigt unter Swap: ... an, wie viel Swap-Speicher bereitsteht.
Der nächste Schritt ist dann typisch für deklarativ organisierte Systeme: Als Administrator geben Sie eine Konfiguration vor, die dann bei der Installation umgesetzt wird. Sie müssen diese Konfiguration, die bei NixOS aus zwei Teilen besteht, nicht manuell erzeugen, sondern greifen dafür auf ein spezielles Werkzeug zurück: nixos-generate-config (Listing 2). Es erzeugt zwei Steuerdateien (Zeile 2 und 3), von denen die zweite (für die Softwarekonfiguration) die vorher erzeugte Hardwarekonfiguration einliest.
Listing 2
# nixos-generate-config --root /mnt
writing /mnt/etc/nixos/hardware-configuration.nix...
writing /mnt/etc/nixos/configuration.nix...
Beide Dateien sollten Sie sich unbedingt vor den weiteren Schritten genau ansehen. In der Hardwarekonfiguration finden Sie unter anderem den Abschnitt aus Listing 3. Die Zeile fsType = "btrfs" definiert dabei das in der Root-Partition verwendete Dateisystem, und unter device = ... finden Sie die Partition. Beides muss unbedingt stimmen, damit NixOS bootet. Diese Datei definiert auch die Swap-Partition, was Sie ebenfalls überprüfen sollten.
Listing 3
fileSystems."/" =
{ device = "/dev/disk/by-uuid/9bc0d4bf-1763-4b58-9b68-a04c02b33576";
fsType = "btrfs";
};
Die zweite Konfigurationsdatei configuration.nix müssen Sie nun unbedingt manuell anpassen. In der Zeile boot.loader.grub.device = muss etwas wie "/dev/sda"; stehen, damit Grub richtig installiert wird. Für eine UEFI-Installation gibt es eine zusätzliche Anleitung [4].
Bei weiteren Anpassungen in dieser Datei sollten Sie Vorsicht walten lassen. Einige bereits vorhandene Einträge sind in der automatisch erzeugten Konfigurationsdatei auskommentiert, beispielsweise services.xserver.enable = true;, was den X Server automatisch startet. Durch services.xserver.layout = "de"; aktivieren Sie hier die deutsche Tastenbelegung und mit services.xserver.xkbOptions = "eurosign:e"; das Euro-Zeichen.
Außerdem benötigen Sie für die grafische Oberfläche einen Display-Manager, wobei Sie die Wahl zwischen mehreren Varianten haben. Die Option services.xserver.desktopManager.xfce.enable = true; aktiviert beispielsweise XFCE 4, was aufgrund des geringen Ressourcenbedarfs bei älteren Systemen eine gute Wahl darstellt [5].
Was nun geschieht, lässt sich mit der Netzwerkinstallation vieler anderer Systeme vergleichen. Durch Aufruf von nixos-install starten Sie einen längeren Prozess, der die benötigten Pakete holt, deren Abhängigkeiten auflöst und die Software auf der Zielpartition speichert. Die Ausgaben auf dem Terminal lassen Sie den Vorgang beobachten (Listing 4).
Listing 4
[...] /nix/store/zvfvci02d7j82xdycqa436skvg3cd4an-file-5.32... /nix/store/zw8cvwhafg8pxj3bj9qs3ilinpsh0bz3-etc-nixos.conf... /nix/store/zxrddivb26vzfmd3ggn5933ph72pp09r-unit-network-online.target... warning: unknown setting 'signed-binary-caches' importing serialized closure /tmp/tmp.8kbtfTxFHF/channel.closure to /mnt... warning: unknown setting 'signed-binary-caches' /nix/store/4grnqqpw8myh0yvji57nn0k3fkmx8zhg-nixos-17.09.3205.12512f25e9e setting the system closure to '/nix/store/0w2yrx6520c819s0rkyjfcapq11s95bs-nixos-system-nixos-17.09.3205.12512f25e9e'... warning: unknown setting 'signed-binary-caches' copying channel... finalising the installation... updating GRUB 2 menu... installing the GRUB 2 boot loader on /dev/sda... Installing for i386-pc platform. Installation finished. No error reported. setting up /etc... Initializing machine ID from random generator. setting root password... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully installation finished!
Lassen Sie sich nicht durch die vielen Warnungen beunruhigen; die Installation sollte dennoch erfolgreich durchlaufen. Ansonsten bleibt Ihnen nichts anderes übrig, als die Konfigurationsdateien so zu verändern, dass Nixos-install seine Arbeit bis zum Ende durchläuft [6]. Im letzten Schritt fordert der Prozess Sie auf, ein Root-Passwort zu setzen. Mit reboot fahren Sie das Live-System herunter und starten das neu installierte System.
Downgrade?
Die letzten Neuerungen von NixOS spielten sich hauptsächlich beim stark verschlankten Paketmanager Nix 2.0 ab. Viele aus den Vorgängerversionen bekannte Befehle gibt es nicht mehr, beispielsweise nix-pull, nix-generate-patches, bsdiff, bspatch, aber auch copy-from-other-stores und nix-push. Der Befehl nix fasst die Funktionen dieser Kommandos zusammen und soll künftig alle nix-*-Befehle ersetzen. Eine weitere Vereinheitlichung führt in Richtung JSON. Viele Befehle verfügen heute noch über eine Option --json, um Ausgaben in diesem Format zu erzeugen.
Praxis
Sie ersparen sich viel Ärger, indem Sie sich zunächst auf kleine Änderungen an den Konfigurationsdateien beschränken. Heben Sie sich Experimente für später auf, sobald Sie das System besser kennen.
NixOS kennt dabei zwei Varianten von Software-Installationen: Die bei der Einrichtung (deklarativ) und Ad-hoc-Installationen. Letztere lassen sich zur Laufzeit mit dem in vieler Hinsicht exotischen Paketmanager Nix vornehmen. Die Tabelle “Paketmanagement mit Nix” fasst die wichtigsten Befehle zur Paketverwaltung zusammen.
|
Aufgabe |
Befehlszeile |
|---|---|
|
Software installieren |
|
|
Software aktualisieren |
|
|
System aktualisieren |
|
|
Paket entfernen |
|
|
Paketliste aktualisieren |
|
|
Pakete suchen |
|
|
Pakete mit Muster suchen |
|
|
Installierte Pakete anzeigen |
|
|
Repositories anzeigen |
|
|
Repository hinzufügen |
|
|
Repository entfernen |
|
Das Kommando nix-env -qaP listet alle momentan verfügbaren Pakete auf. Davon gibt es nicht übermäßig viele, doch Sie haben verschiedene Möglichkeiten, die Liste zu erweitern.
Die Anzeige nutzt einen Less-Pager, um die Ergebniszeilen anzuzeigen. Mit der Tastenkombination [Umschalt]+[**7**] suchen Sie in dieser Ausgabe nach bestimmten Zeichenketten. Mit [N] springen Sie dabei zum nächsten Treffer; [Umschalt]+[N] erlaubt rückwärts zu suchen.
Die Tastenfolge [**-**]+[J]+[**2**]+[**2**] bewirkt, dass die Treffer nicht mehr am oberen Rand erscheinen, sondern in Zeile 22, also etwa in der Bildschirmmitte. Durch nix-env -i Paket installieren Sie ein gewünschtes Paket; nix-env --help zeigt Ihnen die weiteren Optionen dieses Befehls an.
Eine weitere, umfangreiche Paketquelle finden Sie im Repository (hier “Kanal” genannt) NixPKGS. Bei Bedarf aktivieren Sie ihn über Git (Listing 5). Derzeit arbeiten die Entwickler noch an Version 18.03 der NixPKGS; zu Redaktionsschluss stand eine Beta-Version zur Verfügung.
Listing 5
# git init # git remote add channels git://github.com/NixOS/nixpkgs-channels.git
Benutzer
Voreingestellt erzeugen Sie bei der Installation nur einen Root-Account. Sie sollten daher unbedingt so bald wie möglich einen neuen, nicht privilegierten Benutzer anlegen. Dazu greifen Sie auf das Kommando useradd Name zurück, wofür Sie administrative Rechte auf dem System benötigen. Vergessen Sie nicht, explizit per passwd Name ein Passwort für den neuen Nutzer zu vergeben. Danach steht Ihnen der Account wie gewohnt beim Anmelden zur Verfügung.
Fazit
Der Mehrwert von NixOS erschließt sich in der Praxis nur sehr langsam. Zur heiklen Konfiguration kommt ein wenig aktueller und recht beschränkter Softwarebestand, der viele interessante Anwendungen vermissen lässt. Auch das Fehlen guter Werkzeuge zur Systemverwaltung erleichtert das Einarbeiten nicht gerade. Die erstrebte Unabhängigkeit von FHS erkauft sich NixOS durch eine extrem unübersichtliche Verzeichnisstruktur unter /nix/store/ und durch eine Unmenge an Symlinks. Die Frage, ob NixOS auf einem guten Weg ist, könnte sich bald erledigen: Zu stark drängen die echten Containersysteme vor und lassen wenig Platz für Exoten wie NixOS.
Infos
-
FHS: https://de.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
-
Grundideen von NixOS: https://en.wikipedia.org/wiki/NixOS
-
Installationsanleitung: https://nixos.org/nixos/manual/index.html#sec-installation
-
UEFI-Installation: https://nixos.org/nixos/manual/index.html#sec-uefi-installation
-
Oberfläche einrichten: https://nixos.org/nixos/manual/index.html#sec-x11
-
Installationsoptionen: https://nixos.org/nixos/manual/#ch-installation





