如何升级 Nixos 以使用新的频道 nixos 版本?

Chr*_*ski 6 nixos nix dist-upgrade

我目前在 18.03 并且想升级到 18.09。我该怎么做呢?

我通过网络搜索找到了以下内容,但不是很确定:https : //discourse.nixos.org/t/how-to-upgrade-from-18-03-to-18-09/933

我假设我可能只是更改我引用的频道nixos?但我不确定这是否适合在出现问题时允许回滚。

sudo nix-channel --list        
nixos https://nixos.org/channels/nixos-18.03
unstable https://nixos.org/channels/nixos-unstable
Run Code Online (Sandbox Code Playgroud)

此外,我还看到了以下内容:https : //github.com/NixOS/nixpkgs/issues/40351#issuecomment-388405973(引用如下) - 我需要考虑这一点吗?

还:

/etc/nixos/configuration.nix:

# 这个值决定了你的系统要兼容的 NixOS 版本,以避免破坏一些软件,比如数据库 # 服务器。只有在 NixOS 发行说明说你应该这样做之后,你才应该改变它。system.stateVersion = "17.09"; #你看评论了吗?我没有看到何时发出更改此命令的命令。

我阅读了发行说明、新闻和可用信息。等待命令执行它,但没有找到。

无论如何,发布几天后,我更改了“17.09”->“18.03”。

Emm*_*osa 11

升级 NixOS:

  1. 确保您有 NixOS 安装的备份,并且您知道如何在需要时从备份中恢复。
  2. 查看NixOS 发行说明以确保您考虑到需要手动完成的任何更改。特别是,有时选项会以向后不兼容的方式更改。
  3. 作为 root 用户,替换 NixOS 频道,使其指向您要升级到的频道,同时确保其命名为nixos
    nix-channel --add https://nixos.org/channels/nixos-18.09 nixos
    
    Run Code Online (Sandbox Code Playgroud) 并更新频道 ( nix-channel --update)。
  4. 作为 root 用户,构建您的系统:
    nixos-rebuild --upgrade boot
    
    Run Code Online (Sandbox Code Playgroud)
  5. 重新启动以进入您新建的 NixOS。

如果出现问题可以重启,选择上一代,使用nix-channel添加旧频道,然后nixos-rebuild boot将工作代设为默认;我认为重建比使用更可靠nixos-rebuild --rollback

替代流程

如果您想尝试升级而不会弄乱渠道,您可以使用 nixpkgs 存储库的 GIT 克隆:

cd nixpkgs
git checkout release-18.03
nixos-rebuild -I nixpkgs="$PWD" build
Run Code Online (Sandbox Code Playgroud)

如果一切顺利...

sudo nixos-rebuild -I nixpkgs="$PWD" boot
Run Code Online (Sandbox Code Playgroud)

这种方法的缺点是对 Nix 工具(例如 )的后续调用nixos-rebuild需要该-I标志来指定正确的 nixpkgs。也就是说,直到您更新频道。

  • 我要补充一点:(a)“/root/.nix-channels”和“~/.nix-channels”(如果使用)是可简单编辑的文件,即您可以简单地跳过使用“nix-channel”命令,除了“ --update` 或 `nixos-rebuild`;(b) 至少阅读发行说明的兼容性部分;(c) 大多数人此时并不真正需要备份,因为旧系统将保持可从 grub 启动,并且很容易从几乎所有的错误中回滚。 (2认同)