Failed when `nix-build hello.nix`











up vote
0
down vote

favorite












I followed the steps on http://lethalman.blogspot.com/2014/08/nix-pill-8-generic-builders.html to build GNU Hello, and here is the files I used to build 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


Error messages:



$ 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


It seems there is gnutar in the autotools.nix but builder still complains tar: No such file or directory, why is this?










share|improve this question






















  • Although you have gnutar as a dependency, I don't think the builder will get a Nix user environment; In short, tar won't be in $PATH. So you'll need to use the absolute path to the executable like so in builder.sh: ${gnutar}/bin/tar
    – Emmanuel Rosa
    Nov 15 at 12:56















up vote
0
down vote

favorite












I followed the steps on http://lethalman.blogspot.com/2014/08/nix-pill-8-generic-builders.html to build GNU Hello, and here is the files I used to build 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


Error messages:



$ 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


It seems there is gnutar in the autotools.nix but builder still complains tar: No such file or directory, why is this?










share|improve this question






















  • Although you have gnutar as a dependency, I don't think the builder will get a Nix user environment; In short, tar won't be in $PATH. So you'll need to use the absolute path to the executable like so in builder.sh: ${gnutar}/bin/tar
    – Emmanuel Rosa
    Nov 15 at 12:56













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I followed the steps on http://lethalman.blogspot.com/2014/08/nix-pill-8-generic-builders.html to build GNU Hello, and here is the files I used to build 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


Error messages:



$ 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


It seems there is gnutar in the autotools.nix but builder still complains tar: No such file or directory, why is this?










share|improve this question













I followed the steps on http://lethalman.blogspot.com/2014/08/nix-pill-8-generic-builders.html to build GNU Hello, and here is the files I used to build 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


Error messages:



$ 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


It seems there is gnutar in the autotools.nix but builder still complains tar: No such file or directory, why is this?







nix






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 15 at 6:52









cmal

552316




552316












  • Although you have gnutar as a dependency, I don't think the builder will get a Nix user environment; In short, tar won't be in $PATH. So you'll need to use the absolute path to the executable like so in builder.sh: ${gnutar}/bin/tar
    – Emmanuel Rosa
    Nov 15 at 12:56


















  • Although you have gnutar as a dependency, I don't think the builder will get a Nix user environment; In short, tar won't be in $PATH. So you'll need to use the absolute path to the executable like so in builder.sh: ${gnutar}/bin/tar
    – Emmanuel Rosa
    Nov 15 at 12:56
















Although you have gnutar as a dependency, I don't think the builder will get a Nix user environment; In short, tar won't be in $PATH. So you'll need to use the absolute path to the executable like so in builder.sh: ${gnutar}/bin/tar
– Emmanuel Rosa
Nov 15 at 12:56




Although you have gnutar as a dependency, I don't think the builder will get a Nix user environment; In short, tar won't be in $PATH. So you'll need to use the absolute path to the executable like so in builder.sh: ${gnutar}/bin/tar
– Emmanuel Rosa
Nov 15 at 12:56












1 Answer
1






active

oldest

votes

















up vote
1
down vote



accepted










The problem is probably that gnutar is in the baseInputs list, while the buildInputs list you are building your PATH from is totally empty so nothing will be on your PATH. Try changing the for line in your shell script so that it uses the concatentation of both lists to build the path:



for p in $baseInputs $buildInputs; do


You can add echo $PATH to your builder script to debug issues like this.



That is what the blog post author was asking you to do in this sentence from the post:




Complete the new builder.sh by adding $baseInputs in the for loop together with $buildInputs.







share|improve this answer























  • github.com/NixOS/nix-pills/blob/… The author said: I remind you, in <filename>autotools.nix</filename> there's a <literal>buildInputs</literal> variable which gets concatenated to <literal>baseInputs</literal>. That would be the perfect place to add a build dependency. We created that variable exactly for this reason to be overridable from package expressions. --- So should I change the buildInputs to baseInputs in builder.sh?
    – cmal
    Nov 16 at 10:37










  • OK, I get it now. I edited my answer.
    – David Grayson
    Nov 16 at 17:22











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53313902%2ffailed-when-nix-build-hello-nix%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
1
down vote



accepted










The problem is probably that gnutar is in the baseInputs list, while the buildInputs list you are building your PATH from is totally empty so nothing will be on your PATH. Try changing the for line in your shell script so that it uses the concatentation of both lists to build the path:



for p in $baseInputs $buildInputs; do


You can add echo $PATH to your builder script to debug issues like this.



That is what the blog post author was asking you to do in this sentence from the post:




Complete the new builder.sh by adding $baseInputs in the for loop together with $buildInputs.







share|improve this answer























  • github.com/NixOS/nix-pills/blob/… The author said: I remind you, in <filename>autotools.nix</filename> there's a <literal>buildInputs</literal> variable which gets concatenated to <literal>baseInputs</literal>. That would be the perfect place to add a build dependency. We created that variable exactly for this reason to be overridable from package expressions. --- So should I change the buildInputs to baseInputs in builder.sh?
    – cmal
    Nov 16 at 10:37










  • OK, I get it now. I edited my answer.
    – David Grayson
    Nov 16 at 17:22















up vote
1
down vote



accepted










The problem is probably that gnutar is in the baseInputs list, while the buildInputs list you are building your PATH from is totally empty so nothing will be on your PATH. Try changing the for line in your shell script so that it uses the concatentation of both lists to build the path:



for p in $baseInputs $buildInputs; do


You can add echo $PATH to your builder script to debug issues like this.



That is what the blog post author was asking you to do in this sentence from the post:




Complete the new builder.sh by adding $baseInputs in the for loop together with $buildInputs.







share|improve this answer























  • github.com/NixOS/nix-pills/blob/… The author said: I remind you, in <filename>autotools.nix</filename> there's a <literal>buildInputs</literal> variable which gets concatenated to <literal>baseInputs</literal>. That would be the perfect place to add a build dependency. We created that variable exactly for this reason to be overridable from package expressions. --- So should I change the buildInputs to baseInputs in builder.sh?
    – cmal
    Nov 16 at 10:37










  • OK, I get it now. I edited my answer.
    – David Grayson
    Nov 16 at 17:22













up vote
1
down vote



accepted







up vote
1
down vote



accepted






The problem is probably that gnutar is in the baseInputs list, while the buildInputs list you are building your PATH from is totally empty so nothing will be on your PATH. Try changing the for line in your shell script so that it uses the concatentation of both lists to build the path:



for p in $baseInputs $buildInputs; do


You can add echo $PATH to your builder script to debug issues like this.



That is what the blog post author was asking you to do in this sentence from the post:




Complete the new builder.sh by adding $baseInputs in the for loop together with $buildInputs.







share|improve this answer














The problem is probably that gnutar is in the baseInputs list, while the buildInputs list you are building your PATH from is totally empty so nothing will be on your PATH. Try changing the for line in your shell script so that it uses the concatentation of both lists to build the path:



for p in $baseInputs $buildInputs; do


You can add echo $PATH to your builder script to debug issues like this.



That is what the blog post author was asking you to do in this sentence from the post:




Complete the new builder.sh by adding $baseInputs in the for loop together with $buildInputs.








share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 16 at 17:21

























answered Nov 15 at 20:14









David Grayson

56.4k18103148




56.4k18103148












  • github.com/NixOS/nix-pills/blob/… The author said: I remind you, in <filename>autotools.nix</filename> there's a <literal>buildInputs</literal> variable which gets concatenated to <literal>baseInputs</literal>. That would be the perfect place to add a build dependency. We created that variable exactly for this reason to be overridable from package expressions. --- So should I change the buildInputs to baseInputs in builder.sh?
    – cmal
    Nov 16 at 10:37










  • OK, I get it now. I edited my answer.
    – David Grayson
    Nov 16 at 17:22


















  • github.com/NixOS/nix-pills/blob/… The author said: I remind you, in <filename>autotools.nix</filename> there's a <literal>buildInputs</literal> variable which gets concatenated to <literal>baseInputs</literal>. That would be the perfect place to add a build dependency. We created that variable exactly for this reason to be overridable from package expressions. --- So should I change the buildInputs to baseInputs in builder.sh?
    – cmal
    Nov 16 at 10:37










  • OK, I get it now. I edited my answer.
    – David Grayson
    Nov 16 at 17:22
















github.com/NixOS/nix-pills/blob/… The author said: I remind you, in <filename>autotools.nix</filename> there's a <literal>buildInputs</literal> variable which gets concatenated to <literal>baseInputs</literal>. That would be the perfect place to add a build dependency. We created that variable exactly for this reason to be overridable from package expressions. --- So should I change the buildInputs to baseInputs in builder.sh?
– cmal
Nov 16 at 10:37




github.com/NixOS/nix-pills/blob/… The author said: I remind you, in <filename>autotools.nix</filename> there's a <literal>buildInputs</literal> variable which gets concatenated to <literal>baseInputs</literal>. That would be the perfect place to add a build dependency. We created that variable exactly for this reason to be overridable from package expressions. --- So should I change the buildInputs to baseInputs in builder.sh?
– cmal
Nov 16 at 10:37












OK, I get it now. I edited my answer.
– David Grayson
Nov 16 at 17:22




OK, I get it now. I edited my answer.
– David Grayson
Nov 16 at 17:22


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53313902%2ffailed-when-nix-build-hello-nix%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

How to change which sound is reproduced for terminal bell?

Can I use Tabulator js library in my java Spring + Thymeleaf project?

Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents