我正在尝试使用声明性方式在 NixOS 内安装外部二进制文件。在 nix-pkg 手册中,我发现了在 NixOS 中获取外部二进制文件的方法
{ pkgs ? import <nixpkgs> {} }:
pkgs.stdenv.mkDerivation {
name = "goss";
src = pkgs.fetchurl {
url = "https://github.com/aelsabbahy/goss/releases/download/v0.3.13/goss-linux-amd64";
sha256 = "1q0kfdbifffszikcl0warzmqvsbx4bg19l9a3vv6yww2jvzj4dgb";
};
phases = ["installPhase"];
installPhase = ''
'';
但我想知道,我应该在 InstallPhase
中添加什么,以使这个二进制文件安装在系统内?
最佳答案
这似乎是一个开源 Go 应用程序,因此最好使用 Nixpkgs 的 Go 支持,这可能比修补二进制文件更简单。
也就是说,installPhase
负责创建 $out
路径;通常是 mkdir -p $out/bin
后跟 cp
、make install
或类似命令。
所以这实际上并不是将其安装到系统中;而是将其安装到系统中。毕竟 Nix 衍生不应该有副作用。将其“安装”到系统中是 NixOS 派生的责任,由您配置。
您可以说“安装”是修改 NixOS 配置 + 切换到新 NixOS 的组合。我倾向于只考虑对配置的修改;尽管 nixos-rebuild
通常是手动操作,但构建和切换感觉像是实现细节。
示例:
installPhase = ''
install -D $src $out/bin/goss
chmod a+x $out/bin/goss
'';
通常 chmod
会在构建阶段对本地文件完成,但我们在这里并不真正需要该阶段。
关于nixos - 如何将二进制文件安装到 NixOS 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63562960/