Das Titelthema im ADMIN 04/14 "Vernetzt speichern" sind Netzwerkdateisysteme, etwa Samba 4, verteilter Storage mit Ceph & GlusterFS und der Unix-Klassiker ... (mehr)

Rebuild

Das Gesamtsystem wird zusätzlich zum Paketmanager noch mit einem Programm namens »nix-rebuild« gemanagt. Wie schon beim Abschnitt über die Installation erklärt, ist die gesamte Konfiguration eines NixOS-Systems in der Datei »configuration.nix« gesammelt, die noch dazu sehr gut lesbar ist ( Listing 2 ). Mit einem Aufruf von »nixos-rebuild test« lässt sich der Build testen, während »nixos-rebuild switch« den Bootmanager auf das neu erzeugte System umstellt ( Abbildung 3 ).

Listing 2

configuration.nix

 

Abbildung 3: Ein System-Rebuild geht alle Abhängigkeiten durch und aktualisiert die Boot-Konfiguration.

Wieder geht das Nix-Tool die Abhängigkeiten des Systems durch (Abbildung  4) und installiert gegebenenfalls neue Pakete, die wegen der Konfiguration erforderlich sind. So genügt es beispielsweise, wie in Listing 2 das Desktop-System auf XFCE einzustellen. »nix-rebuild« sorgt dann dafür, dass die XFCE-Pakete inklusive Abhängigkeiten installiert werden.

Abbildung 4: Die Abhängigkeiten, die beim Neubau des Systems aufgelöst werden.

Neben der beschriebenen Test-Variante des Rebuilds bietet NixOS sogar noch die Möglichkeit, eine virtuelle Maschine des neuen Systems zu erzeugen. Dazu erzeugt ein Aufruf von »nixos-rebuild build-vm« neben dem neuen System auch ein Skript namens »./result/bin/run-nixos-vm« , das ein Image erzeugt und es mit dem Qemu-Emulator startet (der – sofern vorhanden – KVM verwendet).

Um die Konfiguration von Diensten zu ändern, empfiehlt sich ein Blick in die vorhandenen Nix-Definitionen, die festlegen, welche Parameter dazu zur Verfügung stehen. Sie finden sich wie die andere Nix-Einstellungen unterhalb von »/etc/nix« . Für den SSH-Daemon sind die Optionen in »/etc/nixos/nixpkgs/nixos/modules/services/networking/ssh/sshd.nix« hinterlegt. Zum Beispiel findet man dort die Einstellung für das Root-Login, wie es in Listing 2 verwendet wird, und die Startup-Datei für Systemd.

Nix-Dateien

Statt fertige Programme und Daemons zu verwenden, kann man natürlich auch eigene Pakete mit eigener Software schnüren. Dazu muss man sich die Konfigurationssprache aneignen, in der die Nix-Paketdefinitionen geschrieben sind. Wie schon mehrfach erwähnt, orientiert sich Nix an funktionalen Programmierprinzipien, dementsprechend muss der Anwender für ein Paket eine Funktion definieren.

In der Nix-Sprache wird eine Funktion mit geschweiften Klammern und einem Doppelpunkt eingeleitet: »{stdenv, perl}:« . Die beiden Strings in den Klammern sind die Argumente für die Funktion, die nach dem Doppelpunkt definiert wird, und stehen für die Pakete, von denen das zu definierende Paket abhängt. Im Beispiel ist dies das Standard-Paket, das Voraussetzung für die meisten Nix-Pakete ist, denn es steht für eine Standard-Unix-Umgebung, beispielsweise die GCC-Compiler, die Bash-Shell, die Basis-Tools wie »cp« , »grep« , »tar« und so weiter.

Der Standard-Weg für den Bau eines Pakets ist die sogenannte Ableitung (Derivation) von einem anderen Paket. Dafür bietet das Stdenv-Paket die Funktion »mkDerivation« . Darin füllt man einige Felder aus, um beispielsweise anzugeben, wie eine Software kompiliert wird. Lässt man einen Eintrag weg, verwendet Nix die Default-Einstellung der Derivation. Mehr Informationen zum Schreiben von Nix-Dateien sind im Manual des Nix-Tools zu finden [2] .

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023