根据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文件没有显示在该上下文中?
答案 0 :(得分:2)
您不希望您的Nix派生引用本地文件系统元素!如果尚未对任何内容进行哈希处理并将其放入商店,则说明您的构建不纯,因此无法在沙盒模式下工作。
将其更改为src = ./x.zip
,文件将被散列并添加到存储中,并且src
将被设置为/nix/store/.....-x.zip
路径。
with import <nixpkgs> {};
stdenv.mkDerivation {
name = "test-environment";
nativeBuildInputs = [ unzip ];
buildInputs = [ unzip ];
src = ./x.zip; ## NO QUOTES!
}