Paketmanager Nix

agrajag

Aktives Mitglied
Thread Starter
Dabei seit
25.08.2004
Beiträge
5.449
Reaktionspunkte
2.463
Moin Moin,

ich bin gerade dabei von Homebrew auf Nix umzusteigen. Bis auf DavMail hab ich jetzt alles mit Nix installiert. Zusätzlich hab ich nix-darwin installiert. Ich hab jetzt alles, was die Unix-Tools angeht, in einer dawin-configuration.nix formuliert. Das sieht dann z.B. so aus:
Code:
{ config, pkgs, ... }:

{
  # List packages installed in system profile. To search by name, run:
  # $ nix-env -qaP | grep wget
  environment.systemPackages = with pkgs;
   [
     nix-top
     nix-zsh-completions
     nix-bash-completions
     nix-repl
     nixops
     nixpkgs-lint
     nix-deploy
     vulnix

     zsh
     zsh-autoenv
     zsh-autosuggestions
     zsh-command-time
     zsh-completions
     zsh-git-prompt
     zsh-history-substring-search
     zsh-navigation-tools
     zsh-prezto
     zsh-syntax-highlighting

     #davmail

     git
     fzf
     tree
     htop
     ffmpeg
     tesseract
     thefuck
     tldr
     youtube-dl
     ansible
     ansible-lint
     vagrant

     #( lua.withPackages (ps: with ps; [ luarocks mpack ]) )
     #( python36.withPackages (ps: with ps; [ pip flake8 yapf black pynvim python-language-server.override { pylint = null; } ]) )
   ];

  # Use a custom configuration.nix location.
  # $ darwin-rebuild switch -I darwin-config=$HOME/.config/nixpkgs/darwin/configuration.nix
  # environment.darwinConfig = "$HOME/.config/nixpkgs/darwin/configuration.nix";

  # Auto upgrade nix package and the daemon service.
  services.nix-daemon.enable = true;
  #nix.package = nix;

  # Create /etc/bashrc that loads the nix-darwin environment.
  programs.zsh.enable = true;

  # Used for backwards compatibility, please read the changelog before changing.
  # $ darwin-rebuild changelog
  system.stateVersion = 4;

  # You should generally set this to the total number of logical cores in your system.
  # $ sysctl -n hw.ncpu
  nix.maxJobs = 16 ;
  nix.buildCores = 4;

  # Use sandbox
  #nix.useSandbox = true;
}

Jede Änderung, die ich an diesen Tools vornehmen möchte, schreibe ich in diese Datei und führe dann in der Shell
Code:
darwin-rebuild switch
aus – that's it.

Warum nun Nix anstelle von Homebrew?
  • Nix ist pure funktional, atomar transaktional, bietet Rollbacks und überhaupt… es ist irgendwie elegant.
  • nixpkgs (die Paketsammlung) ist eines der umfangreichsten aller Paketmanager (ca. 40k Pakete)
  • Nix kommt vor allem mit Multi-User-Umgebungen klar. Homebrew darf man nur mit einem User benutzen, sonst hat man sehr schnell ein Rechte-Fuckup. Nix erlaubt auch die gleichzeitige Installation und Nutzung gleicher Libs in verschiedenen Versionen. User können sich eigene SW installieren, die den Rest der Nix-Installation nicht tangiert.
Auf meinem NixOS-Testsystem beschreibe ich das komplette System in einer configuration.nix-Datei. Die komplette Konfiguration wird ausschliesslich hier descriptiv vorgenommen. Dann braucht es nur noch ein nixos-rebuild switch, und die Konfiguration wird sofort umgesetzt und aktiv. Bei Änderungen am Kernel oder ähnlichem muß neu gestartet werden. Auf diese Weise kann ich jederzeit in kürzester Zeit und vor allem mit minimalem Aufwand ein exakt gleiches System aus dem Boden stampfen.

tl;dr: Hat sich hier noch jemand mit Nix auf dem Mac beschäftigt? Vielleicht könnte man sich ja hier in diesem Thread austauschen. Ich hätte auch schon ein Problem: DavMail will nicht richtig laufen, wenn es via Nix installiert wurde. DavMail ist mittlerweile das einzige Paket, was ich via brew installiert habe.
 
  • Gefällt mir
Reaktionen: thorstenhirsch, Meilenstein und mausfang
Was ist denn der Unterschied zu macports z.b.
 
Im Grunde der gleiche Unterschied. brew, ports, apt und wie sie alle heißen arbeiten iterativ. Es werden nacheinander alle Packete und ihre Abhängigkeiten gebaut, was auch je nach Reihenfolge nicht immer das gleiche Ergebnis geben muss. Es gibt viel Raum für Abhängigkeitsprobleme. Z.B. wenn Pakete die gleiche Abhängigkeit haben, aber unterschiedliche Versionen verlangen. Dann wird es schnell ekelig.

Nix hingegen arbeitet deklarativ, d.h., ich beschreibe wie das System aussehen soll in einer oder mehreren nix-Dateien in der extrem simplen funktionalen Sprache nix. Dann gebe ich dem Paketmanager (nix-env bzw. nixos-rebuild bzw. darwin-rebuild) diese Datei(en) und der baut die komplette Umgebung neu. Erst wenn das ohne Fehler durchgelaufen ist, wird die alte Umgebung durch die Neue ersetzt. Ich kann auch Testdurchläufe machen, incl. Tests der gebauten Umgebung. Egal in welcher Reihenfolge man zu installierende Pakete aufzählt, ist das Ergebnis immer gleich.

Und was auch nett ist (wenn auch für mich eher perspektivisch), daß man mit nix-shell eine Ad-hoc-Shell bauen kann, in die auch gleich bestimmte SW in bestimmten Versionen installiert sind. Wenn ich die Shell wieder verlasse, wird auch automatisch die Umgebung zerstört. Sehr schön, wenn man Dinge Testen will, oder wenn man zum Entwickeln ganz bestimmte SW-Versionen benötigt.
 
  • Gefällt mir
Reaktionen: ruerueka und wegus
Hmm… hat das hier echt noch keiner ausprobiert?!?
 
Ist wohl nicht jeder so nerdig wie Du. ;)
Und das ist jetzt echt nicht böse gemeint. Ich finde es toll, wenn man sich mit sowas beschäftigt. Ist bestimmt eine tolle Sache für Systemadministratoren, die mit einer Konfigurationsdatei schnell einen Haufen gleiche Systeme hochziehen wollen. Für Otto-Normalnutzer wohl eher Overkill (und zwar atomarer).
 
Geht pkgsrc nicht auch unter macOS? Nachdem ich mir Nix mal unter Gentoo angesehen hatte, habe ich festgestellt, dass die Konfiguration die Pest ist.
 
Ging mir genauso. Ich hab mir Nix mal auf einem RHEL 7 System angeschaut aber bin sehr schnell wieder davon abgekommen. Ich sehe durch die deklarative Vorgehensweise ehrlich gesagt keine Vorteile mehr gegenüber der klassischen iterativen Abarbeitung. Die Probleme mit Abhängigkeiten waren früher bei RPM tatsächlich eine sehr große Herausforderung, mittlerweile haben aber alle mir bekannten Paketmanager (primär sind dies apt und yum) eine Vorabprüfung der Abhängigkeiten sowie die Möglichkeit, gegebenenfalls Parallelinstallationen in separate Pfadstrukturen vorzunehmen um Abhängigkeitskonflikte vorab aufzulösen. Über Source-RPMs (srpm) ist man da sogar noch flexibler.

Daher stand für mich persönlich der Aufwand, mich in Nix einzuarbeiten, in keinerlei Relation zu den potenziellen und aus meiner persönlichen Sicht rein theoretischen Vorteilen.
 
  • Gefällt mir
Reaktionen: wegus, warnochfrei und dg2rbf
Ja, die Lernkurve ist bei Nix/NixOS höher. Mich hat hier die Tatsache so angefixt, daß es ein Paketmanager, Configurations- und Provisionierungstool in einem ist, also sowas wie Ansible und Vagrant built in ist.

Geht pkgsrc nicht auch unter macOS? Nachdem ich mir Nix mal unter Gentoo angesehen hatte, habe ich festgestellt, dass die Konfiguration die Pest ist.
Inwiefern war die Konfiguration eine Pest?

Ich hatte es seit den letzten 20 Jahren immer mal wieder mit Linux versucht. SUSE, Caldera, Mandriva(?), *buntu… 1-2 hab ich vergessen. Und in allen Fällen hatte es nicht lang gedauert und ein Update/Upgrade hat mir das System zerrissen. Das empfand ich immer sehr ernüchternd, weshalb ich es hier etwas ermutigender fand/finde. Mal schauen wie es sich noch für mich entwickelt. Ich weiß aber auch, daß man Linux auch einacher lernen kann, als mit NixOS. :) So wie eine funktionale Sprachen auch viel steilere Lernkurven haben. Leider hatte ich mir nie die Zeit genommen, um meine Scala-Skills auszubauen. Das hatte spaß gemacht.
 
Nix unter Gentoo bedarf zumindest einiger Konfiguration. Ohne Warnungen habe ich es niemals hinbekommen.

Fachlich ist Guix das bessere Nix - aber auch da gilt: ganz ehrlich, pkgsrc ist das Beste, was Nichtwindows zurzeit aufbieten kann.
 
  • Gefällt mir
Reaktionen: ruerueka
Guix kling auch nett.

Nix auf maOS zu installieren ist so einfach wie Homebrew. nix-darwin sin nochmal 1-2 Handgriffe. Ansonsten passiert da alles weitgehend automatisch.

Was macht pkgsrc für dich so sexy? Und was meinst du mit "was Nichtwindows zurzeit aufbieten kann"? Gibt es den ultimativen Paketmanager ausgerechnet für Windows?
 
Ja, Chocolatey. So etwas würde ich mir für andere Systeme wünschen. - Nachtrag: Nein, anders formuliert: pkgsrc ist nur unter Nichtwindows relevant, weil es unter Windows nicht nativ unterstützt wird. ;)

pkgsrc hat eben, anders als Homebrew, MacPorts usw., genau den Charme, dass es unglaublich portabel ist, was wegen der Vielzahl an Anwendern sowohl das Angebot an enthaltener Software vervielfacht als auch die Pakete ausführlich patchen lässt, weil Fehler meist immer nur auf den Systemen auftreten, die man selbst nicht hat. Ich gebe aber zu, sehr viel Zeit mit BSDs verbracht zu haben, wo pkgsrc der Quasistandard ist. Vielleicht prägt das.
 
Zuletzt bearbeitet:
Auf Youtube gibt es eine nette Videoserie zu Nix als Paketmanager. Der Macher selbst ist auch mit macOS unterwegs. Alles schön handliche Häppchen von <10min.
 
  • Gefällt mir
Reaktionen: electricdawn
Geht pkgsrc nicht auch unter macOS?

Nachtrag: Ich bin gestern Abend von MacPorts auf pkgsrc umgestiegen und bin durchaus nicht unbegeistert vom Angebot an verfügbaren Paketen, die überdies bisher immer vorkompiliert sind. Sehr schön!
Bisher fehlte mir auch noch bei keiner Software irgendeine macOS-spezifische Optimierung. Ich habe bewusst versucht, erst mal nur das nachzuinstallieren, was ich vorher aus MacPorts bezogen hatte. Ich bin zufrieden.
 
Aktuell bin ich glücklich mit brew, Nix sieht interessant aus, aber wird hier Catalina bereits supported? In einem Supportforum fand ich nur den Hinweis aus 2019, wo es noch nicht lief und die Release Notes sagen nur x86_64 ist unterstützt, das ist nicht hilfreich.
 
Nix stolpert gerade über einige Eingenheiten von Catalina. Eines der Hauptprobleme ist, daß das Root-Dateisystem auch für root nicht beschreibbar ist und root auch keine Firmlinks erzeugen darf. Leider sieht sich Apple nicht in der Lage /nix als default in die Whitelist zu packen, wie sie es auch mit /opt machen.

Der gegenwärtige Stand ist, daß man eine Nix-Partition anlegen und diese in die /etc/sythetic.conf eintragen muß.
 
Leider sieht sich Apple nicht in der Lage /nix als default in die Whitelist zu packen, wie sie es auch mit /opt machen.

Es spricht ja technisch auch nix :D dagegen, dass Nix einfach /opt/nix verwendet. Aber gut, wer braucht schon Standards?
 
  • Gefällt mir
Reaktionen: thorstenhirsch
Ich habe vor ein paar Wochen mal Guix probiert. Das hat auch so einen funktionalen Paketmanager. Im Prinzip besteht das ganze Ding aus nichts anderem. Ist sehr interessant, wenn auch etwas(!) gewoehnungsbeduerftig.
 
Zurück
Oben Unten