一起学习,一起进步!
分类: LINUX
2018-04-17 09:03:07
NixOS 是一个独立 GNU/ 发行版,以独特的方式进行包和配置管理并因由此带来的种种特性而被称为「纯函数式」。其基于 Nix 包管理器构建,采用「陈述式」的配置文件,提供原子性的更新及回滚机制,对 DevOps 友好。 |
4 月 4 日,NixOS 发布了代号为「Impala」的 18.03 版。这一版本包含如下显著变化:
1.支持 x86_64-linux 及 x86_64-darwin 平台(后者其实不是 NixOS);aarch64-linux 的二进制文件也已可用,但因其尚有问题待修复,故其 channel(参见 Hydra)尚不可用。
2.Nix(包管理器)现在默认为 2.0 版本。
1.Linux: 4.9 至 4.14;
2.glibc: 2.25 至 2.26;
3.GCC: 6 至 7;
4.systemd: 234 至 237。
1.GNOME: 3.24 至 3.26;
2.KDE plasma: 自 5.10 至 5.12。
3.MariaDB 自 10.1 升级至 10.2,且成为了默认的 MySQL 实现;
4.PHP 默认版本从 7.1 升级至 7.2。
此外,此版本还包含诸多其它变化。需要注意的是,此版本带来了一些兼容性问题,请在升级时仔细确认。详细信息见于其其发布记录。
此版本的支持将于 2018 年 10 月末停止,而后 18.09 版将取代这一版本。
NixOS 起初是一个研究性项目,但现在其已是一个拥有完备功能的操作系统。NixOS 旨在改进系统配置管理的方式。在现有的发行版中,升级等操作是危险的:对一个软件包进行升级可能使得其它软件包出错,对整个系统进行更新比重装系统更不可靠。用户无法安全地测试并获知对某一配置进行修改将会产生何种结果,因为用户无法对这一操作进行可靠的撤销。因此, NixOS 带着改变现状的目标出现了。
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 主页:
下载地址及安装指引: