【发布时间】:2019-11-07 23:32:17
【问题描述】:
我在 Devuan GNU/Linux 系统 (x86_64) 上运行 Nix,并遵循 ~/.nixpkgs/config.nix,如 Nix Pills 中所述:
{
packageOverrides = pkgs: {
coreutils = pkgs.coreutils.override {
aclSupport = false;
attrSupport = false;
selinuxSupport = false;
};
coreutils2 = pkgs.coreutils.override {
aclSupport = false;
attrSupport = false;
selinuxSupport = false;
};
w3m = pkgs.w3m.override {
graphicsSupport = false;
imlib2 = null;
x11Support = false;
mouseSupport = true;
};
};
}
但是当我运行 nix-env -iA nixpkgs.coreutils 时,Nix 安装了原版的 coreutils,并启用了可选功能:
$ nix-env -iA nixpkgs.coreutils
replacing old 'coreutils-8.31'
installing 'coreutils-8.31'
$ ldd /home/iu/.nix-profile/bin/ls |grep libattr
libattr.so.1 => /nix/store/5xwmn6ai8c42j84k6gdzja0lnkdi3c60-attr-2.4.48/lib/libattr.so.1
(0x00007f0354e7f000)
但如果我通过其他名称引用相同的派生(引用透明度):
$ nix-env -iA nixpkgs.coreutils2
Nix 从源代码开始重建,生成二进制文件,编译后没有可选功能,正如请求的那样。更神秘的是,w3m 的压倒一切的构建选项可以工作,并且 do 会触发重建。
另外,我注意到gnutar 有同样的奇怪行为。是否与coreutils 和gnutar 对 Nix 本身至关重要这一事实有关?我怎样才能以预期的方式制作coreutils?
【问题讨论】: