2016-08-12 2 views
8

Während die Nix/OS Wiki und Handbücher viele ausgezeichnete Informationen liefern, habe ich immer noch Schwierigkeiten, einen architektonischen Überblick zu bekommen. Entschuldigung für die Quantität und Naivität der Fragen; fühlen sich frei, um eine Teilmenge zu beantworten:Eine Übersicht über Nix/OS Architektur?


1. Was ein Nix Paket ausmacht?

Aus meiner Lektüre des Handbuchs ein Nix Paket ist:

        i. Ein Nix-Ausdruck, der die Quelle und die Abhängigkeiten abruft, die zum Erstellen benötigt werden.

        ii. Ein builder Skript.

        iii. Eine Auflistung auf all-packages.nix.

Die Quelle und die Binärdatei zusammen mit den generierten Ableitungen werden in die nix/store eingegeben, und Kanäle automatisieren Aktualisierungen und halten sie durch Verwendung eines gemeinsamen Binärcaches effizient auf dem neuesten Stand.

        a. Ist das korrekt und vollständig?

        b. Wo sind die .nix-Ausdrücke gespeichert?

        c. Kann ich einfach ein Paket Ordner zwischen den nix/store s verschiedener Maschinen kopieren, wenn sie die gleiche Architektur haben?


2. Was eine Nix Umwelt darstellt?

        a. Wo und wie sind Umgebungen definiert?

        b. Was ist mit Benutzerprofilen?

        c. Wie funktioniert der Befehl nix-shell? Bezieht es sich auf den Befehl nix-env?


3. Was ist die Beziehung zwischen NixOS der configuration.nix und Nix-Umgebungen?

Aus dem Handbuch und Wiki Ich sammle NixOS ist ein Nix-Paket, und das Nix erstellt eine grundlegende Systemumgebung basierend auf configuration.nix.

        a.Ist das wahr, und wenn ja, was machen dann nixos-rebuild und nixos-install?

        b. Ist es möglich, den Prozess umzukehren, d. H. Komprimierte Paket- oder Konfigurationsdateien aus einer Umgebung zu generieren?

        c. Was kann ich mit NixOS machen, was ich mit Nix nicht machen kann?


4. Was sind Best Practices bei der Verwendung von Nix für die Erstellung von portablen und reproduzierbaren Umgebungen mit Kollegen zu teilen?

        a. Welche verschiedenen Ansätze gibt es, Desktop-, Server- und Entwicklungsumgebungen gemeinsam zu nutzen?

        b. Was sind die Anwendungsfälle für diese Ansätze?

        c. Was sind ihre Vor- und Nachteile gegenüber Portabilität und Zugänglichkeit?


5. Öffnen Sie Bonus-Frage: was sonst noch wichtig ist über Nix/OS Architektur zu beachten?

Antwort

8

1.a

Ja, können Sie Nix auch als Build-Tool anzuzeigen, die /nix/store als Cache verwendet. Nix ist ein Paketmanager ist nur ein Nebeneffekt dieses Entwurfs.

1.b

Wo Ihre nichts Ausdrücke sind, hängt von der Konfiguration aus. Um das herauszufinden, schauen Sie in Ihre $ NIX_PATH-Variable, die auf Orte zeigt, wo sich Kopien von nixpkgs repo befinden. Diese Kopien waren (manchmal sind) verwaltet vom nix-channel Werkzeug, aber in der Zukunft werden Sie nixpkgs wie zeigen könnte:

export NIX_PATH=nixpkgs=https://github.com/NixOS/nixpkgs/archive/16.03.tar.gz 

Sie können mehr über NIX_PATH in diesem Blog-Eintrag lesen über nix search paths

1.c

Ja, Pakete können zwischen Maschinen kopiert werden. Eigentlich gibt es dafür schon ein Tool: nix-copy-closure.

2.a

Ich glaube, Sie hier über Nix Umgebungen sprechen, die Sie mit nix-env verwalten. Wir bezeichnen diese normalerweise als Nix-Profile. Was ich über den nix-Suchpfad (NIX_PATH Variable) in Punkt 1 gesagt habe, trifft nicht wirklich auf nix-env zu.

Das Tool nix-env verwendet ~/.nix-defexpr, das standardmäßig Teil von NIX_PATH ist, aber das ist nur Zufall. Wenn Sie NIX_PATH leeren, wird nix-env immer noch Ableitungen aufgrund von ~/.nix-defexpr finden können.

2.b

Ein Benutzerprofil ist nur nichts Umgebung (beschrieben in 2.a), die Sie sonst etwas ändern können, zB:

nix-env --switch-profile ./result 

wo ./result ist etwas in /nix/store oder etwas, das in /nix/store zeigt. Dann schaltet der obige Befehl den symbolischen ~/.nix-profile mit Ihrer ./result um.

2.c

nix-shell tatsächlich näher an den nix-build Befehl. Lassen Sie mich zuerst erklären, was nix-build tut.

nix-build wird verwendet, um .nix Dateien zu erstellen (auch Ableitungen, aber dafür muss ich erklären, was eine Ableitung ist). Ein Beispiel, wie Sie nix-build verwenden würden:

nix-build something.nix 

Der obige Befehl würde erzeugen eine ./result Symlink, die in /nix/store auf etwas verweist. Der Nix-Befehl realisiert das Erstellen und Speichern der Ausgabe in /nix/store.

nix-shell auf der anderen Seite wird genau das tun, was nix-build tut, außer es der Erbauer Skript nicht Trigger wird und Sie in dieser Umgebung sinken. Auf diese Weise erhalten Sie eine Umgebung, in der Sie nix-Ausdrücke entwickeln können, die auch außerhalb des nixpkgs-Repositorys liegen können (z. B. Ihre privaten Projekte).

3.a

Nichts installiert die Binär- und NixOS schafft Konfiguration für die binäre und hakt mit dem Init-System (systemd derzeit) auf.

3.b

Nein, das ist es, was andere Konfigurationsmanager tun. Nix funktioniert andersherum. Der Unterschied im Ansatz ist in dieser blog post gut beschrieben.

3.c

Wie gesagt in 3.a, nichts wird nur Binärdateien installieren, während NixOS auch dafür sorgen, dass die binären läuft.

4.a/b/c

Grundsätzlich gibt es keine Begrenzung, tun, wie Sie denken, Sie passt. Sobald Sie die grundlegenden Konzepte verstehen, finden Sie, was am besten für Sie funktioniert. Sehen Sie sich die dotfiles/Konfigurationen anderer an und haben Sie Meinungen.

Ich benutze my collection von Nixos Konfigurationen, um Laptops für meine Familie mit Hilfe des system.autoUpgrade Dienstes zu verwalten.

Um eine (Build) reproduzierbare Umgebung zu erstellen, schrieb ich vor einiger Zeit a blog post.

5.

Mein persönlicher Favorit Tool, das (oder ist bereits hier) ist vulnix kommt. Dies überprüft Ihr aktuelles System/Projekt gegen aktuelle Schwachstellen (CVEs). Und das unterscheidet nix von anderen, zumal es so einfach zu bedienen ist (kein Enterprise-Setup).

Ein weiterer Anwendungsfall, den ich für nix fand, ist die Erstellung von reproduzierbaren Docker-Bildern mit dockerTools helpers.

Verwandte Themen