【问题标题】:How to build and distribute binary packages with nix?如何使用 nix 构建和分发二进制包?
【发布时间】:2021-10-11 13:09:15
【问题描述】:

人们会天真地认为包管理器的核心功能是“构建包”。对于 nix,情况似乎有点不同:一个分发 nix-files/expression(在通道或 .nix 文件中)定义派生(nix-instantiate),可以构建(nix-build)以生成安装的二进制工件(nix-env -i) 进入环境。在任何时候都不会生成包含构建工件的传统“包文件”,可以将其复制到不同的机器和/或分发,例如作为 GitHub 发布。

问题:

  1. 是否可以使用 nix 工具生成二进制包(即预构建的派生)?

  2. 如果不是,这是故意遗漏还是只是缺少功能。

【问题讨论】:

  • 您可能正在寻找nix-copy-closure(可以将派生及其依赖项从一台机器传输到另一台机器)和 Nix binary cache 的组合。
  • 顺便说一句——对于有关 Nix 及其设计原理的高级问题,我真的,真的建议在快速拨号上保留Eelco's doctoral thesis。尽管它已经很老了,而且在其间的几年里有很多积极的发展,但它回答了这里讨论的所有问题。
  • 真的,我会把这个问题带到 NixOS Discourse。不过,我个人的看法?不好的做法,故意不受支持。但这是一个很大的生态系统;其他人可能已经构建了自动化工具。
  • 发布者:discourse.nixos.org/t/… 编辑sources.list.d 也不例外,我也不希望用户这样做。我正在寻找与rpm -i <filename> 等效的版本。
  • 我使用 cachix 私有缓存来分发 Hercules CI Enterprise。

标签: nix


【解决方案1】:

正如 JonRinger 在 discourse 上所指出的,nix copy 可以用于此目的,如下所示。

如果我们将 nixpkgs.ag 作为一个包分发,我们可以运行:

nix copy nixpkgs.ag --to file://ag.pkg 
# We now have a local directory `ag.pkg` which we can tar-up and distribute
# On the client machine, we run the following to install the package
nix copy --from file://ag.pkg nixpkgs.ag

有关更多详细信息,请参阅nix copy --help

注意:此程序是实验性的,可能会发生变化。

【讨论】:

    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2017-08-30
    • 2016-08-04
    相关资源
    最近更新 更多