$ 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
答案1
我想你想要吗sudo nix-channel --rollback
?例如,您还可以手动检查/nix/var/nix/profiles/per-user/root/channels-*/manifest.nix
- 那些包含名称、提交哈希等。
答案2
太长了;
配置文件生成和通道生成是不同的事情。频道生成跟踪列表的更改可用的 派生(包)和配置文件生成跟踪已安装 推导及其版本。
ls -g /nix/var/nix/profiles/per-user/my_user_name/
将一目了然地告诉您有关当前一代产品的所有信息。
/TLDR;
弗拉基米尔的答案是完全正确的,但由于可怕的漫长道路而很容易被忽视;)
当您更新频道时:
nix-channel --update <my-channel-alias>
您将当前用户的频道生成提前一位。仅my-channel-alias
受到影响,但这仍然会导致构建全新的一代并且您的环境会引用它。
不幸的是,nix-channel
没有切换到列表通道代。这就是长路径出现的地方。您可以看到channels
链接到channels-4-link
用户my_user_name
。因此,my_user_name
当前选择的通道代数为4。
ls -g /nix/var/nix/profiles/per-user/my_user_name/
channels -> channels-4-link
channels-1-link -> /nix/store/57904rflsfh46y7fxi62rzc7sidc9vmq-user-environment
channels-2-link -> /nix/store/j5j5avwf07a2ajr3jszj9vv8l5ybgycm-user-environment
channels-3-link -> /nix/store/xb0accm8k1zsll5wrxck7gj0xbdv8zk7-user-environment
channels-4-link -> /nix/store/dlh9wlpx59lifgni06q0vwgymshn9jja-user-environment
channels-5-link -> /nix/store/8wymqxsdy3m7gmh6f21m49hl98gy75aa-user-environment
channels-6-link -> /nix/store/3sf1c989bbfrrxrpr235xqjqvd89apsi-user-environment
profile -> profile-1-link
profile-10-link -> /nix/store/kwlgbfbpwjhgb42bp7c899l8a1cyjdcl-user-environment
profile-1-link -> /nix/store/57904rflsfh46y7fxi62rzc7sidc9vmq-user-environment
profile-2-link -> /nix/store/c614r1kmrg9nsx2qvd944k5afj49qim7-user-environment
profile-3-link -> /nix/store/57904rflsfh46y7fxi62rzc7sidc9vmq-user-environment
profile-4-link -> /nix/store/2blnby22dvc92i9ahprwkl504ngj75ad-user-environment
profile-5-link -> /nix/store/ahd9dzfkgvyfqdkdw8cw8w8dyqak66b4-user-environment
profile-6-link -> /nix/store/gbjmn5rcjl4iscfvgms9hk26vhpr6pv2-user-environment
profile-7-link -> /nix/store/57904rflsfh46y7fxi62rzc7sidc9vmq-user-environment
profile-8-link -> /nix/store/k50s7rb4gz3pibd0r8136y628al74www-user-environment
profile-9-link -> /nix/store/57904rflsfh46y7fxi62rzc7sidc9vmq-user-environment
相反,配置文件(用户环境)生成通过以下nix-env
操作进行高级:
--install
--update
--uninstall
正如 nix-env 的手册页中提到的。
man nix-env | grep "new user environment"
并且可以轻松查询当前用户的不同配置文件生成:
nix-env --list-generations