2015-12-23 7 views
5

Ich möchte Software mit dem nix-package manager auf mehreren openSUSE-Maschinen (verschiedener Versionen) derselben Architektur konsistent installieren. Ich bin nicht root auf einem der Systeme, aber würde unseren Systemadministrator dazu bringen wollen, nix im Multi-User-Modus auf allen Maschinen mit einem Netzwerk-Mount zu installieren.Das gleiche/nix-Verzeichnis auf mehreren Maschinen mounten

  • Wäre es möglich, das gleiche /nix Verzeichnis auf allen Maschinen zu montieren und nichts in Multi-User-Modus auf all diesen Maschinen laufen?

  • Würde ein nix-env -i mit anderen Maschinen interferieren?

  • Würde ein nix-env -i xxxxxx in den Benutzerprofilen aller Maschinen oder nur auf der Maschine installieren, wo der Befehl ausgeführt wurde? Wie wäre es mit den von root installierten?

  • Berücksichtigt die Müllsammlung auf einer Maschine Software, die auf anderen Maschinen installiert ist?

Antwort

5
  1. Es ist möglich, einen Nix-Speicher auf mehreren Maschinen zu montieren Binärdateien zwischen vielen Hosts mit ähnlichen Architekturen zu teilen. Wenn /nix auf all diesen Maschinen verfügbar ist, kann jeder von ihnen die installierten Pakete auf die gleiche Weise verwenden, wie sie verwendet würden, wenn sie lokal installiert würden.

    Jetzt mehrere Maschinen haben schreiben in den gleichen Nix-Speicher zur gleichen Zeit wird nur zuverlässig funktionieren, wenn das zugrunde liegende Netzwerk-Dateisystem Netzwerk-weite Dateisperrung ordnungsgemäß unterstützt. Das hört sich vielleicht harmlos an, aber meiner Erfahrung nach unterstützen die meisten Netzwerk-Dateisysteme nicht Dateien, die richtig sperren, und meine Vermutung ist, dass wenn Sie dieses Talent versuchen würden, Sie gelegentlich in Form von Deadlocks in Schwierigkeiten geraten und/oder ein inkonsistentes Geschäft.

  2. nix-env -i — und alle anderen nix-xxx Befehl ist allgemein — synchronisieren Zugriff auf alle Ressourcen in /nix/store und /nix/var, so dass mehrere laufenden Betrieb miteinander nicht stören (unter der Annahme, dass das Dateisystem bietet zuverlässige Synchronisation). Wenn ein einzelner Benutzer nix-env -i auf zwei Maschinen gleichzeitig ausführt, wird er offensichtlich in einen Wettlauf geraten, weil einer der beiden Befehle den Effekt des anderen aufhebt. Dieses Phänomen tritt auf die gleiche Weise auf, wenn Sie zwei nix-env -i-Befehle gleichzeitig auf einem einzelnen Computer ausführen. Es handelt sich also nicht um ein Problem, das für einen gemeinsamen Speicher spezifisch ist.

  3. nix-env -i ändert die Benutzerumgebung auf alle Hosts gleichzeitig. Das Benutzerprofil ~foo/.nix-profile ist nur ein Symlink in den gemeinsamen Speicher unter /nix/var/nix/profiles/per-user/foo/profile, so dass Änderungen an dem auf einem Computer erstellten Profil auch auf allen anderen Computern sichtbar sind. root ist genau wie jeder andere Benutzer in dieser Hinsicht.

  4. Ja, nix-collect-garbage funktioniert auf allen Maschinen, die den Speicher teilen. Da die Benutzerprofile ebenfalls freigegeben sind, ist das vollständige Verwendungs-/Abhängigkeitsdiagramm für das Tool sichtbar, und es wird niemals ein Speicherpfad für die Sammlung von Speicherabfällen verwendet, auf den noch von einem Benutzerprofil verwiesen wird.Ein anderes Thema sind temporäre Umgebungen, wie sie für nix-shell oder nix-build erstellt wurden. Nix zeichnet das Vorhandensein dieser Umgebungen auf, indem es sich von /nix/var/nix/gcroots mit dem entsprechenden Pfad auf der lokalen Festplatte, d. H. Dem Ort, an dem die temporäre Umgebung lebt, verbindet. Eine solche Umgebung wird als tot angesehen, wenn dieser Symlink veraltet wird, d. H. Wenn der "reale Pfad" der Nix-Umgebung verschwindet. Wenn nun ein Benutzer eine nix-shell-Umgebung auf der Maschine A eingibt, wird ein symbolischer Link in /nix/var/nix/gcroots erstellt, der auf, sagen wir /run/user/1000/nix-shell-environment-1 zeigt. Ein Garbage Collector, der auf der Maschine B ausgeführt wird, findet jedoch diesen Pfad nicht und wird die Umgebung als tot betrachten. Daher wird der Symlink von /nix/var/nix/gcroots und die zugrunde liegenden Speicherpfade von /nix/store gelöscht. Wenn das passiert, wird die aktive nix-shell-Umgebung, die auf A läuft, plötzlich nicht mehr funktionieren.

+1

Vielen Dank für die ausführliche Antwort! Ich schätze Ihre Bemühungen sehr! – knedlsepp