【问题标题】:Nix derivation to bundle multiple programsNix派生捆绑多个程序
【发布时间】:2019-09-24 19:31:27
【问题描述】:

我正在尝试编写一个派生程序来安装一些可执行文件。我可以使用 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 这样的软件包,让他们大部分时间都能正确配置虚拟机。

【问题讨论】:

    标签: nix


    【解决方案1】:

    是的,你可以在直接声明时设置包优先级:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      • 2023-04-02
      • 2020-08-27
      相关资源
      最近更新 更多