2015-12-23 74 views
5

我想使用在多個openSUSE的機器nix的包管理器(不同版本的),相同架構的一貫安裝軟件相同/尼克斯目錄。我不是root在任何系統中,但想說服我們的系統管理員在多用戶模式下使用網絡安裝的所有機器上安裝nix安裝在多臺機器

  • 是否可以安裝在所有的機器相同/nix目錄,並在所有這些機器上運行的多用戶模式尼克斯?

  • 會一nix-env -i與其他機器干涉?

  • 會一nix-env -i xxx安裝在所有的機器,或只是機器,在那裏被執行命令的用戶配置文件xxx?如何安裝root

  • 難道一臺機器上的垃圾收集考慮到安裝在其他機器帳戶的軟件?

回答

5
  1. 可以安裝在多臺機器上尼克斯店一起分享類似的架構有很多主機之間的二進制文件。如果所有這些機器上都有/nix,那麼他們每個人都可以使用已安裝的軟件包,幾乎與本地安裝的軟件包相同。

    現在,擁有多臺機器在同一時間將寫入同一個Nix存儲只有在底層網絡文件系統正確支持網絡文件鎖定的情況下才能可靠工作。這可能聽起來無害的,但在我的經驗,多數網絡文件系統實際上支持文件鎖定正確,我的猜測是,如果你願意嘗試這一壯舉,那麼你就死鎖的形式偶爾遇到麻煩和/或不一致的商店。

  2. nix-env -i —和所有其他nix-xxx命令是一般—同步訪問的所有資源在/nix/store/nix/var,所以多個正在運行的操作不會相互干擾(假設文件系統提供了可靠的同步)。如果一個用戶同時在兩臺機器上運行nix-env -i,那麼顯然他會遇到競爭狀態,因爲兩個命令中的一個將消除另一個的影響。這種現象發生在相同的方式,當你在一臺機器上同時運行兩個nix-env -i命令,太,雖然如此,它不是特定於一個共享存儲的問題。

  3. nix-env -i同時修改上所有主機的用戶環境。用戶配置文件~foo/.nix-profile只是共享存儲的符號鏈接/nix/var/nix/profiles/per-user/foo/profile,因此在一臺機器上對該配置文件所做的更改也將在所有其他機器上可見。 root就像在這方面的任何其他用戶一樣。

  4. 是的,nix-collect-garbage可以在任何共享商店的機器上正常工作。由於用戶配置文件也是共享的,所以整個使用/依賴關係圖對於該工具是可見的,並且任何存儲路徑都不會被垃圾收集,這仍然被用戶配置文件引用。

    另當別論,但是,像那些用於nix-shell或通過nix-build創建的臨時環境。尼克斯從/nix/var/nix/gcroots符號鏈接到本地​​硬盤上相應的路徑,即在臨時環境所居住的地方記錄這些環境中的存在。這樣的環境被認爲是死如果符號鏈接變得陳舊,即如果尼克斯環境的「真實路徑」消失。現在,如果用戶機器一個上進入nix-shell環境,那麼會在/nix/var/nix/gcroots指向創建符號鏈接,說/run/user/1000/nix-shell-environment-1。機上運行的垃圾收集器,但是,不會找到路徑,並會考慮環境死,因此刪除從/nix/var/nix/gcroots符號鏈接,並從/nix/store底層存儲路徑。如果出現這種情況,則活動nix-shell環境上一個運行後會突然停止工作。

+1

非常感謝您對這個偉大的深入回答!我非常感謝你的努力! – knedlsepp

相關問題