扩展 NixOS 讨论线程中提供的答案如何查看我的频道在哪个提交上?:
注意:在尝试任何这些方法之前,请确保您使用正确的用户发出命令!
无论哪种方式都不会造成伤害,但是如果您在 NixOS 上并以声明方式管理事物(如root
重建系统时),那么您可能会得到与您需要的不同的提交哈希。(特别是如果您曾经发布过nix-channel --update
没有,这也会为您的用户个人资料sudo
设置一个频道。)
方法 0
根据NixOS wiki 的Nix 频道条目,“频道是Nixpkgs中最新的“已验证”git 提交的名称。也就是说,在任何给定时间,通道都指向Github 上 Nixpkgs git 存储库中的特定提交;每个 Nix 频道实际上是 repo 中的一个 git 分支:
$ nix-channel --list
nixos https://nixos.org/channels/nixos-20.09
----- -----------
(name) (branch-name)
# |
# V
# https://github.com/NixOS/nixpkgs/tree/<branch-name>
# i.e. https://github.com/NixOS/nixpkgs/tree/nixos-20.09
因此,如果您之前刚刚执行nix-channel --update
过,并且它有效,只需在Nixpkgs reponix-shell
的通道分支中查找最后一次提交。
方法一
Nix 手册的“第 12 章。通道”提到nix-channel --update
“使每个通道的 Nix 表达式的联合默认可用于nix-env
操作(通过 symlink ~/.nix-defexpr/channels
) ”。
要查看~/.nix-defexpr/channels
符号链接指向的位置,请使用readlink -f
跟随符号链接链并将其结合起来ls
以直截了当:
$ ls -l $(readlink -f ~/.nix-defexpr/channels)
total 6432
dr-xr-xr-x 2 root root 4096 Jan 1 1970 ./
drwxrwxr-t 8191 root nixbld 6569984 Feb 9 15:51 ../
lrwxrwxrwx 1 root root 78 Jan 1 1970 nixos -> /nix/store/k737c631q19n54fhjmnf68frg5dar14w-nixos-20.09.3009.8e78c2cfbae/nixos/
lrwxrwxrwx 1 root root 60 Jan 1 1970 manifest.nix -> /nix/store/a5wl1fri2sasnsb1i5zscni5h7kjg7d6-env-manifest.nix
我的频道名称是nixos
,它指向
/nix/store/k7..4w-nixos-20.09.3009.8e78c2cfbae/nixos/
-----------
^
|
channel-commit
并且提交哈希就在MAJOR.MINOR.PATCH 版本号之后。
旁白:要fetchTarball
在问题中构造 tarball URL,请使用以下模板:
https://github.com/<user>/<repo>/archive/<full-or-abbr-commit-hash>.tar.gz
例如:
https://github.com/NixOS/nixpkgs/archive/8e78c2cfbae.tar.gz
或者,单击绿色的“代码”按钮,然后复制“下载 ZIP”链接的 URL(并将zip
扩展名更改为tar.gz
)。
有趣的事实:如果您nix-channel --update
在方法 1 之前做过,那么 URLhttps://github.com/NixOS/nixpkgs/tree/<branch-name>
和https://github.com/NixOS/nixpkgs/tree/<channel-commit>
将指向Nixpkgs 存储库中的相同位置。