Endlich ist sie da. Die Spezial Sendung zu NixOS. Felix und Jörg sind NixOS Jünger und lassen sich von Ingo mal befragen wie Nix und NixOS so funktionieren.
Was ist Nix?
Vieles aber vorallem ein Paketmanager für Linux und andere unixoide SystemeGleiche Liga wie apt (debian-alike), pacman (archlinux), dnf (fedora)Aber einzigartige Funktionen, u.aatomare Upgrades/Downgradeskonfliktfreie Installation verschiedener Versionen eines PaketesMehrbenutzerunterstützungVergleich Apt mit Nix
Befehl: apt install sl (die hässliche Eisenbahn)Lädt PaketlisteWas muss installiert werden? (ncurses, libc)Versionskonflikte?LSB-Verzeichnisstruktur:/usr/bin/sl/usr/share/man/man1/sl.1.gznix-shell -p sl (zum ausprobieren)Paketliste == nixexprs: (ein Art Bauanleitung für alle Pakete)berechnet Bauanleitung für slcheckt Binärcachestatt LSB, berechnet Pfad für das Paket /nix/store/-sl-:./bin/sl./man/man1/sl.1.gzBauanleitung einzigartig und vollständig -> einzigartiger PfadFunktionales Paketmanagement
Jedes Paket ist isoliert (sieht nur seine Abhängigkeiten)Reproduzierbar (Selbe Quellen/Befehle beim Bauen -> selbes Ergebnis)Generisch (nicht auf Sprache/Technologie beschränkt, baut Skripte, z.B Shell, setzt Umgebungsvariablen)verlässlich: alle Abhängigkeiten sind vollständig, Updates überschreiben alte Versionen nicht -> Rollbacks möglichEffizient: nur notwendige Schritte beim Neubauen und aktualisieren, Abhängigkeiten nur einmal vorhandenNix-Projekt
NixNixpkgsNixOSHydraNixOpsNixos-Konfiguration
deklarative KonfigurationKonfigurationsmanagement für lauNix - Funktionsweise
Idee: Alle packages werden isoliert voneinander:/nix/store/rpdqx...-firefox-3.5.4Pfad: 160-bit kryptografischen Hash aller Paketabhängigkeiten:Quellen, Bibliotheken, Kompiler, BuildskripteNix - Expressions
Nix Pakete werden mit Nix gebaut!jede Paketbeschreibung eine FunktionEingabe: Abhängigkeiten des PaketesAusgabe: Derivation -> Pfadkennt die Reihenfolge: Baut Abhängigkeiten vorher selbst (keine Zyklen)implizite Laufzeitabhängigkeitenlazy evaluationNixpkgs
source on github>13.000 Pakete für x86_64 linuxcontributorsSearch NixOS packagesAbstraktionen für die meisten Buildsysteme(*alle* Haskellpakete)Aktuelle unterstützte Platformen (Binärpakete)Linux: (legacy: i686), x86_64, (aarch64)Mac OS X: x86_64bietet Abstraktion (Magie) für Buildsysteme/Sprachspezifische PaketmanagerPakete sind einfach zu bauennixpkgs/nixos
NixOS ist Bestandteil von Nixpkgs689 ModuleSystemeinstellungen (Zeitzone, Fonts, Benutzer)Services (sshd, nginx, openstack, gitlab, …)Hydra
Baut alle Pakete in nixpkgsselber betreibbar (binary cache) - interessant für Firmen/GruppenMeisten Pakete müssen nicht selber gebaut werden:allerdings einfach möglich (patches, neue Versionen aka Backports etc)Entwicklungsumgebungen (nix-shell)
nix-shell liest default.nix oder shell.nix ein und startet ein bash mit konfigurierter Umgebungin der alle Abhängigkeiten zum Bauen sichtbar sind
Einheitliche Abhängigkeiten, wenn man im Team arbeitet (ganz ohne docker)NixOps
NixOpsdockt an verschiedene Cloud-Provider/SSH/VM-Manager:AWS, GCE, Azure, Libvirt, Digitalocean, Hetzner, Virtualbox, NixOS-Container (nspawn)Cluster hochziehen (Maschinen erstellen, Netzwerk konfigurieren, Instanzgrößen, Platten)Andere coole Nix dinge
home-managernix im Shebang shebangnix closures per ssh verschickenNixIPFSFeatures in der Zukunft
Ende Oktober NixCon in MünchenEnde September: Release 17.09PR für besseres Cross-Kompilieren (z.B. arm32)nix 1.12Wie fange ich mit nix an
Paketmanager auch unabhängig von NixOS nutzbarkann man in die shell pipen…sudo install -d -m755 -o $USER -g $USER /nixcurl https://nixos.org/nix/install | sh…oder per Paketmanager installieren (AUR):Auch ohne root nutzbarHandbuch, Wiki, IRC: #nixos auf freenode, Nix Pills