任务描述
我想确保我安装的任何派生都没有运行时依赖于指定的派生集。如果我要求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% 的解决方案。