nixpkgs 如何用 prefer-remote-fetch overlay 让远程构建机直接下载源码加速构建? 📅 发布时间:2026/9/14 5:17:56 👁 浏览次数: nixpkgs 如何用 prefer-remote-fetch overlay 让远程构建机直接下载源码加速构建【免费下载链接】nixpkgsNix Packages collection NixOS项目地址: https://gitcode.com/GitHub_Trending/ni/nixpkgs当求值机evaluating machine的上行带宽较慢而远程构建机可以更快地直接从源站拉取时源码默认在求值机下载再传给构建机会拖慢整个流程。nixpkgs 为此提供了prefer-remote-fetchoverlay作用就是让源码改由远程构建机直接下载如 官方文档 所述This is useful when the evaluating machine has a slow upload while the builder can fetch faster, directly from the source.它改了什么先明确生效范围prefer-remote-fetch是一个 overlay通过 all-packages.nix 暴露prefer-remote-fetch import ../build-support/prefer-remote-fetch;。查看 overlay 实现 可知它用self.lib.extendMkDerivation扩展了一批 fetcherbinary-cache、buildenv、fetchfossil、fetchdocker、fetchgit、fetchgx、fetchhg、fetchipfs、fetchrepoproject、fetchs3、fetchsvn、fetchurl、mkNugetSource并为派生出的 derivation 附加preferLocalBuild属性。其中fetchgit在扩展后保留了getRevWithTag。对照 fetchurl 的实现其参数默认值是preferLocalBuild ? true即默认偏好本地求值侧构建。overlay 生效后这些 fetcher 派生的 drv 不再带有preferLocalBuild true下载动作就转移到实际执行构建的机器上。列表之外的 fetcher 不受影响。配置 overlay文档给出的完整配置方式是把 overlay 放到用户配置目录在求值机上执行mkdir ~/.config/nixpkgs/overlays/ cat ~/.config/nixpkgs/overlays/prefer-remote-fetch.nix EOF self: super: super.prefer-remote-fetch self super EOF如果是在 Nix 表达式里显式设置 overlay文档 给出的等价写法是self: super: (super.prefer-remote-fetch self super)两者选其一即可。一个前置限制按 Overlays 章节 的说明~/.config/nixpkgs/overlays.nix与~/.config/nixpkgs/overlays/目录同时存在会报错二者只能取其一。验证 overlay 已生效仓库自带配套测试判定逻辑是对应用 overlay 后的 fetcher 求值出 drv若drv.preferLocalBuild为真则抛出Fetcher must not prefer local builds。可以照同样方式手动验证直接求值该属性nix eval --expr ( import nixpkgs { overlays [ (self: super: super.prefer-remote-fetch self super) ]; } ).fetchurl { url https://gist.github.com/glandium/01d54cefdb70561b5f6675e08f2990f2/archive/2f430f0c136a69b0886281d0c76708997d8878af.zip; sha256 sha256-J/ZWC23GmFfew/56NQvPqKzqkWgjOaPvbMicFJnuJxI; }.preferLocalBuild上面的url与sha256取自仓库测试文件 tests.nix 中对fetchurl的验证参数可直接运行。判定标准与测试断言一致overlay 生效后该值不应为true输出false如果仍为true说明 overlay 没有作用到当前的 nixpkgs 求值上需回头检查 overlay 文件是否位于配置查找会检索的位置。限制该 overlay 只在求值机上传慢、构建机直连源站更快这一前提下才有收益文档 也是按此场景描述用途瓶颈不在这条链路上时启用它没有意义。影响范围仅限上面列出的 fetcher 列表其余 fetcher 的下载位置不变。文档未给出量化加速数据实际收益取决于两侧带宽差异。配置完成后构建流程本身不变fetcher 派生的 drv 不再标记本地构建源码下载改由运行构建的远程构建机直接从源站完成。【免费下载链接】nixpkgsNix Packages collection NixOS项目地址: https://gitcode.com/GitHub_Trending/ni/nixpkgs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考