nix-build: отказано в разрешении bash

Я пытаюсь научиться писать выражения Nix, и я подумал о том, чтобы написать свое очень простое "Hello World!" (по традиции).

Итак, у меня есть каталог только с этим default.nix файлом:

{pkgs ? import <nixpkgs> {}}:
derivation {
    system = "x86_64-linux";
    name = "simple-bash-derivation-helloworld";
    builder = pkgs.bash;
    args = [ "-c" "echo 'Hello World' > $out" ];
}

Вот что я получаю, когда пытаюсь его построить:

nix-build
these derivations will be built:
  /nix/store/3grmahx3ih4c50asj84p7xnpqpj32n5s-simple-bash-derivation-helloworld.drv
building path(s) ‘/nix/store/6psl3rc92311w37c1n6nj0a6jac16hv1-simple-bash-derivation-helloworld’
while setting up the build environment: executing ‘/nix/store/wb34dgkpmnssjkq7yj4qbjqxpnapq0lw-bash-4.4-p12’: Permission denied
builder for ‘/nix/store/3grmahx3ih4c50asj84p7xnpqpj32n5s-simple-bash-derivation-helloworld.drv’ failed with exit code 1
error: build of ‘/nix/store/3grmahx3ih4c50asj84p7xnpqpj32n5s-simple-bash-derivation-helloworld.drv’ failed

Удаление строки args приводит к той же проблеме.

Почему у меня проблема с разрешением? Каким будет правильный способ сделать простой вывод, просто выполняя bash echo?

Обратите внимание, что это обучающее упражнение: я не хочу использовать здесь, например, stdenv.mkDerivation.

Я использую nix-env (Nix) 1.11.9 в системе Ubuntu 16.04.

Заранее спасибо.


nix
person HectorJ    schedule 08.06.2017    source источник


Ответы (1)


Попробуйте запустить команду ls на /nix/store/wb34dgkpmnssjkq7yj4qbjqxpnapq0lw-bash-4.4-p12, и вы увидите, что это каталог, а не исполняемый файл (указывает на $out из pkgs.bash производной). Если вы хотите обратиться к двоичному файлу bash, вы должны использовать:

builder = "${pkgs.bash}/bin/bash";                                                                                                                                                                          
person ppb    schedule 08.06.2017
comment
Действительно, большое вам спасибо! Есть ли где-нибудь документальные свидетельства такого рода? Хотелось бы, чтобы была nix IDE с каким-нибудь автозаполнением. - person HectorJ; 08.06.2017
comment
@DavidGrayson В руководстве не подробно описывается содержимое пакетов - person HectorJ; 09.06.2017
comment
В руководстве сказано, что builder должен быть исполняемым файлом, и вы пытались назначить его каталогом. - person David Grayson; 09.06.2017
comment
Хорошо, выходной путь можно найти с помощью nix-env -qa --out-path bash, но пакет должен быть установлен или, конечно, путь не существует. Так что, похоже, придется прибегать к пробам и ошибкам. - person HectorJ; 09.06.2017
comment
О, я бы нашел путь к bash, сделав что-то вроде bash = pkgs.bash; временно в производной, которую я пытаюсь построить, а затем запустил nix-build -A myrecipe.bash, где myrecipe - это путь атрибута к тому, что вы пытались построить. Так что просто добавьте .bash к предыдущей команде сборки. - person David Grayson; 10.06.2017