Nix 推导捆绑多个程序
Nix derivation to bundle multiple programs
我正在尝试编写一个派生程序来安装一些可执行文件。我可以使用 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,本次派生的文件将仅作为后备。
我正在尝试编写一个派生程序来安装一些可执行文件。我可以使用 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,本次派生的文件将仅作为后备。