nixos - 如何将二进制文件安装到 NixOS 中

标签 nixos nixpkgs

我正在尝试使用声明性方式在 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 后跟 cpmake 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/

相关文章:

nix - 在 NixOS 中安装 file 和 ripgrep 等实用程序的常用方法是什么

shell - 配置 nix-shell 以使用 Bash 以外的 shell?

nixos - 使用 NixOps 部署静态文件

python - 在 vim_configurable.customize 中用 python3 覆盖 python

nixos - 如何安装 vscode 的扩展?

nixos - 如何为 nix-expression 设置参数

docker - 在 NixOS 上下载 Compose for Docker 时出现问题

nix - 什么是 nix 表达式 "<nixpkgs>"?

qt - 如何在 qt 库中使用调试符号为 qt 5.5 创建开发 shell