我正在尝试编写将安装一些可执行文件的派生工具。我可以使用symlinkJoin轻松完成此操作
{pgm-a, pgm-b, symlinkJoin}: symlinkJoin {
name = "pgm-env";
paths = [pgm-a,pgm-b]; }
但是,如果已经安装了pgm-a
或pgm-b
,我会收到一个涉及软件包冲突的错误...
...'<pgm-a>/bin/pgm-a' and '<pgm-env>/bin/pgm-a' have the same priority 5; use 'nix-env --set-flag priority NUMBER INSTALLED_PKGNAME' ...
是否有一种方法可使环境中的可执行文件套件可用,但只会向环境中添加所需的内容(或避免该错误)?
某些背景:我已经开始为我的实验室策划一个私有存储库。我们设置了VM网络,安装了一些软件,进行了一些测试,冲洗并重复。除了我以外,没有人是Nix用户,所以我想使nix部分尽可能保持低调-我既不想用户必须设置优先级标志,也不想让他们使用nix-shell
。它们都是用来做apt-get install ...
的,所以我的计划是让它们代替nix-env -i
并提供像ourExperiment-x
这样的软件包,这些软件包可以将它们大部分方式正确地配置为VM。
是的,您可以像这样直接声明时设置包优先级:
{pgm-a, pgm-b, symlinkJoin}: symlinkJoin {
name = "pgm-env";
paths = [pgm-a,pgm-b];
meta.priority = 10;
}
默认优先级为5,较低的优先级比较高的优先级高,因此将其设置为10,此派生的文件将仅用作后备。