Nix 如何知道在安装软件包时使用哪个替代品?

问题描述

Cross-posted to NixOS Discourse

从频道安装或固定 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

是这样的吗?

  1. NixOS 组织的 (?) Hydra 构建农场定期构建二进制文件并在渠道中发布结果(基于 Nixpkgs 存储库中的分支)

  2. 二进制文件上传到二进制缓存(来自 Nix manual:“二进制文件已经构建并上传到 cache.nixos.org 上的二进制缓存”) >

  3. 一个进程开始安装包(nix-shellnix-env 等)时,Nix 表达式会在 Nixpkgs 中查找

  4. 一个派生被构建并放置在 Nix 商店中(?;重点是会有 a hash value that is compared against the binary cache

  5. 如果有替代品,则将其拉取,否则继续进行源部署。

不同的 deno 版本只是这些快照中包含的不同 Nix 表达式产生不同哈希值的结果,因此在每种情况下都下载了不同的替代品。 (在第一种情况下,它是在我的笔记本电脑上设置的 https://nixos.org/channels/nixos-20.09 频道的最新版本,而后者是从......任何频道中挑选的 - 不稳定? - 具有带有该哈希的二进制文件?)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)