2015-12-23 17 views
5

Desidero installare in modo coerente il software utilizzando il gestore nix-package su più macchine openSUSE (di versioni diverse), della stessa architettura. Non sono root su nessuno dei sistemi, ma vorrei convincere il nostro sysadmin a installare nix in modalità multiutente su tutte le macchine usando un mount di rete.Montaggio della directory same/nix su più macchine

  • sarebbe possibile montare nella stessa directory /nix su tutte le macchine ed eseguire nix in modalità multi-utente su tutte quelle macchine?

  • Un nix-env -i interferisce con altre macchine?

  • nix-env -i xxx Installare xxx nei profili utente di tutte le macchine o solo sulla macchina, in cui è stato eseguito il comando? Che ne dici di quelli installati da root?

  • La raccolta dati inutili su una macchina tiene conto del software installato su altre macchine?

risposta

5
  1. E è possibile installare un archivio Nix su più macchine di condividere file binari tra molti ospiti con architetture simili. Se /nix è disponibile su tutte quelle macchine, ognuna di esse può utilizzare i pacchetti installati più o meno nello stesso modo in cui verrebbero utilizzati se fossero installati localmente.

    Ora, avere più macchine scrivere nello stesso archivio Nix allo stesso tempo funzionerà in modo affidabile solo se il file system di rete sottostante supporta correttamente il blocco di file a livello di rete. Questo può sembrare innocuo, ma nella mia esperienza la maggior parte dei file system di rete in realtà non supporta il blocco del file di supporto correttamente e la mia ipotesi è che se tentassi questa impresa, ti imbatterai in problemi occasionalmente sotto forma di serrature morte e/o un negozio incoerente.

  2. nix-env -i — e tutti gli altri comandi nix-xxx è generale accesso — sincronizzazione a tutte le risorse /nix/store e /nix/var, quindi le operazioni di funzionamento multiple non interferiscono uno con l'altro (assumendo che il file system fornisce la sincronizzazione affidabile). Se un singolo utente esegue nix-env -i su due macchine contemporaneamente, allora si imbatterà in una condizione di competizione, ovviamente, perché uno dei due comandi annullerà l'effetto dell'altro. Questo fenomeno si verifica allo stesso modo quando si eseguono contemporaneamente due comandi nix-env -i anche su una singola macchina, quindi non è un problema specifico per un archivio condiviso.

  3. nix-env -i modifica l'ambiente utente su tutti gli host contemporaneamente. Il profilo utente ~foo/.nix-profile è solo un collegamento simbolico all'archivio condiviso allo /nix/var/nix/profiles/per-user/foo/profile, pertanto le modifiche apportate a quel profilo su una macchina saranno visibili anche su tutte le altre macchine. root è proprio come qualsiasi altro utente al riguardo.

  4. Sì, nix-collect-garbage funzionerà correttamente su qualsiasi macchina che condivide il negozio. Dal momento che i profili utente sono condivisi, anche il grafico completo di utilizzo/dipendenza è visibile allo strumento e nessun percorso di archivio sarà mai sottoposto a garbage collection a cui fa comunque riferimento un profilo utente.

    Una questione diversa, tuttavia, sono ambienti temporanei come quelli creati per nix-shell o da nix-build. Nix registra l'esistenza di questi ambienti tramite il collegamento simbolico da /nix/var/nix/gcroots al percorso appropriato sul disco rigido locale, ovvero il luogo in cui risiede l'ambiente temporaneo. Un tale ambiente è considerato morto se quel collegamento simbolico diventa obsoleto, cioè se il "percorso reale" dell'ambiente Nix scompare. Ora, se un utente immette un ambiente nix-shell sulla macchina A, verrà creato un collegamento simbolico creato in /nix/var/nix/gcroots che punta a, ad esempio, /run/user/1000/nix-shell-environment-1. Un garbage collector in esecuzione sulla macchina B, tuttavia, non troverà quel percorso e considererà l'ambiente guasto, quindi eliminando il collegamento simbolico da /nix/var/nix/gcroots ei percorsi negozio sottostanti da /nix/store. Se ciò si verifica, l'ambiente nix-shell attivo in esecuzione su A smetterà improvvisamente di funzionare.

+1

Grazie mille per questa grande risposta approfondita! Apprezzo molto il tuo sforzo! – knedlsepp

Problemi correlati