Hotdry.
systems-engineering

NixOS 25.11 flakes模块化部署:原子回滚与纯评估参数优化

NixOS 25.11强化nix命令与flakes集成,提供纯评估模块化部署、原子升级回滚阈值与世代管理清单,确保生产零中断。

NixOS 25.11 版本预计将 nix 命令与 flakes 深度集成,进一步优化模块化部署流程,支持纯评估模式避免传统 channel 依赖,实现真正可复现的系统配置。这种设计特别适合生产环境,能显著降低部署风险,确保原子升级与一键回滚。

传统 NixOS 依赖 nix-channel 更新 nixpkgs,易引入 impure 路径导致评估不一致。Flakes 通过 flake.nix 锁定输入源(如 nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";),结合 flake.lock 固定哈希,实现纯净构建。"nix eval --pure .#nixosConfigurations.myhost.config.system.build.toplevel" 可验证配置无外部污染,提升可复现性。

模块化部署实践:在项目根目录创建 flake.nix:

{
  description = "NixOS 25.11 flakes部署";
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
  outputs = { self, nixpkgs }: {
    nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [ ./configuration.nix ];
    };
  };
}

运行 "nix flake update" 锁定依赖,"nix flake check" 预验证完整性。"nixos-rebuild switch --flake .#myhost" 执行原子部署,新世代立即激活,旧世代保留在 /nix/var/nix/profiles/system-*。

原子升级核心:每次 switch 生成独立世代,symlink /run/current-system 原子切换。生产阈值建议:预检 "nixos-rebuild dry-run --flake .#myhost" 确认变更≤500MB,避免超时;超时阈值设 300s(nix.conf: max-build-time = 300s)。

回滚策略一键化:"nixos-rebuild switch --rollback" 回退至上世代,适用于快速修复配置错误。世代管理清单:

  • 查看:nixos-rebuild list-generations -p /nix/var/nix/profiles/system
  • 删除旧世代:nixos-rebuild list-generations --delete 1 10 20(保留最近 5 个)
  • 垃圾回收:nix-collect-garbage -d 保持 store <50% 磁盘,阈值监控脚本:
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p nix coreutils procps
generations=$(nixos-rebuild list-generations | wc -l)
if [ $generations -gt 10 ]; then
  nixos-rebuild list-generations --delete $(seq 1 $((generations-5)))
  nix-collect-garbage -d
fi

Cron 每周执行,确保 store 高效。

纯评估优化参数:在 nix.settings.experimental-features = ["nix-command" "flakes"]; 下,部署前 "nix eval --json --pure" 输出配置树,集成 Prometheus 监控构建时长 < 5min,失败率 < 1%。风险控制:回滚仅系统配置,用户 /home 数据独立;生产双机测试 flake 前部署。

实际落地:服务器集群用 flakes 分模块(hardware.nix, services.nix),CI/CD 管道 "nix flake lock --update-input nixpkgs" 后 push,远程 "nixos-rebuild switch --flake github:user/repo#host --target-host remote"。Zero to Nix 文档确认 "nixos-rebuild switch --rollback" 原子性1

home-manager 25.11 同步支持 --rollback,与系统一致 [2]。此机制使 NixOS 25.11 部署如函数调用般可靠,参数化阈值确保零中断。

[2]: CSDN home-manager 25.11 兼容说明

查看归档