0

交叉发布到 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 手册:“二进制文件已构建并上传到 cache.nixos.org 的二进制缓存”)

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

  4. 一个推导被构建并放置在 Nix 存储中(?;关键是会有一个哈希值与二进制缓存进行比较

  5. 如果有替代品则拉取,否则源头部署继续。

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

4

0 回答 0