如何使用 nix 构建和分发二进制包?

How to build and distribute binary packages with nix?

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

问题:

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

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

正如 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

Note: this program is EXPERIMENTAL and subject to change.