node2nix override; wrapProgram: команда не найдена

Я упаковываю сценарий узла с внешней зависимостью (GraphicsMagick), и при попытке переопределить производную, сгенерированную из node2nix, я получаю сообщение об ошибке:

wrapProgram: команда не найдена

Следующий текст подробно описывает, что я пытался решить эту ошибку.


Воспроизведение проблемы с нуля

Я создал минимальный репозиторий git, который воспроизводит эту проблему, если вы просто хотите взглянуть там. В противном случае шаги по воспроизведению проблемы приведены ниже.

Начальная сессия оболочки:

В пустом каталоге запустите:

npm init -y
npm install --save gm
curl https://i.imgur.com/addSfQi.jpg > image.png

(npm version: 5.6.0 & node version v8.9.4)

Создать index.js

#!/usr/bin/env node

const path = require("path"); // node.js builtin
const gm = require("gm"); // GraphicsMagick module

const imagePath = path.join(__dirname, "image.png");

// Flip image horizontally and write to disk
gm(imagePath)
  .flop()
  .write(imagePath, error => {
    console.log("error:", error);
  });

Добавьте раздел «bin» в package.json:

"bin": "index.js"

Создавать файлы * .nix с node2nix

node2nix -8 -l package-lock.json

Создать override.nix

{ pkgs ? import <nixpkgs> {}
, system ? builtins.currentSystem
}:

let
  nodePackages = import ./default.nix {
    inherit pkgs system;
  };
in
nodePackages // {
  package = nodePackages.package.override (oldAttrs: {
    postInstall = ''
      wrapProgram "$out/bin/test-nodejs-gm-nixpkg" --prefix PATH : "${pkgs.graphicsmagick}/bin"
    '';
  });
}

Сборка пакета nix

nix-build override.nix -A package

Вышеуказанное не работает с:

/ nix / store / * / setup: строка 95: wrapProgram: команда не найдена


Полезные ресурсы


person Jay    schedule 07.04.2018    source источник
comment
Я считаю, что вы хотите добавить nativeBuildInputs = oldAttrs.nativeBuildInputs or [] ++ [ pkgs.makeWrapper ] в свое переопределение, чтобы сделать wrapProgram доступным.   -  person ppb    schedule 07.04.2018
comment
@ppb Добавление nativeBuildInputs = [ pkgs.makeWrapper ]; решило эту проблему. Если вы добавите свой комментарий в ответ, я его приму. Также: Если вы не возражаете, я спрошу, где я могу узнать об этом больше? Спасибо!   -  person Jay    schedule 07.04.2018
comment
@ x9hb8wcy6quezjk makeWrapper рассматривается в руководстве по nixpkgs и источник находится в build-support каталоге репо.   -  person brocking    schedule 16.04.2018


Ответы (1)


wrapProgram содержится в makeWrapper пакете.

nativeBuildInputs = oldAttrs.nativeBuildInputs or [] ++ [ pkgs.makeWrapper ];

Как упоминал @ppb в комментариях.

person Chris Stryczynski    schedule 13.07.2019