You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何部分Nix表达式无法通过mkBinaryCache正常命中缓存?

Nix本地二进制缓存无法命中symlinkJoin构建产物的问题

我正尝试在CI场景中使用Nix,通过mkBinaryCache构建本地二进制缓存,以便在容器中进行Nix构建时无需从cache.nixos.org下载大量内容,但发现部分Nix表达式无法如预期命中缓存。

测试设置

  • 令EXPR为某个Nix表达式。
  • 构建pkgs.mkBinaryCache { rootPaths = [ (${EXPR}) ]; },并将路径保存为BUILT_CACHE。
  • 令SUBSTITUTER="file://${BUILT_CACHE}?trusted=true"。
  • 创建临时目录作为全新存储,并运行以下命令:
nix-build -E "$EXPR" -v \
   --store "$STORE" \
   --option substituters "$SUBSTITUTER" \
   --option trusted-substituters "$SUBSTITUTER" \
   --no-link \
   --max-jobs 0

我的目标是仅通过从substituter下载完成构建,--max-jobs 0应能阻止Nix进行本地构建,整个流程已写成Bash脚本。

测试结果

  • 当EXPR为pkgs.hello时流程正常;
  • 当EXPR为pkgs.symlinkJoin { name = "test"; paths = []; }时失败,它会列出大量待构建的派生文件,似乎要自行构建符号链接文件夹。

这与我对Nix的认知不符,我认为它应计算symlinkJoin表达式的预期存储路径并查询缓存。我发现缓存目录存在对应输出的.narinfo文件,但Nix似乎未查询该路径的substituter,这是怎么回事?

内容的提问来源于stack exchange,提问作者tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:01:02