$ sudo nix-env --list-generations --profile /nix/var/nix/profiles/system
...
600 2020-01-25 21:01:11
601 2020-02-03 13:44:19
602 2020-02-09 14:06:20
603 2020-02-09 14:11:11
604 2020-02-11 00:02:43
605 2020-02-13 12:26:22
606 2020-02-16 16:40:02 (current)
我怎样才能获得 Nixos 一代的提交/频道生成(这是一件事吗?) - 并可能将频道回滚到它?
或者换句话说,我怎样才能将我的“通道状态”回滚到第 605 代时的状态?
为什么我想知道是因为我做了一个sudo nix-channel --update
,sudo nixos-rebuild switch
几天前 - 无论发生什么包更新 - 导致系统不稳定。
所以为了缓解这种情况,我启动并继续使用老一代(605
)。
我现在想更新我的 Nixos 系统配置中的特定包,并将更改基于605
而不是最新的606
.
我确实找到了https://stackoverflow.com/questions/39090387/how-to-undo-nix-channel-update ( nix-channel --rollback..
) 但是我可能已经更新了几次频道 - 所以“最后一个”频道状态可能不是什么我需要。
我确实注意到您可以指定通道代号作为此命令的参数 - 但我不确定它与 nixos 代之间的关系是什么?它似乎与我尝试605
的结果不同:
sudo nix-channel --rollback 605
error: generation 605 does not exist
error: program '/nix/store/cs47wjxwiqgyl1nkjnksyf3s2rb93piq-nix-2.3.2/bin/nix-env' failed with exit code 1
我假设你想要
sudo nix-channel --rollback
?例如,您也可以手动检查/nix/var/nix/profiles/per-user/root/channels-*/manifest.nix
——那些包含名称、提交哈希等。TLDR;
/TLDR;
弗拉基米尔的回答是完全正确的,但由于可怕的长路很容易被驳回;)
更新频道时:
您将当前用户的频道生成提前一个。Only
my-channel-alias
受到影响,但这仍然会导致构建全新的一代,并且您的环境会引用它。不幸的是,
nix-channel
没有切换到列出频道代。这就是长路径的来源。您可以看到channels
指向channels-4-link
user 的链接my_user_name
。因此,my_user_name
的当前选择的频道世代为 4。相比之下,配置文件(用户环境)生成通过以下
nix-env
操作进行了改进:如 nix-env 的手册页中所述。
并且可以通过以下方式轻松查询当前用户的不同配置文件生成: