从频道安装或固定 Nixpkgs 时。
假设有shell.nix
这样一个:
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell
{ buildInputs = [ pkgs.deno ]; }
然后简单地调用它:
$ nix-shell
[nix-shell:~]$ deno --version
deno 1.3.3
v8 8.6.334
typescript 4.0.2
然后使用固定版本的 Nixpkgs:
$ nix-shell \
--arg pkgs 'import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/f4593ab.tar.gz") {}' \
shell.nix
[nix-shell:~]$ deno --version
deno 1.8.3 (release, x86_64-unknown-linux-gnu)
v8 9.0.257.3
typescript 4.2.2
是不是沿着这些思路?
NixOS 组织的 (?) Hydra 构建农场定期构建二进制文件并在频道中发布结果(基于 Nixpkgs 存储库中的分支)
二进制文件上传到二进制缓存(来自Nix 手册:“二进制文件已构建并上传到 cache.nixos.org 的二进制缓存”)
当一个进程开始安装一个包(
nix-shell
,nix-env
等)时,Nix 表达式在 Nixpkgs 中查找一个推导被构建并放置在 Nix 存储中(?;关键是会有一个哈希值与二进制缓存进行比较)
如果有替代品则拉取,否则源头部署继续。
不同的 deno 版本只是这些快照中包含的不同 Nix 表达式产生不同哈希的结果,因此在每种情况下都下载了不同的替代品。(在第一种情况下,它是在我的笔记本电脑上设置的https://nixos.org/channels/nixos-20.09频道中的最新频道,而后者是从...任何频道中挑选的 - 不稳定? - 有具有该哈希的二进制文件?)