【问题标题】:Inject runtime dependency into nix package将运行时依赖注入到 nix 包中
【发布时间】:2016-06-05 09:51:46
【问题描述】:

通过覆盖 buildInputs 将运行时依赖项添加到包会导致包重新构建。有没有一种简单的方法可以在不重新编译的情况下将运行时依赖项注入包中?

所以基本上将 package/bin 添加到 PATH 并将 package/lib 添加到 LD_LIBRARY_PATH

【问题讨论】:

  • 这会破坏纯粹功能的整个目的,不是吗? (-> 否)
  • 实际上我认为有一种方法,看看 cc-wrapper,它可以换掉 binutils,例如无需重新构建 gcc,因此您也可以使用它来添加运行时依赖项。 echo ${toString extraPackages} > $out/nix-support/propagated-native-build-inputs
  • 但我喜欢你引用我的话 =P
  • 所以您的意思是更改 Nix 安装的应用程序 运行 时使用的环境,而不是 构建 时使用的环境,对吗?

标签: nix nixpkgs


【解决方案1】:

如果我理解正确,您想调整 Nix 安装的应用程序 run 时使用的环境,而不是 构建时使用的环境,然后是一种方法我知道的如下。通过使用它,您实际上创建了一个包装脚本,它覆盖了“默认命令”。因此,类似于创建例如一个自定义的~/bin/vim 脚本,它将一些选项/env 覆盖添加到默认的 vim 二进制文件中,该文件在脚本中使用“硬编码的原始路径”调用。

nixpkgs 中的一个例子是vimutils.vimWithRC 如何使用自定义脚本覆盖vim 命令。为了您自己的使用,您可以或多或少地编写如下内容:

with import <nixpkgs> {};

writeScriptBin "vim" ''
  #!/usr/bin/env bash
  export PATH=package/bin:$PATH   # whatever you like; I've added what you asked for
  export LD_LIBRARY_PATH=package/lib:$LD_LIBRARY_PATH
  ${vim}/bin/vim --my-options "$@"
'';

如果你把它放在my-vim.nix,你应该可以安装它:

$ nix-env -e vim   # REMOVE NORMAL VIM. I think this should be done first to avoid conflict
$ nix-env -i -f my-vim.nix

希望它能够为您工作并“覆盖”默认 vim。

免责声明:我实际上并没有以这种确切的形式对其进行过测试,抱歉。不幸的是,目前手边没有 Nix 控制台。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2020-05-01
    • 1970-01-01
    • 2016-04-18
    • 2021-09-20
    • 1970-01-01
    • 2022-12-04
    相关资源
    最近更新 更多