Ошибка, когда `nix-build hello.nix` - PullRequest
0 голосов
/ 15 ноября 2018

Я выполнил шаги на http://lethalman.blogspot.com/2014/08/nix-pill-8-generic-builders.html для сборки GNU Hello, и вот файлы, которые я использовал для сборки GNU hello 2.9:

$ wget -c http://ftp.gnu.org/gnu/hello/hello-2.9.tar.gz

hello.nix:

$ cat hello.nix
let
  pkgs = import <nixpkgs> {};
  mkDerivation = import ./autotools.nix pkgs;
in mkDerivation {
  name = "hello";
  src = ./hello-2.9.tar.gz;
}

autotools.nix:

$ cat autotools.nix
pkgs: attrs:
  with pkgs;
  let defaultAttrs = {
    builder = "${bash}/bin/bash";
    args = [ ./builder.sh ];
    baseInputs = [ gnutar gzip gnumake gcc binutils coreutils gawk gnused gnugrep ];
    buildInputs = [];
    system = builtins.currentSystem;
  };
  in
  derivation (defaultAttrs // attrs)

builder.sh:

$ cat builder.sh
set -e
unset PATH
for p in $buildInputs; do
  export PATH=$p/bin${PATH:+:}$PATH
done

tar -xf $src

for d in *; do
  if [ -d "$d" ]; then
    cd "$d"
    break
  fi
done

./configure --prefix=$out
make
make install

Сообщения об ошибках:

$ nix-build hello.nix
these derivations will be built:
  /nix/store/d84l57agx3rmw00lxs8gjlw8srmx1bh9-hello.drv
building '/nix/store/d84l57agx3rmw00lxs8gjlw8srmx1bh9-hello.drv'...
/nix/store/vv3xqdggviqqbvym25jf2pwv575y9j1r-builder.sh: line 7: tar: No such file or directory
builder for '/nix/store/d84l57agx3rmw00lxs8gjlw8srmx1bh9-hello.drv' failed with exit code 127
error: build of '/nix/store/d84l57agx3rmw00lxs8gjlw8srmx1bh9-hello.drv' failed

Кажется, есть gnutar вautotools.nix но строитель все еще жалуется tar: No such file or directory, почему это так?

1 Ответ

0 голосов
/ 15 ноября 2018

Возможно, проблема в том, что gnutar находится в списке baseInputs, в то время как список buildInputs, из которого вы строите свой PATH, полностью пуст, поэтому в вашем PATH ничего не будет. Попробуйте изменить строку for в вашем сценарии оболочки, чтобы он использовал конкатенацию обоих списков для построения пути:

for p in $baseInputs $buildInputs; do

Вы можете добавить echo $PATH к вашему скрипту для решения подобных проблем.

Вот что автор блога просил вас сделать в этом предложении из поста:

Завершите новый файл builder.sh, добавив $ baseInputs в цикл for вместе с $ buildInputs.

...