NixOS 是一個獨立 GNU/Linux 發行版,以獨特的方式進行包和配置管理並因由此帶來的種種特性而被稱為「純函數式」(見後文)。其基於 Nix 包管理器構建,採用「陳述式」的配置文件,提供原子性的更新及回滾機制,對 DevOps 友好

4 月 4 日,NixOS 發布了代號為「Impala」的 18.03 版。這一版本包含如下顯著變化:

  • 支持 x86_64-linux 及 x86_64-darwin 平台(後者其實不是 NixOS);aarch64-linux 的二進位文件也已可用,但因其尚有問題待修復,故其 channel(參見 Hydra)尚不可用。
  • Nix(包管理器)現在默認為 2.0 版本
  • 重要系統組件版本變化:
    • Linux: 4.9 至 4.14;
    • glibc: 2.25 至 2.26;
    • GCC: 6 至 7;
    • systemd: 234 至 237。
  • 桌面環境版本變化:
    • GNOME: 3.24 至 3.26;
    • KDE plasma: 自 5.10 至 5.12。
  • MariaDB 自 10.1 升級至 10.2,且成為了默認的 MySQL 實現;
  • PHP 默認版本從 7.1 升級至 7.2。

此外,此版本還包含諸多其它變化。需要注意的是,此版本帶來了一些兼容性問題,請在升級時仔細確認。詳細信息見於其其發布記錄

此版本的支持將於 2018 年 10 月末停止,而後 18.09 版將取代這一版本。


NixOS 起初是一個研究性項目,但現在其已是一個擁有完備功能的操作系統。NixOS 旨在改進系統配置管理的方式。在現有的發行版中,升級等操作是危險的:對一個軟體包進行升級可能使得其它軟體包出錯,對整個系統進行更新比重裝系統更不可靠。用戶無法安全地測試並獲知對某一配置進行修改將會產生何種結果,因為用戶無法對這一操作進行可靠的撤銷。因此, NixOS 帶著改變現狀的目標出現了。

陳述式(Declarative)的系統配置模型

NixOS 的特殊之處在於其遵循「陳述式(Declarative)」系統配置模型。通過預先寫好的對預期配置的說明,Nix 包管理器可以構建整個操作系統(包含內核、應用、系統包及配置文件等)。這一說明性文件遵循純函數式的構建語言——構建新的配置不會覆蓋之前的配置。

用戶可以通過在 /etc/nixos/configuration.nix 中寫明其希望設備擁有的預期功能(組件)來配置 NixOS 系統。例如,如下是一個指明了需要 SSH daemon 服務的最小化系統配置:

{
  boot.loader.grub.device = "/dev/sda";

  fileSystems."/".device = "/dev/sda1";

  services.sshd.enable = true;
}

在更改了上述文件之後,用戶需通過執行如下命令使其生效:

$ nixos-rebuild switch

上述命令將負責進行所有所需操作以使配置生效,其包括下載並編譯 OpenSSH 以及為 SSH 伺服器生成配置文件等。

更新的可靠性

採用純函數式的包管理策略的另一個優勢是,nixos-rebuild switch 命令的執行總是產生相同的結果,無論此前系統中包含了哪些包或配置文件。因此,這避免了前文中提到的問題,使得升級系統和重裝系統一樣可靠。

更新的原子性

NixOS 的配置管理具有事務性(Transactional)的特點:升級等配置變化是原子性的。這意味著如果更新到一個新配置的過程被中斷了(例如,中途斷電),系統仍然會處於一致性的狀態。其只會啟動至舊的或新的配置,而不會處於大多其它系統中可能出現的不一致狀態(此種狀態常意代表機器不再能正常啟動)。

回滾

前文中提到,Nix 配置採用的純函數式語言使得新的配置文件不會覆蓋舊的配置文件。用戶可以原子性地回滾到之前的配置文件。例如,在一次 nixos-rebuild switch 之後,用戶對新的配置不滿意,通過執行

$ nixos-rebuild switch --rollback

即可完成回滾。

而且,所有舊的系統配置會自動出現在 Grub 啟動菜單中,用戶可以在啟動時選擇菜單項回滾到對應的舊配置文件。這一過程非常之快。

 

由 NixOS 及 Nix 的獨特的配置管理策略帶來的其它特性以及對 NixOS/Nix 工作原理的簡要描述見於 NixOS.org 的關於頁面


NixOS 主頁:
https://nixos.org/

下載地址及安裝指引:
https://nixos.org/nixos/download.html


封面圖片轉載自 NixOS 於 GitHub 之倉庫;文內的內容主要衍生自 NixOS.org 的相關頁面;前述內容均基於 Fair Use 利用;前述部分衍生過程藉助了 Google Translate 以完成;本文另參考了 DistroWatch.org 的對應頁面英文維基百科的 NixOS 詞條