【发布时间】:2019-12-25 18:31:08
【问题描述】:
任务描述
我想确保我安装的任何派生都没有运行时依赖于指定的派生集。如果我要求nix-env 安装具有这种运行时依赖性的软件包,我希望它说我要求不可能。构建依赖关系很好。不过,我想避免大规模的级联重建。
换句话说,我想确保 name = evil 的派生永远不会到达我的 Nix 商店,但我很好,它被用来在 Hydra 上构建其他派生。这是我尝试过的:
尝试失败:使用派生meta 属性
self: super: {
evil = super.evil // { meta.broken = True; };
}
但这使得nix-env 拒绝安装在构建时依赖于evil 的程序,例如它拒绝安装go 或haskell 程序(它们是静态链接的),因为编译器具有一些传递依赖在evil。
尝试失败:用无害的东西替换 evil
我写了覆盖 evil:
self: super {
evil = super.harmless; # e.g super.busybox
}
它会导致重大的级联重建。
随机想法
如果有函数,像这样:
self: super: {
ghc = forget_about_dependencies_but_retain_hash_yes_I_know_what_I_Do [super.evil] super.ghc;
# same for rustc, go and other compilers that link statically.
}
这对我来说是 90% 的解决方案。
【问题讨论】:
标签: package-managers nix dependency-resolution