Nix 包管理器
外觀
首次發布 | 2003年6月15日 |
---|---|
當前版本 |
|
原始碼庫 | |
程式語言 | C, C++, Perl |
平台 | Linux, Unix-like |
類型 | 軟體包管理系統 |
許可協議 | LGPL |
網站 | nixos |
Nix 是一個作業系統包管理器。同 RPM、APT 和許多其它的軟體包管理系統一樣,它可以用來控制軟體包的安裝,或已命名的,帶版本號的文件組,例如軟體應用及其相關的配置數據等。[2][3][4]
Nix
[編輯]Nix 包採用一種專門設計的,惰性求值的純函數式語言進行配置;Shell 腳本或其它外部程序(如 Make)可用於從源碼構建包。此系統的純函數式性質能夠保證非常精準的依賴跟蹤。例如,一個二進制包依賴於對應的源碼包、編譯器和其它用於構建的包。密碼散列函數確定了每個包的精確構建和運行時依賴,而每個源碼或二進位包都以一個這樣的散列值表示。其結果就是,二進制包倉庫成為了包管理器基本操作透明性的優化(類似幹於通過密碼散列函數來「緩存」)。
依賴問題通過功能上等價於硬連結的一套系統來解決,若軟體的某個版本被某個包所依賴,那麼僅當沒有包依賴於它之前,它都不會被移除。這會導致需要更多的存儲空間,但可以保證所有升級的安全性(保證不會破壞現有的應用)和原子性。它也允許任何包的多個版本,包括參數化地包含某一特性的包同時存在而沒有衝突。
Nix 在安裝包時依賴於自身的目錄結構。所有的包均會被安裝到 nix 目錄的子目錄中。在命名文件夾時,一個包的不同版本會根據包的 hash 加以區分。
此外,Nix 可作為現有系統(例如 GNU/Linux 發行版)的包管理器使用。除了嚴格意義上的軟體包外,Nix 也可被用於維護任何類型的文件配置,如伺服器的配置等。
NixOS
[編輯]NixOS[5] 是一個 Linux發行版,它採用 Nix 來管理作業系統中包括 Linux 內核的所有部分。[6]
參見
[編輯]- Maak - 一個類似於 make 的自動化構建工具,它被設計用於構建複雜的軟體系統。
- 腳本語言
- 軟體包(軟體包管理系統)
- GNU Guix - 另一個 GNU/Linux 發行版的聲明式包管理器,基於 Nix 構建,不過採用了更加普及的 GNU Guile 語言而非 Nix 的領域特定語言進行配置和定製。
- 批處理
- 辦公自動化
- 運維自動化 - 包管理器的潛在應用場景
- 軟體工程
參考文獻
[編輯]- ^ Release 2.22.1. 2024年5月10日 [2024年5月17日].
- ^ Prins, P., Suresh, J. and Dolstra, E., "Nix fixes dependency hell on all Linux distributions," (頁面存檔備份,存於網際網路檔案館) linux.com, December 22, 2008
- ^ Dolstra, E., de Jonge, M. and Visser, E. "Nix: A Safe and Policy-Free System for Software Deployment." (頁面存檔備份,存於網際網路檔案館) In Damon, L. (Ed.), 18th Large Installation System Administration Conference (LISA '04) (頁面存檔備份,存於網際網路檔案館), pages 79–92, Atlanta, Georgia, USA. USENIX, November 2004.
- ^ Dolstra, E. The Purely Functional Software Deployment Model. (頁面存檔備份,存於網際網路檔案館) PhD thesis, Faculty of Science, Utrecht, The Netherlands. January 2006. ISBN 90-393-4130-3.
- ^ 存档副本. [2018-01-01]. (原始內容存檔於2018-01-09).
- ^ Dolstra, E. and Löh, A. "NixOS: A Purely Functional Linux Distribution (頁面存檔備份,存於網際網路檔案館)." In ICFP 2008: 13th ACM SIGPLAN International Conference on Functional Programming (頁面存檔備份,存於網際網路檔案館), pages 367–378, Victoria, British Columbia, Canada. September 2008.