Nix mkDerivation не может распознать zip-файл локальной файловой системы как src - PullRequest
1 голос
/ 26 мая 2019

Согласно https://nixos.org/nixpkgs/manual/#ssec-unpack-phase я могу использовать zip-файл в качестве «источника».

with import <nixpkgs> {};

stdenv.mkDerivation {
  name = "test-environment";
  nativeBuildInputs = [ unzip ];
  buildInputs = [ unzip ];
  src = "./x.zip";
}
nix-build
these derivations will be built:
  /nix/store/431i1riasgh2hjs5rd9azfh0ssjlg7qj-test-environment.drv
building '/nix/store/431i1riasgh2hjs5rd9azfh0ssjlg7qj-test-environment.drv'...
unpacking sources
unpacking source archive ./x.zip
unzip:  cannot find or open ./x.zip, ./x.zip.zip or ./x.zip.ZIP.
unzip:  cannot find or open ./x.zip, ./x.zip.zip or ./x.zip.ZIP.
do not know how to unpack source archive ./x.zip
builder for '/nix/store/431i1riasgh2hjs5rd9azfh0ssjlg7qj-test-environment.drv' failed with exit code 1
error: build of '/nix/store/431i1riasgh2hjs5rd9azfh0ssjlg7qj-test-environment.drv' failed

В моем рабочем каталоге есть файл x.zip.Почему происходит сбой?


Обновление:

Если я установил unpackCmd = "ls -altr";, я вижу следующий вывод:

total 16
drwxr-x--- 9 nobody nixbld 4096 May 26 12:39 ..
drwx------ 2 nixbld nixbld 4096 May 26 12:39 .
-rw-r--r-- 1 nixbld nixbld 5806 May 26 12:39 env-vars

Почемумой zip-файл не отображается в этом контексте?

1 Ответ

2 голосов
/ 26 мая 2019

Вы не хотите, чтобы ваш вывод Nix ссылался на элементы локальной файловой системы!Если что-то не было хешировано и не помещено в хранилище, ваша сборка нечистая и не будет работать в режиме «песочницы».

Измените его на src = ./x.zip, и файл будет хеширован и добавлен вstore, и для src будет установлен путь /nix/store/.....-x.zip.

with import <nixpkgs> {};

stdenv.mkDerivation {
  name = "test-environment";
  nativeBuildInputs = [ unzip ];
  buildInputs = [ unzip ];
  src = ./x.zip;  ## NO QUOTES!
}
...