跳至內容

英文维基 | 中文维基 | 日文维基 | 草榴社区

使用者:芭樂哥/尼克斯作業系統

維基百科,自由的百科全書
NixOS
開發者NixOS contributors
NixOS Foundation[1][2]
程式語言Nix expression language[note 1]
作業系統家族Linux (Unix-like)
運作狀態Current
源碼模式Open source
首次發布0.1 / 2003年6月3日,​21年前​(2003-June-03
市場取向General purpose
軟體包管理系統Nix
支援平台i686, x86-64, AArch64
內核類別Monolithic (Linux kernel)
許可證MIT[3][note 2]
官方網站nixos.org

NixOS是一個基於純功能性Nix 包管理器的自由開源Linux 發行版。 NixOS 使用nixpkgs項目中定義的模塊和包組成。

NixOS 使用不可變設計和原子更新模型。 [4]它使用宣告式編程配置允許再現性和可移植性。 [5]

歷史

[編輯]

2003 年,Eelco Dolstra 啟動了 NixOS 作為一個研究項目。 [6] [7] Dolstra 表示,該項目的目的是實現一個正確軟體部署的系統。 [8] 2015年,NixOS基金會在荷蘭成立,旨在支持像NixOS這樣實現純功能部署模型的項目。 [9]

版本

[編輯]

發布版本歷史記錄

[編輯]
Name Date
NixOS 13.10 "Aardvark" 2013年10月
NixOS 14.04 "Baboon" 2014年4月
NixOS 14.12 "Caterpillar" 2014年12月
NixOS 15.09 "Dingo" 2015年9月
NixOS 16.03 "Emu" 2016年3月
NixOS 16.09 "Flounder" 2016年9月
NixOS 17.03 "Gorilla" 2017年3月
NixOS 17.09 "Hummingbird" 2017年9月
NixOS 18.03 "Impala" 2018年3月
NixOS 18.09 "Jellyfish" 2018年9月
NixOS 19.03 "Koi" 2019年3月
NixOS 19.09 "Loris" 2019年9月
NixOS 20.03 "Markhor" 2020年3月
NixOS 20.09 "Nightingale" 2020年9月
NixOS 21.05 "Okapi" 2021年5月
NixOS 21.11 "Porcupine" 2021年11月
NixOS 22.05 "Quokka" 2022年5月
NixOS 22.11 "Raccoon" 2022年11月
NixOS 23.05 "Stoat" 2023年5月
NixOS 23.11 "Tapir" 2023年11月

NixOS 一年發布兩次新版本, 通常在五和十一月底.[10][11][12]

特色

[編輯]
NixOS 圖形化安裝程式

聲明式配置模型

[編輯]

在 NixOS 中,整個作業系統(包括內核、應用程式、系統包和配置文件)由 Nix 包管理器根據Nix 語言的描述構建。構建新版本不會覆蓋以前的版本。 [13]

NixOS 系統是通過在全局配置文件(通常位於/etc/nixos )中編寫用戶想要在其計算機上使用的功能規範來配置的。以下是運行 SSH 守護程序的機器的最低規格: [14]

{
  boot.loader.grub.device = "/dev/sda";
  fileSystems."/".device = "/dev/sda1";
  services.sshd.enable = true;
}

更改規範文件後,可以使用 nixos-rebuild 命令更新系統。這會執行創建新版本系統所需的一切,包括下載和安裝軟體包以及生成配置文件。

可靠的原子升級

[編輯]

由於 Nix 文件是純函數式編程宣告式編程文件,因此無論系統上有什麼包或配置文件,它們總是會產生相同的結果。

NixOS 採用事務性方法進行配置管理,使升級等配置更改成為原子操作。例如,如果升級到新配置因電源故障而中斷,系統仍將處於一致狀態:它將以舊配置或新配置啟動。 [15]

回滾

[編輯]

在系統更新後,可以使用特殊命令( nixos-rebuild switch --rollback )進行回滾。每個系統配置版本都會自動顯示在系統啟動菜單中。如果新配置崩潰或無法正常啟動,則可以選擇舊版本。回滾是輕量級操作,不涉及從副本恢復文件。 [16]

可重複的系統配置

[編輯]

NixOS 的宣告式編程配置模型可以輕鬆地在另一台機器上重現系統配置。將配置文件複製到目標計算機並運行系統更新命令會生成相同的系統配置(內核、應用程式、系統服務等),但系統中不由包管理器管理的部分(例如用戶數據)除外。

具有二進制緩存的基於源始碼的模型

[編輯]

NixOS 使用的 Nix 構建語言指定了如何從原始碼構建包。這使得系統可以輕鬆地適應用戶需求。然而,從原始碼構建是一個緩慢的過程,套件管理器會在預構建的二進制文件可用時自動從緩存伺服器下載它們。可以通過使用--option substitute false作為參數來禁用二進制緩存並強制從源代碼構建。這提供了基於源代碼的套件管理模型的靈活性和二進制模型的效率。 [17]

一致性

[編輯]

Nix包管理器確保正在運行的系統與系統的邏輯規範一致,這意味著它將重建所有需要重建的包。例如,如果內核發生更改,則包管理器將確保重建外部內核模塊。同樣,當庫更新時,它確保所有系統包都使用新版本,甚至靜態連結到它的包。

多用戶套件管理

[編輯]

在 NixOS 中安裝軟體不需要特殊權限。除了系統範圍的設定檔之外,每個使用者還有一個可以在其中安裝軟體包的專用設定檔。 Nix 還允許套件的多個版本共存,因此不同的使用者可以在各自的設定檔中安裝相同套件的不同版本。如果兩個使用者安裝相同版本的軟體包,則只會建置或下載一份副本。 Nix 的安全模型確保這是安全的,因為只有系統配置明確信任的使用者才被允許使用建置參數,這些參數允許他們控制派生輸出的內容(例如在沙箱中添加雜質,或使用不受信任的替代者)。 如果沒有這些參數,則只能從系統信任的替代者或隱式信任的本地沙盒建構中替換路徑。

執行

[編輯]

NixOS 基於Nix 包管理器,它將所有包相互隔離地存儲在包存儲中。 安裝的包由用於其構建的所有輸入的加密雜湊值來標識。更改套件的建置指令會修改其雜湊值,這將導致在套件儲存中安裝不同的套件。該系統還用於管理配置文件,確保新的配置不會覆蓋舊的配置。 這意味著 NixOS 不遵循文件系統層次結構標準。唯一的例外是/bin/sh符號連結被創建到 Nix 存儲中的bash版本(例如/nix/store/s/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-bash-4.3.43/ ),而 NixOS 確實有一個/etc目錄為了保留系統範圍的配置文件,該目錄中的大多數文件都是/nix/store中生成的文件的符號連結,例如/nix/store/s2sjbl85xnrc18rl4fhn56irkxqxyk4p-sshd_config 。不使用/bin等全局目錄是允許包的多個版本共存的一部分。

評論

[編輯]

Jesse Smith 在 2015 年為 DistroWatch Weekly 評論 NixOS 15.09, [18]寫道:

I very much like the way NixOS takes the worry out of upgrading packages by placing each change in its own "generation" and I found, from the end user's point of view, NixOS worked just the same as any other Linux distribution. Setting up NixOS is not for beginners, and I do not think NixOS is intended to be used as a general purpose desktop operating system. But what NixOS does do is give us a useful playground in which to examine the Nix package manager and I think this is very interesting technology which deserves further exploration and adoption by additional distributions.

《Full Circle》雜誌2022 年對 NixOS 21.11「Porcupine」的評論是:

Overall NixOS Gnome 21.11 impresses as serious, neat and elegant. If you are a fan of the unmodified Gnome desktop, then you will find a lot to like here. The downside of this distribution is the steep learning curve for package management, including updates and the like. No matter which distribution you come from, you will have much to learn to be able to make Nix work well for you on the command-line.[19]

NixOS 22.11「Raccoon」由 Liam 在The Register上評論:

Compared to reports of NixOS from just two or three years ago, we found it was very simple to get it installed and working. This suggests that the tools are maturing well and reaching a certain level of polish, but from a first-time perspective we have no prior baseline to compare against. This is very much not a traditional distro, or even a traditional Unix, but it works and we can see the appeal.[20]

註解

[編輯]
  1. ^ Various other programming languages are used throughout NixOS (as of December 2023).
  2. ^ Various other licenses are used for software included with NixOS, for example the Linux kernel is licensed under the GNU GPL version 2.0 (as of December 2023)

其他

[編輯]
  • GNU Guix System – 一個基於GNU Guix構建的作業系統,靈感來自 Nix
  • Eelco Visser - 沒有他,Eelco Dolstra 可能永遠不會開始 有關 Nix 包管理器的工作[21]

參考資料

[編輯]
  1. ^ Community - nixos.org. [2022-09-23]. (原始內容存檔於2022-09-23). 
  2. ^ NixOS/nixos-foundation - Github. GitHub. [2022-09-23]. (原始內容存檔於2022-09-23). 
  3. ^ nixpkgs/COPYING at master · NixOS/nixpkgs · GitHub. Github.com. [2015-09-19]. 
  4. ^ What Is an Immutable Linux Distro, and Should You Use One?. HowToGeek.com. [2023-12-07]. (原始內容存檔於2023-12-07). 
  5. ^ DistroWatch.com: NixOS. Distrowatch.com. [2015-09-19]. 
  6. ^ Dolstra, Eelco. https://web.archive.org/web/20190421081837/https://nixos.org/~eelco/pubs/iscsd-scm11-final.pdf |archiveurl=缺少標題 (幫助) (PDF). Integrating Software Construction and Software Deployment. Lecture Notes in Computer Science 2649. 2003: 102–117. ISBN 978-3-540-14036-8. doi:10.1007/3-540-39195-9_8. (原始內容 (PDF)存檔於2019-04-21). 
  7. ^ Dolstra, Eelco. The Purely Functional Software Deployment Model (PDF) (Ph.D.論文). 2006. 
  8. ^ Jonatha Lorimer. The Nix Thesis. 
  9. ^ Stichting NixOS Foundation. Nixos.org. [2015-09-19]. 
  10. ^ Governance. Nixos.org. [2020-08-28]. (原始內容存檔於2020-08-16). 
  11. ^ Nix RFCS (Request for Comments). GitHub. 17 December 2021. 
  12. ^ Release Announcements. Nixos.org. [2023-12-09]. 
  13. ^ Dolstra, Eelco; Hemel, Armijn. Purely Functional System Configuration Management (PDF). 11th USENIX workshop on Hot topics in operating systems. San Diego, California, USA: USENIX Association. 2007-05-07 [2023-07-19]. (原始內容 (PDF)存檔於2020-07-10). 
  14. ^ About NixOS. Nixos.org. [2015-09-19]. 
  15. ^ van der Burg, Sander; Dolstra, Eelco; de Jonge, Merijn. Atomic Upgrading of Distributed Systems (PDF). 1st International Workshop on Hot Topics in Software Upgrades. Nashville, Tennessee, USA: Association for Computing Machinery. 2008-10-20 [2023-07-19]. ISBN 978-1-60558-304-4. doi:10.1145/1490283.1490294. (原始內容 (PDF)存檔於2021-11-13). 
  16. ^ NixOS Manual - Rolling Back Configuration Changes, Nixos.org 
  17. ^ Dolstra, Eelco. Secure Sharing Between Untrusted Users in a Transparent Source/Binary Deployment Model (PDF). 20th IEEE/ACM International Conference on Automated Software Engineering. Long Beach, California, USA: Association for Computing Machinery. 2005-11-07 [2023-07-19]. ISBN 978-1-58113-993-8. doi:10.1145/1101908.1101933. (原始內容 (PDF)存檔於2021-11-13). 
  18. ^ DistroWatch Weekly, Issue 637, 23 November 2015
  19. ^ Hunt, Adam. Review - NixOS (PDF). Full Circle magazine. 28 October 2022 [28 October 2022]. (原始內容存檔 (PDF)於28 October 2022). 
  20. ^ Proven, Liam. NixOS 22.11 'Raccoon': Like a proof of concept you can do things with OSes. 
  21. ^ In memoriam: Eelco Visser (1966-2022). 

[[Category:操作系统安全]] [[Category:Linux發行版]]