如何使用 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.
问题:
是否可以使用 nix 工具生成二进制包(即预构建派生)?
如果不是,这是故意遗漏还是只是缺少功能。
正如 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.
天真地认为包管理器的核心功能是“构建包”。对于 nix,情况似乎有点不同:一个分发 nix-files/expression(在通道或 .nix 文件中)定义派生(nix-instantiate
),可以构建(nix-build
)以生成二进制文件安装(nix-env -i
)到环境中的工件。在任何时候都不会生成包含构建工件的传统“包文件”,可以将其复制到不同的机器 and/or 分发,例如作为 GitHub-releases.
问题:
是否可以使用 nix 工具生成二进制包(即预构建派生)?
如果不是,这是故意遗漏还是只是缺少功能。
正如 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.