我试图了解vendorSha256使用 buildGoModule 时如何计算。在nixpkgs手册中我得到的唯一信息是:
“vendorSha256:是中间提取器派生的输出的哈希值。”
有没有办法可以计算我正在编写的 nix 表达式的vendorSha256?举个具体的例子,"sha256-Y4WM+o+5jiwj8/99UyNHLpBNbtJkKteIGW2P1Jd9L6M="这里是如何生成的:
{ lib, buildGoModule, fetchFromGitHub }:
buildGoModule rec {
pname = "oapi-codegen";
version = "1.6.0";
src = fetchFromGitHub {
owner = "deepmap";
repo = pname;
rev = "v${version}";
sha256 = "sha256-doJ1ceuJ/gL9vlGgV/hKIJeAErAseH0dtHKJX2z7pV0=";
};
vendorSha256 = "sha256-Y4WM+o+5jiwj8/99UyNHLpBNbtJkKteIGW2P1Jd9L6M=";
# Tests use network
doCheck = false;
meta = with lib; {
description = "Go client and server OpenAPI 3 generator";
homepage = "https://github.com/deepmap/oapi-codegen";
license = licenses.asl20;
maintainers = [ maintainers.j4m3s ];
};
}
Run Code Online (Sandbox Code Playgroud)
从手册中:
函数 buildGoModule 构建由 Go 模块管理的 Go 程序。它通过两阶段构建构建 Go 模块:
- 中间获取器派生。此派生将用于获取 Go 模块的所有依赖项。
- 最终推导将使用中间推导的输出来构建二进制文件并产生最终输出。
您可以看到,当您尝试在 的输出中构建上述表达式时nix-build。如果你运行:
nix-build -E 'with import <nixpkgs> { }; callPackage ./yourExpression.nix { }'
Run Code Online (Sandbox Code Playgroud)
您会看到前两行输出:
these 2 derivations will be built:
/nix/store/j13s3dvlwz5w9xl5wbhkcs7lrkgksv3l-oapi-codegen-1.6.0-go-modules.drv
/nix/store/4wyj1d9f2m0521nlkjgr6al0wfz12yjn-oapi-codegen-1.6.0.drv
Run Code Online (Sandbox Code Playgroud)
第一个派生将用于获取 Go 模块的所有依赖项,第二个派生将用于构建实际模块。因此,vendorSha256 是第一个推导的输出的哈希值。
当您编写 Nix 表达式来构建 Go 模块时,您事先并不知道该哈希值。你只知道一阶推导已经实现(下载依赖项并根据它们找到哈希值)。但是,您可以使用 Nix 验证来找出vendorSha256 的值。
像这样修改你的 Nix 表达式:
{ lib, buildGoModule, fetchFromGitHub }:
buildGoModule rec {
pname = "oapi-codegen";
version = "1.6.0";
src = fetchFromGitHub {
owner = "deepmap";
repo = pname;
rev = "v${version}";
sha256 = "sha256-doJ1ceuJ/gL9vlGgV/hKIJeAErAseH0dtHKJX2z7pV0=";
};
vendorSha256 = lib.fakeSha256;
# Tests use network
doCheck = false;
meta = with lib; {
description = "Go client and server OpenAPI 3 generator";
homepage = "https://github.com/deepmap/oapi-codegen";
license = licenses.asl20;
maintainers = [ maintainers.j4m3s ];
};
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是,vendorSha256 现在具有lib.fakeSha256的值,这只是一个假/错误的 sha256 哈希值。Nix 将尝试构建第一个推导,并根据该值检查依赖项的哈希值。由于它们不匹配,因此会出现错误:
error: hash mismatch in fixed-output derivation '/nix/store/j13s3dvlwz5w9xl5wbhkcs7lrkgksv3l-oapi-codegen-1.6.0-go-modules.drv':
specified: sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
got: sha256-Y4WM+o+5jiwj8/99UyNHLpBNbtJkKteIGW2P1Jd9L6M=
error: 1 dependencies of derivation '/nix/store/4wyj1d9f2m0521nlkjgr6al0wfz12yjn-oapi-codegen-1.6.0.drv' failed to build
Run Code Online (Sandbox Code Playgroud)
所以这回答了你的问题。您需要的vendorSha256的值为sha256-Y4WM+o+5jiwj8/99UyNHLpBNbtJkKteIGW2P1Jd9L6M=。复制并将其添加到您的文件中,然后就可以开始了!
| 归档时间: |
|
| 查看次数: |
1490 次 |
| 最近记录: |