1

我正在尝试使用声明性方式在 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来让这个二进制文件安装在系统中?

4

1 回答 1

2

这似乎是一个开源的 Go 应用程序,因此最好使用 Nixpkgs 的 Go 支持,这可能比修补二进制文件更直接。

也就是说,installPhase负责创建$out路径;通常mkdir -p $out/bin后跟cp,make install或类似的命令。

所以这实际上并不是将它安装到系统中;毕竟 Nix 派生不应该有副作用。将它“安装”到系统中是 NixOS 派生的责任,由您配置。

您可以说“安装”是修改 NixOS 配置 + 切换到新的 NixOS 的组合。我倾向于只考虑对配置的修改;构建和切换感觉就像实现细节,尽管nixos-rebuild通常是手动操作。

于 2020-08-24T17:16:13.230 回答