捆绑多个程序的Nix推导

问题描述 投票:0回答:1

我正在尝试编写将安装一些可执行文件的派生工具。我可以使用symlinkJoin轻松完成此操作

{pgm-a, pgm-b, symlinkJoin}: symlinkJoin {
  name = "pgm-env";
  paths = [pgm-a,pgm-b]; }

但是,如果已经安装了pgm-apgm-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。

nix
1个回答
1
投票

是的,您可以像这样直接声明时设置包优先级:

{pgm-a, pgm-b, symlinkJoin}: symlinkJoin {
  name = "pgm-env";
  paths = [pgm-a,pgm-b];
  meta.priority = 10;
}

默认优先级为5,较低的优先级比较高的优先级高,因此将其设置为10,此派生的文件将仅用作后备。

© www.soinside.com 2019 - 2024. All rights reserved.