Я использую Nix поверх системы Devuan GNU / Linux (x86_64) со следующими ~/.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
ожидаемым образом?